From b3e7b6da8f414633d70d29e242cd4b49ffb30357 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sat, 29 Jun 2019 09:55:12 +0200 Subject: [PATCH] Split into 16-bit and 8-bit tests. Added a ref-test. --- .../dk/camelot64/kickc/test/TestPrograms.java | 12 +- src/test/kc/cordic-atan2-16-ref.kc | 41 + src/test/ref/cordic-atan2-16-ref.asm | 389 ++ src/test/ref/cordic-atan2-16-ref.cfg | 184 + src/test/ref/cordic-atan2-16-ref.log | 4175 +++++++++++++++++ src/test/ref/cordic-atan2-16-ref.sym | 192 + src/test/ref/cordic-atan2-16.asm | 389 ++ src/test/ref/cordic-atan2-16.cfg | 184 + src/test/ref/cordic-atan2-16.log | 4175 +++++++++++++++++ src/test/ref/cordic-atan2-16.sym | 192 + src/test/ref/cordic-atan2.asm | 39 +- src/test/ref/cordic-atan2.cfg | 253 +- src/test/ref/cordic-atan2.log | 2890 ++++++------ src/test/ref/cordic-atan2.sym | 149 +- 14 files changed, 11647 insertions(+), 1617 deletions(-) create mode 100644 src/test/kc/cordic-atan2-16-ref.kc create mode 100644 src/test/ref/cordic-atan2-16-ref.asm create mode 100644 src/test/ref/cordic-atan2-16-ref.cfg create mode 100644 src/test/ref/cordic-atan2-16-ref.log create mode 100644 src/test/ref/cordic-atan2-16-ref.sym create mode 100644 src/test/ref/cordic-atan2-16.asm create mode 100644 src/test/ref/cordic-atan2-16.cfg create mode 100644 src/test/ref/cordic-atan2-16.log create mode 100644 src/test/ref/cordic-atan2-16.sym diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 39856a4dd..0b67b9325 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -36,7 +36,17 @@ public class TestPrograms { } @Test - public void testCordicAtan2() throws IOException, URISyntaxException { + public void testCordicAtan2Ref() throws IOException, URISyntaxException { + compileAndCompare("cordic-atan2-16-ref"); + } + + @Test + public void testCordicAtan2_16() throws IOException, URISyntaxException { + compileAndCompare("cordic-atan2-16"); + } + + @Test + public void testCordicAtan2_8() throws IOException, URISyntaxException { compileAndCompare("cordic-atan2"); } diff --git a/src/test/kc/cordic-atan2-16-ref.kc b/src/test/kc/cordic-atan2-16-ref.kc new file mode 100644 index 000000000..c34c7ea0b --- /dev/null +++ b/src/test/kc/cordic-atan2-16-ref.kc @@ -0,0 +1,41 @@ +// Find atan2(x, y) using the CORDIC method +// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf + +import "font-hex" +import "atan2" +import "c64" + +const byte* CHARSET = 0x2000; +const byte* SCREEN = 0x2800; +const byte* SCREEN_REF = 0x2c00; + +kickasm(pc SCREEN_REF) {{ + .for(var y=-12;y<=12;y++) + .for(var x=-19;x<=20;x++) + .byte round(256*atan2(y, x)/PI/2) +}} + + +void main() { + init_font_hex(CHARSET); + *D018 = toD018(SCREEN, CHARSET); + + byte* screen = SCREEN; + byte* screen_ref = SCREEN_REF; + for(signed byte y: -12..12) { + for(signed byte x: -19..20) { + //byte angle_b = atan2_8(x, y); + signed word xw = (signed word)(word){ (byte)x, 0 }; + signed word yw = (signed word)(word){ (byte)y, 0 }; + word angle_w = atan2_16(xw, yw); + //*screen++ = (>angle_w)-angle_b; + //*screen++ = >angle_w; + *screen++ = (>(angle_w+0x0080)) - *screen_ref++; + //*screen++ = angle_b - *screen_ref++; + //*screen++ = *screen_ref++; + } + } + byte* col00 = COLS+12*40+19; + while(true) (*col00)++; +} + diff --git a/src/test/ref/cordic-atan2-16-ref.asm b/src/test/ref/cordic-atan2-16-ref.asm new file mode 100644 index 000000000..63ac48c28 --- /dev/null +++ b/src/test/ref/cordic-atan2-16-ref.asm @@ -0,0 +1,389 @@ +// Find atan2(x, y) using the CORDIC method +// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // The number of iterations performed during 16-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_16 = $f + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_16 = $1000 + // The number of iterations performed during 8-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_8 = 8 + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_8 = $1100 + .label D018 = $d018 + // Color Ram + .label COLS = $d800 + .label CHARSET = $2000 + .label SCREEN = $2800 + .label SCREEN_REF = $2c00 +// Populate cordic angles table +// Populate cordic angles table +main: { + .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f + .label _11 = $c + .label xw = $17 + .label yw = $19 + .label angle_w = $c + .label screen = 5 + .label screen_ref = 3 + .label y = 2 + jsr init_font_hex + lda #toD0181_return + sta D018 + lda #SCREEN + sta screen+1 + lda #SCREEN_REF + sta screen_ref+1 + lda #-$c + sta y + b1: + ldx #-$13 + b2: + ldy #0 + txa + sta xw+1 + sty xw + lda y + sta yw+1 + sty yw + jsr atan2_16 + lda #$80 + clc + adc _11 + sta _11 + bcc !+ + inc _11+1 + !: + lda _11+1 + sec + ldy #0 + sbc (screen_ref),y + //*screen++ = (>angle_w)-angle_b; + //*screen++ = >angle_w; + sta (screen),y + inc screen + bne !+ + inc screen+1 + !: + inc screen_ref + bne !+ + inc screen_ref+1 + !: + inx + cpx #$15 + bne b2 + inc y + lda #$d + cmp y + bne b1 + b4: + lda COLS+$c*$28+$13 + clc + adc #1 + sta COLS+$c*$28+$13 + jmp b4 +} +// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) +// Finding the angle requires a binary search using CORDIC_ITERATIONS_16 +// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) +// atan2_16(signed word zeropage($17) x, signed word zeropage($19) y) +atan2_16: { + .label _2 = 7 + .label _7 = 9 + .label yi = 7 + .label xi = 9 + .label xd = $1b + .label yd = $1d + .label angle = $c + .label i = $b + .label return = $c + .label x = $17 + .label y = $19 + lda y+1 + bne !+ + lda y + beq !e+ + lsr + !: + bmi !b1+ + jmp b1 + !b1: + !e: + sec + lda #0 + sbc y + sta _2 + lda #0 + sbc y+1 + sta _2+1 + b3: + lda x+1 + bne !+ + lda x + beq !e+ + lsr + !: + bmi !b4+ + jmp b4 + !b4: + !e: + sec + lda #0 + sbc x + sta _7 + lda #0 + sbc x+1 + sta _7+1 + b6: + lda #0 + sta angle + sta angle+1 + sta i + b10: + lda yi+1 + bne b11 + lda yi + bne b11 + b12: + lsr angle+1 + ror angle + lda x+1 + bpl b7 + sec + lda #<$8000 + sbc angle + sta angle + lda #>$8000 + sbc angle+1 + sta angle+1 + b7: + lda y+1 + bpl b8 + sec + lda #0 + sbc angle + sta angle + lda #0 + sbc angle+1 + sta angle+1 + b8: + rts + b11: + ldy i + lda xi + sta xd + lda xi+1 + sta xd+1 + cpy #0 + beq !e+ + !: + lda xd+1 + cmp #$80 + ror xd+1 + ror xd + dey + bne !- + !e: + ldy i + lda yi + sta yd + lda yi+1 + sta yd+1 + cpy #0 + beq !e+ + !: + lda yd+1 + cmp #$80 + ror yd+1 + ror yd + dey + bne !- + !e: + lda yi+1 + bne !+ + lda yi + beq !e+ + lsr + !: + bpl b13 + !e: + lda xi + sec + sbc yd + sta xi + lda xi+1 + sbc yd+1 + sta xi+1 + lda yi + clc + adc xd + sta yi + lda yi+1 + adc xd+1 + sta yi+1 + lda i + asl + tay + sec + lda angle + sbc CORDIC_ATAN2_ANGLES_16,y + sta angle + lda angle+1 + sbc CORDIC_ATAN2_ANGLES_16+1,y + sta angle+1 + b14: + inc i + lda #CORDIC_ITERATIONS_16+1 + cmp i + bne !b12+ + jmp b12 + !b12: + jmp b10 + b13: + lda xi + clc + adc yd + sta xi + lda xi+1 + adc yd+1 + sta xi+1 + lda yi + sec + sbc xd + sta yi + lda yi+1 + sbc xd+1 + sta yi+1 + lda i + asl + tay + clc + lda angle + adc CORDIC_ATAN2_ANGLES_16,y + sta angle + lda angle+1 + adc CORDIC_ATAN2_ANGLES_16+1,y + sta angle+1 + jmp b14 + b4: + lda x + sta xi + lda x+1 + sta xi+1 + jmp b6 + b1: + lda y + sta yi + lda y+1 + sta yi+1 + jmp b3 +} +// Make charset from proto chars +// init_font_hex(byte* zeropage($11) charset) +init_font_hex: { + .label _0 = $1f + .label idx = $16 + .label proto_lo = $13 + .label charset = $11 + .label c1 = $15 + .label proto_hi = $e + .label c = $10 + lda #0 + sta c + lda #FONT_HEX_PROTO + sta proto_hi+1 + lda #CHARSET + sta charset+1 + b1: + lda #0 + sta c1 + lda #FONT_HEX_PROTO + sta proto_lo+1 + b2: + lda #0 + tay + sta (charset),y + lda #1 + sta idx + ldx #0 + b3: + txa + tay + lda (proto_hi),y + asl + asl + asl + asl + sta _0 + txa + tay + lda (proto_lo),y + asl + ora _0 + ldy idx + sta (charset),y + inc idx + inx + cpx #5 + bne b3 + lda #0 + ldy idx + sta (charset),y + iny + sta (charset),y + lda #5 + clc + adc proto_lo + sta proto_lo + bcc !+ + inc proto_lo+1 + !: + lda #8 + clc + adc charset + sta charset + bcc !+ + inc charset+1 + !: + inc c1 + lda #$10 + cmp c1 + bne b2 + lda #5 + clc + adc proto_hi + sta proto_hi + bcc !+ + inc proto_hi+1 + !: + inc c + lda #$10 + cmp c + bne b1 + rts +} + // Bit patterns for symbols 0-f (3x5 pixels) used in font hex + FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 +.pc = CORDIC_ATAN2_ANGLES_16 "CORDIC_ATAN2_ANGLES_16" + .for (var i=0; i (word~) main::$11 + [22] (byte~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) + [23] *((byte*) main::screen#2) ← (byte~) main::$13 + [24] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 + [25] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 + [26] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 + [27] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@6 + [28] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 + [29] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 + to:main::@4 +main::@4: scope:[main] from main::@3 main::@4 + [30] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) + to:main::@4 +atan2_16: scope:[atan2_16] from main::@2 + [31] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 + to:atan2_16::@2 +atan2_16::@2: scope:[atan2_16] from atan2_16 + [32] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 + to:atan2_16::@3 +atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 + [33] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#11 atan2_16::@2/(signed word~) atan2_16::$2 ) + [34] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 + to:atan2_16::@5 +atan2_16::@5: scope:[atan2_16] from atan2_16::@3 + [35] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 + to:atan2_16::@6 +atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 + [36] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#8 atan2_16::@5/(signed word~) atan2_16::$7 ) + to:atan2_16::@10 +atan2_16::@10: scope:[atan2_16] from atan2_16::@14 atan2_16::@6 + [37] (word) atan2_16::angle#12 ← phi( atan2_16::@14/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [37] (byte) atan2_16::i#2 ← phi( atan2_16::@14/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) + [37] (signed word) atan2_16::xi#3 ← phi( atan2_16::@14/(signed word) atan2_16::xi#7 atan2_16::@6/(signed word) atan2_16::xi#0 ) + [37] (signed word) atan2_16::yi#3 ← phi( atan2_16::@14/(signed word) atan2_16::yi#7 atan2_16::@6/(signed word) atan2_16::yi#0 ) + [38] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 + to:atan2_16::@12 +atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@14 + [39] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@14/(word) atan2_16::angle#13 ) + [40] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 + [41] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 + to:atan2_16::@16 +atan2_16::@16: scope:[atan2_16] from atan2_16::@12 + [42] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 + to:atan2_16::@7 +atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@16 + [43] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@16/(word) atan2_16::angle#4 ) + [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 + to:atan2_16::@9 +atan2_16::@9: scope:[atan2_16] from atan2_16::@7 + [45] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 + to:atan2_16::@8 +atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9 + [46] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) + to:atan2_16::@return +atan2_16::@return: scope:[atan2_16] from atan2_16::@8 + [47] return + to:@return +atan2_16::@11: scope:[atan2_16] from atan2_16::@10 + [48] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 + [49] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 + [50] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 + to:atan2_16::@15 +atan2_16::@15: scope:[atan2_16] from atan2_16::@11 + [51] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 + [52] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 + [53] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 + [54] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) + to:atan2_16::@14 +atan2_16::@14: scope:[atan2_16] from atan2_16::@13 atan2_16::@15 + [55] (signed word) atan2_16::xi#7 ← phi( atan2_16::@13/(signed word) atan2_16::xi#1 atan2_16::@15/(signed word) atan2_16::xi#2 ) + [55] (word) atan2_16::angle#13 ← phi( atan2_16::@13/(word) atan2_16::angle#2 atan2_16::@15/(word) atan2_16::angle#3 ) + [55] (signed word) atan2_16::yi#7 ← phi( atan2_16::@13/(signed word) atan2_16::yi#1 atan2_16::@15/(signed word) atan2_16::yi#2 ) + [56] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 + [57] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0+(byte) 1) goto atan2_16::@12 + to:atan2_16::@10 +atan2_16::@13: scope:[atan2_16] from atan2_16::@11 + [58] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 + [59] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 + [60] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 + [61] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) + to:atan2_16::@14 +atan2_16::@4: scope:[atan2_16] from atan2_16::@3 + [62] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 + to:atan2_16::@6 +atan2_16::@1: scope:[atan2_16] from atan2_16 + [63] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 + to:atan2_16::@3 +init_font_hex: scope:[init_font_hex] from main + [64] phi() + to:init_font_hex::@1 +init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5 + [65] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 ) + [65] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) + [65] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 ) + to:init_font_hex::@2 +init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4 + [66] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) + [66] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) + [66] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) + [67] *((byte*) init_font_hex::charset#2) ← (byte) 0 + to:init_font_hex::@3 +init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3 + [68] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) + [68] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 ) + [69] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 + [70] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 + [71] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 + [72] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 + [73] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 + [74] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 + [75] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 + to:init_font_hex::@4 +init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3 + [76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 + [77] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 + [78] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 + [79] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 + [80] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 + [81] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 + [82] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 + to:init_font_hex::@5 +init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4 + [83] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 + [84] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 + [85] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 + to:init_font_hex::@return +init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 + [86] return + to:@return diff --git a/src/test/ref/cordic-atan2-16-ref.log b/src/test/ref/cordic-atan2-16-ref.log new file mode 100644 index 000000000..2e61cbd50 --- /dev/null +++ b/src/test/ref/cordic-atan2-16-ref.log @@ -0,0 +1,4175 @@ +Resolved forward reference FONT_HEX_PROTO to (byte[]) FONT_HEX_PROTO +Resolved forward reference FONT_HEX_PROTO to (byte[]) FONT_HEX_PROTO +Adding pointer type conversion cast (word*) CORDIC_ATAN2_ANGLES_16 in (word*) CORDIC_ATAN2_ANGLES_16 ← (number) $1000 +Adding pointer type conversion cast (byte*) CORDIC_ATAN2_ANGLES_8 in (byte*) CORDIC_ATAN2_ANGLES_8 ← (number) $1100 +Adding pointer type conversion cast (byte*) PROCPORT_DDR in (byte*) PROCPORT_DDR ← (number) 0 +Adding pointer type conversion cast (byte*) PROCPORT in (byte*) PROCPORT ← (number) 1 +Adding pointer type conversion cast (byte*) CHARGEN in (byte*) CHARGEN ← (number) $d000 +Adding pointer type conversion cast (byte*) SPRITES_XPOS in (byte*) SPRITES_XPOS ← (number) $d000 +Adding pointer type conversion cast (byte*) SPRITES_YPOS in (byte*) SPRITES_YPOS ← (number) $d001 +Adding pointer type conversion cast (byte*) SPRITES_XMSB in (byte*) SPRITES_XMSB ← (number) $d010 +Adding pointer type conversion cast (byte*) RASTER in (byte*) RASTER ← (number) $d012 +Adding pointer type conversion cast (byte*) SPRITES_ENABLE in (byte*) SPRITES_ENABLE ← (number) $d015 +Adding pointer type conversion cast (byte*) SPRITES_EXPAND_Y in (byte*) SPRITES_EXPAND_Y ← (number) $d017 +Adding pointer type conversion cast (byte*) SPRITES_PRIORITY in (byte*) SPRITES_PRIORITY ← (number) $d01b +Adding pointer type conversion cast (byte*) SPRITES_MC in (byte*) SPRITES_MC ← (number) $d01c +Adding pointer type conversion cast (byte*) SPRITES_EXPAND_X in (byte*) SPRITES_EXPAND_X ← (number) $d01d +Adding pointer type conversion cast (byte*) BORDERCOL in (byte*) BORDERCOL ← (number) $d020 +Adding pointer type conversion cast (byte*) BGCOL in (byte*) BGCOL ← (number) $d021 +Adding pointer type conversion cast (byte*) BGCOL1 in (byte*) BGCOL1 ← (number) $d021 +Adding pointer type conversion cast (byte*) BGCOL2 in (byte*) BGCOL2 ← (number) $d022 +Adding pointer type conversion cast (byte*) BGCOL3 in (byte*) BGCOL3 ← (number) $d023 +Adding pointer type conversion cast (byte*) BGCOL4 in (byte*) BGCOL4 ← (number) $d024 +Adding pointer type conversion cast (byte*) SPRITES_MC1 in (byte*) SPRITES_MC1 ← (number) $d025 +Adding pointer type conversion cast (byte*) SPRITES_MC2 in (byte*) SPRITES_MC2 ← (number) $d026 +Adding pointer type conversion cast (byte*) SPRITES_COLS in (byte*) SPRITES_COLS ← (number) $d027 +Adding pointer type conversion cast (byte*) VIC_CONTROL in (byte*) VIC_CONTROL ← (number) $d011 +Adding pointer type conversion cast (byte*) D011 in (byte*) D011 ← (number) $d011 +Adding pointer type conversion cast (byte*) VIC_CONTROL2 in (byte*) VIC_CONTROL2 ← (number) $d016 +Adding pointer type conversion cast (byte*) D016 in (byte*) D016 ← (number) $d016 +Adding pointer type conversion cast (byte*) D018 in (byte*) D018 ← (number) $d018 +Adding pointer type conversion cast (byte*) VIC_MEMORY in (byte*) VIC_MEMORY ← (number) $d018 +Adding pointer type conversion cast (byte*) LIGHTPEN_X in (byte*) LIGHTPEN_X ← (number) $d013 +Adding pointer type conversion cast (byte*) LIGHTPEN_Y in (byte*) LIGHTPEN_Y ← (number) $d014 +Adding pointer type conversion cast (byte*) IRQ_STATUS in (byte*) IRQ_STATUS ← (number) $d019 +Adding pointer type conversion cast (byte*) IRQ_ENABLE in (byte*) IRQ_ENABLE ← (number) $d01a +Adding pointer type conversion cast (byte*) COLS in (byte*) COLS ← (number) $d800 +Adding pointer type conversion cast (byte*) CIA1_PORT_A in (byte*) CIA1_PORT_A ← (number) $dc00 +Adding pointer type conversion cast (byte*) CIA1_PORT_B in (byte*) CIA1_PORT_B ← (number) $dc01 +Adding pointer type conversion cast (byte*) CIA1_PORT_A_DDR in (byte*) CIA1_PORT_A_DDR ← (number) $dc02 +Adding pointer type conversion cast (byte*) CIA1_PORT_B_DDR in (byte*) CIA1_PORT_B_DDR ← (number) $dc03 +Adding pointer type conversion cast (byte*) CIA1_INTERRUPT in (byte*) CIA1_INTERRUPT ← (number) $dc0d +Adding pointer type conversion cast (byte*) CIA2_PORT_A in (byte*) CIA2_PORT_A ← (number) $dd00 +Adding pointer type conversion cast (byte*) CIA2_PORT_B in (byte*) CIA2_PORT_B ← (number) $dd01 +Adding pointer type conversion cast (byte*) CIA2_PORT_A_DDR in (byte*) CIA2_PORT_A_DDR ← (number) $dd02 +Adding pointer type conversion cast (byte*) CIA2_PORT_B_DDR in (byte*) CIA2_PORT_B_DDR ← (number) $dd03 +Adding pointer type conversion cast (byte*) CIA2_INTERRUPT in (byte*) CIA2_INTERRUPT ← (number) $dd0d +Adding pointer type conversion cast (void()**) KERNEL_IRQ in (void()**) KERNEL_IRQ ← (number) $314 +Adding pointer type conversion cast (void()**) HARDWARE_IRQ in (void()**) HARDWARE_IRQ ← (number) $fffe +Adding pointer type conversion cast (byte*) CHARSET in (byte*) CHARSET ← (number) $2000 +Adding pointer type conversion cast (byte*) SCREEN in (byte*) SCREEN ← (number) $2800 +Adding pointer type conversion cast (byte*) SCREEN_REF in (byte*) SCREEN_REF ← (number) $2c00 +Fixing pointer array-indexing *((word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) +Fixing pointer array-indexing *((word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) +Identified constant variable (word*) CORDIC_ATAN2_ANGLES_16 +Identified constant variable (byte*) CORDIC_ATAN2_ANGLES_8 +Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx +Inlined call (byte~) main::$1 ← call toD018 (byte*) SCREEN (byte*) CHARSET +Culled Empty Block (label) init_font_hex::@6 +Culled Empty Block (label) atan2_16::@9 +Culled Empty Block (label) atan2_16::@10 +Culled Empty Block (label) atan2_16::@11 +Culled Empty Block (label) atan2_16::@12 +Culled Empty Block (label) atan2_16::@20 +Culled Empty Block (label) atan2_16::@21 +Culled Empty Block (label) atan2_16::@23 +Culled Empty Block (label) atan2_16::@24 +Culled Empty Block (label) atan2_16::@14 +Culled Empty Block (label) @4 +Culled Empty Block (label) @5 +Culled Empty Block (label) @6 +Culled Empty Block (label) main::toD0181_@1 +Culled Empty Block (label) main::@8 +Culled Empty Block (label) main::@7 +Culled Empty Block (label) main::@9 +Culled Empty Block (label) main::@10 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + to:@1 +init_font_hex: scope:[init_font_hex] from main + (byte*) init_font_hex::charset#6 ← phi( main/(byte*) init_font_hex::charset#1 ) + (byte*) init_font_hex::proto_hi#0 ← (byte[]) FONT_HEX_PROTO#0 + (byte) init_font_hex::c#0 ← (byte) 0 + to:init_font_hex::@1 +init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5 + (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) init_font_hex::c#0 init_font_hex::@5/(byte) init_font_hex::c#1 ) + (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(byte*) init_font_hex::proto_hi#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) + (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(byte*) init_font_hex::charset#6 init_font_hex::@5/(byte*) init_font_hex::charset#7 ) + (byte*) init_font_hex::proto_lo#0 ← (byte[]) FONT_HEX_PROTO#0 + (byte) init_font_hex::c1#0 ← (byte) 0 + to:init_font_hex::@2 +init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4 + (byte) init_font_hex::c#5 ← phi( init_font_hex::@1/(byte) init_font_hex::c#6 init_font_hex::@4/(byte) init_font_hex::c#3 ) + (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) init_font_hex::c1#0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) + (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(byte*) init_font_hex::proto_lo#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) + (byte*) init_font_hex::proto_hi#4 ← phi( init_font_hex::@1/(byte*) init_font_hex::proto_hi#6 init_font_hex::@4/(byte*) init_font_hex::proto_hi#5 ) + (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) + (byte) init_font_hex::idx#0 ← (number) 0 + *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0 + (byte) init_font_hex::idx#1 ← ++ (byte) init_font_hex::idx#0 + (byte) init_font_hex::i#0 ← (byte) 0 + to:init_font_hex::@3 +init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3 + (byte) init_font_hex::c#4 ← phi( init_font_hex::@2/(byte) init_font_hex::c#5 init_font_hex::@3/(byte) init_font_hex::c#4 ) + (byte) init_font_hex::c1#3 ← phi( init_font_hex::@2/(byte) init_font_hex::c1#4 init_font_hex::@3/(byte) init_font_hex::c1#3 ) + (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) init_font_hex::idx#1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) + (byte*) init_font_hex::charset#3 ← phi( init_font_hex::@2/(byte*) init_font_hex::charset#2 init_font_hex::@3/(byte*) init_font_hex::charset#3 ) + (byte*) init_font_hex::proto_lo#2 ← phi( init_font_hex::@2/(byte*) init_font_hex::proto_lo#4 init_font_hex::@3/(byte*) init_font_hex::proto_lo#2 ) + (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) init_font_hex::i#0 init_font_hex::@3/(byte) init_font_hex::i#1 ) + (byte*) init_font_hex::proto_hi#2 ← phi( init_font_hex::@2/(byte*) init_font_hex::proto_hi#4 init_font_hex::@3/(byte*) init_font_hex::proto_hi#2 ) + (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#2 + (byte) init_font_hex::i#2) << (number) 4 + (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#2 + (byte) init_font_hex::i#2) << (number) 1 + (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 + *((byte*) init_font_hex::charset#3 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 + (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 + (byte) init_font_hex::i#1 ← (byte) init_font_hex::i#2 + rangenext(0,4) + (bool~) init_font_hex::$3 ← (byte) init_font_hex::i#1 != rangelast(0,4) + if((bool~) init_font_hex::$3) goto init_font_hex::@3 + to:init_font_hex::@4 +init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3 + (byte) init_font_hex::c#3 ← phi( init_font_hex::@3/(byte) init_font_hex::c#4 ) + (byte*) init_font_hex::proto_hi#5 ← phi( init_font_hex::@3/(byte*) init_font_hex::proto_hi#2 ) + (byte) init_font_hex::c1#2 ← phi( init_font_hex::@3/(byte) init_font_hex::c1#3 ) + (byte*) init_font_hex::proto_lo#3 ← phi( init_font_hex::@3/(byte*) init_font_hex::proto_lo#2 ) + (byte) init_font_hex::idx#6 ← phi( init_font_hex::@3/(byte) init_font_hex::idx#2 ) + (byte*) init_font_hex::charset#4 ← phi( init_font_hex::@3/(byte*) init_font_hex::charset#3 ) + *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (number) 0 + (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#6 + *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (number) 0 + (byte) init_font_hex::idx#4 ← ++ (byte) init_font_hex::idx#3 + (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#3 + (number) 5 + (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#4 + (number) 8 + (byte) init_font_hex::c1#1 ← (byte) init_font_hex::c1#2 + rangenext(0,$f) + (bool~) init_font_hex::$4 ← (byte) init_font_hex::c1#1 != rangelast(0,$f) + if((bool~) init_font_hex::$4) goto init_font_hex::@2 + to:init_font_hex::@5 +init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4 + (byte*) init_font_hex::charset#7 ← phi( init_font_hex::@4/(byte*) init_font_hex::charset#0 ) + (byte) init_font_hex::c#2 ← phi( init_font_hex::@4/(byte) init_font_hex::c#3 ) + (byte*) init_font_hex::proto_hi#3 ← phi( init_font_hex::@4/(byte*) init_font_hex::proto_hi#5 ) + (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#3 + (number) 5 + (byte) init_font_hex::c#1 ← (byte) init_font_hex::c#2 + rangenext(0,$f) + (bool~) init_font_hex::$5 ← (byte) init_font_hex::c#1 != rangelast(0,$f) + if((bool~) init_font_hex::$5) goto init_font_hex::@1 + to:init_font_hex::@return +init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 + return + to:@return +@1: scope:[] from @begin + (byte[]) FONT_HEX_PROTO#0 ← { (number) 2, (number) 5, (number) 5, (number) 5, (number) 2, (number) 6, (number) 2, (number) 2, (number) 2, (number) 7, (number) 6, (number) 1, (number) 2, (number) 4, (number) 7, (number) 6, (number) 1, (number) 2, (number) 1, (number) 6, (number) 5, (number) 5, (number) 7, (number) 1, (number) 1, (number) 7, (number) 4, (number) 6, (number) 1, (number) 6, (number) 3, (number) 4, (number) 6, (number) 5, (number) 2, (number) 7, (number) 1, (number) 1, (number) 1, (number) 1, (number) 2, (number) 5, (number) 2, (number) 5, (number) 2, (number) 2, (number) 5, (number) 3, (number) 1, (number) 1, (number) 2, (number) 5, (number) 7, (number) 5, (number) 5, (number) 6, (number) 5, (number) 6, (number) 5, (number) 6, (number) 2, (number) 5, (number) 4, (number) 5, (number) 2, (number) 6, (number) 5, (number) 5, (number) 5, (number) 6, (number) 7, (number) 4, (number) 6, (number) 4, (number) 7, (number) 7, (number) 4, (number) 6, (number) 4, (number) 4 } + (byte) CORDIC_ITERATIONS_16#0 ← (number) $f + (word*) CORDIC_ATAN2_ANGLES_16#0 ← ((word*)) (number) $1000 + kickasm(location (word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; i (number) 0 + if((bool~) atan2_16::$0) goto atan2_16::@1 + to:atan2_16::@2 +atan2_16::@1: scope:[atan2_16] from atan2_16 + (signed word) atan2_16::x#5 ← phi( atan2_16/(signed word) atan2_16::x#9 ) + (signed word) atan2_16::y#2 ← phi( atan2_16/(signed word) atan2_16::y#1 ) + (signed word~) atan2_16::$3 ← (signed word) atan2_16::y#2 + to:atan2_16::@3 +atan2_16::@2: scope:[atan2_16] from atan2_16 + (signed word) atan2_16::x#6 ← phi( atan2_16/(signed word) atan2_16::x#9 ) + (signed word) atan2_16::y#3 ← phi( atan2_16/(signed word) atan2_16::y#1 ) + (signed word~) atan2_16::$1 ← - (signed word) atan2_16::y#3 + (signed word~) atan2_16::$2 ← (signed word~) atan2_16::$1 + to:atan2_16::@3 +atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 + (signed word) atan2_16::y#15 ← phi( atan2_16::@1/(signed word) atan2_16::y#2 atan2_16::@2/(signed word) atan2_16::y#3 ) + (signed word) atan2_16::x#1 ← phi( atan2_16::@1/(signed word) atan2_16::x#5 atan2_16::@2/(signed word) atan2_16::x#6 ) + (signed word~) atan2_16::$4 ← phi( atan2_16::@1/(signed word~) atan2_16::$3 atan2_16::@2/(signed word~) atan2_16::$2 ) + (signed word) atan2_16::yi#0 ← (signed word~) atan2_16::$4 + (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 > (number) 0 + if((bool~) atan2_16::$5) goto atan2_16::@4 + to:atan2_16::@5 +atan2_16::@4: scope:[atan2_16] from atan2_16::@3 + (signed word) atan2_16::y#12 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 ) + (signed word) atan2_16::yi#9 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 ) + (signed word) atan2_16::x#2 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 ) + (signed word~) atan2_16::$8 ← (signed word) atan2_16::x#2 + to:atan2_16::@6 +atan2_16::@5: scope:[atan2_16] from atan2_16::@3 + (signed word) atan2_16::y#13 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 ) + (signed word) atan2_16::yi#10 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 ) + (signed word) atan2_16::x#3 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 ) + (signed word~) atan2_16::$6 ← - (signed word) atan2_16::x#3 + (signed word~) atan2_16::$7 ← (signed word~) atan2_16::$6 + to:atan2_16::@6 +atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 + (signed word) atan2_16::y#9 ← phi( atan2_16::@4/(signed word) atan2_16::y#12 atan2_16::@5/(signed word) atan2_16::y#13 ) + (signed word) atan2_16::x#10 ← phi( atan2_16::@4/(signed word) atan2_16::x#2 atan2_16::@5/(signed word) atan2_16::x#3 ) + (signed word) atan2_16::yi#8 ← phi( atan2_16::@4/(signed word) atan2_16::yi#9 atan2_16::@5/(signed word) atan2_16::yi#10 ) + (signed word~) atan2_16::$9 ← phi( atan2_16::@4/(signed word~) atan2_16::$8 atan2_16::@5/(signed word~) atan2_16::$7 ) + (signed word) atan2_16::xi#0 ← (signed word~) atan2_16::$9 + (word) atan2_16::angle#0 ← (number) 0 + (byte) atan2_16::i#0 ← (byte) 0 + to:atan2_16::@15 +atan2_16::@15: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 + (signed word) atan2_16::y#7 ← phi( atan2_16::@19/(signed word) atan2_16::y#8 atan2_16::@6/(signed word) atan2_16::y#9 ) + (signed word) atan2_16::x#7 ← phi( atan2_16::@19/(signed word) atan2_16::x#8 atan2_16::@6/(signed word) atan2_16::x#10 ) + (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) atan2_16::angle#0 ) + (byte) atan2_16::i#6 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) atan2_16::i#0 ) + (signed word) atan2_16::xi#6 ← phi( atan2_16::@19/(signed word) atan2_16::xi#7 atan2_16::@6/(signed word) atan2_16::xi#0 ) + (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#7 atan2_16::@6/(signed word) atan2_16::yi#8 ) + (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0 + (bool~) atan2_16::$17 ← ! (bool~) atan2_16::$16 + if((bool~) atan2_16::$17) goto atan2_16::@16 + to:atan2_16::@17 +atan2_16::@16: scope:[atan2_16] from atan2_16::@15 + (signed word) atan2_16::y#14 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 ) + (signed word) atan2_16::x#13 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 ) + (word) atan2_16::angle#14 ← phi( atan2_16::@15/(word) atan2_16::angle#12 ) + (signed word) atan2_16::yi#4 ← phi( atan2_16::@15/(signed word) atan2_16::yi#3 ) + (byte) atan2_16::i#2 ← phi( atan2_16::@15/(byte) atan2_16::i#6 ) + (signed word) atan2_16::xi#3 ← phi( atan2_16::@15/(signed word) atan2_16::xi#6 ) + (signed word~) atan2_16::$18 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 + (signed word) atan2_16::xd#0 ← (signed word~) atan2_16::$18 + (signed word~) atan2_16::$19 ← (signed word) atan2_16::yi#4 >> (byte) atan2_16::i#2 + (signed word) atan2_16::yd#0 ← (signed word~) atan2_16::$19 + (bool~) atan2_16::$20 ← (signed word) atan2_16::yi#4 > (number) 0 + if((bool~) atan2_16::$20) goto atan2_16::@18 + to:atan2_16::@22 +atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@19 + (signed word) atan2_16::y#5 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 atan2_16::@19/(signed word) atan2_16::y#8 ) + (signed word) atan2_16::x#4 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 atan2_16::@19/(signed word) atan2_16::x#8 ) + (word) atan2_16::angle#6 ← phi( atan2_16::@15/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) + (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2 + (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0 + (bool~) atan2_16::$11 ← ! (bool~) atan2_16::$10 + if((bool~) atan2_16::$11) goto atan2_16::@7 + to:atan2_16::@25 +atan2_16::@18: scope:[atan2_16] from atan2_16::@16 + (signed word) atan2_16::y#10 ← phi( atan2_16::@16/(signed word) atan2_16::y#14 ) + (signed word) atan2_16::x#11 ← phi( atan2_16::@16/(signed word) atan2_16::x#13 ) + (word) atan2_16::angle#7 ← phi( atan2_16::@16/(word) atan2_16::angle#14 ) + (byte) atan2_16::i#3 ← phi( atan2_16::@16/(byte) atan2_16::i#2 ) + (signed word) atan2_16::xd#1 ← phi( atan2_16::@16/(signed word) atan2_16::xd#0 ) + (signed word) atan2_16::yi#5 ← phi( atan2_16::@16/(signed word) atan2_16::yi#4 ) + (signed word) atan2_16::yd#1 ← phi( atan2_16::@16/(signed word) atan2_16::yd#0 ) + (signed word) atan2_16::xi#4 ← phi( atan2_16::@16/(signed word) atan2_16::xi#3 ) + (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#4 + (signed word) atan2_16::yd#1 + (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#5 - (signed word) atan2_16::xd#1 + (byte~) atan2_16::$22 ← (byte) atan2_16::i#3 * (const byte) SIZEOF_WORD + (word) atan2_16::angle#2 ← (word) atan2_16::angle#7 + *((word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) + to:atan2_16::@19 +atan2_16::@22: scope:[atan2_16] from atan2_16::@16 + (signed word) atan2_16::y#11 ← phi( atan2_16::@16/(signed word) atan2_16::y#14 ) + (signed word) atan2_16::x#12 ← phi( atan2_16::@16/(signed word) atan2_16::x#13 ) + (word) atan2_16::angle#8 ← phi( atan2_16::@16/(word) atan2_16::angle#14 ) + (byte) atan2_16::i#4 ← phi( atan2_16::@16/(byte) atan2_16::i#2 ) + (signed word) atan2_16::xd#2 ← phi( atan2_16::@16/(signed word) atan2_16::xd#0 ) + (signed word) atan2_16::yi#6 ← phi( atan2_16::@16/(signed word) atan2_16::yi#4 ) + (signed word) atan2_16::yd#2 ← phi( atan2_16::@16/(signed word) atan2_16::yd#0 ) + (signed word) atan2_16::xi#5 ← phi( atan2_16::@16/(signed word) atan2_16::xi#3 ) + (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#5 - (signed word) atan2_16::yd#2 + (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#6 + (signed word) atan2_16::xd#2 + (byte~) atan2_16::$23 ← (byte) atan2_16::i#4 * (const byte) SIZEOF_WORD + (word) atan2_16::angle#3 ← (word) atan2_16::angle#8 - *((word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) + to:atan2_16::@19 +atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@22 + (signed word) atan2_16::y#8 ← phi( atan2_16::@18/(signed word) atan2_16::y#10 atan2_16::@22/(signed word) atan2_16::y#11 ) + (signed word) atan2_16::xi#7 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@22/(signed word) atan2_16::xi#2 ) + (signed word) atan2_16::x#8 ← phi( atan2_16::@18/(signed word) atan2_16::x#11 atan2_16::@22/(signed word) atan2_16::x#12 ) + (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@22/(word) atan2_16::angle#3 ) + (signed word) atan2_16::yi#7 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@22/(signed word) atan2_16::yi#2 ) + (byte) atan2_16::i#5 ← phi( atan2_16::@18/(byte) atan2_16::i#3 atan2_16::@22/(byte) atan2_16::i#4 ) + (byte) atan2_16::i#1 ← (byte) atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16#0) + (bool~) atan2_16::$21 ← (byte) atan2_16::i#1 != rangelast(0,CORDIC_ITERATIONS_16#0) + if((bool~) atan2_16::$21) goto atan2_16::@15 + to:atan2_16::@17 +atan2_16::@7: scope:[atan2_16] from atan2_16::@17 atan2_16::@25 + (word) atan2_16::angle#15 ← phi( atan2_16::@17/(word) atan2_16::angle#1 atan2_16::@25/(word) atan2_16::angle#4 ) + (signed word) atan2_16::y#4 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 atan2_16::@25/(signed word) atan2_16::y#6 ) + (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (number) 0 + (bool~) atan2_16::$14 ← ! (bool~) atan2_16::$13 + if((bool~) atan2_16::$14) goto atan2_16::@8 + to:atan2_16::@13 +atan2_16::@25: scope:[atan2_16] from atan2_16::@17 + (signed word) atan2_16::y#6 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 ) + (word) atan2_16::angle#9 ← phi( atan2_16::@17/(word) atan2_16::angle#1 ) + (number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9 + (word) atan2_16::angle#4 ← (number~) atan2_16::$12 + to:atan2_16::@7 +atan2_16::@8: scope:[atan2_16] from atan2_16::@13 atan2_16::@7 + (word) atan2_16::angle#10 ← phi( atan2_16::@13/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#15 ) + (word) atan2_16::return#0 ← (word) atan2_16::angle#10 + to:atan2_16::@return +atan2_16::@13: scope:[atan2_16] from atan2_16::@7 + (word) atan2_16::angle#11 ← phi( atan2_16::@7/(word) atan2_16::angle#15 ) + (word~) atan2_16::$15 ← - (word) atan2_16::angle#11 + (word) atan2_16::angle#5 ← (word~) atan2_16::$15 + to:atan2_16::@8 +atan2_16::@return: scope:[atan2_16] from atan2_16::@8 + (word) atan2_16::return#3 ← phi( atan2_16::@8/(word) atan2_16::return#0 ) + (word) atan2_16::return#1 ← (word) atan2_16::return#3 + return + to:@return +@2: scope:[] from @1 + (byte) CORDIC_ITERATIONS_8#0 ← (number) 8 + (byte*) CORDIC_ATAN2_ANGLES_8#0 ← ((byte*)) (number) $1100 + kickasm(location (byte*) CORDIC_ATAN2_ANGLES_8#0 uses CORDIC_ITERATIONS_8#0) {{ .fill CORDIC_ITERATIONS_8, 2*256*atan(1/pow(2,i))/PI/2 + }} + to:@3 +@3: scope:[] from @2 + (byte*) D018#0 ← ((byte*)) (number) $d018 + (byte*) COLS#0 ← ((byte*)) (number) $d800 + to:@7 +@7: scope:[] from @3 + (byte*) CHARSET#0 ← ((byte*)) (number) $2000 + (byte*) SCREEN#0 ← ((byte*)) (number) $2800 + (byte*) SCREEN_REF#0 ← ((byte*)) (number) $2c00 + kickasm(location (byte*) SCREEN_REF#0) {{ .for(var y=-12;y<=12;y++) + .for(var x=-19;x<=20;x++) + .byte round(256*atan2(y, x)/PI/2) + }} + to:@8 +main: scope:[main] from @8 + (byte*) init_font_hex::charset#1 ← (byte*) CHARSET#0 + call init_font_hex + to:main::@12 +main::@12: scope:[main] from main + (byte*) main::toD0181_screen#0 ← (byte*) SCREEN#0 + (byte*) main::toD0181_gfx#0 ← (byte*) CHARSET#0 + to:main::toD0181 +main::toD0181: scope:[main] from main::@12 + (byte*) main::toD0181_gfx#1 ← phi( main::@12/(byte*) main::toD0181_gfx#0 ) + (byte*) main::toD0181_screen#1 ← phi( main::@12/(byte*) main::toD0181_screen#0 ) + (word~) main::toD0181_$0#0 ← ((word)) (byte*) main::toD0181_screen#1 + (number~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (number) $3fff + (number~) main::toD0181_$2#0 ← (number~) main::toD0181_$1#0 * (number) 4 + (number~) main::toD0181_$3#0 ← > (number~) main::toD0181_$2#0 + (word~) main::toD0181_$4#0 ← ((word)) (byte*) main::toD0181_gfx#1 + (byte~) main::toD0181_$5#0 ← > (word~) main::toD0181_$4#0 + (number~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (number) 4 + (number~) main::toD0181_$7#0 ← (number~) main::toD0181_$6#0 & (number) $f + (number~) main::toD0181_$8#0 ← (number~) main::toD0181_$3#0 | (number~) main::toD0181_$7#0 + (byte) main::toD0181_return#0 ← (number~) main::toD0181_$8#0 + to:main::toD0181_@return +main::toD0181_@return: scope:[main] from main::toD0181 + (byte) main::toD0181_return#2 ← phi( main::toD0181/(byte) main::toD0181_return#0 ) + (byte) main::toD0181_return#1 ← (byte) main::toD0181_return#2 + to:main::@11 +main::@11: scope:[main] from main::toD0181_@return + (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 ) + (byte~) main::$1 ← (byte) main::toD0181_return#3 + *((byte*) D018#0) ← (byte~) main::$1 + (byte*) main::screen#0 ← (byte*) SCREEN#0 + (byte*) main::screen_ref#0 ← (byte*) SCREEN_REF#0 + (signed byte) main::y#0 ← (signed byte) -$c + to:main::@1 +main::@1: scope:[main] from main::@11 main::@3 + (byte*) main::screen#4 ← phi( main::@11/(byte*) main::screen#0 main::@3/(byte*) main::screen#5 ) + (byte*) main::screen_ref#4 ← phi( main::@11/(byte*) main::screen_ref#0 main::@3/(byte*) main::screen_ref#5 ) + (signed byte) main::y#4 ← phi( main::@11/(signed byte) main::y#0 main::@3/(signed byte) main::y#1 ) + (signed byte) main::x#0 ← (signed byte) -$13 + to:main::@2 +main::@2: scope:[main] from main::@1 main::@13 + (byte*) main::screen#3 ← phi( main::@1/(byte*) main::screen#4 main::@13/(byte*) main::screen#1 ) + (byte*) main::screen_ref#3 ← phi( main::@1/(byte*) main::screen_ref#4 main::@13/(byte*) main::screen_ref#1 ) + (signed byte) main::y#2 ← phi( main::@1/(signed byte) main::y#4 main::@13/(signed byte) main::y#5 ) + (signed byte) main::x#2 ← phi( main::@1/(signed byte) main::x#0 main::@13/(signed byte) main::x#1 ) + (byte~) main::$4 ← ((byte)) (signed byte) main::x#2 + (word~) main::$5 ← ((word)) { (byte~) main::$4, (number) 0 } + (signed word~) main::$6 ← ((signed word)) (word~) main::$5 + (signed word) main::xw#0 ← (signed word~) main::$6 + (byte~) main::$7 ← ((byte)) (signed byte) main::y#2 + (word~) main::$8 ← ((word)) { (byte~) main::$7, (number) 0 } + (signed word~) main::$9 ← ((signed word)) (word~) main::$8 + (signed word) main::yw#0 ← (signed word~) main::$9 + (signed word) atan2_16::x#0 ← (signed word) main::xw#0 + (signed word) atan2_16::y#0 ← (signed word) main::yw#0 + call atan2_16 + (word) atan2_16::return#2 ← (word) atan2_16::return#1 + to:main::@13 +main::@13: scope:[main] from main::@2 + (signed byte) main::y#5 ← phi( main::@2/(signed byte) main::y#2 ) + (signed byte) main::x#3 ← phi( main::@2/(signed byte) main::x#2 ) + (byte*) main::screen#2 ← phi( main::@2/(byte*) main::screen#3 ) + (byte*) main::screen_ref#2 ← phi( main::@2/(byte*) main::screen_ref#3 ) + (word) atan2_16::return#4 ← phi( main::@2/(word) atan2_16::return#2 ) + (word~) main::$10 ← (word) atan2_16::return#4 + (word) main::angle_w#0 ← (word~) main::$10 + (number~) main::$11 ← (word) main::angle_w#0 + (number) $80 + (number~) main::$12 ← > (number~) main::$11 + (number~) main::$13 ← (number~) main::$12 - *((byte*) main::screen_ref#2) + *((byte*) main::screen#2) ← (number~) main::$13 + (byte*) main::screen#1 ← ++ (byte*) main::screen#2 + (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 + (signed byte) main::x#1 ← (signed byte) main::x#3 + rangenext(-$13,$14) + (bool~) main::$14 ← (signed byte) main::x#1 != rangelast(-$13,$14) + if((bool~) main::$14) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@13 + (byte*) main::screen#5 ← phi( main::@13/(byte*) main::screen#1 ) + (byte*) main::screen_ref#5 ← phi( main::@13/(byte*) main::screen_ref#1 ) + (signed byte) main::y#3 ← phi( main::@13/(signed byte) main::y#5 ) + (signed byte) main::y#1 ← (signed byte) main::y#3 + rangenext(-$c,$c) + (bool~) main::$15 ← (signed byte) main::y#1 != rangelast(-$c,$c) + if((bool~) main::$15) goto main::@1 + to:main::@4 +main::@4: scope:[main] from main::@3 + (byte*~) main::$2 ← (byte*) COLS#0 + (number) $c*(number) $28 + (byte*~) main::$3 ← (byte*~) main::$2 + (number) $13 + (byte*) main::col00#0 ← (byte*~) main::$3 + to:main::@5 +main::@5: scope:[main] from main::@4 main::@6 + (byte*) main::col00#2 ← phi( main::@4/(byte*) main::col00#0 main::@6/(byte*) main::col00#1 ) + if(true) goto main::@6 + to:main::@return +main::@6: scope:[main] from main::@5 + (byte*) main::col00#1 ← phi( main::@5/(byte*) main::col00#2 ) + *((byte*) main::col00#1) ← ++ *((byte*) main::col00#1) + to:main::@5 +main::@return: scope:[main] from main::@5 + return + to:@return +@8: scope:[] from @7 + call main + to:@9 +@9: scope:[] from @8 + to:@end +@end: scope:[] from @9 + +SYMBOL TABLE SSA +(label) @1 +(label) @2 +(label) @3 +(label) @7 +(label) @8 +(label) @9 +(label) @begin +(label) @end +(byte*) CHARSET +(byte*) CHARSET#0 +(byte*) COLS +(byte*) COLS#0 +(word*) CORDIC_ATAN2_ANGLES_16 +(word*) CORDIC_ATAN2_ANGLES_16#0 +(byte*) CORDIC_ATAN2_ANGLES_8 +(byte*) CORDIC_ATAN2_ANGLES_8#0 +(byte) CORDIC_ITERATIONS_16 +(byte) CORDIC_ITERATIONS_16#0 +(byte) CORDIC_ITERATIONS_8 +(byte) CORDIC_ITERATIONS_8#0 +(byte*) D018 +(byte*) D018#0 +(byte[]) FONT_HEX_PROTO +(byte[]) FONT_HEX_PROTO#0 +(byte*) SCREEN +(byte*) SCREEN#0 +(byte*) SCREEN_REF +(byte*) SCREEN_REF#0 +(const byte) SIZEOF_WORD = (byte) 2 +(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) +(bool~) atan2_16::$0 +(signed word~) atan2_16::$1 +(bool~) atan2_16::$10 +(bool~) atan2_16::$11 +(number~) atan2_16::$12 +(bool~) atan2_16::$13 +(bool~) atan2_16::$14 +(word~) atan2_16::$15 +(bool~) atan2_16::$16 +(bool~) atan2_16::$17 +(signed word~) atan2_16::$18 +(signed word~) atan2_16::$19 +(signed word~) atan2_16::$2 +(bool~) atan2_16::$20 +(bool~) atan2_16::$21 +(byte~) atan2_16::$22 +(byte~) atan2_16::$23 +(signed word~) atan2_16::$3 +(signed word~) atan2_16::$4 +(bool~) atan2_16::$5 +(signed word~) atan2_16::$6 +(signed word~) atan2_16::$7 +(signed word~) atan2_16::$8 +(signed word~) atan2_16::$9 +(label) atan2_16::@1 +(label) atan2_16::@13 +(label) atan2_16::@15 +(label) atan2_16::@16 +(label) atan2_16::@17 +(label) atan2_16::@18 +(label) atan2_16::@19 +(label) atan2_16::@2 +(label) atan2_16::@22 +(label) atan2_16::@25 +(label) atan2_16::@3 +(label) atan2_16::@4 +(label) atan2_16::@5 +(label) atan2_16::@6 +(label) atan2_16::@7 +(label) atan2_16::@8 +(label) atan2_16::@return +(word) atan2_16::angle +(word) atan2_16::angle#0 +(word) atan2_16::angle#1 +(word) atan2_16::angle#10 +(word) atan2_16::angle#11 +(word) atan2_16::angle#12 +(word) atan2_16::angle#13 +(word) atan2_16::angle#14 +(word) atan2_16::angle#15 +(word) atan2_16::angle#2 +(word) atan2_16::angle#3 +(word) atan2_16::angle#4 +(word) atan2_16::angle#5 +(word) atan2_16::angle#6 +(word) atan2_16::angle#7 +(word) atan2_16::angle#8 +(word) atan2_16::angle#9 +(byte) atan2_16::i +(byte) atan2_16::i#0 +(byte) atan2_16::i#1 +(byte) atan2_16::i#2 +(byte) atan2_16::i#3 +(byte) atan2_16::i#4 +(byte) atan2_16::i#5 +(byte) atan2_16::i#6 +(word) atan2_16::return +(word) atan2_16::return#0 +(word) atan2_16::return#1 +(word) atan2_16::return#2 +(word) atan2_16::return#3 +(word) atan2_16::return#4 +(signed word) atan2_16::x +(signed word) atan2_16::x#0 +(signed word) atan2_16::x#1 +(signed word) atan2_16::x#10 +(signed word) atan2_16::x#11 +(signed word) atan2_16::x#12 +(signed word) atan2_16::x#13 +(signed word) atan2_16::x#2 +(signed word) atan2_16::x#3 +(signed word) atan2_16::x#4 +(signed word) atan2_16::x#5 +(signed word) atan2_16::x#6 +(signed word) atan2_16::x#7 +(signed word) atan2_16::x#8 +(signed word) atan2_16::x#9 +(signed word) atan2_16::xd +(signed word) atan2_16::xd#0 +(signed word) atan2_16::xd#1 +(signed word) atan2_16::xd#2 +(signed word) atan2_16::xi +(signed word) atan2_16::xi#0 +(signed word) atan2_16::xi#1 +(signed word) atan2_16::xi#2 +(signed word) atan2_16::xi#3 +(signed word) atan2_16::xi#4 +(signed word) atan2_16::xi#5 +(signed word) atan2_16::xi#6 +(signed word) atan2_16::xi#7 +(signed word) atan2_16::y +(signed word) atan2_16::y#0 +(signed word) atan2_16::y#1 +(signed word) atan2_16::y#10 +(signed word) atan2_16::y#11 +(signed word) atan2_16::y#12 +(signed word) atan2_16::y#13 +(signed word) atan2_16::y#14 +(signed word) atan2_16::y#15 +(signed word) atan2_16::y#2 +(signed word) atan2_16::y#3 +(signed word) atan2_16::y#4 +(signed word) atan2_16::y#5 +(signed word) atan2_16::y#6 +(signed word) atan2_16::y#7 +(signed word) atan2_16::y#8 +(signed word) atan2_16::y#9 +(signed word) atan2_16::yd +(signed word) atan2_16::yd#0 +(signed word) atan2_16::yd#1 +(signed word) atan2_16::yd#2 +(signed word) atan2_16::yi +(signed word) atan2_16::yi#0 +(signed word) atan2_16::yi#1 +(signed word) atan2_16::yi#10 +(signed word) atan2_16::yi#2 +(signed word) atan2_16::yi#3 +(signed word) atan2_16::yi#4 +(signed word) atan2_16::yi#5 +(signed word) atan2_16::yi#6 +(signed word) atan2_16::yi#7 +(signed word) atan2_16::yi#8 +(signed word) atan2_16::yi#9 +(void()) init_font_hex((byte*) init_font_hex::charset) +(byte~) init_font_hex::$0 +(byte~) init_font_hex::$1 +(byte~) init_font_hex::$2 +(bool~) init_font_hex::$3 +(bool~) init_font_hex::$4 +(bool~) init_font_hex::$5 +(label) init_font_hex::@1 +(label) init_font_hex::@2 +(label) init_font_hex::@3 +(label) init_font_hex::@4 +(label) init_font_hex::@5 +(label) init_font_hex::@return +(byte) init_font_hex::c +(byte) init_font_hex::c#0 +(byte) init_font_hex::c#1 +(byte) init_font_hex::c#2 +(byte) init_font_hex::c#3 +(byte) init_font_hex::c#4 +(byte) init_font_hex::c#5 +(byte) init_font_hex::c#6 +(byte) init_font_hex::c1 +(byte) init_font_hex::c1#0 +(byte) init_font_hex::c1#1 +(byte) init_font_hex::c1#2 +(byte) init_font_hex::c1#3 +(byte) init_font_hex::c1#4 +(byte*) init_font_hex::charset +(byte*) init_font_hex::charset#0 +(byte*) init_font_hex::charset#1 +(byte*) init_font_hex::charset#2 +(byte*) init_font_hex::charset#3 +(byte*) init_font_hex::charset#4 +(byte*) init_font_hex::charset#5 +(byte*) init_font_hex::charset#6 +(byte*) init_font_hex::charset#7 +(byte) init_font_hex::i +(byte) init_font_hex::i#0 +(byte) init_font_hex::i#1 +(byte) init_font_hex::i#2 +(byte) init_font_hex::idx +(byte) init_font_hex::idx#0 +(byte) init_font_hex::idx#1 +(byte) init_font_hex::idx#2 +(byte) init_font_hex::idx#3 +(byte) init_font_hex::idx#4 +(byte) init_font_hex::idx#5 +(byte) init_font_hex::idx#6 +(byte*) init_font_hex::proto_hi +(byte*) init_font_hex::proto_hi#0 +(byte*) init_font_hex::proto_hi#1 +(byte*) init_font_hex::proto_hi#2 +(byte*) init_font_hex::proto_hi#3 +(byte*) init_font_hex::proto_hi#4 +(byte*) init_font_hex::proto_hi#5 +(byte*) init_font_hex::proto_hi#6 +(byte*) init_font_hex::proto_lo +(byte*) init_font_hex::proto_lo#0 +(byte*) init_font_hex::proto_lo#1 +(byte*) init_font_hex::proto_lo#2 +(byte*) init_font_hex::proto_lo#3 +(byte*) init_font_hex::proto_lo#4 +(void()) main() +(byte~) main::$1 +(word~) main::$10 +(number~) main::$11 +(number~) main::$12 +(number~) main::$13 +(bool~) main::$14 +(bool~) main::$15 +(byte*~) main::$2 +(byte*~) main::$3 +(byte~) main::$4 +(word~) main::$5 +(signed word~) main::$6 +(byte~) main::$7 +(word~) main::$8 +(signed word~) main::$9 +(label) main::@1 +(label) main::@11 +(label) main::@12 +(label) main::@13 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@return +(word) main::angle_w +(word) main::angle_w#0 +(byte*) main::col00 +(byte*) main::col00#0 +(byte*) main::col00#1 +(byte*) main::col00#2 +(byte*) main::screen +(byte*) main::screen#0 +(byte*) main::screen#1 +(byte*) main::screen#2 +(byte*) main::screen#3 +(byte*) main::screen#4 +(byte*) main::screen#5 +(byte*) main::screen_ref +(byte*) main::screen_ref#0 +(byte*) main::screen_ref#1 +(byte*) main::screen_ref#2 +(byte*) main::screen_ref#3 +(byte*) main::screen_ref#4 +(byte*) main::screen_ref#5 +(label) main::toD0181 +(word~) main::toD0181_$0 +(word~) main::toD0181_$0#0 +(number~) main::toD0181_$1 +(number~) main::toD0181_$1#0 +(number~) main::toD0181_$2 +(number~) main::toD0181_$2#0 +(number~) main::toD0181_$3 +(number~) main::toD0181_$3#0 +(word~) main::toD0181_$4 +(word~) main::toD0181_$4#0 +(byte~) main::toD0181_$5 +(byte~) main::toD0181_$5#0 +(number~) main::toD0181_$6 +(number~) main::toD0181_$6#0 +(number~) main::toD0181_$7 +(number~) main::toD0181_$7#0 +(number~) main::toD0181_$8 +(number~) main::toD0181_$8#0 +(label) main::toD0181_@return +(byte*) main::toD0181_gfx +(byte*) main::toD0181_gfx#0 +(byte*) main::toD0181_gfx#1 +(byte) main::toD0181_return +(byte) main::toD0181_return#0 +(byte) main::toD0181_return#1 +(byte) main::toD0181_return#2 +(byte) main::toD0181_return#3 +(byte*) main::toD0181_screen +(byte*) main::toD0181_screen#0 +(byte*) main::toD0181_screen#1 +(signed byte) main::x +(signed byte) main::x#0 +(signed byte) main::x#1 +(signed byte) main::x#2 +(signed byte) main::x#3 +(signed word) main::xw +(signed word) main::xw#0 +(signed byte) main::y +(signed byte) main::y#0 +(signed byte) main::y#1 +(signed byte) main::y#2 +(signed byte) main::y#3 +(signed byte) main::y#4 +(signed byte) main::y#5 +(signed word) main::yw +(signed word) main::yw#0 + +Fixing inline constructor with main::$16 ← (byte)main::$4 w= (byte)0 +Fixing inline constructor with main::$17 ← (byte)main::$7 w= (byte)0 +Successful SSA optimization Pass2FixInlineConstructorsNew +Adding number conversion cast (unumber) 0 in (byte) init_font_hex::idx#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0 +Adding number conversion cast (unumber) 4 in (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#2 + (byte) init_font_hex::i#2) << (number) 4 +Adding number conversion cast (unumber) 1 in (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#2 + (byte) init_font_hex::i#2) << (number) 1 +Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (number) 0 +Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (number) 0 +Adding number conversion cast (unumber) 5 in (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#3 + (number) 5 +Adding number conversion cast (unumber) 8 in (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#4 + (number) 8 +Adding number conversion cast (unumber) 5 in (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#3 + (number) 5 +Adding number conversion cast (unumber) $f in (byte) CORDIC_ITERATIONS_16#0 ← (number) $f +Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 > (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (word) atan2_16::angle#0 ← (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$20 ← (signed word) atan2_16::yi#4 > (number) 0 +Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2 +Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (number) 0 +Adding number conversion cast (unumber) $8000 in (number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9 +Adding number conversion cast (unumber) atan2_16::$12 in (number~) atan2_16::$12 ← (unumber)(number) $8000 - (word) atan2_16::angle#9 +Adding number conversion cast (unumber) 8 in (byte) CORDIC_ITERATIONS_8#0 ← (number) 8 +Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (number) $3fff +Adding number conversion cast (unumber) main::toD0181_$1#0 in (number~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (unumber)(number) $3fff +Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$2#0 ← (unumber~) main::toD0181_$1#0 * (number) 4 +Adding number conversion cast (unumber) main::toD0181_$2#0 in (number~) main::toD0181_$2#0 ← (unumber~) main::toD0181_$1#0 * (unumber)(number) 4 +Adding number conversion cast (unumber) main::toD0181_$3#0 in (number~) main::toD0181_$3#0 ← > (unumber~) main::toD0181_$2#0 +Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (number) 4 +Adding number conversion cast (unumber) main::toD0181_$6#0 in (number~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (unumber)(number) 4 +Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7#0 ← (unumber~) main::toD0181_$6#0 & (number) $f +Adding number conversion cast (unumber) main::toD0181_$7#0 in (number~) main::toD0181_$7#0 ← (unumber~) main::toD0181_$6#0 & (unumber)(number) $f +Adding number conversion cast (unumber) main::toD0181_$8#0 in (number~) main::toD0181_$8#0 ← (unumber~) main::toD0181_$3#0 | (unumber~) main::toD0181_$7#0 +Adding number conversion cast (unumber) $80 in (number~) main::$11 ← (word) main::angle_w#0 + (number) $80 +Adding number conversion cast (unumber) main::$11 in (number~) main::$11 ← (word) main::angle_w#0 + (unumber)(number) $80 +Adding number conversion cast (unumber) main::$12 in (number~) main::$12 ← > (unumber~) main::$11 +Adding number conversion cast (unumber) main::$13 in (number~) main::$13 ← (unumber~) main::$12 - *((byte*) main::screen_ref#2) +Adding number conversion cast (unumber) $c*$28 in (byte*~) main::$2 ← (byte*) COLS#0 + (number) $c*(number) $28 +Adding number conversion cast (unumber) $13 in (byte*~) main::$3 ← (byte*~) main::$2 + (number) $13 +Successful SSA optimization PassNAddNumberTypeConversions +Adding number conversion cast (byte) to elements in (byte[]) FONT_HEX_PROTO#0 ← { (byte)(number) 2, (byte)(number) 5, (byte)(number) 5, (byte)(number) 5, (byte)(number) 2, (byte)(number) 6, (byte)(number) 2, (byte)(number) 2, (byte)(number) 2, (byte)(number) 7, (byte)(number) 6, (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 7, (byte)(number) 6, (byte)(number) 1, (byte)(number) 2, (byte)(number) 1, (byte)(number) 6, (byte)(number) 5, (byte)(number) 5, (byte)(number) 7, (byte)(number) 1, (byte)(number) 1, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 1, (byte)(number) 6, (byte)(number) 3, (byte)(number) 4, (byte)(number) 6, (byte)(number) 5, (byte)(number) 2, (byte)(number) 7, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 2, (byte)(number) 5, (byte)(number) 2, (byte)(number) 5, (byte)(number) 2, (byte)(number) 2, (byte)(number) 5, (byte)(number) 3, (byte)(number) 1, (byte)(number) 1, (byte)(number) 2, (byte)(number) 5, (byte)(number) 7, (byte)(number) 5, (byte)(number) 5, (byte)(number) 6, (byte)(number) 5, (byte)(number) 6, (byte)(number) 5, (byte)(number) 6, (byte)(number) 2, (byte)(number) 5, (byte)(number) 4, (byte)(number) 5, (byte)(number) 2, (byte)(number) 6, (byte)(number) 5, (byte)(number) 5, (byte)(number) 5, (byte)(number) 6, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 4, (byte)(number) 7, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 4, (byte)(number) 4 } +Successful SSA optimization PassNAddArrayNumberTypeConversions +Inlining cast (byte) init_font_hex::idx#0 ← (unumber)(number) 0 +Inlining cast *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (unumber)(number) 0 +Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (unumber)(number) 0 +Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (unumber)(number) 0 +Inlining cast (byte) CORDIC_ITERATIONS_16#0 ← (unumber)(number) $f +Inlining cast (word*) CORDIC_ATAN2_ANGLES_16#0 ← (word*)(number) $1000 +Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0 +Inlining cast (byte) CORDIC_ITERATIONS_8#0 ← (unumber)(number) 8 +Inlining cast (byte*) CORDIC_ATAN2_ANGLES_8#0 ← (byte*)(number) $1100 +Inlining cast (byte*) D018#0 ← (byte*)(number) $d018 +Inlining cast (byte*) COLS#0 ← (byte*)(number) $d800 +Inlining cast (byte*) CHARSET#0 ← (byte*)(number) $2000 +Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $2800 +Inlining cast (byte*) SCREEN_REF#0 ← (byte*)(number) $2c00 +Inlining cast (word~) main::toD0181_$0#0 ← (word)(byte*) main::toD0181_screen#1 +Inlining cast (word~) main::toD0181_$4#0 ← (word)(byte*) main::toD0181_gfx#1 +Inlining cast (byte~) main::$4 ← (byte)(signed byte) main::x#2 +Inlining cast (signed word~) main::$6 ← (signed word)(word~) main::$5 +Inlining cast (byte~) main::$7 ← (byte)(signed byte) main::y#2 +Inlining cast (signed word~) main::$9 ← (signed word)(word~) main::$8 +Successful SSA optimization Pass2InlineCast +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 4 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 5 +Simplifying constant integer cast 8 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Simplifying constant integer cast 5 +Simplifying constant integer cast 5 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Simplifying constant integer cast 6 +Simplifying constant integer cast 2 +Simplifying constant integer cast 2 +Simplifying constant integer cast 2 +Simplifying constant integer cast 7 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast 4 +Simplifying constant integer cast 7 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast 1 +Simplifying constant integer cast 6 +Simplifying constant integer cast 5 +Simplifying constant integer cast 5 +Simplifying constant integer cast 7 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 7 +Simplifying constant integer cast 4 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 +Simplifying constant integer cast 6 +Simplifying constant integer cast 3 +Simplifying constant integer cast 4 +Simplifying constant integer cast 6 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Simplifying constant integer cast 7 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Simplifying constant integer cast 2 +Simplifying constant integer cast 5 +Simplifying constant integer cast 3 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast 5 +Simplifying constant integer cast 7 +Simplifying constant integer cast 5 +Simplifying constant integer cast 5 +Simplifying constant integer cast 6 +Simplifying constant integer cast 5 +Simplifying constant integer cast 6 +Simplifying constant integer cast 5 +Simplifying constant integer cast 6 +Simplifying constant integer cast 2 +Simplifying constant integer cast 5 +Simplifying constant integer cast 4 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Simplifying constant integer cast 6 +Simplifying constant integer cast 5 +Simplifying constant integer cast 5 +Simplifying constant integer cast 5 +Simplifying constant integer cast 6 +Simplifying constant integer cast 7 +Simplifying constant integer cast 4 +Simplifying constant integer cast 6 +Simplifying constant integer cast 4 +Simplifying constant integer cast 7 +Simplifying constant integer cast 7 +Simplifying constant integer cast 4 +Simplifying constant integer cast 6 +Simplifying constant integer cast 4 +Simplifying constant integer cast 4 +Simplifying constant integer cast $f +Simplifying constant pointer cast (word*) 4096 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 2 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $8000 +Simplifying constant integer cast 8 +Simplifying constant pointer cast (byte*) 4352 +Simplifying constant pointer cast (byte*) 53272 +Simplifying constant pointer cast (byte*) 55296 +Simplifying constant pointer cast (byte*) 8192 +Simplifying constant pointer cast (byte*) 10240 +Simplifying constant pointer cast (byte*) 11264 +Simplifying constant integer cast $3fff +Simplifying constant integer cast 4 +Simplifying constant integer cast 4 +Simplifying constant integer cast $f +Simplifying constant integer cast (byte~) main::$4 +Simplifying constant integer cast 0 +Simplifying constant integer cast (byte~) main::$7 +Simplifying constant integer cast 0 +Simplifying constant integer cast $80 +Simplifying constant integer cast $13 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 5 +Finalized unsigned number type (byte) 8 +Finalized unsigned number type (byte) 5 +Finalized unsigned number type (byte) $f +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Finalized unsigned number type (byte) 0 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Finalized unsigned number type (byte) 2 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Finalized unsigned number type (word) $8000 +Finalized unsigned number type (byte) 8 +Finalized unsigned number type (word) $3fff +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) $f +Finalized unsigned number type (byte) $80 +Finalized unsigned number type (byte) $13 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to word in (unumber~) atan2_16::$12 ← (word) $8000 - (word) atan2_16::angle#9 +Inferred type updated to word in (unumber~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (word) $3fff +Inferred type updated to word in (unumber~) main::toD0181_$2#0 ← (word~) main::toD0181_$1#0 * (byte) 4 +Inferred type updated to byte in (unumber~) main::toD0181_$3#0 ← > (word~) main::toD0181_$2#0 +Inferred type updated to byte in (unumber~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (byte) 4 +Inferred type updated to byte in (unumber~) main::toD0181_$7#0 ← (byte~) main::toD0181_$6#0 & (byte) $f +Inferred type updated to byte in (unumber~) main::toD0181_$8#0 ← (byte~) main::toD0181_$3#0 | (byte~) main::toD0181_$7#0 +Inferred type updated to word in (unumber~) main::$11 ← (word) main::angle_w#0 + (byte) $80 +Inferred type updated to byte in (unumber~) main::$12 ← > (word~) main::$11 +Inferred type updated to byte in (unumber~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) +Inversing boolean not [63] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 != (signed byte) 0 from [62] (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (signed byte) 0 +Inversing boolean not [75] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [74] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0 +Inversing boolean not [93] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [92] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0 +Successful SSA optimization Pass2UnaryNotSimplification +Alias (byte*) init_font_hex::charset#3 = (byte*) init_font_hex::charset#4 +Alias (byte) init_font_hex::idx#2 = (byte) init_font_hex::idx#6 +Alias (byte*) init_font_hex::proto_lo#2 = (byte*) init_font_hex::proto_lo#3 +Alias (byte) init_font_hex::c1#2 = (byte) init_font_hex::c1#3 +Alias (byte*) init_font_hex::proto_hi#2 = (byte*) init_font_hex::proto_hi#5 (byte*) init_font_hex::proto_hi#3 +Alias (byte) init_font_hex::c#2 = (byte) init_font_hex::c#3 (byte) init_font_hex::c#4 +Alias (byte*) init_font_hex::charset#0 = (byte*) init_font_hex::charset#7 +Alias (signed word) atan2_16::y#1 = (signed word) atan2_16::y#2 (signed word~) atan2_16::$3 (signed word) atan2_16::y#3 +Alias (signed word) atan2_16::x#5 = (signed word) atan2_16::x#9 (signed word) atan2_16::x#6 +Alias (signed word~) atan2_16::$2 = (signed word~) atan2_16::$1 +Alias (signed word) atan2_16::yi#0 = (signed word~) atan2_16::$4 (signed word) atan2_16::yi#9 (signed word) atan2_16::yi#10 +Alias (signed word) atan2_16::x#1 = (signed word) atan2_16::x#2 (signed word~) atan2_16::$8 (signed word) atan2_16::x#3 +Alias (signed word) atan2_16::y#12 = (signed word) atan2_16::y#15 (signed word) atan2_16::y#13 +Alias (signed word~) atan2_16::$7 = (signed word~) atan2_16::$6 +Alias (signed word) atan2_16::xi#0 = (signed word~) atan2_16::$9 +Alias (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#6 (signed word) atan2_16::xi#4 (signed word) atan2_16::xi#5 +Alias (byte) atan2_16::i#2 = (byte) atan2_16::i#6 (byte) atan2_16::i#3 (byte) atan2_16::i#4 +Alias (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#4 (signed word) atan2_16::yi#5 (signed word) atan2_16::yi#6 +Alias (word) atan2_16::angle#12 = (word) atan2_16::angle#14 (word) atan2_16::angle#7 (word) atan2_16::angle#8 +Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#13 (signed word) atan2_16::x#7 (signed word) atan2_16::x#12 +Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#14 (signed word) atan2_16::y#7 (signed word) atan2_16::y#11 +Alias (signed word) atan2_16::xd#0 = (signed word~) atan2_16::$18 (signed word) atan2_16::xd#1 (signed word) atan2_16::xd#2 +Alias (signed word) atan2_16::yd#0 = (signed word~) atan2_16::$19 (signed word) atan2_16::yd#1 (signed word) atan2_16::yd#2 +Alias (word) atan2_16::angle#1 = (word) atan2_16::angle#9 +Alias (signed word) atan2_16::y#5 = (signed word) atan2_16::y#6 +Alias (word) atan2_16::angle#4 = (word~) atan2_16::$12 +Alias (word) atan2_16::return#0 = (word) atan2_16::angle#10 (word) atan2_16::return#3 (word) atan2_16::return#1 +Alias (word) atan2_16::angle#11 = (word) atan2_16::angle#15 +Alias (word) atan2_16::angle#5 = (word~) atan2_16::$15 +Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1 +Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 +Alias (byte) main::toD0181_return#0 = (byte~) main::toD0181_$8#0 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$1 +Alias (word~) main::$5 = (word~) main::$16 +Alias (signed word) main::xw#0 = (signed word~) main::$6 +Alias (word~) main::$8 = (word~) main::$17 +Alias (signed word) main::yw#0 = (signed word~) main::$9 +Alias (word) atan2_16::return#2 = (word) atan2_16::return#4 +Alias (byte*) main::screen_ref#2 = (byte*) main::screen_ref#3 +Alias (byte*) main::screen#2 = (byte*) main::screen#3 +Alias (signed byte) main::x#2 = (signed byte) main::x#3 +Alias (signed byte) main::y#2 = (signed byte) main::y#5 (signed byte) main::y#3 +Alias (word) main::angle_w#0 = (word~) main::$10 +Alias (byte*) main::screen_ref#1 = (byte*) main::screen_ref#5 +Alias (byte*) main::screen#1 = (byte*) main::screen#5 +Alias (byte*) main::col00#0 = (byte*~) main::$3 +Alias (byte*) main::col00#1 = (byte*) main::col00#2 +Successful SSA optimization Pass2AliasElimination +Alias (signed word) atan2_16::x#1 = (signed word) atan2_16::x#5 (signed word) atan2_16::x#10 +Alias (signed word) atan2_16::y#1 = (signed word) atan2_16::y#12 (signed word) atan2_16::y#9 +Alias (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#8 +Alias (byte) atan2_16::i#2 = (byte) atan2_16::i#5 +Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#8 +Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#8 +Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5 +Successful SSA optimization Pass2AliasElimination +Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#4 +Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#4 +Successful SSA optimization Pass2AliasElimination +Self Phi Eliminated (byte*) init_font_hex::proto_hi#2 +Self Phi Eliminated (byte*) init_font_hex::proto_lo#2 +Self Phi Eliminated (byte*) init_font_hex::charset#3 +Self Phi Eliminated (byte) init_font_hex::c1#2 +Self Phi Eliminated (byte) init_font_hex::c#2 +Self Phi Eliminated (signed word) atan2_16::x#11 +Self Phi Eliminated (signed word) atan2_16::y#10 +Self Phi Eliminated (signed byte) main::y#2 +Self Phi Eliminated (byte*) main::col00#1 +Successful SSA optimization Pass2SelfPhiElimination +Identical Phi Values (byte*) init_font_hex::charset#6 (byte*) init_font_hex::charset#1 +Identical Phi Values (byte*) init_font_hex::proto_hi#2 (byte*) init_font_hex::proto_hi#4 +Identical Phi Values (byte*) init_font_hex::proto_lo#2 (byte*) init_font_hex::proto_lo#4 +Identical Phi Values (byte*) init_font_hex::charset#3 (byte*) init_font_hex::charset#2 +Identical Phi Values (byte) init_font_hex::c1#2 (byte) init_font_hex::c1#4 +Identical Phi Values (byte) init_font_hex::c#2 (byte) init_font_hex::c#5 +Identical Phi Values (signed word) atan2_16::y#1 (signed word) atan2_16::y#0 +Identical Phi Values (signed word) atan2_16::x#1 (signed word) atan2_16::x#0 +Identical Phi Values (signed word) atan2_16::x#11 (signed word) atan2_16::x#1 +Identical Phi Values (signed word) atan2_16::y#10 (signed word) atan2_16::y#1 +Identical Phi Values (signed byte) main::y#2 (signed byte) main::y#4 +Identical Phi Values (byte*) main::col00#1 (byte*) main::col00#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Simple Condition (bool~) init_font_hex::$3 [19] if((byte) init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 +Simple Condition (bool~) init_font_hex::$4 [29] if((byte) init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 +Simple Condition (bool~) init_font_hex::$5 [34] if((byte) init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 +Simple Condition (bool~) atan2_16::$0 [42] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 +Simple Condition (bool~) atan2_16::$5 [51] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 +Simple Condition (bool~) atan2_16::$17 [64] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16 +Simple Condition (bool~) atan2_16::$20 [71] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@18 +Simple Condition (bool~) atan2_16::$11 [76] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 +Simple Condition (bool~) atan2_16::$21 [90] if((byte) atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16#0)) goto atan2_16::@15 +Simple Condition (bool~) atan2_16::$14 [94] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 +Simple Condition (bool~) main::$14 [166] if((signed byte) main::x#1!=rangelast(-$13,$14)) goto main::@2 +Simple Condition (bool~) main::$15 [170] if((signed byte) main::y#1!=rangelast(-$c,$c)) goto main::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Negating conditional jump and destination [90] if((byte) atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16#0)) goto atan2_16::@17 +Successful SSA optimization Pass2ConditionalJumpSequenceImprovement +Constant right-side identified [36] (byte[]) FONT_HEX_PROTO#0 ← { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) init_font_hex::c#0 = 0 +Constant (const byte) init_font_hex::c1#0 = 0 +Constant (const byte) init_font_hex::idx#0 = 0 +Constant (const byte) init_font_hex::i#0 = 0 +Constant (const byte[]) FONT_HEX_PROTO#0 = { 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 } +Constant (const byte) CORDIC_ITERATIONS_16#0 = $f +Constant (const word*) CORDIC_ATAN2_ANGLES_16#0 = (word*) 4096 +Constant (const word) atan2_16::angle#0 = 0 +Constant (const byte) atan2_16::i#0 = 0 +Constant (const byte) CORDIC_ITERATIONS_8#0 = 8 +Constant (const byte*) CORDIC_ATAN2_ANGLES_8#0 = (byte*) 4352 +Constant (const byte*) D018#0 = (byte*) 53272 +Constant (const byte*) COLS#0 = (byte*) 55296 +Constant (const byte*) CHARSET#0 = (byte*) 8192 +Constant (const byte*) SCREEN#0 = (byte*) 10240 +Constant (const byte*) SCREEN_REF#0 = (byte*) 11264 +Constant (const signed byte) main::y#0 = -$c +Constant (const signed byte) main::x#0 = -$13 +Successful SSA optimization Pass2ConstantIdentification +Constant (const byte*) init_font_hex::proto_hi#0 = FONT_HEX_PROTO#0 +Constant (const byte*) init_font_hex::proto_lo#0 = FONT_HEX_PROTO#0 +Constant (const byte*) init_font_hex::charset#1 = CHARSET#0 +Constant (const byte*) main::toD0181_screen#0 = SCREEN#0 +Constant (const byte*) main::toD0181_gfx#0 = CHARSET#0 +Constant (const byte*) main::screen#0 = SCREEN#0 +Constant (const byte*) main::screen_ref#0 = SCREEN_REF#0 +Successful SSA optimization Pass2ConstantIdentification +Constant value identified (word)main::toD0181_screen#0 in [120] (word~) main::toD0181_$0#0 ← (word)(const byte*) main::toD0181_screen#0 +Constant value identified (word)main::toD0181_gfx#0 in [124] (word~) main::toD0181_$4#0 ← (word)(const byte*) main::toD0181_gfx#0 +Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [175] if(true) goto main::@6 +Successful SSA optimization Pass2ConstantIfs +Resolved ranged next value [17] init_font_hex::i#1 ← ++ init_font_hex::i#2 to ++ +Resolved ranged comparison value [19] if(init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 to (number) 5 +Resolved ranged next value [27] init_font_hex::c1#1 ← ++ init_font_hex::c1#4 to ++ +Resolved ranged comparison value [29] if(init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 to (number) $10 +Resolved ranged next value [32] init_font_hex::c#1 ← ++ init_font_hex::c#5 to ++ +Resolved ranged comparison value [34] if(init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 to (number) $10 +Resolved ranged next value [88] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ +Resolved ranged comparison value [90] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16#0)) goto atan2_16::@17 to (const byte) CORDIC_ITERATIONS_16#0+(number) 1 +Resolved ranged next value [164] main::x#1 ← ++ main::x#2 to ++ +Resolved ranged comparison value [166] if(main::x#1!=rangelast(-$13,$14)) goto main::@2 to (number) $15 +Resolved ranged next value [168] main::y#1 ← ++ main::y#4 to ++ +Resolved ranged comparison value [170] if(main::y#1!=rangelast(-$c,$c)) goto main::@1 to (number) $d +Converting *(pointer+n) to pointer[n] [177] *((byte*) main::col00#0) ← ++ *((byte*) main::col00#0) -- *(main::$2 + $13) +Converting *(pointer+n) to pointer[n] [177] *((byte*) main::col00#0) ← ++ *((byte*~) main::$2 + (byte) $13) -- *(main::$2 + $13) +Successful SSA optimization Pass2InlineDerefIdx +Simplifying expression containing zero init_font_hex::charset#2 in [8] *((byte*) init_font_hex::charset#2 + (const byte) init_font_hex::idx#0) ← (byte) 0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused variable (byte) init_font_hex::idx#4 and assignment [15] (byte) init_font_hex::idx#4 ← ++ (byte) init_font_hex::idx#3 +Eliminating unused variable (byte*) main::col00#0 and assignment [93] (byte*) main::col00#0 ← (byte*~) main::$2 + (byte) $13 +Successful SSA optimization PassNEliminateUnusedVars +Removing unused block main::@return +Successful SSA optimization Pass2EliminateUnusedBlocks +Adding number conversion cast (unumber) 5 in if((byte) init_font_hex::i#1!=(number) 5) goto init_font_hex::@3 +Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c1#1!=(number) $10) goto init_font_hex::@2 +Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c#1!=(number) $10) goto init_font_hex::@1 +Adding number conversion cast (unumber) CORDIC_ITERATIONS_16#0+1 in if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0+(number) 1) goto atan2_16::@17 +Adding number conversion cast (unumber) 1 in if((byte) atan2_16::i#1==(unumber)(const byte) CORDIC_ITERATIONS_16#0+(number) 1) goto atan2_16::@17 +Adding number conversion cast (snumber) $15 in if((signed byte) main::x#1!=(number) $15) goto main::@2 +Adding number conversion cast (snumber) $d in if((signed byte) main::y#1!=(number) $d) goto main::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 5 +Simplifying constant integer cast $10 +Simplifying constant integer cast $10 +Simplifying constant integer cast (const byte) CORDIC_ITERATIONS_16#0+(unumber)(number) 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast $15 +Simplifying constant integer cast $d +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 5 +Finalized unsigned number type (byte) $10 +Finalized unsigned number type (byte) $10 +Finalized unsigned number type (byte) 1 +Finalized signed number type (signed byte) $15 +Finalized signed number type (signed byte) $d +Successful SSA optimization PassNFinalizeNumberTypeConversions +Self Phi Eliminated (byte*) init_font_hex::proto_hi#4 +Self Phi Eliminated (byte) init_font_hex::c#5 +Successful SSA optimization Pass2SelfPhiElimination +Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 +Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [3] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 +Constant right-side identified [91] (byte*~) main::$2 ← (const byte*) COLS#0 + (word)(number) $c*(number) $28 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) init_font_hex::idx#1 = ++init_font_hex::idx#0 +Constant (const word) main::toD0181_$0#0 = (word)main::toD0181_screen#0 +Constant (const word) main::toD0181_$4#0 = (word)main::toD0181_gfx#0 +Constant (const byte*) main::$2 = COLS#0+(word)$c*$28 +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [57] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff +Constant right-side identified [60] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const word) main::toD0181_$1#0 = main::toD0181_$0#0&$3fff +Constant (const byte) main::toD0181_$5#0 = >main::toD0181_$4#0 +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [57] (word~) main::toD0181_$2#0 ← (const word) main::toD0181_$1#0 * (byte) 4 +Constant right-side identified [59] (byte~) main::toD0181_$6#0 ← (const byte) main::toD0181_$5#0 / (byte) 4 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const word) main::toD0181_$2#0 = main::toD0181_$1#0*4 +Constant (const byte) main::toD0181_$6#0 = main::toD0181_$5#0/4 +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [57] (byte~) main::toD0181_$3#0 ← > (const word) main::toD0181_$2#0 +Constant right-side identified [58] (byte~) main::toD0181_$7#0 ← (const byte) main::toD0181_$6#0 & (byte) $f +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) main::toD0181_$3#0 = >main::toD0181_$2#0 +Constant (const byte) main::toD0181_$7#0 = main::toD0181_$6#0&$f +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [57] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3#0 | (const byte) main::toD0181_$7#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining Noop Cast [60] (byte~) main::$4 ← (byte)(signed byte) main::x#2 keeping main::x#2 +Inlining Noop Cast [63] (byte~) main::$7 ← (byte)(signed byte) main::y#4 keeping main::y#4 +Successful SSA optimization Pass2NopCastInlining +Inlining Noop Cast [62] (signed word) main::xw#0 ← (signed word)(word~) main::$5 keeping main::xw#0 +Inlining Noop Cast [65] (signed word) main::yw#0 ← (signed word)(word~) main::$8 keeping main::yw#0 +Successful SSA optimization Pass2NopCastInlining +Rewriting division to use shift [35] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2 +Rewriting multiplication to use shift [39] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [43] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD +Successful SSA optimization Pass2MultiplyToShiftRewriting +Inlining constant with var siblings (const byte) init_font_hex::c#0 +Inlining constant with var siblings (const byte) init_font_hex::c1#0 +Inlining constant with var siblings (const byte) init_font_hex::idx#0 +Inlining constant with var siblings (const byte) init_font_hex::i#0 +Inlining constant with var siblings (const byte*) init_font_hex::proto_hi#0 +Inlining constant with var siblings (const byte*) init_font_hex::proto_lo#0 +Inlining constant with var siblings (const byte*) init_font_hex::charset#1 +Inlining constant with var siblings (const byte) init_font_hex::idx#1 +Inlining constant with var siblings (const word) atan2_16::angle#0 +Inlining constant with var siblings (const byte) atan2_16::i#0 +Inlining constant with var siblings (const signed byte) main::y#0 +Inlining constant with var siblings (const signed byte) main::x#0 +Inlining constant with var siblings (const byte*) main::screen#0 +Inlining constant with var siblings (const byte*) main::screen_ref#0 +Constant inlined main::screen#0 = (const byte*) SCREEN#0 +Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN#0 +Constant inlined main::toD0181_gfx#0 = (const byte*) CHARSET#0 +Constant inlined init_font_hex::proto_hi#0 = (const byte[]) FONT_HEX_PROTO#0 +Constant inlined atan2_16::angle#0 = (byte) 0 +Constant inlined init_font_hex::charset#1 = (const byte*) CHARSET#0 +Constant inlined init_font_hex::c1#0 = (byte) 0 +Constant inlined main::screen_ref#0 = (const byte*) SCREEN_REF#0 +Constant inlined atan2_16::i#0 = (byte) 0 +Constant inlined main::toD0181_$0#0 = (word)(const byte*) SCREEN#0 +Constant inlined main::x#0 = (signed byte) -$13 +Constant inlined main::toD0181_$1#0 = (word)(const byte*) SCREEN#0&(word) $3fff +Constant inlined main::y#0 = (signed byte) -$c +Constant inlined init_font_hex::i#0 = (byte) 0 +Constant inlined main::toD0181_$6#0 = >(word)(const byte*) CHARSET#0/(byte) 4 +Constant inlined main::toD0181_$7#0 = >(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f +Constant inlined init_font_hex::idx#1 = ++(byte) 0 +Constant inlined init_font_hex::idx#0 = (byte) 0 +Constant inlined main::toD0181_$2#0 = (word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4 +Constant inlined main::$2 = (const byte*) COLS#0+(word)(number) $c*(number) $28 +Constant inlined main::toD0181_$3#0 = >(word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4 +Constant inlined main::toD0181_$4#0 = (word)(const byte*) CHARSET#0 +Constant inlined main::toD0181_$5#0 = >(word)(const byte*) CHARSET#0 +Constant inlined init_font_hex::proto_lo#0 = (const byte[]) FONT_HEX_PROTO#0 +Constant inlined init_font_hex::c#0 = (byte) 0 +Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(COLS#0+(word)$c*$28+$13) +Consolidated array index constant in *(COLS#0+(word)$c*$28+$13) +Successful SSA optimization Pass2ConstantAdditionElimination +Simplifying constant integer increment ++0 +Successful SSA optimization Pass2ConstantSimplification +Eliminating unused constant (const byte) SIZEOF_WORD +Successful SSA optimization PassNEliminateUnusedVars +Added new block during phi lifting init_font_hex::@7(between init_font_hex::@5 and init_font_hex::@1) +Added new block during phi lifting init_font_hex::@8(between init_font_hex::@4 and init_font_hex::@2) +Added new block during phi lifting init_font_hex::@9(between init_font_hex::@3 and init_font_hex::@3) +Added new block during phi lifting atan2_16::@26(between atan2_16::@19 and atan2_16::@15) +Added new block during phi lifting atan2_16::@27(between atan2_16::@15 and atan2_16::@17) +Added new block during phi lifting atan2_16::@28(between atan2_16::@19 and atan2_16::@17) +Added new block during phi lifting atan2_16::@29(between atan2_16::@17 and atan2_16::@7) +Added new block during phi lifting atan2_16::@30(between atan2_16::@7 and atan2_16::@8) +Added new block during phi lifting main::@14(between main::@3 and main::@1) +Added new block during phi lifting main::@15(between main::@13 and main::@2) +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @3 +Adding NOP phi() at start of @8 +Adding NOP phi() at start of @9 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@12 +Adding NOP phi() at start of main::toD0181 +Adding NOP phi() at start of main::toD0181_@return +Adding NOP phi() at start of main::@4 +Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of init_font_hex +CALL GRAPH +Calls in [] to main:6 +Calls in [main] to init_font_hex:10 atan2_16:23 + +Created 26 initial phi equivalence classes +Coalesced [16] main::screen_ref#7 ← main::screen_ref#4 +Coalesced [17] main::screen#7 ← main::screen#4 +Coalesced [39] main::y#6 ← main::y#1 +Coalesced [40] main::screen_ref#6 ← main::screen_ref#1 +Coalesced [41] main::screen#6 ← main::screen#1 +Coalesced [42] main::x#4 ← main::x#1 +Coalesced (already) [43] main::screen_ref#8 ← main::screen_ref#1 +Coalesced (already) [44] main::screen#8 ← main::screen#1 +Coalesced [47] atan2_16::yi#12 ← atan2_16::$2 +Coalesced [51] atan2_16::xi#9 ← atan2_16::$7 +Coalesced [53] atan2_16::yi#14 ← atan2_16::yi#0 +Coalesced [54] atan2_16::xi#11 ← atan2_16::xi#0 +Coalesced [57] atan2_16::angle#17 ← atan2_16::angle#12 +Coalesced [62] atan2_16::angle#22 ← atan2_16::angle#4 +Coalesced [66] atan2_16::return#5 ← atan2_16::angle#5 +Coalesced [69] atan2_16::return#6 ← atan2_16::angle#11 +Coalesced [70] atan2_16::angle#21 ← atan2_16::angle#1 +Coalesced [78] atan2_16::yi#16 ← atan2_16::yi#2 +Coalesced [79] atan2_16::angle#20 ← atan2_16::angle#3 +Coalesced [80] atan2_16::xi#13 ← atan2_16::xi#2 +Coalesced [84] atan2_16::yi#13 ← atan2_16::yi#7 +Coalesced [85] atan2_16::xi#10 ← atan2_16::xi#7 +Coalesced [86] atan2_16::i#7 ← atan2_16::i#1 +Coalesced [87] atan2_16::angle#16 ← atan2_16::angle#13 +Coalesced (already) [88] atan2_16::angle#18 ← atan2_16::angle#13 +Coalesced [93] atan2_16::yi#15 ← atan2_16::yi#1 +Coalesced [94] atan2_16::angle#19 ← atan2_16::angle#2 +Coalesced [95] atan2_16::xi#12 ← atan2_16::xi#1 +Not coalescing [96] atan2_16::xi#8 ← atan2_16::x#0 +Not coalescing [97] atan2_16::yi#11 ← atan2_16::y#0 +Coalesced [100] init_font_hex::charset#9 ← init_font_hex::charset#5 +Coalesced [122] init_font_hex::charset#8 ← init_font_hex::charset#0 +Coalesced [123] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1 +Coalesced [124] init_font_hex::c#7 ← init_font_hex::c#1 +Coalesced (already) [125] init_font_hex::charset#10 ← init_font_hex::charset#0 +Coalesced [126] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1 +Coalesced [127] init_font_hex::c1#5 ← init_font_hex::c1#1 +Coalesced [128] init_font_hex::i#3 ← init_font_hex::i#1 +Coalesced [129] init_font_hex::idx#7 ← init_font_hex::idx#2 +Coalesced down to 18 phi equivalence classes +Culled Empty Block (label) @3 +Culled Empty Block (label) @9 +Culled Empty Block (label) main::@12 +Culled Empty Block (label) main::toD0181_@return +Culled Empty Block (label) main::@4 +Culled Empty Block (label) main::@5 +Culled Empty Block (label) main::@14 +Culled Empty Block (label) main::@15 +Culled Empty Block (label) atan2_16::@27 +Culled Empty Block (label) atan2_16::@30 +Culled Empty Block (label) atan2_16::@29 +Culled Empty Block (label) atan2_16::@26 +Culled Empty Block (label) atan2_16::@28 +Culled Empty Block (label) init_font_hex::@7 +Culled Empty Block (label) init_font_hex::@8 +Culled Empty Block (label) init_font_hex::@9 +Renumbering block @7 to @3 +Renumbering block @8 to @4 +Renumbering block atan2_16::@13 to atan2_16::@9 +Renumbering block atan2_16::@15 to atan2_16::@10 +Renumbering block atan2_16::@16 to atan2_16::@11 +Renumbering block atan2_16::@17 to atan2_16::@12 +Renumbering block atan2_16::@18 to atan2_16::@13 +Renumbering block atan2_16::@19 to atan2_16::@14 +Renumbering block atan2_16::@22 to atan2_16::@15 +Renumbering block atan2_16::@25 to atan2_16::@16 +Renumbering block main::@6 to main::@4 +Renumbering block main::@11 to main::@5 +Renumbering block main::@13 to main::@6 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @4 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::toD0181 +Adding NOP phi() at start of init_font_hex + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + kickasm(location (const word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; i (word~) main::$11 + [22] (byte~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) + [23] *((byte*) main::screen#2) ← (byte~) main::$13 + [24] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 + [25] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 + [26] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 + [27] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@6 + [28] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 + [29] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 + to:main::@4 +main::@4: scope:[main] from main::@3 main::@4 + [30] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) + to:main::@4 +atan2_16: scope:[atan2_16] from main::@2 + [31] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 + to:atan2_16::@2 +atan2_16::@2: scope:[atan2_16] from atan2_16 + [32] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 + to:atan2_16::@3 +atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 + [33] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#11 atan2_16::@2/(signed word~) atan2_16::$2 ) + [34] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 + to:atan2_16::@5 +atan2_16::@5: scope:[atan2_16] from atan2_16::@3 + [35] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 + to:atan2_16::@6 +atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 + [36] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#8 atan2_16::@5/(signed word~) atan2_16::$7 ) + to:atan2_16::@10 +atan2_16::@10: scope:[atan2_16] from atan2_16::@14 atan2_16::@6 + [37] (word) atan2_16::angle#12 ← phi( atan2_16::@14/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [37] (byte) atan2_16::i#2 ← phi( atan2_16::@14/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) + [37] (signed word) atan2_16::xi#3 ← phi( atan2_16::@14/(signed word) atan2_16::xi#7 atan2_16::@6/(signed word) atan2_16::xi#0 ) + [37] (signed word) atan2_16::yi#3 ← phi( atan2_16::@14/(signed word) atan2_16::yi#7 atan2_16::@6/(signed word) atan2_16::yi#0 ) + [38] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 + to:atan2_16::@12 +atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@14 + [39] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@14/(word) atan2_16::angle#13 ) + [40] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 + [41] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 + to:atan2_16::@16 +atan2_16::@16: scope:[atan2_16] from atan2_16::@12 + [42] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 + to:atan2_16::@7 +atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@16 + [43] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@16/(word) atan2_16::angle#4 ) + [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 + to:atan2_16::@9 +atan2_16::@9: scope:[atan2_16] from atan2_16::@7 + [45] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 + to:atan2_16::@8 +atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9 + [46] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) + to:atan2_16::@return +atan2_16::@return: scope:[atan2_16] from atan2_16::@8 + [47] return + to:@return +atan2_16::@11: scope:[atan2_16] from atan2_16::@10 + [48] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 + [49] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 + [50] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 + to:atan2_16::@15 +atan2_16::@15: scope:[atan2_16] from atan2_16::@11 + [51] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 + [52] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 + [53] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 + [54] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) + to:atan2_16::@14 +atan2_16::@14: scope:[atan2_16] from atan2_16::@13 atan2_16::@15 + [55] (signed word) atan2_16::xi#7 ← phi( atan2_16::@13/(signed word) atan2_16::xi#1 atan2_16::@15/(signed word) atan2_16::xi#2 ) + [55] (word) atan2_16::angle#13 ← phi( atan2_16::@13/(word) atan2_16::angle#2 atan2_16::@15/(word) atan2_16::angle#3 ) + [55] (signed word) atan2_16::yi#7 ← phi( atan2_16::@13/(signed word) atan2_16::yi#1 atan2_16::@15/(signed word) atan2_16::yi#2 ) + [56] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 + [57] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0+(byte) 1) goto atan2_16::@12 + to:atan2_16::@10 +atan2_16::@13: scope:[atan2_16] from atan2_16::@11 + [58] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 + [59] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 + [60] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 + [61] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) + to:atan2_16::@14 +atan2_16::@4: scope:[atan2_16] from atan2_16::@3 + [62] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 + to:atan2_16::@6 +atan2_16::@1: scope:[atan2_16] from atan2_16 + [63] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 + to:atan2_16::@3 +init_font_hex: scope:[init_font_hex] from main + [64] phi() + to:init_font_hex::@1 +init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5 + [65] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 ) + [65] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) + [65] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 ) + to:init_font_hex::@2 +init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4 + [66] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) + [66] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) + [66] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) + [67] *((byte*) init_font_hex::charset#2) ← (byte) 0 + to:init_font_hex::@3 +init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3 + [68] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) + [68] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 ) + [69] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 + [70] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 + [71] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 + [72] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 + [73] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 + [74] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 + [75] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 + to:init_font_hex::@4 +init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3 + [76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 + [77] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 + [78] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 + [79] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 + [80] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 + [81] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 + [82] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 + to:init_font_hex::@5 +init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4 + [83] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 + [84] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 + [85] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 + to:init_font_hex::@return +init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 + [86] return + to:@return + + +VARIABLE REGISTER WEIGHTS +(byte*) CHARSET +(byte*) COLS +(word*) CORDIC_ATAN2_ANGLES_16 +(byte*) CORDIC_ATAN2_ANGLES_8 +(byte) CORDIC_ITERATIONS_16 +(byte) CORDIC_ITERATIONS_8 +(byte*) D018 +(byte[]) FONT_HEX_PROTO +(byte*) SCREEN +(byte*) SCREEN_REF +(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) +(signed word~) atan2_16::$2 4.0 +(byte~) atan2_16::$22 2002.0 +(byte~) atan2_16::$23 2002.0 +(signed word~) atan2_16::$7 4.0 +(word) atan2_16::angle +(word) atan2_16::angle#1 3.0 +(word) atan2_16::angle#11 4.0 +(word) atan2_16::angle#12 364.0 +(word) atan2_16::angle#13 1334.6666666666667 +(word) atan2_16::angle#2 2002.0 +(word) atan2_16::angle#3 2002.0 +(word) atan2_16::angle#4 4.0 +(word) atan2_16::angle#5 4.0 +(word) atan2_16::angle#6 2004.0 +(byte) atan2_16::i +(byte) atan2_16::i#1 1501.5 +(byte) atan2_16::i#2 429.0 +(word) atan2_16::return +(word) atan2_16::return#0 34.99999999999999 +(word) atan2_16::return#2 202.0 +(signed word) atan2_16::x +(signed word) atan2_16::x#0 3.8928571428571437 +(signed word) atan2_16::xd +(signed word) atan2_16::xd#0 600.5999999999999 +(signed word) atan2_16::xi +(signed word) atan2_16::xi#0 6.0 +(signed word) atan2_16::xi#1 500.5 +(signed word) atan2_16::xi#2 500.5 +(signed word) atan2_16::xi#3 801.2 +(signed word) atan2_16::xi#7 1001.0 +(signed word~) atan2_16::xi#8 4.0 +(signed word) atan2_16::y +(signed word) atan2_16::y#0 3.633333333333334 +(signed word) atan2_16::yd +(signed word) atan2_16::yd#0 1501.5 +(signed word) atan2_16::yi +(signed word) atan2_16::yi#0 1.2000000000000002 +(signed word) atan2_16::yi#1 667.3333333333334 +(signed word~) atan2_16::yi#11 4.0 +(signed word) atan2_16::yi#2 667.3333333333334 +(signed word) atan2_16::yi#3 858.2857142857142 +(signed word) atan2_16::yi#7 1001.0 +(void()) init_font_hex((byte*) init_font_hex::charset) +(byte~) init_font_hex::$0 1001.0 +(byte~) init_font_hex::$1 2002.0 +(byte~) init_font_hex::$2 2002.0 +(byte) init_font_hex::c +(byte) init_font_hex::c#1 16.5 +(byte) init_font_hex::c#6 1.1578947368421053 +(byte) init_font_hex::c1 +(byte) init_font_hex::c1#1 151.5 +(byte) init_font_hex::c1#4 13.466666666666667 +(byte*) init_font_hex::charset +(byte*) init_font_hex::charset#0 35.5 +(byte*) init_font_hex::charset#2 108.35714285714285 +(byte*) init_font_hex::charset#5 22.0 +(byte) init_font_hex::i +(byte) init_font_hex::i#1 1501.5 +(byte) init_font_hex::i#2 667.3333333333334 +(byte) init_font_hex::idx +(byte) init_font_hex::idx#2 551.0 +(byte) init_font_hex::idx#3 202.0 +(byte) init_font_hex::idx#5 600.5999999999999 +(byte*) init_font_hex::proto_hi +(byte*) init_font_hex::proto_hi#1 7.333333333333333 +(byte*) init_font_hex::proto_hi#6 56.83333333333334 +(byte*) init_font_hex::proto_lo +(byte*) init_font_hex::proto_lo#1 50.5 +(byte*) init_font_hex::proto_lo#4 92.53846153846155 +(void()) main() +(word~) main::$11 202.0 +(byte~) main::$12 202.0 +(byte~) main::$13 202.0 +(word) main::angle_w +(word) main::angle_w#0 202.0 +(byte*) main::col00 +(byte*) main::screen +(byte*) main::screen#1 35.5 +(byte*) main::screen#2 26.166666666666664 +(byte*) main::screen#4 22.0 +(byte*) main::screen_ref +(byte*) main::screen_ref#1 42.599999999999994 +(byte*) main::screen_ref#2 24.153846153846153 +(byte*) main::screen_ref#4 22.0 +(word~) main::toD0181_$0 +(number~) main::toD0181_$1 +(number~) main::toD0181_$2 +(number~) main::toD0181_$3 +(word~) main::toD0181_$4 +(byte~) main::toD0181_$5 +(number~) main::toD0181_$6 +(number~) main::toD0181_$7 +(number~) main::toD0181_$8 +(byte*) main::toD0181_gfx +(byte) main::toD0181_return +(byte*) main::toD0181_screen +(signed byte) main::x +(signed byte) main::x#1 151.5 +(signed byte) main::x#2 14.428571428571429 +(signed word) main::xw +(word) main::xw#0 50.5 +(signed byte) main::y +(signed byte) main::y#1 16.5 +(signed byte) main::y#4 1.2941176470588236 +(signed word) main::yw +(word) main::yw#0 50.5 + +Initial phi equivalence classes +[ main::y#4 main::y#1 ] +[ main::x#2 main::x#1 ] +[ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] +[ main::screen#2 main::screen#4 main::screen#1 ] +[ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +[ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +[ atan2_16::i#2 atan2_16::i#1 ] +[ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] +[ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] +[ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] +[ init_font_hex::c#6 init_font_hex::c#1 ] +[ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] +[ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +[ init_font_hex::c1#4 init_font_hex::c1#1 ] +[ init_font_hex::i#2 init_font_hex::i#1 ] +[ init_font_hex::idx#5 init_font_hex::idx#2 ] +Added variable main::xw#0 to zero page equivalence class [ main::xw#0 ] +Added variable main::yw#0 to zero page equivalence class [ main::yw#0 ] +Added variable atan2_16::x#0 to zero page equivalence class [ atan2_16::x#0 ] +Added variable atan2_16::y#0 to zero page equivalence class [ atan2_16::y#0 ] +Added variable atan2_16::return#2 to zero page equivalence class [ atan2_16::return#2 ] +Added variable main::angle_w#0 to zero page equivalence class [ main::angle_w#0 ] +Added variable main::$11 to zero page equivalence class [ main::$11 ] +Added variable main::$12 to zero page equivalence class [ main::$12 ] +Added variable main::$13 to zero page equivalence class [ main::$13 ] +Added variable atan2_16::xd#0 to zero page equivalence class [ atan2_16::xd#0 ] +Added variable atan2_16::yd#0 to zero page equivalence class [ atan2_16::yd#0 ] +Added variable atan2_16::$23 to zero page equivalence class [ atan2_16::$23 ] +Added variable atan2_16::$22 to zero page equivalence class [ atan2_16::$22 ] +Added variable init_font_hex::$0 to zero page equivalence class [ init_font_hex::$0 ] +Added variable init_font_hex::$1 to zero page equivalence class [ init_font_hex::$1 ] +Added variable init_font_hex::$2 to zero page equivalence class [ init_font_hex::$2 ] +Added variable init_font_hex::idx#3 to zero page equivalence class [ init_font_hex::idx#3 ] +Complete equivalence classes +[ main::y#4 main::y#1 ] +[ main::x#2 main::x#1 ] +[ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] +[ main::screen#2 main::screen#4 main::screen#1 ] +[ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +[ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +[ atan2_16::i#2 atan2_16::i#1 ] +[ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] +[ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] +[ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] +[ init_font_hex::c#6 init_font_hex::c#1 ] +[ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] +[ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +[ init_font_hex::c1#4 init_font_hex::c1#1 ] +[ init_font_hex::i#2 init_font_hex::i#1 ] +[ init_font_hex::idx#5 init_font_hex::idx#2 ] +[ main::xw#0 ] +[ main::yw#0 ] +[ atan2_16::x#0 ] +[ atan2_16::y#0 ] +[ atan2_16::return#2 ] +[ main::angle_w#0 ] +[ main::$11 ] +[ main::$12 ] +[ main::$13 ] +[ atan2_16::xd#0 ] +[ atan2_16::yd#0 ] +[ atan2_16::$23 ] +[ atan2_16::$22 ] +[ init_font_hex::$0 ] +[ init_font_hex::$1 ] +[ init_font_hex::$2 ] +[ init_font_hex::idx#3 ] +Allocated zp ZP_BYTE:2 [ main::y#4 main::y#1 ] +Allocated zp ZP_BYTE:3 [ main::x#2 main::x#1 ] +Allocated zp ZP_WORD:4 [ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] +Allocated zp ZP_WORD:6 [ main::screen#2 main::screen#4 main::screen#1 ] +Allocated zp ZP_WORD:8 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +Allocated zp ZP_WORD:10 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +Allocated zp ZP_BYTE:12 [ atan2_16::i#2 atan2_16::i#1 ] +Allocated zp ZP_WORD:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] +Allocated zp ZP_WORD:15 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] +Allocated zp ZP_WORD:17 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] +Allocated zp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] +Allocated zp ZP_WORD:20 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] +Allocated zp ZP_WORD:22 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +Allocated zp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Allocated zp ZP_BYTE:25 [ init_font_hex::i#2 init_font_hex::i#1 ] +Allocated zp ZP_BYTE:26 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Allocated zp ZP_WORD:27 [ main::xw#0 ] +Allocated zp ZP_WORD:29 [ main::yw#0 ] +Allocated zp ZP_WORD:31 [ atan2_16::x#0 ] +Allocated zp ZP_WORD:33 [ atan2_16::y#0 ] +Allocated zp ZP_WORD:35 [ atan2_16::return#2 ] +Allocated zp ZP_WORD:37 [ main::angle_w#0 ] +Allocated zp ZP_WORD:39 [ main::$11 ] +Allocated zp ZP_BYTE:41 [ main::$12 ] +Allocated zp ZP_BYTE:42 [ main::$13 ] +Allocated zp ZP_WORD:43 [ atan2_16::xd#0 ] +Allocated zp ZP_WORD:45 [ atan2_16::yd#0 ] +Allocated zp ZP_BYTE:47 [ atan2_16::$23 ] +Allocated zp ZP_BYTE:48 [ atan2_16::$22 ] +Allocated zp ZP_BYTE:49 [ init_font_hex::$0 ] +Allocated zp ZP_BYTE:50 [ init_font_hex::$1 ] +Allocated zp ZP_BYTE:51 [ init_font_hex::$2 ] +Allocated zp ZP_BYTE:52 [ init_font_hex::idx#3 ] + +INITIAL ASM +//SEG0 File Comments +// Find atan2(x, y) using the CORDIC method +// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + // The number of iterations performed during 16-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_16 = $f + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_16 = $1000 + // The number of iterations performed during 8-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_8 = 8 + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_8 = $1100 + .label D018 = $d018 + // Color Ram + .label COLS = $d800 + .label CHARSET = $2000 + .label SCREEN = $2800 + .label SCREEN_REF = $2c00 +//SEG3 @begin +bbegin: + jmp b1 +//SEG4 @1 +b1: +//SEG5 kickasm(location (const word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; i@4] +b4_from_b3: + jmp b4 +//SEG11 @4 +b4: +//SEG12 [5] call main +//SEG13 [7] phi from @4 to main [phi:@4->main] +main_from_b4: + jsr main +//SEG14 [6] phi from @4 to @end [phi:@4->@end] +bend_from_b4: + jmp bend +//SEG15 @end +bend: +//SEG16 main +main: { + .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f + .label _11 = $27 + .label _12 = $29 + .label _13 = $2a + .label xw = $1b + .label yw = $1d + .label angle_w = $25 + .label screen = 6 + .label screen_ref = 4 + .label x = 3 + .label y = 2 + //SEG17 [8] call init_font_hex + //SEG18 [64] phi from main to init_font_hex [phi:main->init_font_hex] + init_font_hex_from_main: + jsr init_font_hex + //SEG19 [9] phi from main to main::toD0181 [phi:main->main::toD0181] + toD0181_from_main: + jmp toD0181 + //SEG20 main::toD0181 + toD0181: + jmp b5 + //SEG21 main::@5 + b5: + //SEG22 [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 + lda #toD0181_return + sta D018 + //SEG23 [11] phi from main::@5 to main::@1 [phi:main::@5->main::@1] + b1_from_b5: + //SEG24 [11] phi (byte*) main::screen#4 = (const byte*) SCREEN#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 + lda #SCREEN + sta screen+1 + //SEG25 [11] phi (byte*) main::screen_ref#4 = (const byte*) SCREEN_REF#0 [phi:main::@5->main::@1#1] -- pbuz1=pbuc1 + lda #SCREEN_REF + sta screen_ref+1 + //SEG26 [11] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@5->main::@1#2] -- vbsz1=vbsc1 + lda #-$c + sta y + jmp b1 + //SEG27 [11] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + b1_from_b3: + //SEG28 [11] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy + //SEG29 [11] phi (byte*) main::screen_ref#4 = (byte*) main::screen_ref#1 [phi:main::@3->main::@1#1] -- register_copy + //SEG30 [11] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#2] -- register_copy + jmp b1 + //SEG31 main::@1 + b1: + //SEG32 [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + //SEG33 [12] phi (byte*) main::screen#2 = (byte*) main::screen#4 [phi:main::@1->main::@2#0] -- register_copy + //SEG34 [12] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#4 [phi:main::@1->main::@2#1] -- register_copy + //SEG35 [12] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#2] -- vbsz1=vbsc1 + lda #-$13 + sta x + jmp b2 + //SEG36 [12] phi from main::@6 to main::@2 [phi:main::@6->main::@2] + b2_from_b6: + //SEG37 [12] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@6->main::@2#0] -- register_copy + //SEG38 [12] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#1 [phi:main::@6->main::@2#1] -- register_copy + //SEG39 [12] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@2#2] -- register_copy + jmp b2 + //SEG40 main::@2 + b2: + //SEG41 [13] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + lda x + ldy #0 + sta xw+1 + sty xw + //SEG42 [14] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + lda y + ldy #0 + sta yw+1 + sty yw + //SEG43 [15] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 -- vwsz1=vwsz2 + lda xw + sta atan2_16.x + lda xw+1 + sta atan2_16.x+1 + //SEG44 [16] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 -- vwsz1=vwsz2 + lda yw + sta atan2_16.y + lda yw+1 + sta atan2_16.y+1 + //SEG45 [17] call atan2_16 + jsr atan2_16 + //SEG46 [18] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 + lda atan2_16.return + sta atan2_16.return_2 + lda atan2_16.return+1 + sta atan2_16.return_2+1 + jmp b6 + //SEG47 main::@6 + b6: + //SEG48 [19] (word) main::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 + lda atan2_16.return_2 + sta angle_w + lda atan2_16.return_2+1 + sta angle_w+1 + //SEG49 [20] (word~) main::$11 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 + lda #$80 + clc + adc angle_w + sta _11 + lda #0 + adc angle_w+1 + sta _11+1 + //SEG50 [21] (byte~) main::$12 ← > (word~) main::$11 -- vbuz1=_hi_vwuz2 + lda _11+1 + sta _12 + //SEG51 [22] (byte~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) -- vbuz1=vbuz2_minus__deref_pbuz3 + lda _12 + sec + ldy #0 + sbc (screen_ref),y + sta _13 + //SEG52 [23] *((byte*) main::screen#2) ← (byte~) main::$13 -- _deref_pbuz1=vbuz2 + //*screen++ = (>angle_w)-angle_b; + //*screen++ = >angle_w; + lda _13 + ldy #0 + sta (screen),y + //SEG53 [24] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 + inc screen + bne !+ + inc screen+1 + !: + //SEG54 [25] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 -- pbuz1=_inc_pbuz1 + inc screen_ref + bne !+ + inc screen_ref+1 + !: + //SEG55 [26] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1 + inc x + //SEG56 [27] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsz1_neq_vbsc1_then_la1 + lda #$15 + cmp x + bne b2_from_b6 + jmp b3 + //SEG57 main::@3 + b3: + //SEG58 [28] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 + inc y + //SEG59 [29] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 + lda #$d + cmp y + bne b1_from_b3 + jmp b4 + //SEG60 main::@4 + b4: + //SEG61 [30] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) -- _deref_pbuc1=_inc__deref_pbuc2 + lda COLS+$c*$28+$13 + clc + adc #1 + sta COLS+$c*$28+$13 + jmp b4 +} +//SEG62 atan2_16 +// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) +// Finding the angle requires a binary search using CORDIC_ITERATIONS_16 +// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) +// atan2_16(signed word zeropage($1f) x, signed word zeropage($21) y) +atan2_16: { + .label _2 = 8 + .label _7 = $a + .label _22 = $30 + .label _23 = $2f + .label yi = 8 + .label xi = $a + .label xd = $2b + .label yd = $2d + .label angle = $f + .label angle_2 = $d + .label angle_3 = $d + .label i = $c + .label return = $f + .label x = $1f + .label y = $21 + .label return_2 = $23 + .label angle_6 = $d + .label angle_12 = $d + .label angle_13 = $d + //SEG63 [31] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 -- vwsz1_gt_0_then_la1 + lda y+1 + bne !+ + lda y + beq !e+ + lsr + !: + bpl b1 + !e: + jmp b2 + //SEG64 atan2_16::@2 + b2: + //SEG65 [32] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + sec + lda #0 + sbc y + sta _2 + lda #0 + sbc y+1 + sta _2+1 + //SEG66 [33] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + b3_from_b1: + b3_from_b2: + //SEG67 [33] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#11 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + jmp b3 + //SEG68 atan2_16::@3 + b3: + //SEG69 [34] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 -- vwsz1_gt_0_then_la1 + lda x+1 + bne !+ + lda x + beq !e+ + lsr + !: + bpl b4 + !e: + jmp b5 + //SEG70 atan2_16::@5 + b5: + //SEG71 [35] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + sec + lda #0 + sbc x + sta _7 + lda #0 + sbc x+1 + sta _7+1 + //SEG72 [36] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + b6_from_b4: + b6_from_b5: + //SEG73 [36] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#8 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + jmp b6 + //SEG74 atan2_16::@6 + b6: + //SEG75 [37] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + b10_from_b6: + //SEG76 [37] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + lda #0 + sta angle_12 + lda #0 + sta angle_12+1 + //SEG77 [37] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 + lda #0 + sta i + //SEG78 [37] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + //SEG79 [37] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + jmp b10 + //SEG80 atan2_16::@10 + b10: + //SEG81 [38] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + lda yi+1 + bne b11 + lda yi + bne b11 + //SEG82 [39] phi from atan2_16::@10 atan2_16::@14 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@14->atan2_16::@12] + b12_from_b10: + b12_from_b14: + //SEG83 [39] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@14->atan2_16::@12#0] -- register_copy + jmp b12 + //SEG84 atan2_16::@12 + b12: + //SEG85 [40] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 + lda angle_6+1 + lsr + sta angle+1 + lda angle_6 + ror + sta angle + //SEG86 [41] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + lda x+1 + bpl b7_from_b12 + jmp b16 + //SEG87 atan2_16::@16 + b16: + //SEG88 [42] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + sec + lda #<$8000 + sbc angle + sta angle + lda #>$8000 + sbc angle+1 + sta angle+1 + //SEG89 [43] phi from atan2_16::@12 atan2_16::@16 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@16->atan2_16::@7] + b7_from_b12: + b7_from_b16: + //SEG90 [43] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@16->atan2_16::@7#0] -- register_copy + jmp b7 + //SEG91 atan2_16::@7 + b7: + //SEG92 [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + lda y+1 + bpl b8_from_b7 + jmp b9 + //SEG93 atan2_16::@9 + b9: + //SEG94 [45] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + sec + lda #0 + sbc angle + sta angle + lda #0 + sbc angle+1 + sta angle+1 + //SEG95 [46] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + b8_from_b7: + b8_from_b9: + //SEG96 [46] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + jmp b8 + //SEG97 atan2_16::@8 + b8: + jmp breturn + //SEG98 atan2_16::@return + breturn: + //SEG99 [47] return + rts + //SEG100 atan2_16::@11 + b11: + //SEG101 [48] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 -- vwsz1=vwsz2_ror_vbuz3 + ldy i + lda xi + sta xd + lda xi+1 + sta xd+1 + cpy #0 + beq !e+ + !: + lda xd+1 + cmp #$80 + ror xd+1 + ror xd + dey + bne !- + !e: + //SEG102 [49] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 -- vwsz1=vwsz2_ror_vbuz3 + ldy i + lda yi + sta yd + lda yi+1 + sta yd+1 + cpy #0 + beq !e+ + !: + lda yd+1 + cmp #$80 + ror yd+1 + ror yd + dey + bne !- + !e: + //SEG103 [50] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 -- vwsz1_gt_0_then_la1 + lda yi+1 + bne !+ + lda yi + beq !e+ + lsr + !: + bpl b13 + !e: + jmp b15 + //SEG104 atan2_16::@15 + b15: + //SEG105 [51] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 -- vwsz1=vwsz1_minus_vwsz2 + lda xi + sec + sbc yd + sta xi + lda xi+1 + sbc yd+1 + sta xi+1 + //SEG106 [52] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 -- vwsz1=vwsz1_plus_vwsz2 + lda yi + clc + adc xd + sta yi + lda yi+1 + adc xd+1 + sta yi+1 + //SEG107 [53] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda i + asl + sta _23 + //SEG108 [54] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 + ldy _23 + sec + lda angle_3 + sbc CORDIC_ATAN2_ANGLES_16,y + sta angle_3 + lda angle_3+1 + sbc CORDIC_ATAN2_ANGLES_16+1,y + sta angle_3+1 + //SEG109 [55] phi from atan2_16::@13 atan2_16::@15 to atan2_16::@14 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14] + b14_from_b13: + b14_from_b15: + //SEG110 [55] phi (signed word) atan2_16::xi#7 = (signed word) atan2_16::xi#1 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#0] -- register_copy + //SEG111 [55] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#1] -- register_copy + //SEG112 [55] phi (signed word) atan2_16::yi#7 = (signed word) atan2_16::yi#1 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#2] -- register_copy + jmp b14 + //SEG113 atan2_16::@14 + b14: + //SEG114 [56] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 + inc i + //SEG115 [57] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 + lda #CORDIC_ITERATIONS_16+1 + cmp i + beq b12_from_b14 + //SEG116 [37] phi from atan2_16::@14 to atan2_16::@10 [phi:atan2_16::@14->atan2_16::@10] + b10_from_b14: + //SEG117 [37] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@14->atan2_16::@10#0] -- register_copy + //SEG118 [37] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@14->atan2_16::@10#1] -- register_copy + //SEG119 [37] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#7 [phi:atan2_16::@14->atan2_16::@10#2] -- register_copy + //SEG120 [37] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#7 [phi:atan2_16::@14->atan2_16::@10#3] -- register_copy + jmp b10 + //SEG121 atan2_16::@13 + b13: + //SEG122 [58] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 -- vwsz1=vwsz1_plus_vwsz2 + lda xi + clc + adc yd + sta xi + lda xi+1 + adc yd+1 + sta xi+1 + //SEG123 [59] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 -- vwsz1=vwsz1_minus_vwsz2 + lda yi + sec + sbc xd + sta yi + lda yi+1 + sbc xd+1 + sta yi+1 + //SEG124 [60] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda i + asl + sta _22 + //SEG125 [61] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 + ldy _22 + clc + lda angle_2 + adc CORDIC_ATAN2_ANGLES_16,y + sta angle_2 + lda angle_2+1 + adc CORDIC_ATAN2_ANGLES_16+1,y + sta angle_2+1 + jmp b14_from_b13 + //SEG126 atan2_16::@4 + b4: + //SEG127 [62] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + lda x + sta xi + lda x+1 + sta xi+1 + jmp b6_from_b4 + //SEG128 atan2_16::@1 + b1: + //SEG129 [63] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + lda y + sta yi + lda y+1 + sta yi+1 + jmp b3_from_b1 +} +//SEG130 init_font_hex +// Make charset from proto chars +// init_font_hex(byte* zeropage($14) charset) +init_font_hex: { + .label _0 = $31 + .label _1 = $32 + .label _2 = $33 + .label idx = $1a + .label i = $19 + .label idx_3 = $34 + .label proto_lo = $16 + .label charset = $14 + .label c1 = $18 + .label proto_hi = $11 + .label c = $13 + //SEG131 [65] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] + b1_from_init_font_hex: + //SEG132 [65] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 + lda #0 + sta c + //SEG133 [65] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 + lda #FONT_HEX_PROTO + sta proto_hi+1 + //SEG134 [65] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 + lda #CHARSET + sta charset+1 + jmp b1 + //SEG135 [65] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] + b1_from_b5: + //SEG136 [65] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy + //SEG137 [65] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy + //SEG138 [65] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy + jmp b1 + //SEG139 init_font_hex::@1 + b1: + //SEG140 [66] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] + b2_from_b1: + //SEG141 [66] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 + lda #0 + sta c1 + //SEG142 [66] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 + lda #FONT_HEX_PROTO + sta proto_lo+1 + //SEG143 [66] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy + jmp b2 + //SEG144 [66] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] + b2_from_b4: + //SEG145 [66] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy + //SEG146 [66] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy + //SEG147 [66] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy + jmp b2 + //SEG148 init_font_hex::@2 + b2: + //SEG149 [67] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (charset),y + //SEG150 [68] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] + b3_from_b2: + //SEG151 [68] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 + lda #1 + sta idx + //SEG152 [68] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuz1=vbuc1 + lda #0 + sta i + jmp b3 + //SEG153 [68] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] + b3_from_b3: + //SEG154 [68] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy + //SEG155 [68] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy + jmp b3 + //SEG156 init_font_hex::@3 + b3: + //SEG157 [69] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuz3_rol_4 + ldy i + lda (proto_hi),y + asl + asl + asl + asl + sta _0 + //SEG158 [70] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuz1=pbuz2_derefidx_vbuz3_rol_1 + ldy i + lda (proto_lo),y + asl + sta _1 + //SEG159 [71] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuz1=vbuz2_bor_vbuz3 + lda _0 + ora _1 + sta _2 + //SEG160 [72] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuz3 + lda _2 + ldy idx + sta (charset),y + //SEG161 [73] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 + inc idx + //SEG162 [74] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuz1=_inc_vbuz1 + inc i + //SEG163 [75] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuz1_neq_vbuc1_then_la1 + lda #5 + cmp i + bne b3_from_b3 + jmp b4 + //SEG164 init_font_hex::@4 + b4: + //SEG165 [76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + lda #0 + ldy idx + sta (charset),y + //SEG166 [77] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuz1=_inc_vbuz2 + ldy idx + iny + sty idx_3 + //SEG167 [78] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + lda #0 + ldy idx_3 + sta (charset),y + //SEG168 [79] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + lda #5 + clc + adc proto_lo + sta proto_lo + bcc !+ + inc proto_lo+1 + !: + //SEG169 [80] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + lda #8 + clc + adc charset + sta charset + bcc !+ + inc charset+1 + !: + //SEG170 [81] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 + inc c1 + //SEG171 [82] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #$10 + cmp c1 + bne b2_from_b4 + jmp b5 + //SEG172 init_font_hex::@5 + b5: + //SEG173 [83] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + lda #5 + clc + adc proto_hi + sta proto_hi + bcc !+ + inc proto_hi+1 + !: + //SEG174 [84] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 + inc c + //SEG175 [85] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$10 + cmp c + bne b1_from_b5 + jmp breturn + //SEG176 init_font_hex::@return + breturn: + //SEG177 [86] return + rts +} +//SEG178 File Data + // Bit patterns for symbols 0-f (3x5 pixels) used in font hex + FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 +.pc = CORDIC_ATAN2_ANGLES_16 "CORDIC_ATAN2_ANGLES_16" + .for (var i=0; i (word~) main::$11 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$12 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$12 ] ) always clobbers reg byte a +Statement [22] (byte~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$13 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$13 ] ) always clobbers reg byte a reg byte y +Statement [23] *((byte*) main::screen#2) ← (byte~) main::$13 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 ] ) always clobbers reg byte y +Statement [30] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) [ ] ( main:5 [ ] ) always clobbers reg byte a +Statement [31] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [32] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [34] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [35] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [38] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ atan2_16::i#2 atan2_16::i#1 ] +Statement [40] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [41] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [42] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [45] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [48] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 ] ) always clobbers reg byte a +Statement [49] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ) always clobbers reg byte a +Statement [50] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ) always clobbers reg byte a +Statement [51] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#2 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [52] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [53] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a +Statement [54] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [58] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [59] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [60] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a +Statement [61] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [62] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#8 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#8 ] ) always clobbers reg byte a +Statement [63] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#11 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#11 ] ) always clobbers reg byte a +Statement [67] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Statement [69] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ init_font_hex::i#2 init_font_hex::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Statement [70] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:49 [ init_font_hex::$0 ] +Statement [76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a +Statement [78] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a +Statement [79] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [80] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [83] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:5::init_font_hex:8 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a +Statement [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:5 [ ] ) always clobbers reg byte a +Statement [13] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::xw#0 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::xw#0 ] ) always clobbers reg byte a reg byte y +Statement [14] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::xw#0 main::yw#0 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::xw#0 main::yw#0 ] ) always clobbers reg byte a reg byte y +Statement [15] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::yw#0 atan2_16::x#0 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [16] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [18] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::return#2 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [19] (word) main::angle_w#0 ← (word) atan2_16::return#2 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::angle_w#0 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::angle_w#0 ] ) always clobbers reg byte a +Statement [20] (word~) main::$11 ← (word) main::angle_w#0 + (byte) $80 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$11 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$11 ] ) always clobbers reg byte a +Statement [21] (byte~) main::$12 ← > (word~) main::$11 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$12 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$12 ] ) always clobbers reg byte a +Statement [22] (byte~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$13 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$13 ] ) always clobbers reg byte a reg byte y +Statement [23] *((byte*) main::screen#2) ← (byte~) main::$13 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 ] ) always clobbers reg byte y +Statement [30] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) [ ] ( main:5 [ ] ) always clobbers reg byte a +Statement [31] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [32] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [34] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [35] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [38] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [40] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [41] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [42] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [45] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [48] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 ] ) always clobbers reg byte a +Statement [49] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ) always clobbers reg byte a +Statement [50] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ) always clobbers reg byte a +Statement [51] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#2 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [52] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [53] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a +Statement [54] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [58] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [59] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [60] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a +Statement [61] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [62] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#8 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#8 ] ) always clobbers reg byte a +Statement [63] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#11 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#11 ] ) always clobbers reg byte a +Statement [67] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y +Statement [69] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a +Statement [70] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a +Statement [76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a +Statement [78] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a +Statement [79] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [80] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [83] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:5::init_font_hex:8 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::y#4 main::y#1 ] : zp ZP_BYTE:2 , reg byte x , +Potential registers zp ZP_BYTE:3 [ main::x#2 main::x#1 ] : zp ZP_BYTE:3 , reg byte x , +Potential registers zp ZP_WORD:4 [ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] : zp ZP_WORD:4 , +Potential registers zp ZP_WORD:6 [ main::screen#2 main::screen#4 main::screen#1 ] : zp ZP_WORD:6 , +Potential registers zp ZP_WORD:8 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp ZP_WORD:8 , +Potential registers zp ZP_WORD:10 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp ZP_WORD:10 , +Potential registers zp ZP_BYTE:12 [ atan2_16::i#2 atan2_16::i#1 ] : zp ZP_BYTE:12 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp ZP_WORD:13 , +Potential registers zp ZP_WORD:15 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] : zp ZP_WORD:15 , +Potential registers zp ZP_WORD:17 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] : zp ZP_WORD:17 , +Potential registers zp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] : zp ZP_BYTE:19 , reg byte x , +Potential registers zp ZP_WORD:20 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] : zp ZP_WORD:20 , +Potential registers zp ZP_WORD:22 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] : zp ZP_WORD:22 , +Potential registers zp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] : zp ZP_BYTE:24 , reg byte x , +Potential registers zp ZP_BYTE:25 [ init_font_hex::i#2 init_font_hex::i#1 ] : zp ZP_BYTE:25 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:26 [ init_font_hex::idx#5 init_font_hex::idx#2 ] : zp ZP_BYTE:26 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:27 [ main::xw#0 ] : zp ZP_WORD:27 , +Potential registers zp ZP_WORD:29 [ main::yw#0 ] : zp ZP_WORD:29 , +Potential registers zp ZP_WORD:31 [ atan2_16::x#0 ] : zp ZP_WORD:31 , +Potential registers zp ZP_WORD:33 [ atan2_16::y#0 ] : zp ZP_WORD:33 , +Potential registers zp ZP_WORD:35 [ atan2_16::return#2 ] : zp ZP_WORD:35 , +Potential registers zp ZP_WORD:37 [ main::angle_w#0 ] : zp ZP_WORD:37 , +Potential registers zp ZP_WORD:39 [ main::$11 ] : zp ZP_WORD:39 , +Potential registers zp ZP_BYTE:41 [ main::$12 ] : zp ZP_BYTE:41 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:42 [ main::$13 ] : zp ZP_BYTE:42 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:43 [ atan2_16::xd#0 ] : zp ZP_WORD:43 , +Potential registers zp ZP_WORD:45 [ atan2_16::yd#0 ] : zp ZP_WORD:45 , +Potential registers zp ZP_BYTE:47 [ atan2_16::$23 ] : zp ZP_BYTE:47 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:48 [ atan2_16::$22 ] : zp ZP_BYTE:48 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:49 [ init_font_hex::$0 ] : zp ZP_BYTE:49 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:50 [ init_font_hex::$1 ] : zp ZP_BYTE:50 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:51 [ init_font_hex::$2 ] : zp ZP_BYTE:51 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:52 [ init_font_hex::idx#3 ] : zp ZP_BYTE:52 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [atan2_16] 7,706.67: zp ZP_WORD:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 3,203.15: zp ZP_WORD:8 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,817.2: zp ZP_WORD:10 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:47 [ atan2_16::$23 ] 2,002: zp ZP_BYTE:48 [ atan2_16::$22 ] 1,930.5: zp ZP_BYTE:12 [ atan2_16::i#2 atan2_16::i#1 ] 1,501.5: zp ZP_WORD:45 [ atan2_16::yd#0 ] 600.6: zp ZP_WORD:43 [ atan2_16::xd#0 ] 202: zp ZP_WORD:35 [ atan2_16::return#2 ] 50: zp ZP_WORD:15 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 3.89: zp ZP_WORD:31 [ atan2_16::x#0 ] 3.63: zp ZP_WORD:33 [ atan2_16::y#0 ] +Uplift Scope [init_font_hex] 2,168.83: zp ZP_BYTE:25 [ init_font_hex::i#2 init_font_hex::i#1 ] 2,002: zp ZP_BYTE:50 [ init_font_hex::$1 ] 2,002: zp ZP_BYTE:51 [ init_font_hex::$2 ] 1,151.6: zp ZP_BYTE:26 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 1,001: zp ZP_BYTE:49 [ init_font_hex::$0 ] 202: zp ZP_BYTE:52 [ init_font_hex::idx#3 ] 165.86: zp ZP_WORD:20 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 164.97: zp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 143.04: zp ZP_WORD:22 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 64.17: zp ZP_WORD:17 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 17.66: zp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplift Scope [main] 202: zp ZP_WORD:37 [ main::angle_w#0 ] 202: zp ZP_WORD:39 [ main::$11 ] 202: zp ZP_BYTE:41 [ main::$12 ] 202: zp ZP_BYTE:42 [ main::$13 ] 165.93: zp ZP_BYTE:3 [ main::x#2 main::x#1 ] 88.75: zp ZP_WORD:4 [ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] 83.67: zp ZP_WORD:6 [ main::screen#2 main::screen#4 main::screen#1 ] 50.5: zp ZP_WORD:27 [ main::xw#0 ] 50.5: zp ZP_WORD:29 [ main::yw#0 ] 17.79: zp ZP_BYTE:2 [ main::y#4 main::y#1 ] +Uplift Scope [] + +Uplifting [atan2_16] best 416005 combination zp ZP_WORD:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:8 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:10 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] zp ZP_BYTE:12 [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:45 [ atan2_16::yd#0 ] zp ZP_WORD:43 [ atan2_16::xd#0 ] zp ZP_WORD:35 [ atan2_16::return#2 ] zp ZP_WORD:15 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:31 [ atan2_16::x#0 ] zp ZP_WORD:33 [ atan2_16::y#0 ] +Uplifting [init_font_hex] best 397005 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp ZP_BYTE:26 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp ZP_BYTE:49 [ init_font_hex::$0 ] zp ZP_BYTE:52 [ init_font_hex::idx#3 ] zp ZP_WORD:20 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp ZP_WORD:22 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp ZP_WORD:17 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] +Limited combination testing to 100 combinations of 6912 possible. +Uplifting [main] best 394805 combination zp ZP_WORD:37 [ main::angle_w#0 ] zp ZP_WORD:39 [ main::$11 ] reg byte a [ main::$12 ] reg byte a [ main::$13 ] reg byte x [ main::x#2 main::x#1 ] zp ZP_WORD:4 [ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] zp ZP_WORD:6 [ main::screen#2 main::screen#4 main::screen#1 ] zp ZP_WORD:27 [ main::xw#0 ] zp ZP_WORD:29 [ main::yw#0 ] zp ZP_BYTE:2 [ main::y#4 main::y#1 ] +Uplifting [] best 394805 combination +Attempting to uplift remaining variables inzp ZP_BYTE:12 [ atan2_16::i#2 atan2_16::i#1 ] +Uplifting [atan2_16] best 394805 combination zp ZP_BYTE:12 [ atan2_16::i#2 atan2_16::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:26 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Uplifting [init_font_hex] best 394805 combination zp ZP_BYTE:26 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Attempting to uplift remaining variables inzp ZP_BYTE:49 [ init_font_hex::$0 ] +Uplifting [init_font_hex] best 394805 combination zp ZP_BYTE:49 [ init_font_hex::$0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:52 [ init_font_hex::idx#3 ] +Uplifting [init_font_hex] best 394205 combination reg byte y [ init_font_hex::idx#3 ] +Attempting to uplift remaining variables inzp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Uplifting [init_font_hex] best 394205 combination zp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::y#4 main::y#1 ] +Uplifting [main] best 394205 combination zp ZP_BYTE:2 [ main::y#4 main::y#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplifting [init_font_hex] best 394205 combination zp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] +Coalescing zero page register with common assignment [ zp ZP_WORD:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:15 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:27 [ main::xw#0 ] ] with [ zp ZP_WORD:31 [ atan2_16::x#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:29 [ main::yw#0 ] ] with [ zp ZP_WORD:33 [ atan2_16::y#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:35 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:37 [ main::angle_w#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] with [ zp ZP_WORD:35 [ atan2_16::return#2 main::angle_w#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 main::angle_w#0 ] ] with [ zp ZP_WORD:39 [ main::$11 ] ] - score: 1 +Allocated (was zp ZP_WORD:4) zp ZP_WORD:3 [ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] +Allocated (was zp ZP_WORD:6) zp ZP_WORD:5 [ main::screen#2 main::screen#4 main::screen#1 ] +Allocated (was zp ZP_WORD:8) zp ZP_WORD:7 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +Allocated (was zp ZP_WORD:10) zp ZP_WORD:9 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +Allocated (was zp ZP_BYTE:12) zp ZP_BYTE:11 [ atan2_16::i#2 atan2_16::i#1 ] +Allocated (was zp ZP_WORD:13) zp ZP_WORD:12 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 main::angle_w#0 main::$11 ] +Allocated (was zp ZP_WORD:17) zp ZP_WORD:14 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] +Allocated (was zp ZP_BYTE:19) zp ZP_BYTE:16 [ init_font_hex::c#6 init_font_hex::c#1 ] +Allocated (was zp ZP_WORD:20) zp ZP_WORD:17 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] +Allocated (was zp ZP_WORD:22) zp ZP_WORD:19 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +Allocated (was zp ZP_BYTE:24) zp ZP_BYTE:21 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Allocated (was zp ZP_BYTE:26) zp ZP_BYTE:22 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Allocated (was zp ZP_WORD:27) zp ZP_WORD:23 [ main::xw#0 atan2_16::x#0 ] +Allocated (was zp ZP_WORD:29) zp ZP_WORD:25 [ main::yw#0 atan2_16::y#0 ] +Allocated (was zp ZP_WORD:43) zp ZP_WORD:27 [ atan2_16::xd#0 ] +Allocated (was zp ZP_WORD:45) zp ZP_WORD:29 [ atan2_16::yd#0 ] +Allocated (was zp ZP_BYTE:49) zp ZP_BYTE:31 [ init_font_hex::$0 ] + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 File Comments +// Find atan2(x, y) using the CORDIC method +// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + // The number of iterations performed during 16-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_16 = $f + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_16 = $1000 + // The number of iterations performed during 8-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_8 = 8 + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_8 = $1100 + .label D018 = $d018 + // Color Ram + .label COLS = $d800 + .label CHARSET = $2000 + .label SCREEN = $2800 + .label SCREEN_REF = $2c00 +//SEG3 @begin +bbegin: + jmp b1 +//SEG4 @1 +b1: +//SEG5 kickasm(location (const word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; i@4] +b4_from_b3: + jmp b4 +//SEG11 @4 +b4: +//SEG12 [5] call main +//SEG13 [7] phi from @4 to main [phi:@4->main] +main_from_b4: + jsr main +//SEG14 [6] phi from @4 to @end [phi:@4->@end] +bend_from_b4: + jmp bend +//SEG15 @end +bend: +//SEG16 main +main: { + .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f + .label _11 = $c + .label xw = $17 + .label yw = $19 + .label angle_w = $c + .label screen = 5 + .label screen_ref = 3 + .label y = 2 + //SEG17 [8] call init_font_hex + //SEG18 [64] phi from main to init_font_hex [phi:main->init_font_hex] + init_font_hex_from_main: + jsr init_font_hex + //SEG19 [9] phi from main to main::toD0181 [phi:main->main::toD0181] + toD0181_from_main: + jmp toD0181 + //SEG20 main::toD0181 + toD0181: + jmp b5 + //SEG21 main::@5 + b5: + //SEG22 [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 + lda #toD0181_return + sta D018 + //SEG23 [11] phi from main::@5 to main::@1 [phi:main::@5->main::@1] + b1_from_b5: + //SEG24 [11] phi (byte*) main::screen#4 = (const byte*) SCREEN#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 + lda #SCREEN + sta screen+1 + //SEG25 [11] phi (byte*) main::screen_ref#4 = (const byte*) SCREEN_REF#0 [phi:main::@5->main::@1#1] -- pbuz1=pbuc1 + lda #SCREEN_REF + sta screen_ref+1 + //SEG26 [11] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@5->main::@1#2] -- vbsz1=vbsc1 + lda #-$c + sta y + jmp b1 + //SEG27 [11] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + b1_from_b3: + //SEG28 [11] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy + //SEG29 [11] phi (byte*) main::screen_ref#4 = (byte*) main::screen_ref#1 [phi:main::@3->main::@1#1] -- register_copy + //SEG30 [11] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#2] -- register_copy + jmp b1 + //SEG31 main::@1 + b1: + //SEG32 [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + //SEG33 [12] phi (byte*) main::screen#2 = (byte*) main::screen#4 [phi:main::@1->main::@2#0] -- register_copy + //SEG34 [12] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#4 [phi:main::@1->main::@2#1] -- register_copy + //SEG35 [12] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#2] -- vbsxx=vbsc1 + ldx #-$13 + jmp b2 + //SEG36 [12] phi from main::@6 to main::@2 [phi:main::@6->main::@2] + b2_from_b6: + //SEG37 [12] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@6->main::@2#0] -- register_copy + //SEG38 [12] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#1 [phi:main::@6->main::@2#1] -- register_copy + //SEG39 [12] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@2#2] -- register_copy + jmp b2 + //SEG40 main::@2 + b2: + //SEG41 [13] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 -- vwuz1=vbuxx_word_vbuc1 + ldy #0 + txa + sta xw+1 + sty xw + //SEG42 [14] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + lda y + ldy #0 + sta yw+1 + sty yw + //SEG43 [15] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 + //SEG44 [16] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 + //SEG45 [17] call atan2_16 + jsr atan2_16 + //SEG46 [18] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + jmp b6 + //SEG47 main::@6 + b6: + //SEG48 [19] (word) main::angle_w#0 ← (word) atan2_16::return#2 + //SEG49 [20] (word~) main::$11 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + lda #$80 + clc + adc _11 + sta _11 + bcc !+ + inc _11+1 + !: + //SEG50 [21] (byte~) main::$12 ← > (word~) main::$11 -- vbuaa=_hi_vwuz1 + lda _11+1 + //SEG51 [22] (byte~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) -- vbuaa=vbuaa_minus__deref_pbuz1 + sec + ldy #0 + sbc (screen_ref),y + //SEG52 [23] *((byte*) main::screen#2) ← (byte~) main::$13 -- _deref_pbuz1=vbuaa + //*screen++ = (>angle_w)-angle_b; + //*screen++ = >angle_w; + ldy #0 + sta (screen),y + //SEG53 [24] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 + inc screen + bne !+ + inc screen+1 + !: + //SEG54 [25] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 -- pbuz1=_inc_pbuz1 + inc screen_ref + bne !+ + inc screen_ref+1 + !: + //SEG55 [26] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsxx=_inc_vbsxx + inx + //SEG56 [27] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsxx_neq_vbsc1_then_la1 + cpx #$15 + bne b2_from_b6 + jmp b3 + //SEG57 main::@3 + b3: + //SEG58 [28] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 + inc y + //SEG59 [29] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 + lda #$d + cmp y + bne b1_from_b3 + jmp b4 + //SEG60 main::@4 + b4: + //SEG61 [30] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) -- _deref_pbuc1=_inc__deref_pbuc2 + lda COLS+$c*$28+$13 + clc + adc #1 + sta COLS+$c*$28+$13 + jmp b4 +} +//SEG62 atan2_16 +// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) +// Finding the angle requires a binary search using CORDIC_ITERATIONS_16 +// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) +// atan2_16(signed word zeropage($17) x, signed word zeropage($19) y) +atan2_16: { + .label _2 = 7 + .label _7 = 9 + .label yi = 7 + .label xi = 9 + .label xd = $1b + .label yd = $1d + .label angle = $c + .label i = $b + .label return = $c + .label x = $17 + .label y = $19 + //SEG63 [31] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 -- vwsz1_gt_0_then_la1 + lda y+1 + bne !+ + lda y + beq !e+ + lsr + !: + bpl b1 + !e: + jmp b2 + //SEG64 atan2_16::@2 + b2: + //SEG65 [32] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + sec + lda #0 + sbc y + sta _2 + lda #0 + sbc y+1 + sta _2+1 + //SEG66 [33] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + b3_from_b1: + b3_from_b2: + //SEG67 [33] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#11 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + jmp b3 + //SEG68 atan2_16::@3 + b3: + //SEG69 [34] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 -- vwsz1_gt_0_then_la1 + lda x+1 + bne !+ + lda x + beq !e+ + lsr + !: + bpl b4 + !e: + jmp b5 + //SEG70 atan2_16::@5 + b5: + //SEG71 [35] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + sec + lda #0 + sbc x + sta _7 + lda #0 + sbc x+1 + sta _7+1 + //SEG72 [36] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + b6_from_b4: + b6_from_b5: + //SEG73 [36] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#8 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + jmp b6 + //SEG74 atan2_16::@6 + b6: + //SEG75 [37] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + b10_from_b6: + //SEG76 [37] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + lda #0 + sta angle + lda #0 + sta angle+1 + //SEG77 [37] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 + lda #0 + sta i + //SEG78 [37] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + //SEG79 [37] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + jmp b10 + //SEG80 atan2_16::@10 + b10: + //SEG81 [38] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + lda yi+1 + bne b11 + lda yi + bne b11 + //SEG82 [39] phi from atan2_16::@10 atan2_16::@14 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@14->atan2_16::@12] + b12_from_b10: + b12_from_b14: + //SEG83 [39] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@14->atan2_16::@12#0] -- register_copy + jmp b12 + //SEG84 atan2_16::@12 + b12: + //SEG85 [40] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + lsr angle+1 + ror angle + //SEG86 [41] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + lda x+1 + bpl b7_from_b12 + jmp b16 + //SEG87 atan2_16::@16 + b16: + //SEG88 [42] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + sec + lda #<$8000 + sbc angle + sta angle + lda #>$8000 + sbc angle+1 + sta angle+1 + //SEG89 [43] phi from atan2_16::@12 atan2_16::@16 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@16->atan2_16::@7] + b7_from_b12: + b7_from_b16: + //SEG90 [43] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@16->atan2_16::@7#0] -- register_copy + jmp b7 + //SEG91 atan2_16::@7 + b7: + //SEG92 [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + lda y+1 + bpl b8_from_b7 + jmp b9 + //SEG93 atan2_16::@9 + b9: + //SEG94 [45] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + sec + lda #0 + sbc angle + sta angle + lda #0 + sbc angle+1 + sta angle+1 + //SEG95 [46] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + b8_from_b7: + b8_from_b9: + //SEG96 [46] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + jmp b8 + //SEG97 atan2_16::@8 + b8: + jmp breturn + //SEG98 atan2_16::@return + breturn: + //SEG99 [47] return + rts + //SEG100 atan2_16::@11 + b11: + //SEG101 [48] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 -- vwsz1=vwsz2_ror_vbuz3 + ldy i + lda xi + sta xd + lda xi+1 + sta xd+1 + cpy #0 + beq !e+ + !: + lda xd+1 + cmp #$80 + ror xd+1 + ror xd + dey + bne !- + !e: + //SEG102 [49] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 -- vwsz1=vwsz2_ror_vbuz3 + ldy i + lda yi + sta yd + lda yi+1 + sta yd+1 + cpy #0 + beq !e+ + !: + lda yd+1 + cmp #$80 + ror yd+1 + ror yd + dey + bne !- + !e: + //SEG103 [50] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 -- vwsz1_gt_0_then_la1 + lda yi+1 + bne !+ + lda yi + beq !e+ + lsr + !: + bpl b13 + !e: + jmp b15 + //SEG104 atan2_16::@15 + b15: + //SEG105 [51] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 -- vwsz1=vwsz1_minus_vwsz2 + lda xi + sec + sbc yd + sta xi + lda xi+1 + sbc yd+1 + sta xi+1 + //SEG106 [52] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 -- vwsz1=vwsz1_plus_vwsz2 + lda yi + clc + adc xd + sta yi + lda yi+1 + adc xd+1 + sta yi+1 + //SEG107 [53] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda i + asl + //SEG108 [54] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa + tay + sec + lda angle + sbc CORDIC_ATAN2_ANGLES_16,y + sta angle + lda angle+1 + sbc CORDIC_ATAN2_ANGLES_16+1,y + sta angle+1 + //SEG109 [55] phi from atan2_16::@13 atan2_16::@15 to atan2_16::@14 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14] + b14_from_b13: + b14_from_b15: + //SEG110 [55] phi (signed word) atan2_16::xi#7 = (signed word) atan2_16::xi#1 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#0] -- register_copy + //SEG111 [55] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#1] -- register_copy + //SEG112 [55] phi (signed word) atan2_16::yi#7 = (signed word) atan2_16::yi#1 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#2] -- register_copy + jmp b14 + //SEG113 atan2_16::@14 + b14: + //SEG114 [56] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 + inc i + //SEG115 [57] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 + lda #CORDIC_ITERATIONS_16+1 + cmp i + beq b12_from_b14 + //SEG116 [37] phi from atan2_16::@14 to atan2_16::@10 [phi:atan2_16::@14->atan2_16::@10] + b10_from_b14: + //SEG117 [37] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@14->atan2_16::@10#0] -- register_copy + //SEG118 [37] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@14->atan2_16::@10#1] -- register_copy + //SEG119 [37] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#7 [phi:atan2_16::@14->atan2_16::@10#2] -- register_copy + //SEG120 [37] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#7 [phi:atan2_16::@14->atan2_16::@10#3] -- register_copy + jmp b10 + //SEG121 atan2_16::@13 + b13: + //SEG122 [58] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 -- vwsz1=vwsz1_plus_vwsz2 + lda xi + clc + adc yd + sta xi + lda xi+1 + adc yd+1 + sta xi+1 + //SEG123 [59] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 -- vwsz1=vwsz1_minus_vwsz2 + lda yi + sec + sbc xd + sta yi + lda yi+1 + sbc xd+1 + sta yi+1 + //SEG124 [60] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda i + asl + //SEG125 [61] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa + tay + clc + lda angle + adc CORDIC_ATAN2_ANGLES_16,y + sta angle + lda angle+1 + adc CORDIC_ATAN2_ANGLES_16+1,y + sta angle+1 + jmp b14_from_b13 + //SEG126 atan2_16::@4 + b4: + //SEG127 [62] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + lda x + sta xi + lda x+1 + sta xi+1 + jmp b6_from_b4 + //SEG128 atan2_16::@1 + b1: + //SEG129 [63] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + lda y + sta yi + lda y+1 + sta yi+1 + jmp b3_from_b1 +} +//SEG130 init_font_hex +// Make charset from proto chars +// init_font_hex(byte* zeropage($11) charset) +init_font_hex: { + .label _0 = $1f + .label idx = $16 + .label proto_lo = $13 + .label charset = $11 + .label c1 = $15 + .label proto_hi = $e + .label c = $10 + //SEG131 [65] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] + b1_from_init_font_hex: + //SEG132 [65] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 + lda #0 + sta c + //SEG133 [65] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 + lda #FONT_HEX_PROTO + sta proto_hi+1 + //SEG134 [65] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 + lda #CHARSET + sta charset+1 + jmp b1 + //SEG135 [65] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] + b1_from_b5: + //SEG136 [65] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy + //SEG137 [65] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy + //SEG138 [65] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy + jmp b1 + //SEG139 init_font_hex::@1 + b1: + //SEG140 [66] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] + b2_from_b1: + //SEG141 [66] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 + lda #0 + sta c1 + //SEG142 [66] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 + lda #FONT_HEX_PROTO + sta proto_lo+1 + //SEG143 [66] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy + jmp b2 + //SEG144 [66] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] + b2_from_b4: + //SEG145 [66] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy + //SEG146 [66] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy + //SEG147 [66] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy + jmp b2 + //SEG148 init_font_hex::@2 + b2: + //SEG149 [67] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (charset),y + //SEG150 [68] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] + b3_from_b2: + //SEG151 [68] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 + lda #1 + sta idx + //SEG152 [68] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 + ldx #0 + jmp b3 + //SEG153 [68] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] + b3_from_b3: + //SEG154 [68] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy + //SEG155 [68] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy + jmp b3 + //SEG156 init_font_hex::@3 + b3: + //SEG157 [69] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4 + txa + tay + lda (proto_hi),y + asl + asl + asl + asl + sta _0 + //SEG158 [70] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1 + txa + tay + lda (proto_lo),y + asl + //SEG159 [71] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa + ora _0 + //SEG160 [72] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa + ldy idx + sta (charset),y + //SEG161 [73] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 + inc idx + //SEG162 [74] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx + inx + //SEG163 [75] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 + cpx #5 + bne b3_from_b3 + jmp b4 + //SEG164 init_font_hex::@4 + b4: + //SEG165 [76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + lda #0 + ldy idx + sta (charset),y + //SEG166 [77] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 + ldy idx + iny + //SEG167 [78] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + lda #0 + sta (charset),y + //SEG168 [79] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + lda #5 + clc + adc proto_lo + sta proto_lo + bcc !+ + inc proto_lo+1 + !: + //SEG169 [80] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + lda #8 + clc + adc charset + sta charset + bcc !+ + inc charset+1 + !: + //SEG170 [81] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 + inc c1 + //SEG171 [82] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #$10 + cmp c1 + bne b2_from_b4 + jmp b5 + //SEG172 init_font_hex::@5 + b5: + //SEG173 [83] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + lda #5 + clc + adc proto_hi + sta proto_hi + bcc !+ + inc proto_hi+1 + !: + //SEG174 [84] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 + inc c + //SEG175 [85] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$10 + cmp c + bne b1_from_b5 + jmp breturn + //SEG176 init_font_hex::@return + breturn: + //SEG177 [86] return + rts +} +//SEG178 File Data + // Bit patterns for symbols 0-f (3x5 pixels) used in font hex + FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 +.pc = CORDIC_ATAN2_ANGLES_16 "CORDIC_ATAN2_ANGLES_16" + .for (var i=0; i(word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f +(byte*) main::toD0181_screen +(signed byte) main::x +(signed byte) main::x#1 reg byte x 151.5 +(signed byte) main::x#2 reg byte x 14.428571428571429 +(signed word) main::xw +(word) main::xw#0 xw zp ZP_WORD:23 50.5 +(signed byte) main::y +(signed byte) main::y#1 y zp ZP_BYTE:2 16.5 +(signed byte) main::y#4 y zp ZP_BYTE:2 1.2941176470588236 +(signed word) main::yw +(word) main::yw#0 yw zp ZP_WORD:25 50.5 + +zp ZP_BYTE:2 [ main::y#4 main::y#1 ] +reg byte x [ main::x#2 main::x#1 ] +zp ZP_WORD:3 [ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] +zp ZP_WORD:5 [ main::screen#2 main::screen#4 main::screen#1 ] +zp ZP_WORD:7 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +zp ZP_WORD:9 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +zp ZP_BYTE:11 [ atan2_16::i#2 atan2_16::i#1 ] +zp ZP_WORD:12 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 main::angle_w#0 main::$11 ] +zp ZP_WORD:14 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] +zp ZP_BYTE:16 [ init_font_hex::c#6 init_font_hex::c#1 ] +zp ZP_WORD:17 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] +zp ZP_WORD:19 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +zp ZP_BYTE:21 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] +zp ZP_BYTE:22 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +zp ZP_WORD:23 [ main::xw#0 atan2_16::x#0 ] +zp ZP_WORD:25 [ main::yw#0 atan2_16::y#0 ] +reg byte a [ main::$12 ] +reg byte a [ main::$13 ] +zp ZP_WORD:27 [ atan2_16::xd#0 ] +zp ZP_WORD:29 [ atan2_16::yd#0 ] +reg byte a [ atan2_16::$23 ] +reg byte a [ atan2_16::$22 ] +zp ZP_BYTE:31 [ init_font_hex::$0 ] +reg byte a [ init_font_hex::$1 ] +reg byte a [ init_font_hex::$2 ] +reg byte y [ init_font_hex::idx#3 ] + + +FINAL ASSEMBLER +Score: 367037 + +//SEG0 File Comments +// Find atan2(x, y) using the CORDIC method +// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG2 Global Constants & labels + // The number of iterations performed during 16-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_16 = $f + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_16 = $1000 + // The number of iterations performed during 8-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_8 = 8 + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_8 = $1100 + .label D018 = $d018 + // Color Ram + .label COLS = $d800 + .label CHARSET = $2000 + .label SCREEN = $2800 + .label SCREEN_REF = $2c00 +//SEG3 @begin +//SEG4 @1 +//SEG5 kickasm(location (const word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; i@4] +//SEG11 @4 +//SEG12 [5] call main +//SEG13 [7] phi from @4 to main [phi:@4->main] +//SEG14 [6] phi from @4 to @end [phi:@4->@end] +//SEG15 @end +//SEG16 main +main: { + .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f + .label _11 = $c + .label xw = $17 + .label yw = $19 + .label angle_w = $c + .label screen = 5 + .label screen_ref = 3 + .label y = 2 + //SEG17 [8] call init_font_hex + //SEG18 [64] phi from main to init_font_hex [phi:main->init_font_hex] + jsr init_font_hex + //SEG19 [9] phi from main to main::toD0181 [phi:main->main::toD0181] + //SEG20 main::toD0181 + //SEG21 main::@5 + //SEG22 [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 + lda #toD0181_return + sta D018 + //SEG23 [11] phi from main::@5 to main::@1 [phi:main::@5->main::@1] + //SEG24 [11] phi (byte*) main::screen#4 = (const byte*) SCREEN#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 + lda #SCREEN + sta screen+1 + //SEG25 [11] phi (byte*) main::screen_ref#4 = (const byte*) SCREEN_REF#0 [phi:main::@5->main::@1#1] -- pbuz1=pbuc1 + lda #SCREEN_REF + sta screen_ref+1 + //SEG26 [11] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@5->main::@1#2] -- vbsz1=vbsc1 + lda #-$c + sta y + //SEG27 [11] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + //SEG28 [11] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy + //SEG29 [11] phi (byte*) main::screen_ref#4 = (byte*) main::screen_ref#1 [phi:main::@3->main::@1#1] -- register_copy + //SEG30 [11] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#2] -- register_copy + //SEG31 main::@1 + b1: + //SEG32 [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + //SEG33 [12] phi (byte*) main::screen#2 = (byte*) main::screen#4 [phi:main::@1->main::@2#0] -- register_copy + //SEG34 [12] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#4 [phi:main::@1->main::@2#1] -- register_copy + //SEG35 [12] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#2] -- vbsxx=vbsc1 + ldx #-$13 + //SEG36 [12] phi from main::@6 to main::@2 [phi:main::@6->main::@2] + //SEG37 [12] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@6->main::@2#0] -- register_copy + //SEG38 [12] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#1 [phi:main::@6->main::@2#1] -- register_copy + //SEG39 [12] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@2#2] -- register_copy + //SEG40 main::@2 + b2: + //SEG41 [13] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 -- vwuz1=vbuxx_word_vbuc1 + ldy #0 + txa + sta xw+1 + sty xw + //SEG42 [14] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + lda y + sta yw+1 + sty yw + //SEG43 [15] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 + //SEG44 [16] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 + //SEG45 [17] call atan2_16 + jsr atan2_16 + //SEG46 [18] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + //SEG47 main::@6 + //SEG48 [19] (word) main::angle_w#0 ← (word) atan2_16::return#2 + //SEG49 [20] (word~) main::$11 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + lda #$80 + clc + adc _11 + sta _11 + bcc !+ + inc _11+1 + !: + //SEG50 [21] (byte~) main::$12 ← > (word~) main::$11 -- vbuaa=_hi_vwuz1 + lda _11+1 + //SEG51 [22] (byte~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) -- vbuaa=vbuaa_minus__deref_pbuz1 + sec + ldy #0 + sbc (screen_ref),y + //SEG52 [23] *((byte*) main::screen#2) ← (byte~) main::$13 -- _deref_pbuz1=vbuaa + //*screen++ = (>angle_w)-angle_b; + //*screen++ = >angle_w; + sta (screen),y + //SEG53 [24] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 + inc screen + bne !+ + inc screen+1 + !: + //SEG54 [25] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 -- pbuz1=_inc_pbuz1 + inc screen_ref + bne !+ + inc screen_ref+1 + !: + //SEG55 [26] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsxx=_inc_vbsxx + inx + //SEG56 [27] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsxx_neq_vbsc1_then_la1 + cpx #$15 + bne b2 + //SEG57 main::@3 + //SEG58 [28] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 + inc y + //SEG59 [29] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 + lda #$d + cmp y + bne b1 + //SEG60 main::@4 + b4: + //SEG61 [30] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) -- _deref_pbuc1=_inc__deref_pbuc2 + lda COLS+$c*$28+$13 + clc + adc #1 + sta COLS+$c*$28+$13 + jmp b4 +} +//SEG62 atan2_16 +// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) +// Finding the angle requires a binary search using CORDIC_ITERATIONS_16 +// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) +// atan2_16(signed word zeropage($17) x, signed word zeropage($19) y) +atan2_16: { + .label _2 = 7 + .label _7 = 9 + .label yi = 7 + .label xi = 9 + .label xd = $1b + .label yd = $1d + .label angle = $c + .label i = $b + .label return = $c + .label x = $17 + .label y = $19 + //SEG63 [31] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 -- vwsz1_gt_0_then_la1 + lda y+1 + bne !+ + lda y + beq !e+ + lsr + !: + bmi !b1+ + jmp b1 + !b1: + !e: + //SEG64 atan2_16::@2 + //SEG65 [32] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + sec + lda #0 + sbc y + sta _2 + lda #0 + sbc y+1 + sta _2+1 + //SEG66 [33] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + //SEG67 [33] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#11 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + //SEG68 atan2_16::@3 + b3: + //SEG69 [34] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 -- vwsz1_gt_0_then_la1 + lda x+1 + bne !+ + lda x + beq !e+ + lsr + !: + bmi !b4+ + jmp b4 + !b4: + !e: + //SEG70 atan2_16::@5 + //SEG71 [35] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + sec + lda #0 + sbc x + sta _7 + lda #0 + sbc x+1 + sta _7+1 + //SEG72 [36] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + //SEG73 [36] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#8 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + //SEG74 atan2_16::@6 + b6: + //SEG75 [37] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + //SEG76 [37] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + lda #0 + sta angle + sta angle+1 + //SEG77 [37] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 + sta i + //SEG78 [37] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + //SEG79 [37] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + //SEG80 atan2_16::@10 + b10: + //SEG81 [38] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + lda yi+1 + bne b11 + lda yi + bne b11 + //SEG82 [39] phi from atan2_16::@10 atan2_16::@14 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@14->atan2_16::@12] + //SEG83 [39] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@14->atan2_16::@12#0] -- register_copy + //SEG84 atan2_16::@12 + b12: + //SEG85 [40] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + lsr angle+1 + ror angle + //SEG86 [41] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + lda x+1 + bpl b7 + //SEG87 atan2_16::@16 + //SEG88 [42] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + sec + lda #<$8000 + sbc angle + sta angle + lda #>$8000 + sbc angle+1 + sta angle+1 + //SEG89 [43] phi from atan2_16::@12 atan2_16::@16 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@16->atan2_16::@7] + //SEG90 [43] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@16->atan2_16::@7#0] -- register_copy + //SEG91 atan2_16::@7 + b7: + //SEG92 [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + lda y+1 + bpl b8 + //SEG93 atan2_16::@9 + //SEG94 [45] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + sec + lda #0 + sbc angle + sta angle + lda #0 + sbc angle+1 + sta angle+1 + //SEG95 [46] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + //SEG96 [46] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + //SEG97 atan2_16::@8 + b8: + //SEG98 atan2_16::@return + //SEG99 [47] return + rts + //SEG100 atan2_16::@11 + b11: + //SEG101 [48] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 -- vwsz1=vwsz2_ror_vbuz3 + ldy i + lda xi + sta xd + lda xi+1 + sta xd+1 + cpy #0 + beq !e+ + !: + lda xd+1 + cmp #$80 + ror xd+1 + ror xd + dey + bne !- + !e: + //SEG102 [49] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 -- vwsz1=vwsz2_ror_vbuz3 + ldy i + lda yi + sta yd + lda yi+1 + sta yd+1 + cpy #0 + beq !e+ + !: + lda yd+1 + cmp #$80 + ror yd+1 + ror yd + dey + bne !- + !e: + //SEG103 [50] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 -- vwsz1_gt_0_then_la1 + lda yi+1 + bne !+ + lda yi + beq !e+ + lsr + !: + bpl b13 + !e: + //SEG104 atan2_16::@15 + //SEG105 [51] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 -- vwsz1=vwsz1_minus_vwsz2 + lda xi + sec + sbc yd + sta xi + lda xi+1 + sbc yd+1 + sta xi+1 + //SEG106 [52] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 -- vwsz1=vwsz1_plus_vwsz2 + lda yi + clc + adc xd + sta yi + lda yi+1 + adc xd+1 + sta yi+1 + //SEG107 [53] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda i + asl + //SEG108 [54] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa + tay + sec + lda angle + sbc CORDIC_ATAN2_ANGLES_16,y + sta angle + lda angle+1 + sbc CORDIC_ATAN2_ANGLES_16+1,y + sta angle+1 + //SEG109 [55] phi from atan2_16::@13 atan2_16::@15 to atan2_16::@14 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14] + //SEG110 [55] phi (signed word) atan2_16::xi#7 = (signed word) atan2_16::xi#1 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#0] -- register_copy + //SEG111 [55] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#1] -- register_copy + //SEG112 [55] phi (signed word) atan2_16::yi#7 = (signed word) atan2_16::yi#1 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#2] -- register_copy + //SEG113 atan2_16::@14 + b14: + //SEG114 [56] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 + inc i + //SEG115 [57] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 + lda #CORDIC_ITERATIONS_16+1 + cmp i + bne !b12+ + jmp b12 + !b12: + //SEG116 [37] phi from atan2_16::@14 to atan2_16::@10 [phi:atan2_16::@14->atan2_16::@10] + //SEG117 [37] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@14->atan2_16::@10#0] -- register_copy + //SEG118 [37] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@14->atan2_16::@10#1] -- register_copy + //SEG119 [37] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#7 [phi:atan2_16::@14->atan2_16::@10#2] -- register_copy + //SEG120 [37] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#7 [phi:atan2_16::@14->atan2_16::@10#3] -- register_copy + jmp b10 + //SEG121 atan2_16::@13 + b13: + //SEG122 [58] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 -- vwsz1=vwsz1_plus_vwsz2 + lda xi + clc + adc yd + sta xi + lda xi+1 + adc yd+1 + sta xi+1 + //SEG123 [59] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 -- vwsz1=vwsz1_minus_vwsz2 + lda yi + sec + sbc xd + sta yi + lda yi+1 + sbc xd+1 + sta yi+1 + //SEG124 [60] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda i + asl + //SEG125 [61] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa + tay + clc + lda angle + adc CORDIC_ATAN2_ANGLES_16,y + sta angle + lda angle+1 + adc CORDIC_ATAN2_ANGLES_16+1,y + sta angle+1 + jmp b14 + //SEG126 atan2_16::@4 + b4: + //SEG127 [62] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + lda x + sta xi + lda x+1 + sta xi+1 + jmp b6 + //SEG128 atan2_16::@1 + b1: + //SEG129 [63] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + lda y + sta yi + lda y+1 + sta yi+1 + jmp b3 +} +//SEG130 init_font_hex +// Make charset from proto chars +// init_font_hex(byte* zeropage($11) charset) +init_font_hex: { + .label _0 = $1f + .label idx = $16 + .label proto_lo = $13 + .label charset = $11 + .label c1 = $15 + .label proto_hi = $e + .label c = $10 + //SEG131 [65] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] + //SEG132 [65] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 + lda #0 + sta c + //SEG133 [65] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 + lda #FONT_HEX_PROTO + sta proto_hi+1 + //SEG134 [65] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 + lda #CHARSET + sta charset+1 + //SEG135 [65] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] + //SEG136 [65] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy + //SEG137 [65] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy + //SEG138 [65] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy + //SEG139 init_font_hex::@1 + b1: + //SEG140 [66] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] + //SEG141 [66] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 + lda #0 + sta c1 + //SEG142 [66] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 + lda #FONT_HEX_PROTO + sta proto_lo+1 + //SEG143 [66] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy + //SEG144 [66] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] + //SEG145 [66] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy + //SEG146 [66] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy + //SEG147 [66] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy + //SEG148 init_font_hex::@2 + b2: + //SEG149 [67] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + tay + sta (charset),y + //SEG150 [68] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] + //SEG151 [68] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 + lda #1 + sta idx + //SEG152 [68] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 + ldx #0 + //SEG153 [68] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] + //SEG154 [68] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy + //SEG155 [68] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy + //SEG156 init_font_hex::@3 + b3: + //SEG157 [69] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4 + txa + tay + lda (proto_hi),y + asl + asl + asl + asl + sta _0 + //SEG158 [70] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1 + txa + tay + lda (proto_lo),y + asl + //SEG159 [71] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa + ora _0 + //SEG160 [72] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa + ldy idx + sta (charset),y + //SEG161 [73] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 + inc idx + //SEG162 [74] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx + inx + //SEG163 [75] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 + cpx #5 + bne b3 + //SEG164 init_font_hex::@4 + //SEG165 [76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + lda #0 + ldy idx + sta (charset),y + //SEG166 [77] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 + iny + //SEG167 [78] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + sta (charset),y + //SEG168 [79] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + lda #5 + clc + adc proto_lo + sta proto_lo + bcc !+ + inc proto_lo+1 + !: + //SEG169 [80] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + lda #8 + clc + adc charset + sta charset + bcc !+ + inc charset+1 + !: + //SEG170 [81] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 + inc c1 + //SEG171 [82] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #$10 + cmp c1 + bne b2 + //SEG172 init_font_hex::@5 + //SEG173 [83] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + lda #5 + clc + adc proto_hi + sta proto_hi + bcc !+ + inc proto_hi+1 + !: + //SEG174 [84] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 + inc c + //SEG175 [85] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$10 + cmp c + bne b1 + //SEG176 init_font_hex::@return + //SEG177 [86] return + rts +} +//SEG178 File Data + // Bit patterns for symbols 0-f (3x5 pixels) used in font hex + FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 +.pc = CORDIC_ATAN2_ANGLES_16 "CORDIC_ATAN2_ANGLES_16" + .for (var i=0; i(word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f +(byte*) main::toD0181_screen +(signed byte) main::x +(signed byte) main::x#1 reg byte x 151.5 +(signed byte) main::x#2 reg byte x 14.428571428571429 +(signed word) main::xw +(word) main::xw#0 xw zp ZP_WORD:23 50.5 +(signed byte) main::y +(signed byte) main::y#1 y zp ZP_BYTE:2 16.5 +(signed byte) main::y#4 y zp ZP_BYTE:2 1.2941176470588236 +(signed word) main::yw +(word) main::yw#0 yw zp ZP_WORD:25 50.5 + +zp ZP_BYTE:2 [ main::y#4 main::y#1 ] +reg byte x [ main::x#2 main::x#1 ] +zp ZP_WORD:3 [ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] +zp ZP_WORD:5 [ main::screen#2 main::screen#4 main::screen#1 ] +zp ZP_WORD:7 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +zp ZP_WORD:9 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +zp ZP_BYTE:11 [ atan2_16::i#2 atan2_16::i#1 ] +zp ZP_WORD:12 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 main::angle_w#0 main::$11 ] +zp ZP_WORD:14 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] +zp ZP_BYTE:16 [ init_font_hex::c#6 init_font_hex::c#1 ] +zp ZP_WORD:17 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] +zp ZP_WORD:19 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +zp ZP_BYTE:21 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] +zp ZP_BYTE:22 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +zp ZP_WORD:23 [ main::xw#0 atan2_16::x#0 ] +zp ZP_WORD:25 [ main::yw#0 atan2_16::y#0 ] +reg byte a [ main::$12 ] +reg byte a [ main::$13 ] +zp ZP_WORD:27 [ atan2_16::xd#0 ] +zp ZP_WORD:29 [ atan2_16::yd#0 ] +reg byte a [ atan2_16::$23 ] +reg byte a [ atan2_16::$22 ] +zp ZP_BYTE:31 [ init_font_hex::$0 ] +reg byte a [ init_font_hex::$1 ] +reg byte a [ init_font_hex::$2 ] +reg byte y [ init_font_hex::idx#3 ] diff --git a/src/test/ref/cordic-atan2-16.asm b/src/test/ref/cordic-atan2-16.asm new file mode 100644 index 000000000..63ac48c28 --- /dev/null +++ b/src/test/ref/cordic-atan2-16.asm @@ -0,0 +1,389 @@ +// Find atan2(x, y) using the CORDIC method +// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // The number of iterations performed during 16-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_16 = $f + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_16 = $1000 + // The number of iterations performed during 8-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_8 = 8 + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_8 = $1100 + .label D018 = $d018 + // Color Ram + .label COLS = $d800 + .label CHARSET = $2000 + .label SCREEN = $2800 + .label SCREEN_REF = $2c00 +// Populate cordic angles table +// Populate cordic angles table +main: { + .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f + .label _11 = $c + .label xw = $17 + .label yw = $19 + .label angle_w = $c + .label screen = 5 + .label screen_ref = 3 + .label y = 2 + jsr init_font_hex + lda #toD0181_return + sta D018 + lda #SCREEN + sta screen+1 + lda #SCREEN_REF + sta screen_ref+1 + lda #-$c + sta y + b1: + ldx #-$13 + b2: + ldy #0 + txa + sta xw+1 + sty xw + lda y + sta yw+1 + sty yw + jsr atan2_16 + lda #$80 + clc + adc _11 + sta _11 + bcc !+ + inc _11+1 + !: + lda _11+1 + sec + ldy #0 + sbc (screen_ref),y + //*screen++ = (>angle_w)-angle_b; + //*screen++ = >angle_w; + sta (screen),y + inc screen + bne !+ + inc screen+1 + !: + inc screen_ref + bne !+ + inc screen_ref+1 + !: + inx + cpx #$15 + bne b2 + inc y + lda #$d + cmp y + bne b1 + b4: + lda COLS+$c*$28+$13 + clc + adc #1 + sta COLS+$c*$28+$13 + jmp b4 +} +// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) +// Finding the angle requires a binary search using CORDIC_ITERATIONS_16 +// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) +// atan2_16(signed word zeropage($17) x, signed word zeropage($19) y) +atan2_16: { + .label _2 = 7 + .label _7 = 9 + .label yi = 7 + .label xi = 9 + .label xd = $1b + .label yd = $1d + .label angle = $c + .label i = $b + .label return = $c + .label x = $17 + .label y = $19 + lda y+1 + bne !+ + lda y + beq !e+ + lsr + !: + bmi !b1+ + jmp b1 + !b1: + !e: + sec + lda #0 + sbc y + sta _2 + lda #0 + sbc y+1 + sta _2+1 + b3: + lda x+1 + bne !+ + lda x + beq !e+ + lsr + !: + bmi !b4+ + jmp b4 + !b4: + !e: + sec + lda #0 + sbc x + sta _7 + lda #0 + sbc x+1 + sta _7+1 + b6: + lda #0 + sta angle + sta angle+1 + sta i + b10: + lda yi+1 + bne b11 + lda yi + bne b11 + b12: + lsr angle+1 + ror angle + lda x+1 + bpl b7 + sec + lda #<$8000 + sbc angle + sta angle + lda #>$8000 + sbc angle+1 + sta angle+1 + b7: + lda y+1 + bpl b8 + sec + lda #0 + sbc angle + sta angle + lda #0 + sbc angle+1 + sta angle+1 + b8: + rts + b11: + ldy i + lda xi + sta xd + lda xi+1 + sta xd+1 + cpy #0 + beq !e+ + !: + lda xd+1 + cmp #$80 + ror xd+1 + ror xd + dey + bne !- + !e: + ldy i + lda yi + sta yd + lda yi+1 + sta yd+1 + cpy #0 + beq !e+ + !: + lda yd+1 + cmp #$80 + ror yd+1 + ror yd + dey + bne !- + !e: + lda yi+1 + bne !+ + lda yi + beq !e+ + lsr + !: + bpl b13 + !e: + lda xi + sec + sbc yd + sta xi + lda xi+1 + sbc yd+1 + sta xi+1 + lda yi + clc + adc xd + sta yi + lda yi+1 + adc xd+1 + sta yi+1 + lda i + asl + tay + sec + lda angle + sbc CORDIC_ATAN2_ANGLES_16,y + sta angle + lda angle+1 + sbc CORDIC_ATAN2_ANGLES_16+1,y + sta angle+1 + b14: + inc i + lda #CORDIC_ITERATIONS_16+1 + cmp i + bne !b12+ + jmp b12 + !b12: + jmp b10 + b13: + lda xi + clc + adc yd + sta xi + lda xi+1 + adc yd+1 + sta xi+1 + lda yi + sec + sbc xd + sta yi + lda yi+1 + sbc xd+1 + sta yi+1 + lda i + asl + tay + clc + lda angle + adc CORDIC_ATAN2_ANGLES_16,y + sta angle + lda angle+1 + adc CORDIC_ATAN2_ANGLES_16+1,y + sta angle+1 + jmp b14 + b4: + lda x + sta xi + lda x+1 + sta xi+1 + jmp b6 + b1: + lda y + sta yi + lda y+1 + sta yi+1 + jmp b3 +} +// Make charset from proto chars +// init_font_hex(byte* zeropage($11) charset) +init_font_hex: { + .label _0 = $1f + .label idx = $16 + .label proto_lo = $13 + .label charset = $11 + .label c1 = $15 + .label proto_hi = $e + .label c = $10 + lda #0 + sta c + lda #FONT_HEX_PROTO + sta proto_hi+1 + lda #CHARSET + sta charset+1 + b1: + lda #0 + sta c1 + lda #FONT_HEX_PROTO + sta proto_lo+1 + b2: + lda #0 + tay + sta (charset),y + lda #1 + sta idx + ldx #0 + b3: + txa + tay + lda (proto_hi),y + asl + asl + asl + asl + sta _0 + txa + tay + lda (proto_lo),y + asl + ora _0 + ldy idx + sta (charset),y + inc idx + inx + cpx #5 + bne b3 + lda #0 + ldy idx + sta (charset),y + iny + sta (charset),y + lda #5 + clc + adc proto_lo + sta proto_lo + bcc !+ + inc proto_lo+1 + !: + lda #8 + clc + adc charset + sta charset + bcc !+ + inc charset+1 + !: + inc c1 + lda #$10 + cmp c1 + bne b2 + lda #5 + clc + adc proto_hi + sta proto_hi + bcc !+ + inc proto_hi+1 + !: + inc c + lda #$10 + cmp c + bne b1 + rts +} + // Bit patterns for symbols 0-f (3x5 pixels) used in font hex + FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 +.pc = CORDIC_ATAN2_ANGLES_16 "CORDIC_ATAN2_ANGLES_16" + .for (var i=0; i (word~) main::$11 + [22] (byte~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) + [23] *((byte*) main::screen#2) ← (byte~) main::$13 + [24] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 + [25] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 + [26] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 + [27] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@6 + [28] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 + [29] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 + to:main::@4 +main::@4: scope:[main] from main::@3 main::@4 + [30] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) + to:main::@4 +atan2_16: scope:[atan2_16] from main::@2 + [31] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 + to:atan2_16::@2 +atan2_16::@2: scope:[atan2_16] from atan2_16 + [32] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 + to:atan2_16::@3 +atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 + [33] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#11 atan2_16::@2/(signed word~) atan2_16::$2 ) + [34] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 + to:atan2_16::@5 +atan2_16::@5: scope:[atan2_16] from atan2_16::@3 + [35] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 + to:atan2_16::@6 +atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 + [36] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#8 atan2_16::@5/(signed word~) atan2_16::$7 ) + to:atan2_16::@10 +atan2_16::@10: scope:[atan2_16] from atan2_16::@14 atan2_16::@6 + [37] (word) atan2_16::angle#12 ← phi( atan2_16::@14/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [37] (byte) atan2_16::i#2 ← phi( atan2_16::@14/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) + [37] (signed word) atan2_16::xi#3 ← phi( atan2_16::@14/(signed word) atan2_16::xi#7 atan2_16::@6/(signed word) atan2_16::xi#0 ) + [37] (signed word) atan2_16::yi#3 ← phi( atan2_16::@14/(signed word) atan2_16::yi#7 atan2_16::@6/(signed word) atan2_16::yi#0 ) + [38] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 + to:atan2_16::@12 +atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@14 + [39] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@14/(word) atan2_16::angle#13 ) + [40] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 + [41] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 + to:atan2_16::@16 +atan2_16::@16: scope:[atan2_16] from atan2_16::@12 + [42] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 + to:atan2_16::@7 +atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@16 + [43] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@16/(word) atan2_16::angle#4 ) + [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 + to:atan2_16::@9 +atan2_16::@9: scope:[atan2_16] from atan2_16::@7 + [45] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 + to:atan2_16::@8 +atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9 + [46] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) + to:atan2_16::@return +atan2_16::@return: scope:[atan2_16] from atan2_16::@8 + [47] return + to:@return +atan2_16::@11: scope:[atan2_16] from atan2_16::@10 + [48] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 + [49] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 + [50] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 + to:atan2_16::@15 +atan2_16::@15: scope:[atan2_16] from atan2_16::@11 + [51] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 + [52] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 + [53] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 + [54] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) + to:atan2_16::@14 +atan2_16::@14: scope:[atan2_16] from atan2_16::@13 atan2_16::@15 + [55] (signed word) atan2_16::xi#7 ← phi( atan2_16::@13/(signed word) atan2_16::xi#1 atan2_16::@15/(signed word) atan2_16::xi#2 ) + [55] (word) atan2_16::angle#13 ← phi( atan2_16::@13/(word) atan2_16::angle#2 atan2_16::@15/(word) atan2_16::angle#3 ) + [55] (signed word) atan2_16::yi#7 ← phi( atan2_16::@13/(signed word) atan2_16::yi#1 atan2_16::@15/(signed word) atan2_16::yi#2 ) + [56] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 + [57] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0+(byte) 1) goto atan2_16::@12 + to:atan2_16::@10 +atan2_16::@13: scope:[atan2_16] from atan2_16::@11 + [58] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 + [59] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 + [60] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 + [61] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) + to:atan2_16::@14 +atan2_16::@4: scope:[atan2_16] from atan2_16::@3 + [62] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 + to:atan2_16::@6 +atan2_16::@1: scope:[atan2_16] from atan2_16 + [63] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 + to:atan2_16::@3 +init_font_hex: scope:[init_font_hex] from main + [64] phi() + to:init_font_hex::@1 +init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5 + [65] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 ) + [65] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) + [65] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 ) + to:init_font_hex::@2 +init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4 + [66] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) + [66] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) + [66] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) + [67] *((byte*) init_font_hex::charset#2) ← (byte) 0 + to:init_font_hex::@3 +init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3 + [68] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) + [68] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 ) + [69] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 + [70] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 + [71] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 + [72] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 + [73] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 + [74] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 + [75] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 + to:init_font_hex::@4 +init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3 + [76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 + [77] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 + [78] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 + [79] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 + [80] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 + [81] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 + [82] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 + to:init_font_hex::@5 +init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4 + [83] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 + [84] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 + [85] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 + to:init_font_hex::@return +init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 + [86] return + to:@return diff --git a/src/test/ref/cordic-atan2-16.log b/src/test/ref/cordic-atan2-16.log new file mode 100644 index 000000000..2e61cbd50 --- /dev/null +++ b/src/test/ref/cordic-atan2-16.log @@ -0,0 +1,4175 @@ +Resolved forward reference FONT_HEX_PROTO to (byte[]) FONT_HEX_PROTO +Resolved forward reference FONT_HEX_PROTO to (byte[]) FONT_HEX_PROTO +Adding pointer type conversion cast (word*) CORDIC_ATAN2_ANGLES_16 in (word*) CORDIC_ATAN2_ANGLES_16 ← (number) $1000 +Adding pointer type conversion cast (byte*) CORDIC_ATAN2_ANGLES_8 in (byte*) CORDIC_ATAN2_ANGLES_8 ← (number) $1100 +Adding pointer type conversion cast (byte*) PROCPORT_DDR in (byte*) PROCPORT_DDR ← (number) 0 +Adding pointer type conversion cast (byte*) PROCPORT in (byte*) PROCPORT ← (number) 1 +Adding pointer type conversion cast (byte*) CHARGEN in (byte*) CHARGEN ← (number) $d000 +Adding pointer type conversion cast (byte*) SPRITES_XPOS in (byte*) SPRITES_XPOS ← (number) $d000 +Adding pointer type conversion cast (byte*) SPRITES_YPOS in (byte*) SPRITES_YPOS ← (number) $d001 +Adding pointer type conversion cast (byte*) SPRITES_XMSB in (byte*) SPRITES_XMSB ← (number) $d010 +Adding pointer type conversion cast (byte*) RASTER in (byte*) RASTER ← (number) $d012 +Adding pointer type conversion cast (byte*) SPRITES_ENABLE in (byte*) SPRITES_ENABLE ← (number) $d015 +Adding pointer type conversion cast (byte*) SPRITES_EXPAND_Y in (byte*) SPRITES_EXPAND_Y ← (number) $d017 +Adding pointer type conversion cast (byte*) SPRITES_PRIORITY in (byte*) SPRITES_PRIORITY ← (number) $d01b +Adding pointer type conversion cast (byte*) SPRITES_MC in (byte*) SPRITES_MC ← (number) $d01c +Adding pointer type conversion cast (byte*) SPRITES_EXPAND_X in (byte*) SPRITES_EXPAND_X ← (number) $d01d +Adding pointer type conversion cast (byte*) BORDERCOL in (byte*) BORDERCOL ← (number) $d020 +Adding pointer type conversion cast (byte*) BGCOL in (byte*) BGCOL ← (number) $d021 +Adding pointer type conversion cast (byte*) BGCOL1 in (byte*) BGCOL1 ← (number) $d021 +Adding pointer type conversion cast (byte*) BGCOL2 in (byte*) BGCOL2 ← (number) $d022 +Adding pointer type conversion cast (byte*) BGCOL3 in (byte*) BGCOL3 ← (number) $d023 +Adding pointer type conversion cast (byte*) BGCOL4 in (byte*) BGCOL4 ← (number) $d024 +Adding pointer type conversion cast (byte*) SPRITES_MC1 in (byte*) SPRITES_MC1 ← (number) $d025 +Adding pointer type conversion cast (byte*) SPRITES_MC2 in (byte*) SPRITES_MC2 ← (number) $d026 +Adding pointer type conversion cast (byte*) SPRITES_COLS in (byte*) SPRITES_COLS ← (number) $d027 +Adding pointer type conversion cast (byte*) VIC_CONTROL in (byte*) VIC_CONTROL ← (number) $d011 +Adding pointer type conversion cast (byte*) D011 in (byte*) D011 ← (number) $d011 +Adding pointer type conversion cast (byte*) VIC_CONTROL2 in (byte*) VIC_CONTROL2 ← (number) $d016 +Adding pointer type conversion cast (byte*) D016 in (byte*) D016 ← (number) $d016 +Adding pointer type conversion cast (byte*) D018 in (byte*) D018 ← (number) $d018 +Adding pointer type conversion cast (byte*) VIC_MEMORY in (byte*) VIC_MEMORY ← (number) $d018 +Adding pointer type conversion cast (byte*) LIGHTPEN_X in (byte*) LIGHTPEN_X ← (number) $d013 +Adding pointer type conversion cast (byte*) LIGHTPEN_Y in (byte*) LIGHTPEN_Y ← (number) $d014 +Adding pointer type conversion cast (byte*) IRQ_STATUS in (byte*) IRQ_STATUS ← (number) $d019 +Adding pointer type conversion cast (byte*) IRQ_ENABLE in (byte*) IRQ_ENABLE ← (number) $d01a +Adding pointer type conversion cast (byte*) COLS in (byte*) COLS ← (number) $d800 +Adding pointer type conversion cast (byte*) CIA1_PORT_A in (byte*) CIA1_PORT_A ← (number) $dc00 +Adding pointer type conversion cast (byte*) CIA1_PORT_B in (byte*) CIA1_PORT_B ← (number) $dc01 +Adding pointer type conversion cast (byte*) CIA1_PORT_A_DDR in (byte*) CIA1_PORT_A_DDR ← (number) $dc02 +Adding pointer type conversion cast (byte*) CIA1_PORT_B_DDR in (byte*) CIA1_PORT_B_DDR ← (number) $dc03 +Adding pointer type conversion cast (byte*) CIA1_INTERRUPT in (byte*) CIA1_INTERRUPT ← (number) $dc0d +Adding pointer type conversion cast (byte*) CIA2_PORT_A in (byte*) CIA2_PORT_A ← (number) $dd00 +Adding pointer type conversion cast (byte*) CIA2_PORT_B in (byte*) CIA2_PORT_B ← (number) $dd01 +Adding pointer type conversion cast (byte*) CIA2_PORT_A_DDR in (byte*) CIA2_PORT_A_DDR ← (number) $dd02 +Adding pointer type conversion cast (byte*) CIA2_PORT_B_DDR in (byte*) CIA2_PORT_B_DDR ← (number) $dd03 +Adding pointer type conversion cast (byte*) CIA2_INTERRUPT in (byte*) CIA2_INTERRUPT ← (number) $dd0d +Adding pointer type conversion cast (void()**) KERNEL_IRQ in (void()**) KERNEL_IRQ ← (number) $314 +Adding pointer type conversion cast (void()**) HARDWARE_IRQ in (void()**) HARDWARE_IRQ ← (number) $fffe +Adding pointer type conversion cast (byte*) CHARSET in (byte*) CHARSET ← (number) $2000 +Adding pointer type conversion cast (byte*) SCREEN in (byte*) SCREEN ← (number) $2800 +Adding pointer type conversion cast (byte*) SCREEN_REF in (byte*) SCREEN_REF ← (number) $2c00 +Fixing pointer array-indexing *((word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) +Fixing pointer array-indexing *((word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) +Identified constant variable (word*) CORDIC_ATAN2_ANGLES_16 +Identified constant variable (byte*) CORDIC_ATAN2_ANGLES_8 +Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx +Inlined call (byte~) main::$1 ← call toD018 (byte*) SCREEN (byte*) CHARSET +Culled Empty Block (label) init_font_hex::@6 +Culled Empty Block (label) atan2_16::@9 +Culled Empty Block (label) atan2_16::@10 +Culled Empty Block (label) atan2_16::@11 +Culled Empty Block (label) atan2_16::@12 +Culled Empty Block (label) atan2_16::@20 +Culled Empty Block (label) atan2_16::@21 +Culled Empty Block (label) atan2_16::@23 +Culled Empty Block (label) atan2_16::@24 +Culled Empty Block (label) atan2_16::@14 +Culled Empty Block (label) @4 +Culled Empty Block (label) @5 +Culled Empty Block (label) @6 +Culled Empty Block (label) main::toD0181_@1 +Culled Empty Block (label) main::@8 +Culled Empty Block (label) main::@7 +Culled Empty Block (label) main::@9 +Culled Empty Block (label) main::@10 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + to:@1 +init_font_hex: scope:[init_font_hex] from main + (byte*) init_font_hex::charset#6 ← phi( main/(byte*) init_font_hex::charset#1 ) + (byte*) init_font_hex::proto_hi#0 ← (byte[]) FONT_HEX_PROTO#0 + (byte) init_font_hex::c#0 ← (byte) 0 + to:init_font_hex::@1 +init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5 + (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) init_font_hex::c#0 init_font_hex::@5/(byte) init_font_hex::c#1 ) + (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(byte*) init_font_hex::proto_hi#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) + (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(byte*) init_font_hex::charset#6 init_font_hex::@5/(byte*) init_font_hex::charset#7 ) + (byte*) init_font_hex::proto_lo#0 ← (byte[]) FONT_HEX_PROTO#0 + (byte) init_font_hex::c1#0 ← (byte) 0 + to:init_font_hex::@2 +init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4 + (byte) init_font_hex::c#5 ← phi( init_font_hex::@1/(byte) init_font_hex::c#6 init_font_hex::@4/(byte) init_font_hex::c#3 ) + (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) init_font_hex::c1#0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) + (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(byte*) init_font_hex::proto_lo#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) + (byte*) init_font_hex::proto_hi#4 ← phi( init_font_hex::@1/(byte*) init_font_hex::proto_hi#6 init_font_hex::@4/(byte*) init_font_hex::proto_hi#5 ) + (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) + (byte) init_font_hex::idx#0 ← (number) 0 + *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0 + (byte) init_font_hex::idx#1 ← ++ (byte) init_font_hex::idx#0 + (byte) init_font_hex::i#0 ← (byte) 0 + to:init_font_hex::@3 +init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3 + (byte) init_font_hex::c#4 ← phi( init_font_hex::@2/(byte) init_font_hex::c#5 init_font_hex::@3/(byte) init_font_hex::c#4 ) + (byte) init_font_hex::c1#3 ← phi( init_font_hex::@2/(byte) init_font_hex::c1#4 init_font_hex::@3/(byte) init_font_hex::c1#3 ) + (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) init_font_hex::idx#1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) + (byte*) init_font_hex::charset#3 ← phi( init_font_hex::@2/(byte*) init_font_hex::charset#2 init_font_hex::@3/(byte*) init_font_hex::charset#3 ) + (byte*) init_font_hex::proto_lo#2 ← phi( init_font_hex::@2/(byte*) init_font_hex::proto_lo#4 init_font_hex::@3/(byte*) init_font_hex::proto_lo#2 ) + (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) init_font_hex::i#0 init_font_hex::@3/(byte) init_font_hex::i#1 ) + (byte*) init_font_hex::proto_hi#2 ← phi( init_font_hex::@2/(byte*) init_font_hex::proto_hi#4 init_font_hex::@3/(byte*) init_font_hex::proto_hi#2 ) + (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#2 + (byte) init_font_hex::i#2) << (number) 4 + (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#2 + (byte) init_font_hex::i#2) << (number) 1 + (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 + *((byte*) init_font_hex::charset#3 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 + (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 + (byte) init_font_hex::i#1 ← (byte) init_font_hex::i#2 + rangenext(0,4) + (bool~) init_font_hex::$3 ← (byte) init_font_hex::i#1 != rangelast(0,4) + if((bool~) init_font_hex::$3) goto init_font_hex::@3 + to:init_font_hex::@4 +init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3 + (byte) init_font_hex::c#3 ← phi( init_font_hex::@3/(byte) init_font_hex::c#4 ) + (byte*) init_font_hex::proto_hi#5 ← phi( init_font_hex::@3/(byte*) init_font_hex::proto_hi#2 ) + (byte) init_font_hex::c1#2 ← phi( init_font_hex::@3/(byte) init_font_hex::c1#3 ) + (byte*) init_font_hex::proto_lo#3 ← phi( init_font_hex::@3/(byte*) init_font_hex::proto_lo#2 ) + (byte) init_font_hex::idx#6 ← phi( init_font_hex::@3/(byte) init_font_hex::idx#2 ) + (byte*) init_font_hex::charset#4 ← phi( init_font_hex::@3/(byte*) init_font_hex::charset#3 ) + *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (number) 0 + (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#6 + *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (number) 0 + (byte) init_font_hex::idx#4 ← ++ (byte) init_font_hex::idx#3 + (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#3 + (number) 5 + (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#4 + (number) 8 + (byte) init_font_hex::c1#1 ← (byte) init_font_hex::c1#2 + rangenext(0,$f) + (bool~) init_font_hex::$4 ← (byte) init_font_hex::c1#1 != rangelast(0,$f) + if((bool~) init_font_hex::$4) goto init_font_hex::@2 + to:init_font_hex::@5 +init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4 + (byte*) init_font_hex::charset#7 ← phi( init_font_hex::@4/(byte*) init_font_hex::charset#0 ) + (byte) init_font_hex::c#2 ← phi( init_font_hex::@4/(byte) init_font_hex::c#3 ) + (byte*) init_font_hex::proto_hi#3 ← phi( init_font_hex::@4/(byte*) init_font_hex::proto_hi#5 ) + (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#3 + (number) 5 + (byte) init_font_hex::c#1 ← (byte) init_font_hex::c#2 + rangenext(0,$f) + (bool~) init_font_hex::$5 ← (byte) init_font_hex::c#1 != rangelast(0,$f) + if((bool~) init_font_hex::$5) goto init_font_hex::@1 + to:init_font_hex::@return +init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 + return + to:@return +@1: scope:[] from @begin + (byte[]) FONT_HEX_PROTO#0 ← { (number) 2, (number) 5, (number) 5, (number) 5, (number) 2, (number) 6, (number) 2, (number) 2, (number) 2, (number) 7, (number) 6, (number) 1, (number) 2, (number) 4, (number) 7, (number) 6, (number) 1, (number) 2, (number) 1, (number) 6, (number) 5, (number) 5, (number) 7, (number) 1, (number) 1, (number) 7, (number) 4, (number) 6, (number) 1, (number) 6, (number) 3, (number) 4, (number) 6, (number) 5, (number) 2, (number) 7, (number) 1, (number) 1, (number) 1, (number) 1, (number) 2, (number) 5, (number) 2, (number) 5, (number) 2, (number) 2, (number) 5, (number) 3, (number) 1, (number) 1, (number) 2, (number) 5, (number) 7, (number) 5, (number) 5, (number) 6, (number) 5, (number) 6, (number) 5, (number) 6, (number) 2, (number) 5, (number) 4, (number) 5, (number) 2, (number) 6, (number) 5, (number) 5, (number) 5, (number) 6, (number) 7, (number) 4, (number) 6, (number) 4, (number) 7, (number) 7, (number) 4, (number) 6, (number) 4, (number) 4 } + (byte) CORDIC_ITERATIONS_16#0 ← (number) $f + (word*) CORDIC_ATAN2_ANGLES_16#0 ← ((word*)) (number) $1000 + kickasm(location (word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; i (number) 0 + if((bool~) atan2_16::$0) goto atan2_16::@1 + to:atan2_16::@2 +atan2_16::@1: scope:[atan2_16] from atan2_16 + (signed word) atan2_16::x#5 ← phi( atan2_16/(signed word) atan2_16::x#9 ) + (signed word) atan2_16::y#2 ← phi( atan2_16/(signed word) atan2_16::y#1 ) + (signed word~) atan2_16::$3 ← (signed word) atan2_16::y#2 + to:atan2_16::@3 +atan2_16::@2: scope:[atan2_16] from atan2_16 + (signed word) atan2_16::x#6 ← phi( atan2_16/(signed word) atan2_16::x#9 ) + (signed word) atan2_16::y#3 ← phi( atan2_16/(signed word) atan2_16::y#1 ) + (signed word~) atan2_16::$1 ← - (signed word) atan2_16::y#3 + (signed word~) atan2_16::$2 ← (signed word~) atan2_16::$1 + to:atan2_16::@3 +atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 + (signed word) atan2_16::y#15 ← phi( atan2_16::@1/(signed word) atan2_16::y#2 atan2_16::@2/(signed word) atan2_16::y#3 ) + (signed word) atan2_16::x#1 ← phi( atan2_16::@1/(signed word) atan2_16::x#5 atan2_16::@2/(signed word) atan2_16::x#6 ) + (signed word~) atan2_16::$4 ← phi( atan2_16::@1/(signed word~) atan2_16::$3 atan2_16::@2/(signed word~) atan2_16::$2 ) + (signed word) atan2_16::yi#0 ← (signed word~) atan2_16::$4 + (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 > (number) 0 + if((bool~) atan2_16::$5) goto atan2_16::@4 + to:atan2_16::@5 +atan2_16::@4: scope:[atan2_16] from atan2_16::@3 + (signed word) atan2_16::y#12 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 ) + (signed word) atan2_16::yi#9 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 ) + (signed word) atan2_16::x#2 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 ) + (signed word~) atan2_16::$8 ← (signed word) atan2_16::x#2 + to:atan2_16::@6 +atan2_16::@5: scope:[atan2_16] from atan2_16::@3 + (signed word) atan2_16::y#13 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 ) + (signed word) atan2_16::yi#10 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 ) + (signed word) atan2_16::x#3 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 ) + (signed word~) atan2_16::$6 ← - (signed word) atan2_16::x#3 + (signed word~) atan2_16::$7 ← (signed word~) atan2_16::$6 + to:atan2_16::@6 +atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 + (signed word) atan2_16::y#9 ← phi( atan2_16::@4/(signed word) atan2_16::y#12 atan2_16::@5/(signed word) atan2_16::y#13 ) + (signed word) atan2_16::x#10 ← phi( atan2_16::@4/(signed word) atan2_16::x#2 atan2_16::@5/(signed word) atan2_16::x#3 ) + (signed word) atan2_16::yi#8 ← phi( atan2_16::@4/(signed word) atan2_16::yi#9 atan2_16::@5/(signed word) atan2_16::yi#10 ) + (signed word~) atan2_16::$9 ← phi( atan2_16::@4/(signed word~) atan2_16::$8 atan2_16::@5/(signed word~) atan2_16::$7 ) + (signed word) atan2_16::xi#0 ← (signed word~) atan2_16::$9 + (word) atan2_16::angle#0 ← (number) 0 + (byte) atan2_16::i#0 ← (byte) 0 + to:atan2_16::@15 +atan2_16::@15: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 + (signed word) atan2_16::y#7 ← phi( atan2_16::@19/(signed word) atan2_16::y#8 atan2_16::@6/(signed word) atan2_16::y#9 ) + (signed word) atan2_16::x#7 ← phi( atan2_16::@19/(signed word) atan2_16::x#8 atan2_16::@6/(signed word) atan2_16::x#10 ) + (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) atan2_16::angle#0 ) + (byte) atan2_16::i#6 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) atan2_16::i#0 ) + (signed word) atan2_16::xi#6 ← phi( atan2_16::@19/(signed word) atan2_16::xi#7 atan2_16::@6/(signed word) atan2_16::xi#0 ) + (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#7 atan2_16::@6/(signed word) atan2_16::yi#8 ) + (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0 + (bool~) atan2_16::$17 ← ! (bool~) atan2_16::$16 + if((bool~) atan2_16::$17) goto atan2_16::@16 + to:atan2_16::@17 +atan2_16::@16: scope:[atan2_16] from atan2_16::@15 + (signed word) atan2_16::y#14 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 ) + (signed word) atan2_16::x#13 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 ) + (word) atan2_16::angle#14 ← phi( atan2_16::@15/(word) atan2_16::angle#12 ) + (signed word) atan2_16::yi#4 ← phi( atan2_16::@15/(signed word) atan2_16::yi#3 ) + (byte) atan2_16::i#2 ← phi( atan2_16::@15/(byte) atan2_16::i#6 ) + (signed word) atan2_16::xi#3 ← phi( atan2_16::@15/(signed word) atan2_16::xi#6 ) + (signed word~) atan2_16::$18 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 + (signed word) atan2_16::xd#0 ← (signed word~) atan2_16::$18 + (signed word~) atan2_16::$19 ← (signed word) atan2_16::yi#4 >> (byte) atan2_16::i#2 + (signed word) atan2_16::yd#0 ← (signed word~) atan2_16::$19 + (bool~) atan2_16::$20 ← (signed word) atan2_16::yi#4 > (number) 0 + if((bool~) atan2_16::$20) goto atan2_16::@18 + to:atan2_16::@22 +atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@19 + (signed word) atan2_16::y#5 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 atan2_16::@19/(signed word) atan2_16::y#8 ) + (signed word) atan2_16::x#4 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 atan2_16::@19/(signed word) atan2_16::x#8 ) + (word) atan2_16::angle#6 ← phi( atan2_16::@15/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) + (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2 + (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0 + (bool~) atan2_16::$11 ← ! (bool~) atan2_16::$10 + if((bool~) atan2_16::$11) goto atan2_16::@7 + to:atan2_16::@25 +atan2_16::@18: scope:[atan2_16] from atan2_16::@16 + (signed word) atan2_16::y#10 ← phi( atan2_16::@16/(signed word) atan2_16::y#14 ) + (signed word) atan2_16::x#11 ← phi( atan2_16::@16/(signed word) atan2_16::x#13 ) + (word) atan2_16::angle#7 ← phi( atan2_16::@16/(word) atan2_16::angle#14 ) + (byte) atan2_16::i#3 ← phi( atan2_16::@16/(byte) atan2_16::i#2 ) + (signed word) atan2_16::xd#1 ← phi( atan2_16::@16/(signed word) atan2_16::xd#0 ) + (signed word) atan2_16::yi#5 ← phi( atan2_16::@16/(signed word) atan2_16::yi#4 ) + (signed word) atan2_16::yd#1 ← phi( atan2_16::@16/(signed word) atan2_16::yd#0 ) + (signed word) atan2_16::xi#4 ← phi( atan2_16::@16/(signed word) atan2_16::xi#3 ) + (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#4 + (signed word) atan2_16::yd#1 + (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#5 - (signed word) atan2_16::xd#1 + (byte~) atan2_16::$22 ← (byte) atan2_16::i#3 * (const byte) SIZEOF_WORD + (word) atan2_16::angle#2 ← (word) atan2_16::angle#7 + *((word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) + to:atan2_16::@19 +atan2_16::@22: scope:[atan2_16] from atan2_16::@16 + (signed word) atan2_16::y#11 ← phi( atan2_16::@16/(signed word) atan2_16::y#14 ) + (signed word) atan2_16::x#12 ← phi( atan2_16::@16/(signed word) atan2_16::x#13 ) + (word) atan2_16::angle#8 ← phi( atan2_16::@16/(word) atan2_16::angle#14 ) + (byte) atan2_16::i#4 ← phi( atan2_16::@16/(byte) atan2_16::i#2 ) + (signed word) atan2_16::xd#2 ← phi( atan2_16::@16/(signed word) atan2_16::xd#0 ) + (signed word) atan2_16::yi#6 ← phi( atan2_16::@16/(signed word) atan2_16::yi#4 ) + (signed word) atan2_16::yd#2 ← phi( atan2_16::@16/(signed word) atan2_16::yd#0 ) + (signed word) atan2_16::xi#5 ← phi( atan2_16::@16/(signed word) atan2_16::xi#3 ) + (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#5 - (signed word) atan2_16::yd#2 + (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#6 + (signed word) atan2_16::xd#2 + (byte~) atan2_16::$23 ← (byte) atan2_16::i#4 * (const byte) SIZEOF_WORD + (word) atan2_16::angle#3 ← (word) atan2_16::angle#8 - *((word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) + to:atan2_16::@19 +atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@22 + (signed word) atan2_16::y#8 ← phi( atan2_16::@18/(signed word) atan2_16::y#10 atan2_16::@22/(signed word) atan2_16::y#11 ) + (signed word) atan2_16::xi#7 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@22/(signed word) atan2_16::xi#2 ) + (signed word) atan2_16::x#8 ← phi( atan2_16::@18/(signed word) atan2_16::x#11 atan2_16::@22/(signed word) atan2_16::x#12 ) + (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@22/(word) atan2_16::angle#3 ) + (signed word) atan2_16::yi#7 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@22/(signed word) atan2_16::yi#2 ) + (byte) atan2_16::i#5 ← phi( atan2_16::@18/(byte) atan2_16::i#3 atan2_16::@22/(byte) atan2_16::i#4 ) + (byte) atan2_16::i#1 ← (byte) atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16#0) + (bool~) atan2_16::$21 ← (byte) atan2_16::i#1 != rangelast(0,CORDIC_ITERATIONS_16#0) + if((bool~) atan2_16::$21) goto atan2_16::@15 + to:atan2_16::@17 +atan2_16::@7: scope:[atan2_16] from atan2_16::@17 atan2_16::@25 + (word) atan2_16::angle#15 ← phi( atan2_16::@17/(word) atan2_16::angle#1 atan2_16::@25/(word) atan2_16::angle#4 ) + (signed word) atan2_16::y#4 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 atan2_16::@25/(signed word) atan2_16::y#6 ) + (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (number) 0 + (bool~) atan2_16::$14 ← ! (bool~) atan2_16::$13 + if((bool~) atan2_16::$14) goto atan2_16::@8 + to:atan2_16::@13 +atan2_16::@25: scope:[atan2_16] from atan2_16::@17 + (signed word) atan2_16::y#6 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 ) + (word) atan2_16::angle#9 ← phi( atan2_16::@17/(word) atan2_16::angle#1 ) + (number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9 + (word) atan2_16::angle#4 ← (number~) atan2_16::$12 + to:atan2_16::@7 +atan2_16::@8: scope:[atan2_16] from atan2_16::@13 atan2_16::@7 + (word) atan2_16::angle#10 ← phi( atan2_16::@13/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#15 ) + (word) atan2_16::return#0 ← (word) atan2_16::angle#10 + to:atan2_16::@return +atan2_16::@13: scope:[atan2_16] from atan2_16::@7 + (word) atan2_16::angle#11 ← phi( atan2_16::@7/(word) atan2_16::angle#15 ) + (word~) atan2_16::$15 ← - (word) atan2_16::angle#11 + (word) atan2_16::angle#5 ← (word~) atan2_16::$15 + to:atan2_16::@8 +atan2_16::@return: scope:[atan2_16] from atan2_16::@8 + (word) atan2_16::return#3 ← phi( atan2_16::@8/(word) atan2_16::return#0 ) + (word) atan2_16::return#1 ← (word) atan2_16::return#3 + return + to:@return +@2: scope:[] from @1 + (byte) CORDIC_ITERATIONS_8#0 ← (number) 8 + (byte*) CORDIC_ATAN2_ANGLES_8#0 ← ((byte*)) (number) $1100 + kickasm(location (byte*) CORDIC_ATAN2_ANGLES_8#0 uses CORDIC_ITERATIONS_8#0) {{ .fill CORDIC_ITERATIONS_8, 2*256*atan(1/pow(2,i))/PI/2 + }} + to:@3 +@3: scope:[] from @2 + (byte*) D018#0 ← ((byte*)) (number) $d018 + (byte*) COLS#0 ← ((byte*)) (number) $d800 + to:@7 +@7: scope:[] from @3 + (byte*) CHARSET#0 ← ((byte*)) (number) $2000 + (byte*) SCREEN#0 ← ((byte*)) (number) $2800 + (byte*) SCREEN_REF#0 ← ((byte*)) (number) $2c00 + kickasm(location (byte*) SCREEN_REF#0) {{ .for(var y=-12;y<=12;y++) + .for(var x=-19;x<=20;x++) + .byte round(256*atan2(y, x)/PI/2) + }} + to:@8 +main: scope:[main] from @8 + (byte*) init_font_hex::charset#1 ← (byte*) CHARSET#0 + call init_font_hex + to:main::@12 +main::@12: scope:[main] from main + (byte*) main::toD0181_screen#0 ← (byte*) SCREEN#0 + (byte*) main::toD0181_gfx#0 ← (byte*) CHARSET#0 + to:main::toD0181 +main::toD0181: scope:[main] from main::@12 + (byte*) main::toD0181_gfx#1 ← phi( main::@12/(byte*) main::toD0181_gfx#0 ) + (byte*) main::toD0181_screen#1 ← phi( main::@12/(byte*) main::toD0181_screen#0 ) + (word~) main::toD0181_$0#0 ← ((word)) (byte*) main::toD0181_screen#1 + (number~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (number) $3fff + (number~) main::toD0181_$2#0 ← (number~) main::toD0181_$1#0 * (number) 4 + (number~) main::toD0181_$3#0 ← > (number~) main::toD0181_$2#0 + (word~) main::toD0181_$4#0 ← ((word)) (byte*) main::toD0181_gfx#1 + (byte~) main::toD0181_$5#0 ← > (word~) main::toD0181_$4#0 + (number~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (number) 4 + (number~) main::toD0181_$7#0 ← (number~) main::toD0181_$6#0 & (number) $f + (number~) main::toD0181_$8#0 ← (number~) main::toD0181_$3#0 | (number~) main::toD0181_$7#0 + (byte) main::toD0181_return#0 ← (number~) main::toD0181_$8#0 + to:main::toD0181_@return +main::toD0181_@return: scope:[main] from main::toD0181 + (byte) main::toD0181_return#2 ← phi( main::toD0181/(byte) main::toD0181_return#0 ) + (byte) main::toD0181_return#1 ← (byte) main::toD0181_return#2 + to:main::@11 +main::@11: scope:[main] from main::toD0181_@return + (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 ) + (byte~) main::$1 ← (byte) main::toD0181_return#3 + *((byte*) D018#0) ← (byte~) main::$1 + (byte*) main::screen#0 ← (byte*) SCREEN#0 + (byte*) main::screen_ref#0 ← (byte*) SCREEN_REF#0 + (signed byte) main::y#0 ← (signed byte) -$c + to:main::@1 +main::@1: scope:[main] from main::@11 main::@3 + (byte*) main::screen#4 ← phi( main::@11/(byte*) main::screen#0 main::@3/(byte*) main::screen#5 ) + (byte*) main::screen_ref#4 ← phi( main::@11/(byte*) main::screen_ref#0 main::@3/(byte*) main::screen_ref#5 ) + (signed byte) main::y#4 ← phi( main::@11/(signed byte) main::y#0 main::@3/(signed byte) main::y#1 ) + (signed byte) main::x#0 ← (signed byte) -$13 + to:main::@2 +main::@2: scope:[main] from main::@1 main::@13 + (byte*) main::screen#3 ← phi( main::@1/(byte*) main::screen#4 main::@13/(byte*) main::screen#1 ) + (byte*) main::screen_ref#3 ← phi( main::@1/(byte*) main::screen_ref#4 main::@13/(byte*) main::screen_ref#1 ) + (signed byte) main::y#2 ← phi( main::@1/(signed byte) main::y#4 main::@13/(signed byte) main::y#5 ) + (signed byte) main::x#2 ← phi( main::@1/(signed byte) main::x#0 main::@13/(signed byte) main::x#1 ) + (byte~) main::$4 ← ((byte)) (signed byte) main::x#2 + (word~) main::$5 ← ((word)) { (byte~) main::$4, (number) 0 } + (signed word~) main::$6 ← ((signed word)) (word~) main::$5 + (signed word) main::xw#0 ← (signed word~) main::$6 + (byte~) main::$7 ← ((byte)) (signed byte) main::y#2 + (word~) main::$8 ← ((word)) { (byte~) main::$7, (number) 0 } + (signed word~) main::$9 ← ((signed word)) (word~) main::$8 + (signed word) main::yw#0 ← (signed word~) main::$9 + (signed word) atan2_16::x#0 ← (signed word) main::xw#0 + (signed word) atan2_16::y#0 ← (signed word) main::yw#0 + call atan2_16 + (word) atan2_16::return#2 ← (word) atan2_16::return#1 + to:main::@13 +main::@13: scope:[main] from main::@2 + (signed byte) main::y#5 ← phi( main::@2/(signed byte) main::y#2 ) + (signed byte) main::x#3 ← phi( main::@2/(signed byte) main::x#2 ) + (byte*) main::screen#2 ← phi( main::@2/(byte*) main::screen#3 ) + (byte*) main::screen_ref#2 ← phi( main::@2/(byte*) main::screen_ref#3 ) + (word) atan2_16::return#4 ← phi( main::@2/(word) atan2_16::return#2 ) + (word~) main::$10 ← (word) atan2_16::return#4 + (word) main::angle_w#0 ← (word~) main::$10 + (number~) main::$11 ← (word) main::angle_w#0 + (number) $80 + (number~) main::$12 ← > (number~) main::$11 + (number~) main::$13 ← (number~) main::$12 - *((byte*) main::screen_ref#2) + *((byte*) main::screen#2) ← (number~) main::$13 + (byte*) main::screen#1 ← ++ (byte*) main::screen#2 + (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 + (signed byte) main::x#1 ← (signed byte) main::x#3 + rangenext(-$13,$14) + (bool~) main::$14 ← (signed byte) main::x#1 != rangelast(-$13,$14) + if((bool~) main::$14) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@13 + (byte*) main::screen#5 ← phi( main::@13/(byte*) main::screen#1 ) + (byte*) main::screen_ref#5 ← phi( main::@13/(byte*) main::screen_ref#1 ) + (signed byte) main::y#3 ← phi( main::@13/(signed byte) main::y#5 ) + (signed byte) main::y#1 ← (signed byte) main::y#3 + rangenext(-$c,$c) + (bool~) main::$15 ← (signed byte) main::y#1 != rangelast(-$c,$c) + if((bool~) main::$15) goto main::@1 + to:main::@4 +main::@4: scope:[main] from main::@3 + (byte*~) main::$2 ← (byte*) COLS#0 + (number) $c*(number) $28 + (byte*~) main::$3 ← (byte*~) main::$2 + (number) $13 + (byte*) main::col00#0 ← (byte*~) main::$3 + to:main::@5 +main::@5: scope:[main] from main::@4 main::@6 + (byte*) main::col00#2 ← phi( main::@4/(byte*) main::col00#0 main::@6/(byte*) main::col00#1 ) + if(true) goto main::@6 + to:main::@return +main::@6: scope:[main] from main::@5 + (byte*) main::col00#1 ← phi( main::@5/(byte*) main::col00#2 ) + *((byte*) main::col00#1) ← ++ *((byte*) main::col00#1) + to:main::@5 +main::@return: scope:[main] from main::@5 + return + to:@return +@8: scope:[] from @7 + call main + to:@9 +@9: scope:[] from @8 + to:@end +@end: scope:[] from @9 + +SYMBOL TABLE SSA +(label) @1 +(label) @2 +(label) @3 +(label) @7 +(label) @8 +(label) @9 +(label) @begin +(label) @end +(byte*) CHARSET +(byte*) CHARSET#0 +(byte*) COLS +(byte*) COLS#0 +(word*) CORDIC_ATAN2_ANGLES_16 +(word*) CORDIC_ATAN2_ANGLES_16#0 +(byte*) CORDIC_ATAN2_ANGLES_8 +(byte*) CORDIC_ATAN2_ANGLES_8#0 +(byte) CORDIC_ITERATIONS_16 +(byte) CORDIC_ITERATIONS_16#0 +(byte) CORDIC_ITERATIONS_8 +(byte) CORDIC_ITERATIONS_8#0 +(byte*) D018 +(byte*) D018#0 +(byte[]) FONT_HEX_PROTO +(byte[]) FONT_HEX_PROTO#0 +(byte*) SCREEN +(byte*) SCREEN#0 +(byte*) SCREEN_REF +(byte*) SCREEN_REF#0 +(const byte) SIZEOF_WORD = (byte) 2 +(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) +(bool~) atan2_16::$0 +(signed word~) atan2_16::$1 +(bool~) atan2_16::$10 +(bool~) atan2_16::$11 +(number~) atan2_16::$12 +(bool~) atan2_16::$13 +(bool~) atan2_16::$14 +(word~) atan2_16::$15 +(bool~) atan2_16::$16 +(bool~) atan2_16::$17 +(signed word~) atan2_16::$18 +(signed word~) atan2_16::$19 +(signed word~) atan2_16::$2 +(bool~) atan2_16::$20 +(bool~) atan2_16::$21 +(byte~) atan2_16::$22 +(byte~) atan2_16::$23 +(signed word~) atan2_16::$3 +(signed word~) atan2_16::$4 +(bool~) atan2_16::$5 +(signed word~) atan2_16::$6 +(signed word~) atan2_16::$7 +(signed word~) atan2_16::$8 +(signed word~) atan2_16::$9 +(label) atan2_16::@1 +(label) atan2_16::@13 +(label) atan2_16::@15 +(label) atan2_16::@16 +(label) atan2_16::@17 +(label) atan2_16::@18 +(label) atan2_16::@19 +(label) atan2_16::@2 +(label) atan2_16::@22 +(label) atan2_16::@25 +(label) atan2_16::@3 +(label) atan2_16::@4 +(label) atan2_16::@5 +(label) atan2_16::@6 +(label) atan2_16::@7 +(label) atan2_16::@8 +(label) atan2_16::@return +(word) atan2_16::angle +(word) atan2_16::angle#0 +(word) atan2_16::angle#1 +(word) atan2_16::angle#10 +(word) atan2_16::angle#11 +(word) atan2_16::angle#12 +(word) atan2_16::angle#13 +(word) atan2_16::angle#14 +(word) atan2_16::angle#15 +(word) atan2_16::angle#2 +(word) atan2_16::angle#3 +(word) atan2_16::angle#4 +(word) atan2_16::angle#5 +(word) atan2_16::angle#6 +(word) atan2_16::angle#7 +(word) atan2_16::angle#8 +(word) atan2_16::angle#9 +(byte) atan2_16::i +(byte) atan2_16::i#0 +(byte) atan2_16::i#1 +(byte) atan2_16::i#2 +(byte) atan2_16::i#3 +(byte) atan2_16::i#4 +(byte) atan2_16::i#5 +(byte) atan2_16::i#6 +(word) atan2_16::return +(word) atan2_16::return#0 +(word) atan2_16::return#1 +(word) atan2_16::return#2 +(word) atan2_16::return#3 +(word) atan2_16::return#4 +(signed word) atan2_16::x +(signed word) atan2_16::x#0 +(signed word) atan2_16::x#1 +(signed word) atan2_16::x#10 +(signed word) atan2_16::x#11 +(signed word) atan2_16::x#12 +(signed word) atan2_16::x#13 +(signed word) atan2_16::x#2 +(signed word) atan2_16::x#3 +(signed word) atan2_16::x#4 +(signed word) atan2_16::x#5 +(signed word) atan2_16::x#6 +(signed word) atan2_16::x#7 +(signed word) atan2_16::x#8 +(signed word) atan2_16::x#9 +(signed word) atan2_16::xd +(signed word) atan2_16::xd#0 +(signed word) atan2_16::xd#1 +(signed word) atan2_16::xd#2 +(signed word) atan2_16::xi +(signed word) atan2_16::xi#0 +(signed word) atan2_16::xi#1 +(signed word) atan2_16::xi#2 +(signed word) atan2_16::xi#3 +(signed word) atan2_16::xi#4 +(signed word) atan2_16::xi#5 +(signed word) atan2_16::xi#6 +(signed word) atan2_16::xi#7 +(signed word) atan2_16::y +(signed word) atan2_16::y#0 +(signed word) atan2_16::y#1 +(signed word) atan2_16::y#10 +(signed word) atan2_16::y#11 +(signed word) atan2_16::y#12 +(signed word) atan2_16::y#13 +(signed word) atan2_16::y#14 +(signed word) atan2_16::y#15 +(signed word) atan2_16::y#2 +(signed word) atan2_16::y#3 +(signed word) atan2_16::y#4 +(signed word) atan2_16::y#5 +(signed word) atan2_16::y#6 +(signed word) atan2_16::y#7 +(signed word) atan2_16::y#8 +(signed word) atan2_16::y#9 +(signed word) atan2_16::yd +(signed word) atan2_16::yd#0 +(signed word) atan2_16::yd#1 +(signed word) atan2_16::yd#2 +(signed word) atan2_16::yi +(signed word) atan2_16::yi#0 +(signed word) atan2_16::yi#1 +(signed word) atan2_16::yi#10 +(signed word) atan2_16::yi#2 +(signed word) atan2_16::yi#3 +(signed word) atan2_16::yi#4 +(signed word) atan2_16::yi#5 +(signed word) atan2_16::yi#6 +(signed word) atan2_16::yi#7 +(signed word) atan2_16::yi#8 +(signed word) atan2_16::yi#9 +(void()) init_font_hex((byte*) init_font_hex::charset) +(byte~) init_font_hex::$0 +(byte~) init_font_hex::$1 +(byte~) init_font_hex::$2 +(bool~) init_font_hex::$3 +(bool~) init_font_hex::$4 +(bool~) init_font_hex::$5 +(label) init_font_hex::@1 +(label) init_font_hex::@2 +(label) init_font_hex::@3 +(label) init_font_hex::@4 +(label) init_font_hex::@5 +(label) init_font_hex::@return +(byte) init_font_hex::c +(byte) init_font_hex::c#0 +(byte) init_font_hex::c#1 +(byte) init_font_hex::c#2 +(byte) init_font_hex::c#3 +(byte) init_font_hex::c#4 +(byte) init_font_hex::c#5 +(byte) init_font_hex::c#6 +(byte) init_font_hex::c1 +(byte) init_font_hex::c1#0 +(byte) init_font_hex::c1#1 +(byte) init_font_hex::c1#2 +(byte) init_font_hex::c1#3 +(byte) init_font_hex::c1#4 +(byte*) init_font_hex::charset +(byte*) init_font_hex::charset#0 +(byte*) init_font_hex::charset#1 +(byte*) init_font_hex::charset#2 +(byte*) init_font_hex::charset#3 +(byte*) init_font_hex::charset#4 +(byte*) init_font_hex::charset#5 +(byte*) init_font_hex::charset#6 +(byte*) init_font_hex::charset#7 +(byte) init_font_hex::i +(byte) init_font_hex::i#0 +(byte) init_font_hex::i#1 +(byte) init_font_hex::i#2 +(byte) init_font_hex::idx +(byte) init_font_hex::idx#0 +(byte) init_font_hex::idx#1 +(byte) init_font_hex::idx#2 +(byte) init_font_hex::idx#3 +(byte) init_font_hex::idx#4 +(byte) init_font_hex::idx#5 +(byte) init_font_hex::idx#6 +(byte*) init_font_hex::proto_hi +(byte*) init_font_hex::proto_hi#0 +(byte*) init_font_hex::proto_hi#1 +(byte*) init_font_hex::proto_hi#2 +(byte*) init_font_hex::proto_hi#3 +(byte*) init_font_hex::proto_hi#4 +(byte*) init_font_hex::proto_hi#5 +(byte*) init_font_hex::proto_hi#6 +(byte*) init_font_hex::proto_lo +(byte*) init_font_hex::proto_lo#0 +(byte*) init_font_hex::proto_lo#1 +(byte*) init_font_hex::proto_lo#2 +(byte*) init_font_hex::proto_lo#3 +(byte*) init_font_hex::proto_lo#4 +(void()) main() +(byte~) main::$1 +(word~) main::$10 +(number~) main::$11 +(number~) main::$12 +(number~) main::$13 +(bool~) main::$14 +(bool~) main::$15 +(byte*~) main::$2 +(byte*~) main::$3 +(byte~) main::$4 +(word~) main::$5 +(signed word~) main::$6 +(byte~) main::$7 +(word~) main::$8 +(signed word~) main::$9 +(label) main::@1 +(label) main::@11 +(label) main::@12 +(label) main::@13 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@return +(word) main::angle_w +(word) main::angle_w#0 +(byte*) main::col00 +(byte*) main::col00#0 +(byte*) main::col00#1 +(byte*) main::col00#2 +(byte*) main::screen +(byte*) main::screen#0 +(byte*) main::screen#1 +(byte*) main::screen#2 +(byte*) main::screen#3 +(byte*) main::screen#4 +(byte*) main::screen#5 +(byte*) main::screen_ref +(byte*) main::screen_ref#0 +(byte*) main::screen_ref#1 +(byte*) main::screen_ref#2 +(byte*) main::screen_ref#3 +(byte*) main::screen_ref#4 +(byte*) main::screen_ref#5 +(label) main::toD0181 +(word~) main::toD0181_$0 +(word~) main::toD0181_$0#0 +(number~) main::toD0181_$1 +(number~) main::toD0181_$1#0 +(number~) main::toD0181_$2 +(number~) main::toD0181_$2#0 +(number~) main::toD0181_$3 +(number~) main::toD0181_$3#0 +(word~) main::toD0181_$4 +(word~) main::toD0181_$4#0 +(byte~) main::toD0181_$5 +(byte~) main::toD0181_$5#0 +(number~) main::toD0181_$6 +(number~) main::toD0181_$6#0 +(number~) main::toD0181_$7 +(number~) main::toD0181_$7#0 +(number~) main::toD0181_$8 +(number~) main::toD0181_$8#0 +(label) main::toD0181_@return +(byte*) main::toD0181_gfx +(byte*) main::toD0181_gfx#0 +(byte*) main::toD0181_gfx#1 +(byte) main::toD0181_return +(byte) main::toD0181_return#0 +(byte) main::toD0181_return#1 +(byte) main::toD0181_return#2 +(byte) main::toD0181_return#3 +(byte*) main::toD0181_screen +(byte*) main::toD0181_screen#0 +(byte*) main::toD0181_screen#1 +(signed byte) main::x +(signed byte) main::x#0 +(signed byte) main::x#1 +(signed byte) main::x#2 +(signed byte) main::x#3 +(signed word) main::xw +(signed word) main::xw#0 +(signed byte) main::y +(signed byte) main::y#0 +(signed byte) main::y#1 +(signed byte) main::y#2 +(signed byte) main::y#3 +(signed byte) main::y#4 +(signed byte) main::y#5 +(signed word) main::yw +(signed word) main::yw#0 + +Fixing inline constructor with main::$16 ← (byte)main::$4 w= (byte)0 +Fixing inline constructor with main::$17 ← (byte)main::$7 w= (byte)0 +Successful SSA optimization Pass2FixInlineConstructorsNew +Adding number conversion cast (unumber) 0 in (byte) init_font_hex::idx#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0 +Adding number conversion cast (unumber) 4 in (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#2 + (byte) init_font_hex::i#2) << (number) 4 +Adding number conversion cast (unumber) 1 in (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#2 + (byte) init_font_hex::i#2) << (number) 1 +Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (number) 0 +Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (number) 0 +Adding number conversion cast (unumber) 5 in (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#3 + (number) 5 +Adding number conversion cast (unumber) 8 in (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#4 + (number) 8 +Adding number conversion cast (unumber) 5 in (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#3 + (number) 5 +Adding number conversion cast (unumber) $f in (byte) CORDIC_ITERATIONS_16#0 ← (number) $f +Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 > (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (word) atan2_16::angle#0 ← (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$20 ← (signed word) atan2_16::yi#4 > (number) 0 +Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2 +Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (number) 0 +Adding number conversion cast (unumber) $8000 in (number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9 +Adding number conversion cast (unumber) atan2_16::$12 in (number~) atan2_16::$12 ← (unumber)(number) $8000 - (word) atan2_16::angle#9 +Adding number conversion cast (unumber) 8 in (byte) CORDIC_ITERATIONS_8#0 ← (number) 8 +Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (number) $3fff +Adding number conversion cast (unumber) main::toD0181_$1#0 in (number~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (unumber)(number) $3fff +Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$2#0 ← (unumber~) main::toD0181_$1#0 * (number) 4 +Adding number conversion cast (unumber) main::toD0181_$2#0 in (number~) main::toD0181_$2#0 ← (unumber~) main::toD0181_$1#0 * (unumber)(number) 4 +Adding number conversion cast (unumber) main::toD0181_$3#0 in (number~) main::toD0181_$3#0 ← > (unumber~) main::toD0181_$2#0 +Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (number) 4 +Adding number conversion cast (unumber) main::toD0181_$6#0 in (number~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (unumber)(number) 4 +Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7#0 ← (unumber~) main::toD0181_$6#0 & (number) $f +Adding number conversion cast (unumber) main::toD0181_$7#0 in (number~) main::toD0181_$7#0 ← (unumber~) main::toD0181_$6#0 & (unumber)(number) $f +Adding number conversion cast (unumber) main::toD0181_$8#0 in (number~) main::toD0181_$8#0 ← (unumber~) main::toD0181_$3#0 | (unumber~) main::toD0181_$7#0 +Adding number conversion cast (unumber) $80 in (number~) main::$11 ← (word) main::angle_w#0 + (number) $80 +Adding number conversion cast (unumber) main::$11 in (number~) main::$11 ← (word) main::angle_w#0 + (unumber)(number) $80 +Adding number conversion cast (unumber) main::$12 in (number~) main::$12 ← > (unumber~) main::$11 +Adding number conversion cast (unumber) main::$13 in (number~) main::$13 ← (unumber~) main::$12 - *((byte*) main::screen_ref#2) +Adding number conversion cast (unumber) $c*$28 in (byte*~) main::$2 ← (byte*) COLS#0 + (number) $c*(number) $28 +Adding number conversion cast (unumber) $13 in (byte*~) main::$3 ← (byte*~) main::$2 + (number) $13 +Successful SSA optimization PassNAddNumberTypeConversions +Adding number conversion cast (byte) to elements in (byte[]) FONT_HEX_PROTO#0 ← { (byte)(number) 2, (byte)(number) 5, (byte)(number) 5, (byte)(number) 5, (byte)(number) 2, (byte)(number) 6, (byte)(number) 2, (byte)(number) 2, (byte)(number) 2, (byte)(number) 7, (byte)(number) 6, (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 7, (byte)(number) 6, (byte)(number) 1, (byte)(number) 2, (byte)(number) 1, (byte)(number) 6, (byte)(number) 5, (byte)(number) 5, (byte)(number) 7, (byte)(number) 1, (byte)(number) 1, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 1, (byte)(number) 6, (byte)(number) 3, (byte)(number) 4, (byte)(number) 6, (byte)(number) 5, (byte)(number) 2, (byte)(number) 7, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 2, (byte)(number) 5, (byte)(number) 2, (byte)(number) 5, (byte)(number) 2, (byte)(number) 2, (byte)(number) 5, (byte)(number) 3, (byte)(number) 1, (byte)(number) 1, (byte)(number) 2, (byte)(number) 5, (byte)(number) 7, (byte)(number) 5, (byte)(number) 5, (byte)(number) 6, (byte)(number) 5, (byte)(number) 6, (byte)(number) 5, (byte)(number) 6, (byte)(number) 2, (byte)(number) 5, (byte)(number) 4, (byte)(number) 5, (byte)(number) 2, (byte)(number) 6, (byte)(number) 5, (byte)(number) 5, (byte)(number) 5, (byte)(number) 6, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 4, (byte)(number) 7, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 4, (byte)(number) 4 } +Successful SSA optimization PassNAddArrayNumberTypeConversions +Inlining cast (byte) init_font_hex::idx#0 ← (unumber)(number) 0 +Inlining cast *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (unumber)(number) 0 +Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (unumber)(number) 0 +Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (unumber)(number) 0 +Inlining cast (byte) CORDIC_ITERATIONS_16#0 ← (unumber)(number) $f +Inlining cast (word*) CORDIC_ATAN2_ANGLES_16#0 ← (word*)(number) $1000 +Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0 +Inlining cast (byte) CORDIC_ITERATIONS_8#0 ← (unumber)(number) 8 +Inlining cast (byte*) CORDIC_ATAN2_ANGLES_8#0 ← (byte*)(number) $1100 +Inlining cast (byte*) D018#0 ← (byte*)(number) $d018 +Inlining cast (byte*) COLS#0 ← (byte*)(number) $d800 +Inlining cast (byte*) CHARSET#0 ← (byte*)(number) $2000 +Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $2800 +Inlining cast (byte*) SCREEN_REF#0 ← (byte*)(number) $2c00 +Inlining cast (word~) main::toD0181_$0#0 ← (word)(byte*) main::toD0181_screen#1 +Inlining cast (word~) main::toD0181_$4#0 ← (word)(byte*) main::toD0181_gfx#1 +Inlining cast (byte~) main::$4 ← (byte)(signed byte) main::x#2 +Inlining cast (signed word~) main::$6 ← (signed word)(word~) main::$5 +Inlining cast (byte~) main::$7 ← (byte)(signed byte) main::y#2 +Inlining cast (signed word~) main::$9 ← (signed word)(word~) main::$8 +Successful SSA optimization Pass2InlineCast +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 4 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 5 +Simplifying constant integer cast 8 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Simplifying constant integer cast 5 +Simplifying constant integer cast 5 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Simplifying constant integer cast 6 +Simplifying constant integer cast 2 +Simplifying constant integer cast 2 +Simplifying constant integer cast 2 +Simplifying constant integer cast 7 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast 4 +Simplifying constant integer cast 7 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast 1 +Simplifying constant integer cast 6 +Simplifying constant integer cast 5 +Simplifying constant integer cast 5 +Simplifying constant integer cast 7 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 7 +Simplifying constant integer cast 4 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 +Simplifying constant integer cast 6 +Simplifying constant integer cast 3 +Simplifying constant integer cast 4 +Simplifying constant integer cast 6 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Simplifying constant integer cast 7 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Simplifying constant integer cast 2 +Simplifying constant integer cast 5 +Simplifying constant integer cast 3 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast 5 +Simplifying constant integer cast 7 +Simplifying constant integer cast 5 +Simplifying constant integer cast 5 +Simplifying constant integer cast 6 +Simplifying constant integer cast 5 +Simplifying constant integer cast 6 +Simplifying constant integer cast 5 +Simplifying constant integer cast 6 +Simplifying constant integer cast 2 +Simplifying constant integer cast 5 +Simplifying constant integer cast 4 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Simplifying constant integer cast 6 +Simplifying constant integer cast 5 +Simplifying constant integer cast 5 +Simplifying constant integer cast 5 +Simplifying constant integer cast 6 +Simplifying constant integer cast 7 +Simplifying constant integer cast 4 +Simplifying constant integer cast 6 +Simplifying constant integer cast 4 +Simplifying constant integer cast 7 +Simplifying constant integer cast 7 +Simplifying constant integer cast 4 +Simplifying constant integer cast 6 +Simplifying constant integer cast 4 +Simplifying constant integer cast 4 +Simplifying constant integer cast $f +Simplifying constant pointer cast (word*) 4096 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 2 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $8000 +Simplifying constant integer cast 8 +Simplifying constant pointer cast (byte*) 4352 +Simplifying constant pointer cast (byte*) 53272 +Simplifying constant pointer cast (byte*) 55296 +Simplifying constant pointer cast (byte*) 8192 +Simplifying constant pointer cast (byte*) 10240 +Simplifying constant pointer cast (byte*) 11264 +Simplifying constant integer cast $3fff +Simplifying constant integer cast 4 +Simplifying constant integer cast 4 +Simplifying constant integer cast $f +Simplifying constant integer cast (byte~) main::$4 +Simplifying constant integer cast 0 +Simplifying constant integer cast (byte~) main::$7 +Simplifying constant integer cast 0 +Simplifying constant integer cast $80 +Simplifying constant integer cast $13 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 5 +Finalized unsigned number type (byte) 8 +Finalized unsigned number type (byte) 5 +Finalized unsigned number type (byte) $f +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Finalized unsigned number type (byte) 0 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Finalized unsigned number type (byte) 2 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Finalized unsigned number type (word) $8000 +Finalized unsigned number type (byte) 8 +Finalized unsigned number type (word) $3fff +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) $f +Finalized unsigned number type (byte) $80 +Finalized unsigned number type (byte) $13 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to word in (unumber~) atan2_16::$12 ← (word) $8000 - (word) atan2_16::angle#9 +Inferred type updated to word in (unumber~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (word) $3fff +Inferred type updated to word in (unumber~) main::toD0181_$2#0 ← (word~) main::toD0181_$1#0 * (byte) 4 +Inferred type updated to byte in (unumber~) main::toD0181_$3#0 ← > (word~) main::toD0181_$2#0 +Inferred type updated to byte in (unumber~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (byte) 4 +Inferred type updated to byte in (unumber~) main::toD0181_$7#0 ← (byte~) main::toD0181_$6#0 & (byte) $f +Inferred type updated to byte in (unumber~) main::toD0181_$8#0 ← (byte~) main::toD0181_$3#0 | (byte~) main::toD0181_$7#0 +Inferred type updated to word in (unumber~) main::$11 ← (word) main::angle_w#0 + (byte) $80 +Inferred type updated to byte in (unumber~) main::$12 ← > (word~) main::$11 +Inferred type updated to byte in (unumber~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) +Inversing boolean not [63] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 != (signed byte) 0 from [62] (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (signed byte) 0 +Inversing boolean not [75] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [74] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0 +Inversing boolean not [93] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [92] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0 +Successful SSA optimization Pass2UnaryNotSimplification +Alias (byte*) init_font_hex::charset#3 = (byte*) init_font_hex::charset#4 +Alias (byte) init_font_hex::idx#2 = (byte) init_font_hex::idx#6 +Alias (byte*) init_font_hex::proto_lo#2 = (byte*) init_font_hex::proto_lo#3 +Alias (byte) init_font_hex::c1#2 = (byte) init_font_hex::c1#3 +Alias (byte*) init_font_hex::proto_hi#2 = (byte*) init_font_hex::proto_hi#5 (byte*) init_font_hex::proto_hi#3 +Alias (byte) init_font_hex::c#2 = (byte) init_font_hex::c#3 (byte) init_font_hex::c#4 +Alias (byte*) init_font_hex::charset#0 = (byte*) init_font_hex::charset#7 +Alias (signed word) atan2_16::y#1 = (signed word) atan2_16::y#2 (signed word~) atan2_16::$3 (signed word) atan2_16::y#3 +Alias (signed word) atan2_16::x#5 = (signed word) atan2_16::x#9 (signed word) atan2_16::x#6 +Alias (signed word~) atan2_16::$2 = (signed word~) atan2_16::$1 +Alias (signed word) atan2_16::yi#0 = (signed word~) atan2_16::$4 (signed word) atan2_16::yi#9 (signed word) atan2_16::yi#10 +Alias (signed word) atan2_16::x#1 = (signed word) atan2_16::x#2 (signed word~) atan2_16::$8 (signed word) atan2_16::x#3 +Alias (signed word) atan2_16::y#12 = (signed word) atan2_16::y#15 (signed word) atan2_16::y#13 +Alias (signed word~) atan2_16::$7 = (signed word~) atan2_16::$6 +Alias (signed word) atan2_16::xi#0 = (signed word~) atan2_16::$9 +Alias (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#6 (signed word) atan2_16::xi#4 (signed word) atan2_16::xi#5 +Alias (byte) atan2_16::i#2 = (byte) atan2_16::i#6 (byte) atan2_16::i#3 (byte) atan2_16::i#4 +Alias (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#4 (signed word) atan2_16::yi#5 (signed word) atan2_16::yi#6 +Alias (word) atan2_16::angle#12 = (word) atan2_16::angle#14 (word) atan2_16::angle#7 (word) atan2_16::angle#8 +Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#13 (signed word) atan2_16::x#7 (signed word) atan2_16::x#12 +Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#14 (signed word) atan2_16::y#7 (signed word) atan2_16::y#11 +Alias (signed word) atan2_16::xd#0 = (signed word~) atan2_16::$18 (signed word) atan2_16::xd#1 (signed word) atan2_16::xd#2 +Alias (signed word) atan2_16::yd#0 = (signed word~) atan2_16::$19 (signed word) atan2_16::yd#1 (signed word) atan2_16::yd#2 +Alias (word) atan2_16::angle#1 = (word) atan2_16::angle#9 +Alias (signed word) atan2_16::y#5 = (signed word) atan2_16::y#6 +Alias (word) atan2_16::angle#4 = (word~) atan2_16::$12 +Alias (word) atan2_16::return#0 = (word) atan2_16::angle#10 (word) atan2_16::return#3 (word) atan2_16::return#1 +Alias (word) atan2_16::angle#11 = (word) atan2_16::angle#15 +Alias (word) atan2_16::angle#5 = (word~) atan2_16::$15 +Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1 +Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 +Alias (byte) main::toD0181_return#0 = (byte~) main::toD0181_$8#0 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$1 +Alias (word~) main::$5 = (word~) main::$16 +Alias (signed word) main::xw#0 = (signed word~) main::$6 +Alias (word~) main::$8 = (word~) main::$17 +Alias (signed word) main::yw#0 = (signed word~) main::$9 +Alias (word) atan2_16::return#2 = (word) atan2_16::return#4 +Alias (byte*) main::screen_ref#2 = (byte*) main::screen_ref#3 +Alias (byte*) main::screen#2 = (byte*) main::screen#3 +Alias (signed byte) main::x#2 = (signed byte) main::x#3 +Alias (signed byte) main::y#2 = (signed byte) main::y#5 (signed byte) main::y#3 +Alias (word) main::angle_w#0 = (word~) main::$10 +Alias (byte*) main::screen_ref#1 = (byte*) main::screen_ref#5 +Alias (byte*) main::screen#1 = (byte*) main::screen#5 +Alias (byte*) main::col00#0 = (byte*~) main::$3 +Alias (byte*) main::col00#1 = (byte*) main::col00#2 +Successful SSA optimization Pass2AliasElimination +Alias (signed word) atan2_16::x#1 = (signed word) atan2_16::x#5 (signed word) atan2_16::x#10 +Alias (signed word) atan2_16::y#1 = (signed word) atan2_16::y#12 (signed word) atan2_16::y#9 +Alias (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#8 +Alias (byte) atan2_16::i#2 = (byte) atan2_16::i#5 +Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#8 +Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#8 +Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5 +Successful SSA optimization Pass2AliasElimination +Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#4 +Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#4 +Successful SSA optimization Pass2AliasElimination +Self Phi Eliminated (byte*) init_font_hex::proto_hi#2 +Self Phi Eliminated (byte*) init_font_hex::proto_lo#2 +Self Phi Eliminated (byte*) init_font_hex::charset#3 +Self Phi Eliminated (byte) init_font_hex::c1#2 +Self Phi Eliminated (byte) init_font_hex::c#2 +Self Phi Eliminated (signed word) atan2_16::x#11 +Self Phi Eliminated (signed word) atan2_16::y#10 +Self Phi Eliminated (signed byte) main::y#2 +Self Phi Eliminated (byte*) main::col00#1 +Successful SSA optimization Pass2SelfPhiElimination +Identical Phi Values (byte*) init_font_hex::charset#6 (byte*) init_font_hex::charset#1 +Identical Phi Values (byte*) init_font_hex::proto_hi#2 (byte*) init_font_hex::proto_hi#4 +Identical Phi Values (byte*) init_font_hex::proto_lo#2 (byte*) init_font_hex::proto_lo#4 +Identical Phi Values (byte*) init_font_hex::charset#3 (byte*) init_font_hex::charset#2 +Identical Phi Values (byte) init_font_hex::c1#2 (byte) init_font_hex::c1#4 +Identical Phi Values (byte) init_font_hex::c#2 (byte) init_font_hex::c#5 +Identical Phi Values (signed word) atan2_16::y#1 (signed word) atan2_16::y#0 +Identical Phi Values (signed word) atan2_16::x#1 (signed word) atan2_16::x#0 +Identical Phi Values (signed word) atan2_16::x#11 (signed word) atan2_16::x#1 +Identical Phi Values (signed word) atan2_16::y#10 (signed word) atan2_16::y#1 +Identical Phi Values (signed byte) main::y#2 (signed byte) main::y#4 +Identical Phi Values (byte*) main::col00#1 (byte*) main::col00#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Simple Condition (bool~) init_font_hex::$3 [19] if((byte) init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 +Simple Condition (bool~) init_font_hex::$4 [29] if((byte) init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 +Simple Condition (bool~) init_font_hex::$5 [34] if((byte) init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 +Simple Condition (bool~) atan2_16::$0 [42] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 +Simple Condition (bool~) atan2_16::$5 [51] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 +Simple Condition (bool~) atan2_16::$17 [64] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16 +Simple Condition (bool~) atan2_16::$20 [71] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@18 +Simple Condition (bool~) atan2_16::$11 [76] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 +Simple Condition (bool~) atan2_16::$21 [90] if((byte) atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16#0)) goto atan2_16::@15 +Simple Condition (bool~) atan2_16::$14 [94] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 +Simple Condition (bool~) main::$14 [166] if((signed byte) main::x#1!=rangelast(-$13,$14)) goto main::@2 +Simple Condition (bool~) main::$15 [170] if((signed byte) main::y#1!=rangelast(-$c,$c)) goto main::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Negating conditional jump and destination [90] if((byte) atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16#0)) goto atan2_16::@17 +Successful SSA optimization Pass2ConditionalJumpSequenceImprovement +Constant right-side identified [36] (byte[]) FONT_HEX_PROTO#0 ← { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) init_font_hex::c#0 = 0 +Constant (const byte) init_font_hex::c1#0 = 0 +Constant (const byte) init_font_hex::idx#0 = 0 +Constant (const byte) init_font_hex::i#0 = 0 +Constant (const byte[]) FONT_HEX_PROTO#0 = { 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 } +Constant (const byte) CORDIC_ITERATIONS_16#0 = $f +Constant (const word*) CORDIC_ATAN2_ANGLES_16#0 = (word*) 4096 +Constant (const word) atan2_16::angle#0 = 0 +Constant (const byte) atan2_16::i#0 = 0 +Constant (const byte) CORDIC_ITERATIONS_8#0 = 8 +Constant (const byte*) CORDIC_ATAN2_ANGLES_8#0 = (byte*) 4352 +Constant (const byte*) D018#0 = (byte*) 53272 +Constant (const byte*) COLS#0 = (byte*) 55296 +Constant (const byte*) CHARSET#0 = (byte*) 8192 +Constant (const byte*) SCREEN#0 = (byte*) 10240 +Constant (const byte*) SCREEN_REF#0 = (byte*) 11264 +Constant (const signed byte) main::y#0 = -$c +Constant (const signed byte) main::x#0 = -$13 +Successful SSA optimization Pass2ConstantIdentification +Constant (const byte*) init_font_hex::proto_hi#0 = FONT_HEX_PROTO#0 +Constant (const byte*) init_font_hex::proto_lo#0 = FONT_HEX_PROTO#0 +Constant (const byte*) init_font_hex::charset#1 = CHARSET#0 +Constant (const byte*) main::toD0181_screen#0 = SCREEN#0 +Constant (const byte*) main::toD0181_gfx#0 = CHARSET#0 +Constant (const byte*) main::screen#0 = SCREEN#0 +Constant (const byte*) main::screen_ref#0 = SCREEN_REF#0 +Successful SSA optimization Pass2ConstantIdentification +Constant value identified (word)main::toD0181_screen#0 in [120] (word~) main::toD0181_$0#0 ← (word)(const byte*) main::toD0181_screen#0 +Constant value identified (word)main::toD0181_gfx#0 in [124] (word~) main::toD0181_$4#0 ← (word)(const byte*) main::toD0181_gfx#0 +Successful SSA optimization Pass2ConstantValues +if() condition always true - replacing block destination [175] if(true) goto main::@6 +Successful SSA optimization Pass2ConstantIfs +Resolved ranged next value [17] init_font_hex::i#1 ← ++ init_font_hex::i#2 to ++ +Resolved ranged comparison value [19] if(init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 to (number) 5 +Resolved ranged next value [27] init_font_hex::c1#1 ← ++ init_font_hex::c1#4 to ++ +Resolved ranged comparison value [29] if(init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 to (number) $10 +Resolved ranged next value [32] init_font_hex::c#1 ← ++ init_font_hex::c#5 to ++ +Resolved ranged comparison value [34] if(init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 to (number) $10 +Resolved ranged next value [88] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ +Resolved ranged comparison value [90] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16#0)) goto atan2_16::@17 to (const byte) CORDIC_ITERATIONS_16#0+(number) 1 +Resolved ranged next value [164] main::x#1 ← ++ main::x#2 to ++ +Resolved ranged comparison value [166] if(main::x#1!=rangelast(-$13,$14)) goto main::@2 to (number) $15 +Resolved ranged next value [168] main::y#1 ← ++ main::y#4 to ++ +Resolved ranged comparison value [170] if(main::y#1!=rangelast(-$c,$c)) goto main::@1 to (number) $d +Converting *(pointer+n) to pointer[n] [177] *((byte*) main::col00#0) ← ++ *((byte*) main::col00#0) -- *(main::$2 + $13) +Converting *(pointer+n) to pointer[n] [177] *((byte*) main::col00#0) ← ++ *((byte*~) main::$2 + (byte) $13) -- *(main::$2 + $13) +Successful SSA optimization Pass2InlineDerefIdx +Simplifying expression containing zero init_font_hex::charset#2 in [8] *((byte*) init_font_hex::charset#2 + (const byte) init_font_hex::idx#0) ← (byte) 0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused variable (byte) init_font_hex::idx#4 and assignment [15] (byte) init_font_hex::idx#4 ← ++ (byte) init_font_hex::idx#3 +Eliminating unused variable (byte*) main::col00#0 and assignment [93] (byte*) main::col00#0 ← (byte*~) main::$2 + (byte) $13 +Successful SSA optimization PassNEliminateUnusedVars +Removing unused block main::@return +Successful SSA optimization Pass2EliminateUnusedBlocks +Adding number conversion cast (unumber) 5 in if((byte) init_font_hex::i#1!=(number) 5) goto init_font_hex::@3 +Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c1#1!=(number) $10) goto init_font_hex::@2 +Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c#1!=(number) $10) goto init_font_hex::@1 +Adding number conversion cast (unumber) CORDIC_ITERATIONS_16#0+1 in if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0+(number) 1) goto atan2_16::@17 +Adding number conversion cast (unumber) 1 in if((byte) atan2_16::i#1==(unumber)(const byte) CORDIC_ITERATIONS_16#0+(number) 1) goto atan2_16::@17 +Adding number conversion cast (snumber) $15 in if((signed byte) main::x#1!=(number) $15) goto main::@2 +Adding number conversion cast (snumber) $d in if((signed byte) main::y#1!=(number) $d) goto main::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 5 +Simplifying constant integer cast $10 +Simplifying constant integer cast $10 +Simplifying constant integer cast (const byte) CORDIC_ITERATIONS_16#0+(unumber)(number) 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast $15 +Simplifying constant integer cast $d +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 5 +Finalized unsigned number type (byte) $10 +Finalized unsigned number type (byte) $10 +Finalized unsigned number type (byte) 1 +Finalized signed number type (signed byte) $15 +Finalized signed number type (signed byte) $d +Successful SSA optimization PassNFinalizeNumberTypeConversions +Self Phi Eliminated (byte*) init_font_hex::proto_hi#4 +Self Phi Eliminated (byte) init_font_hex::c#5 +Successful SSA optimization Pass2SelfPhiElimination +Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 +Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [3] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 +Constant right-side identified [91] (byte*~) main::$2 ← (const byte*) COLS#0 + (word)(number) $c*(number) $28 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) init_font_hex::idx#1 = ++init_font_hex::idx#0 +Constant (const word) main::toD0181_$0#0 = (word)main::toD0181_screen#0 +Constant (const word) main::toD0181_$4#0 = (word)main::toD0181_gfx#0 +Constant (const byte*) main::$2 = COLS#0+(word)$c*$28 +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [57] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff +Constant right-side identified [60] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const word) main::toD0181_$1#0 = main::toD0181_$0#0&$3fff +Constant (const byte) main::toD0181_$5#0 = >main::toD0181_$4#0 +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [57] (word~) main::toD0181_$2#0 ← (const word) main::toD0181_$1#0 * (byte) 4 +Constant right-side identified [59] (byte~) main::toD0181_$6#0 ← (const byte) main::toD0181_$5#0 / (byte) 4 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const word) main::toD0181_$2#0 = main::toD0181_$1#0*4 +Constant (const byte) main::toD0181_$6#0 = main::toD0181_$5#0/4 +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [57] (byte~) main::toD0181_$3#0 ← > (const word) main::toD0181_$2#0 +Constant right-side identified [58] (byte~) main::toD0181_$7#0 ← (const byte) main::toD0181_$6#0 & (byte) $f +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) main::toD0181_$3#0 = >main::toD0181_$2#0 +Constant (const byte) main::toD0181_$7#0 = main::toD0181_$6#0&$f +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [57] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3#0 | (const byte) main::toD0181_$7#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining Noop Cast [60] (byte~) main::$4 ← (byte)(signed byte) main::x#2 keeping main::x#2 +Inlining Noop Cast [63] (byte~) main::$7 ← (byte)(signed byte) main::y#4 keeping main::y#4 +Successful SSA optimization Pass2NopCastInlining +Inlining Noop Cast [62] (signed word) main::xw#0 ← (signed word)(word~) main::$5 keeping main::xw#0 +Inlining Noop Cast [65] (signed word) main::yw#0 ← (signed word)(word~) main::$8 keeping main::yw#0 +Successful SSA optimization Pass2NopCastInlining +Rewriting division to use shift [35] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2 +Rewriting multiplication to use shift [39] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [43] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD +Successful SSA optimization Pass2MultiplyToShiftRewriting +Inlining constant with var siblings (const byte) init_font_hex::c#0 +Inlining constant with var siblings (const byte) init_font_hex::c1#0 +Inlining constant with var siblings (const byte) init_font_hex::idx#0 +Inlining constant with var siblings (const byte) init_font_hex::i#0 +Inlining constant with var siblings (const byte*) init_font_hex::proto_hi#0 +Inlining constant with var siblings (const byte*) init_font_hex::proto_lo#0 +Inlining constant with var siblings (const byte*) init_font_hex::charset#1 +Inlining constant with var siblings (const byte) init_font_hex::idx#1 +Inlining constant with var siblings (const word) atan2_16::angle#0 +Inlining constant with var siblings (const byte) atan2_16::i#0 +Inlining constant with var siblings (const signed byte) main::y#0 +Inlining constant with var siblings (const signed byte) main::x#0 +Inlining constant with var siblings (const byte*) main::screen#0 +Inlining constant with var siblings (const byte*) main::screen_ref#0 +Constant inlined main::screen#0 = (const byte*) SCREEN#0 +Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN#0 +Constant inlined main::toD0181_gfx#0 = (const byte*) CHARSET#0 +Constant inlined init_font_hex::proto_hi#0 = (const byte[]) FONT_HEX_PROTO#0 +Constant inlined atan2_16::angle#0 = (byte) 0 +Constant inlined init_font_hex::charset#1 = (const byte*) CHARSET#0 +Constant inlined init_font_hex::c1#0 = (byte) 0 +Constant inlined main::screen_ref#0 = (const byte*) SCREEN_REF#0 +Constant inlined atan2_16::i#0 = (byte) 0 +Constant inlined main::toD0181_$0#0 = (word)(const byte*) SCREEN#0 +Constant inlined main::x#0 = (signed byte) -$13 +Constant inlined main::toD0181_$1#0 = (word)(const byte*) SCREEN#0&(word) $3fff +Constant inlined main::y#0 = (signed byte) -$c +Constant inlined init_font_hex::i#0 = (byte) 0 +Constant inlined main::toD0181_$6#0 = >(word)(const byte*) CHARSET#0/(byte) 4 +Constant inlined main::toD0181_$7#0 = >(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f +Constant inlined init_font_hex::idx#1 = ++(byte) 0 +Constant inlined init_font_hex::idx#0 = (byte) 0 +Constant inlined main::toD0181_$2#0 = (word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4 +Constant inlined main::$2 = (const byte*) COLS#0+(word)(number) $c*(number) $28 +Constant inlined main::toD0181_$3#0 = >(word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4 +Constant inlined main::toD0181_$4#0 = (word)(const byte*) CHARSET#0 +Constant inlined main::toD0181_$5#0 = >(word)(const byte*) CHARSET#0 +Constant inlined init_font_hex::proto_lo#0 = (const byte[]) FONT_HEX_PROTO#0 +Constant inlined init_font_hex::c#0 = (byte) 0 +Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(COLS#0+(word)$c*$28+$13) +Consolidated array index constant in *(COLS#0+(word)$c*$28+$13) +Successful SSA optimization Pass2ConstantAdditionElimination +Simplifying constant integer increment ++0 +Successful SSA optimization Pass2ConstantSimplification +Eliminating unused constant (const byte) SIZEOF_WORD +Successful SSA optimization PassNEliminateUnusedVars +Added new block during phi lifting init_font_hex::@7(between init_font_hex::@5 and init_font_hex::@1) +Added new block during phi lifting init_font_hex::@8(between init_font_hex::@4 and init_font_hex::@2) +Added new block during phi lifting init_font_hex::@9(between init_font_hex::@3 and init_font_hex::@3) +Added new block during phi lifting atan2_16::@26(between atan2_16::@19 and atan2_16::@15) +Added new block during phi lifting atan2_16::@27(between atan2_16::@15 and atan2_16::@17) +Added new block during phi lifting atan2_16::@28(between atan2_16::@19 and atan2_16::@17) +Added new block during phi lifting atan2_16::@29(between atan2_16::@17 and atan2_16::@7) +Added new block during phi lifting atan2_16::@30(between atan2_16::@7 and atan2_16::@8) +Added new block during phi lifting main::@14(between main::@3 and main::@1) +Added new block during phi lifting main::@15(between main::@13 and main::@2) +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @3 +Adding NOP phi() at start of @8 +Adding NOP phi() at start of @9 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@12 +Adding NOP phi() at start of main::toD0181 +Adding NOP phi() at start of main::toD0181_@return +Adding NOP phi() at start of main::@4 +Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of init_font_hex +CALL GRAPH +Calls in [] to main:6 +Calls in [main] to init_font_hex:10 atan2_16:23 + +Created 26 initial phi equivalence classes +Coalesced [16] main::screen_ref#7 ← main::screen_ref#4 +Coalesced [17] main::screen#7 ← main::screen#4 +Coalesced [39] main::y#6 ← main::y#1 +Coalesced [40] main::screen_ref#6 ← main::screen_ref#1 +Coalesced [41] main::screen#6 ← main::screen#1 +Coalesced [42] main::x#4 ← main::x#1 +Coalesced (already) [43] main::screen_ref#8 ← main::screen_ref#1 +Coalesced (already) [44] main::screen#8 ← main::screen#1 +Coalesced [47] atan2_16::yi#12 ← atan2_16::$2 +Coalesced [51] atan2_16::xi#9 ← atan2_16::$7 +Coalesced [53] atan2_16::yi#14 ← atan2_16::yi#0 +Coalesced [54] atan2_16::xi#11 ← atan2_16::xi#0 +Coalesced [57] atan2_16::angle#17 ← atan2_16::angle#12 +Coalesced [62] atan2_16::angle#22 ← atan2_16::angle#4 +Coalesced [66] atan2_16::return#5 ← atan2_16::angle#5 +Coalesced [69] atan2_16::return#6 ← atan2_16::angle#11 +Coalesced [70] atan2_16::angle#21 ← atan2_16::angle#1 +Coalesced [78] atan2_16::yi#16 ← atan2_16::yi#2 +Coalesced [79] atan2_16::angle#20 ← atan2_16::angle#3 +Coalesced [80] atan2_16::xi#13 ← atan2_16::xi#2 +Coalesced [84] atan2_16::yi#13 ← atan2_16::yi#7 +Coalesced [85] atan2_16::xi#10 ← atan2_16::xi#7 +Coalesced [86] atan2_16::i#7 ← atan2_16::i#1 +Coalesced [87] atan2_16::angle#16 ← atan2_16::angle#13 +Coalesced (already) [88] atan2_16::angle#18 ← atan2_16::angle#13 +Coalesced [93] atan2_16::yi#15 ← atan2_16::yi#1 +Coalesced [94] atan2_16::angle#19 ← atan2_16::angle#2 +Coalesced [95] atan2_16::xi#12 ← atan2_16::xi#1 +Not coalescing [96] atan2_16::xi#8 ← atan2_16::x#0 +Not coalescing [97] atan2_16::yi#11 ← atan2_16::y#0 +Coalesced [100] init_font_hex::charset#9 ← init_font_hex::charset#5 +Coalesced [122] init_font_hex::charset#8 ← init_font_hex::charset#0 +Coalesced [123] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1 +Coalesced [124] init_font_hex::c#7 ← init_font_hex::c#1 +Coalesced (already) [125] init_font_hex::charset#10 ← init_font_hex::charset#0 +Coalesced [126] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1 +Coalesced [127] init_font_hex::c1#5 ← init_font_hex::c1#1 +Coalesced [128] init_font_hex::i#3 ← init_font_hex::i#1 +Coalesced [129] init_font_hex::idx#7 ← init_font_hex::idx#2 +Coalesced down to 18 phi equivalence classes +Culled Empty Block (label) @3 +Culled Empty Block (label) @9 +Culled Empty Block (label) main::@12 +Culled Empty Block (label) main::toD0181_@return +Culled Empty Block (label) main::@4 +Culled Empty Block (label) main::@5 +Culled Empty Block (label) main::@14 +Culled Empty Block (label) main::@15 +Culled Empty Block (label) atan2_16::@27 +Culled Empty Block (label) atan2_16::@30 +Culled Empty Block (label) atan2_16::@29 +Culled Empty Block (label) atan2_16::@26 +Culled Empty Block (label) atan2_16::@28 +Culled Empty Block (label) init_font_hex::@7 +Culled Empty Block (label) init_font_hex::@8 +Culled Empty Block (label) init_font_hex::@9 +Renumbering block @7 to @3 +Renumbering block @8 to @4 +Renumbering block atan2_16::@13 to atan2_16::@9 +Renumbering block atan2_16::@15 to atan2_16::@10 +Renumbering block atan2_16::@16 to atan2_16::@11 +Renumbering block atan2_16::@17 to atan2_16::@12 +Renumbering block atan2_16::@18 to atan2_16::@13 +Renumbering block atan2_16::@19 to atan2_16::@14 +Renumbering block atan2_16::@22 to atan2_16::@15 +Renumbering block atan2_16::@25 to atan2_16::@16 +Renumbering block main::@6 to main::@4 +Renumbering block main::@11 to main::@5 +Renumbering block main::@13 to main::@6 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @4 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::toD0181 +Adding NOP phi() at start of init_font_hex + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + kickasm(location (const word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; i (word~) main::$11 + [22] (byte~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) + [23] *((byte*) main::screen#2) ← (byte~) main::$13 + [24] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 + [25] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 + [26] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 + [27] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@6 + [28] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 + [29] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 + to:main::@4 +main::@4: scope:[main] from main::@3 main::@4 + [30] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) + to:main::@4 +atan2_16: scope:[atan2_16] from main::@2 + [31] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 + to:atan2_16::@2 +atan2_16::@2: scope:[atan2_16] from atan2_16 + [32] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 + to:atan2_16::@3 +atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 + [33] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#11 atan2_16::@2/(signed word~) atan2_16::$2 ) + [34] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 + to:atan2_16::@5 +atan2_16::@5: scope:[atan2_16] from atan2_16::@3 + [35] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 + to:atan2_16::@6 +atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 + [36] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#8 atan2_16::@5/(signed word~) atan2_16::$7 ) + to:atan2_16::@10 +atan2_16::@10: scope:[atan2_16] from atan2_16::@14 atan2_16::@6 + [37] (word) atan2_16::angle#12 ← phi( atan2_16::@14/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [37] (byte) atan2_16::i#2 ← phi( atan2_16::@14/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) + [37] (signed word) atan2_16::xi#3 ← phi( atan2_16::@14/(signed word) atan2_16::xi#7 atan2_16::@6/(signed word) atan2_16::xi#0 ) + [37] (signed word) atan2_16::yi#3 ← phi( atan2_16::@14/(signed word) atan2_16::yi#7 atan2_16::@6/(signed word) atan2_16::yi#0 ) + [38] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 + to:atan2_16::@12 +atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@14 + [39] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@14/(word) atan2_16::angle#13 ) + [40] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 + [41] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 + to:atan2_16::@16 +atan2_16::@16: scope:[atan2_16] from atan2_16::@12 + [42] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 + to:atan2_16::@7 +atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@16 + [43] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@16/(word) atan2_16::angle#4 ) + [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 + to:atan2_16::@9 +atan2_16::@9: scope:[atan2_16] from atan2_16::@7 + [45] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 + to:atan2_16::@8 +atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9 + [46] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) + to:atan2_16::@return +atan2_16::@return: scope:[atan2_16] from atan2_16::@8 + [47] return + to:@return +atan2_16::@11: scope:[atan2_16] from atan2_16::@10 + [48] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 + [49] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 + [50] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 + to:atan2_16::@15 +atan2_16::@15: scope:[atan2_16] from atan2_16::@11 + [51] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 + [52] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 + [53] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 + [54] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) + to:atan2_16::@14 +atan2_16::@14: scope:[atan2_16] from atan2_16::@13 atan2_16::@15 + [55] (signed word) atan2_16::xi#7 ← phi( atan2_16::@13/(signed word) atan2_16::xi#1 atan2_16::@15/(signed word) atan2_16::xi#2 ) + [55] (word) atan2_16::angle#13 ← phi( atan2_16::@13/(word) atan2_16::angle#2 atan2_16::@15/(word) atan2_16::angle#3 ) + [55] (signed word) atan2_16::yi#7 ← phi( atan2_16::@13/(signed word) atan2_16::yi#1 atan2_16::@15/(signed word) atan2_16::yi#2 ) + [56] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 + [57] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0+(byte) 1) goto atan2_16::@12 + to:atan2_16::@10 +atan2_16::@13: scope:[atan2_16] from atan2_16::@11 + [58] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 + [59] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 + [60] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 + [61] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) + to:atan2_16::@14 +atan2_16::@4: scope:[atan2_16] from atan2_16::@3 + [62] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 + to:atan2_16::@6 +atan2_16::@1: scope:[atan2_16] from atan2_16 + [63] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 + to:atan2_16::@3 +init_font_hex: scope:[init_font_hex] from main + [64] phi() + to:init_font_hex::@1 +init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5 + [65] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 ) + [65] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) + [65] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 ) + to:init_font_hex::@2 +init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4 + [66] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) + [66] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) + [66] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) + [67] *((byte*) init_font_hex::charset#2) ← (byte) 0 + to:init_font_hex::@3 +init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3 + [68] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) + [68] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 ) + [69] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 + [70] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 + [71] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 + [72] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 + [73] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 + [74] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 + [75] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 + to:init_font_hex::@4 +init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3 + [76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 + [77] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 + [78] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 + [79] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 + [80] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 + [81] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 + [82] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 + to:init_font_hex::@5 +init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4 + [83] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 + [84] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 + [85] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 + to:init_font_hex::@return +init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 + [86] return + to:@return + + +VARIABLE REGISTER WEIGHTS +(byte*) CHARSET +(byte*) COLS +(word*) CORDIC_ATAN2_ANGLES_16 +(byte*) CORDIC_ATAN2_ANGLES_8 +(byte) CORDIC_ITERATIONS_16 +(byte) CORDIC_ITERATIONS_8 +(byte*) D018 +(byte[]) FONT_HEX_PROTO +(byte*) SCREEN +(byte*) SCREEN_REF +(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) +(signed word~) atan2_16::$2 4.0 +(byte~) atan2_16::$22 2002.0 +(byte~) atan2_16::$23 2002.0 +(signed word~) atan2_16::$7 4.0 +(word) atan2_16::angle +(word) atan2_16::angle#1 3.0 +(word) atan2_16::angle#11 4.0 +(word) atan2_16::angle#12 364.0 +(word) atan2_16::angle#13 1334.6666666666667 +(word) atan2_16::angle#2 2002.0 +(word) atan2_16::angle#3 2002.0 +(word) atan2_16::angle#4 4.0 +(word) atan2_16::angle#5 4.0 +(word) atan2_16::angle#6 2004.0 +(byte) atan2_16::i +(byte) atan2_16::i#1 1501.5 +(byte) atan2_16::i#2 429.0 +(word) atan2_16::return +(word) atan2_16::return#0 34.99999999999999 +(word) atan2_16::return#2 202.0 +(signed word) atan2_16::x +(signed word) atan2_16::x#0 3.8928571428571437 +(signed word) atan2_16::xd +(signed word) atan2_16::xd#0 600.5999999999999 +(signed word) atan2_16::xi +(signed word) atan2_16::xi#0 6.0 +(signed word) atan2_16::xi#1 500.5 +(signed word) atan2_16::xi#2 500.5 +(signed word) atan2_16::xi#3 801.2 +(signed word) atan2_16::xi#7 1001.0 +(signed word~) atan2_16::xi#8 4.0 +(signed word) atan2_16::y +(signed word) atan2_16::y#0 3.633333333333334 +(signed word) atan2_16::yd +(signed word) atan2_16::yd#0 1501.5 +(signed word) atan2_16::yi +(signed word) atan2_16::yi#0 1.2000000000000002 +(signed word) atan2_16::yi#1 667.3333333333334 +(signed word~) atan2_16::yi#11 4.0 +(signed word) atan2_16::yi#2 667.3333333333334 +(signed word) atan2_16::yi#3 858.2857142857142 +(signed word) atan2_16::yi#7 1001.0 +(void()) init_font_hex((byte*) init_font_hex::charset) +(byte~) init_font_hex::$0 1001.0 +(byte~) init_font_hex::$1 2002.0 +(byte~) init_font_hex::$2 2002.0 +(byte) init_font_hex::c +(byte) init_font_hex::c#1 16.5 +(byte) init_font_hex::c#6 1.1578947368421053 +(byte) init_font_hex::c1 +(byte) init_font_hex::c1#1 151.5 +(byte) init_font_hex::c1#4 13.466666666666667 +(byte*) init_font_hex::charset +(byte*) init_font_hex::charset#0 35.5 +(byte*) init_font_hex::charset#2 108.35714285714285 +(byte*) init_font_hex::charset#5 22.0 +(byte) init_font_hex::i +(byte) init_font_hex::i#1 1501.5 +(byte) init_font_hex::i#2 667.3333333333334 +(byte) init_font_hex::idx +(byte) init_font_hex::idx#2 551.0 +(byte) init_font_hex::idx#3 202.0 +(byte) init_font_hex::idx#5 600.5999999999999 +(byte*) init_font_hex::proto_hi +(byte*) init_font_hex::proto_hi#1 7.333333333333333 +(byte*) init_font_hex::proto_hi#6 56.83333333333334 +(byte*) init_font_hex::proto_lo +(byte*) init_font_hex::proto_lo#1 50.5 +(byte*) init_font_hex::proto_lo#4 92.53846153846155 +(void()) main() +(word~) main::$11 202.0 +(byte~) main::$12 202.0 +(byte~) main::$13 202.0 +(word) main::angle_w +(word) main::angle_w#0 202.0 +(byte*) main::col00 +(byte*) main::screen +(byte*) main::screen#1 35.5 +(byte*) main::screen#2 26.166666666666664 +(byte*) main::screen#4 22.0 +(byte*) main::screen_ref +(byte*) main::screen_ref#1 42.599999999999994 +(byte*) main::screen_ref#2 24.153846153846153 +(byte*) main::screen_ref#4 22.0 +(word~) main::toD0181_$0 +(number~) main::toD0181_$1 +(number~) main::toD0181_$2 +(number~) main::toD0181_$3 +(word~) main::toD0181_$4 +(byte~) main::toD0181_$5 +(number~) main::toD0181_$6 +(number~) main::toD0181_$7 +(number~) main::toD0181_$8 +(byte*) main::toD0181_gfx +(byte) main::toD0181_return +(byte*) main::toD0181_screen +(signed byte) main::x +(signed byte) main::x#1 151.5 +(signed byte) main::x#2 14.428571428571429 +(signed word) main::xw +(word) main::xw#0 50.5 +(signed byte) main::y +(signed byte) main::y#1 16.5 +(signed byte) main::y#4 1.2941176470588236 +(signed word) main::yw +(word) main::yw#0 50.5 + +Initial phi equivalence classes +[ main::y#4 main::y#1 ] +[ main::x#2 main::x#1 ] +[ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] +[ main::screen#2 main::screen#4 main::screen#1 ] +[ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +[ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +[ atan2_16::i#2 atan2_16::i#1 ] +[ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] +[ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] +[ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] +[ init_font_hex::c#6 init_font_hex::c#1 ] +[ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] +[ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +[ init_font_hex::c1#4 init_font_hex::c1#1 ] +[ init_font_hex::i#2 init_font_hex::i#1 ] +[ init_font_hex::idx#5 init_font_hex::idx#2 ] +Added variable main::xw#0 to zero page equivalence class [ main::xw#0 ] +Added variable main::yw#0 to zero page equivalence class [ main::yw#0 ] +Added variable atan2_16::x#0 to zero page equivalence class [ atan2_16::x#0 ] +Added variable atan2_16::y#0 to zero page equivalence class [ atan2_16::y#0 ] +Added variable atan2_16::return#2 to zero page equivalence class [ atan2_16::return#2 ] +Added variable main::angle_w#0 to zero page equivalence class [ main::angle_w#0 ] +Added variable main::$11 to zero page equivalence class [ main::$11 ] +Added variable main::$12 to zero page equivalence class [ main::$12 ] +Added variable main::$13 to zero page equivalence class [ main::$13 ] +Added variable atan2_16::xd#0 to zero page equivalence class [ atan2_16::xd#0 ] +Added variable atan2_16::yd#0 to zero page equivalence class [ atan2_16::yd#0 ] +Added variable atan2_16::$23 to zero page equivalence class [ atan2_16::$23 ] +Added variable atan2_16::$22 to zero page equivalence class [ atan2_16::$22 ] +Added variable init_font_hex::$0 to zero page equivalence class [ init_font_hex::$0 ] +Added variable init_font_hex::$1 to zero page equivalence class [ init_font_hex::$1 ] +Added variable init_font_hex::$2 to zero page equivalence class [ init_font_hex::$2 ] +Added variable init_font_hex::idx#3 to zero page equivalence class [ init_font_hex::idx#3 ] +Complete equivalence classes +[ main::y#4 main::y#1 ] +[ main::x#2 main::x#1 ] +[ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] +[ main::screen#2 main::screen#4 main::screen#1 ] +[ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +[ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +[ atan2_16::i#2 atan2_16::i#1 ] +[ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] +[ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] +[ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] +[ init_font_hex::c#6 init_font_hex::c#1 ] +[ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] +[ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +[ init_font_hex::c1#4 init_font_hex::c1#1 ] +[ init_font_hex::i#2 init_font_hex::i#1 ] +[ init_font_hex::idx#5 init_font_hex::idx#2 ] +[ main::xw#0 ] +[ main::yw#0 ] +[ atan2_16::x#0 ] +[ atan2_16::y#0 ] +[ atan2_16::return#2 ] +[ main::angle_w#0 ] +[ main::$11 ] +[ main::$12 ] +[ main::$13 ] +[ atan2_16::xd#0 ] +[ atan2_16::yd#0 ] +[ atan2_16::$23 ] +[ atan2_16::$22 ] +[ init_font_hex::$0 ] +[ init_font_hex::$1 ] +[ init_font_hex::$2 ] +[ init_font_hex::idx#3 ] +Allocated zp ZP_BYTE:2 [ main::y#4 main::y#1 ] +Allocated zp ZP_BYTE:3 [ main::x#2 main::x#1 ] +Allocated zp ZP_WORD:4 [ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] +Allocated zp ZP_WORD:6 [ main::screen#2 main::screen#4 main::screen#1 ] +Allocated zp ZP_WORD:8 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +Allocated zp ZP_WORD:10 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +Allocated zp ZP_BYTE:12 [ atan2_16::i#2 atan2_16::i#1 ] +Allocated zp ZP_WORD:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] +Allocated zp ZP_WORD:15 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] +Allocated zp ZP_WORD:17 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] +Allocated zp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] +Allocated zp ZP_WORD:20 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] +Allocated zp ZP_WORD:22 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +Allocated zp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Allocated zp ZP_BYTE:25 [ init_font_hex::i#2 init_font_hex::i#1 ] +Allocated zp ZP_BYTE:26 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Allocated zp ZP_WORD:27 [ main::xw#0 ] +Allocated zp ZP_WORD:29 [ main::yw#0 ] +Allocated zp ZP_WORD:31 [ atan2_16::x#0 ] +Allocated zp ZP_WORD:33 [ atan2_16::y#0 ] +Allocated zp ZP_WORD:35 [ atan2_16::return#2 ] +Allocated zp ZP_WORD:37 [ main::angle_w#0 ] +Allocated zp ZP_WORD:39 [ main::$11 ] +Allocated zp ZP_BYTE:41 [ main::$12 ] +Allocated zp ZP_BYTE:42 [ main::$13 ] +Allocated zp ZP_WORD:43 [ atan2_16::xd#0 ] +Allocated zp ZP_WORD:45 [ atan2_16::yd#0 ] +Allocated zp ZP_BYTE:47 [ atan2_16::$23 ] +Allocated zp ZP_BYTE:48 [ atan2_16::$22 ] +Allocated zp ZP_BYTE:49 [ init_font_hex::$0 ] +Allocated zp ZP_BYTE:50 [ init_font_hex::$1 ] +Allocated zp ZP_BYTE:51 [ init_font_hex::$2 ] +Allocated zp ZP_BYTE:52 [ init_font_hex::idx#3 ] + +INITIAL ASM +//SEG0 File Comments +// Find atan2(x, y) using the CORDIC method +// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + // The number of iterations performed during 16-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_16 = $f + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_16 = $1000 + // The number of iterations performed during 8-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_8 = 8 + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_8 = $1100 + .label D018 = $d018 + // Color Ram + .label COLS = $d800 + .label CHARSET = $2000 + .label SCREEN = $2800 + .label SCREEN_REF = $2c00 +//SEG3 @begin +bbegin: + jmp b1 +//SEG4 @1 +b1: +//SEG5 kickasm(location (const word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; i@4] +b4_from_b3: + jmp b4 +//SEG11 @4 +b4: +//SEG12 [5] call main +//SEG13 [7] phi from @4 to main [phi:@4->main] +main_from_b4: + jsr main +//SEG14 [6] phi from @4 to @end [phi:@4->@end] +bend_from_b4: + jmp bend +//SEG15 @end +bend: +//SEG16 main +main: { + .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f + .label _11 = $27 + .label _12 = $29 + .label _13 = $2a + .label xw = $1b + .label yw = $1d + .label angle_w = $25 + .label screen = 6 + .label screen_ref = 4 + .label x = 3 + .label y = 2 + //SEG17 [8] call init_font_hex + //SEG18 [64] phi from main to init_font_hex [phi:main->init_font_hex] + init_font_hex_from_main: + jsr init_font_hex + //SEG19 [9] phi from main to main::toD0181 [phi:main->main::toD0181] + toD0181_from_main: + jmp toD0181 + //SEG20 main::toD0181 + toD0181: + jmp b5 + //SEG21 main::@5 + b5: + //SEG22 [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 + lda #toD0181_return + sta D018 + //SEG23 [11] phi from main::@5 to main::@1 [phi:main::@5->main::@1] + b1_from_b5: + //SEG24 [11] phi (byte*) main::screen#4 = (const byte*) SCREEN#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 + lda #SCREEN + sta screen+1 + //SEG25 [11] phi (byte*) main::screen_ref#4 = (const byte*) SCREEN_REF#0 [phi:main::@5->main::@1#1] -- pbuz1=pbuc1 + lda #SCREEN_REF + sta screen_ref+1 + //SEG26 [11] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@5->main::@1#2] -- vbsz1=vbsc1 + lda #-$c + sta y + jmp b1 + //SEG27 [11] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + b1_from_b3: + //SEG28 [11] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy + //SEG29 [11] phi (byte*) main::screen_ref#4 = (byte*) main::screen_ref#1 [phi:main::@3->main::@1#1] -- register_copy + //SEG30 [11] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#2] -- register_copy + jmp b1 + //SEG31 main::@1 + b1: + //SEG32 [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + //SEG33 [12] phi (byte*) main::screen#2 = (byte*) main::screen#4 [phi:main::@1->main::@2#0] -- register_copy + //SEG34 [12] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#4 [phi:main::@1->main::@2#1] -- register_copy + //SEG35 [12] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#2] -- vbsz1=vbsc1 + lda #-$13 + sta x + jmp b2 + //SEG36 [12] phi from main::@6 to main::@2 [phi:main::@6->main::@2] + b2_from_b6: + //SEG37 [12] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@6->main::@2#0] -- register_copy + //SEG38 [12] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#1 [phi:main::@6->main::@2#1] -- register_copy + //SEG39 [12] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@2#2] -- register_copy + jmp b2 + //SEG40 main::@2 + b2: + //SEG41 [13] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + lda x + ldy #0 + sta xw+1 + sty xw + //SEG42 [14] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + lda y + ldy #0 + sta yw+1 + sty yw + //SEG43 [15] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 -- vwsz1=vwsz2 + lda xw + sta atan2_16.x + lda xw+1 + sta atan2_16.x+1 + //SEG44 [16] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 -- vwsz1=vwsz2 + lda yw + sta atan2_16.y + lda yw+1 + sta atan2_16.y+1 + //SEG45 [17] call atan2_16 + jsr atan2_16 + //SEG46 [18] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 + lda atan2_16.return + sta atan2_16.return_2 + lda atan2_16.return+1 + sta atan2_16.return_2+1 + jmp b6 + //SEG47 main::@6 + b6: + //SEG48 [19] (word) main::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 + lda atan2_16.return_2 + sta angle_w + lda atan2_16.return_2+1 + sta angle_w+1 + //SEG49 [20] (word~) main::$11 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 + lda #$80 + clc + adc angle_w + sta _11 + lda #0 + adc angle_w+1 + sta _11+1 + //SEG50 [21] (byte~) main::$12 ← > (word~) main::$11 -- vbuz1=_hi_vwuz2 + lda _11+1 + sta _12 + //SEG51 [22] (byte~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) -- vbuz1=vbuz2_minus__deref_pbuz3 + lda _12 + sec + ldy #0 + sbc (screen_ref),y + sta _13 + //SEG52 [23] *((byte*) main::screen#2) ← (byte~) main::$13 -- _deref_pbuz1=vbuz2 + //*screen++ = (>angle_w)-angle_b; + //*screen++ = >angle_w; + lda _13 + ldy #0 + sta (screen),y + //SEG53 [24] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 + inc screen + bne !+ + inc screen+1 + !: + //SEG54 [25] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 -- pbuz1=_inc_pbuz1 + inc screen_ref + bne !+ + inc screen_ref+1 + !: + //SEG55 [26] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1 + inc x + //SEG56 [27] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsz1_neq_vbsc1_then_la1 + lda #$15 + cmp x + bne b2_from_b6 + jmp b3 + //SEG57 main::@3 + b3: + //SEG58 [28] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 + inc y + //SEG59 [29] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 + lda #$d + cmp y + bne b1_from_b3 + jmp b4 + //SEG60 main::@4 + b4: + //SEG61 [30] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) -- _deref_pbuc1=_inc__deref_pbuc2 + lda COLS+$c*$28+$13 + clc + adc #1 + sta COLS+$c*$28+$13 + jmp b4 +} +//SEG62 atan2_16 +// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) +// Finding the angle requires a binary search using CORDIC_ITERATIONS_16 +// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) +// atan2_16(signed word zeropage($1f) x, signed word zeropage($21) y) +atan2_16: { + .label _2 = 8 + .label _7 = $a + .label _22 = $30 + .label _23 = $2f + .label yi = 8 + .label xi = $a + .label xd = $2b + .label yd = $2d + .label angle = $f + .label angle_2 = $d + .label angle_3 = $d + .label i = $c + .label return = $f + .label x = $1f + .label y = $21 + .label return_2 = $23 + .label angle_6 = $d + .label angle_12 = $d + .label angle_13 = $d + //SEG63 [31] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 -- vwsz1_gt_0_then_la1 + lda y+1 + bne !+ + lda y + beq !e+ + lsr + !: + bpl b1 + !e: + jmp b2 + //SEG64 atan2_16::@2 + b2: + //SEG65 [32] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + sec + lda #0 + sbc y + sta _2 + lda #0 + sbc y+1 + sta _2+1 + //SEG66 [33] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + b3_from_b1: + b3_from_b2: + //SEG67 [33] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#11 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + jmp b3 + //SEG68 atan2_16::@3 + b3: + //SEG69 [34] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 -- vwsz1_gt_0_then_la1 + lda x+1 + bne !+ + lda x + beq !e+ + lsr + !: + bpl b4 + !e: + jmp b5 + //SEG70 atan2_16::@5 + b5: + //SEG71 [35] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + sec + lda #0 + sbc x + sta _7 + lda #0 + sbc x+1 + sta _7+1 + //SEG72 [36] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + b6_from_b4: + b6_from_b5: + //SEG73 [36] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#8 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + jmp b6 + //SEG74 atan2_16::@6 + b6: + //SEG75 [37] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + b10_from_b6: + //SEG76 [37] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + lda #0 + sta angle_12 + lda #0 + sta angle_12+1 + //SEG77 [37] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 + lda #0 + sta i + //SEG78 [37] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + //SEG79 [37] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + jmp b10 + //SEG80 atan2_16::@10 + b10: + //SEG81 [38] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + lda yi+1 + bne b11 + lda yi + bne b11 + //SEG82 [39] phi from atan2_16::@10 atan2_16::@14 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@14->atan2_16::@12] + b12_from_b10: + b12_from_b14: + //SEG83 [39] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@14->atan2_16::@12#0] -- register_copy + jmp b12 + //SEG84 atan2_16::@12 + b12: + //SEG85 [40] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 + lda angle_6+1 + lsr + sta angle+1 + lda angle_6 + ror + sta angle + //SEG86 [41] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + lda x+1 + bpl b7_from_b12 + jmp b16 + //SEG87 atan2_16::@16 + b16: + //SEG88 [42] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + sec + lda #<$8000 + sbc angle + sta angle + lda #>$8000 + sbc angle+1 + sta angle+1 + //SEG89 [43] phi from atan2_16::@12 atan2_16::@16 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@16->atan2_16::@7] + b7_from_b12: + b7_from_b16: + //SEG90 [43] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@16->atan2_16::@7#0] -- register_copy + jmp b7 + //SEG91 atan2_16::@7 + b7: + //SEG92 [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + lda y+1 + bpl b8_from_b7 + jmp b9 + //SEG93 atan2_16::@9 + b9: + //SEG94 [45] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + sec + lda #0 + sbc angle + sta angle + lda #0 + sbc angle+1 + sta angle+1 + //SEG95 [46] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + b8_from_b7: + b8_from_b9: + //SEG96 [46] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + jmp b8 + //SEG97 atan2_16::@8 + b8: + jmp breturn + //SEG98 atan2_16::@return + breturn: + //SEG99 [47] return + rts + //SEG100 atan2_16::@11 + b11: + //SEG101 [48] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 -- vwsz1=vwsz2_ror_vbuz3 + ldy i + lda xi + sta xd + lda xi+1 + sta xd+1 + cpy #0 + beq !e+ + !: + lda xd+1 + cmp #$80 + ror xd+1 + ror xd + dey + bne !- + !e: + //SEG102 [49] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 -- vwsz1=vwsz2_ror_vbuz3 + ldy i + lda yi + sta yd + lda yi+1 + sta yd+1 + cpy #0 + beq !e+ + !: + lda yd+1 + cmp #$80 + ror yd+1 + ror yd + dey + bne !- + !e: + //SEG103 [50] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 -- vwsz1_gt_0_then_la1 + lda yi+1 + bne !+ + lda yi + beq !e+ + lsr + !: + bpl b13 + !e: + jmp b15 + //SEG104 atan2_16::@15 + b15: + //SEG105 [51] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 -- vwsz1=vwsz1_minus_vwsz2 + lda xi + sec + sbc yd + sta xi + lda xi+1 + sbc yd+1 + sta xi+1 + //SEG106 [52] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 -- vwsz1=vwsz1_plus_vwsz2 + lda yi + clc + adc xd + sta yi + lda yi+1 + adc xd+1 + sta yi+1 + //SEG107 [53] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda i + asl + sta _23 + //SEG108 [54] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 + ldy _23 + sec + lda angle_3 + sbc CORDIC_ATAN2_ANGLES_16,y + sta angle_3 + lda angle_3+1 + sbc CORDIC_ATAN2_ANGLES_16+1,y + sta angle_3+1 + //SEG109 [55] phi from atan2_16::@13 atan2_16::@15 to atan2_16::@14 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14] + b14_from_b13: + b14_from_b15: + //SEG110 [55] phi (signed word) atan2_16::xi#7 = (signed word) atan2_16::xi#1 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#0] -- register_copy + //SEG111 [55] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#1] -- register_copy + //SEG112 [55] phi (signed word) atan2_16::yi#7 = (signed word) atan2_16::yi#1 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#2] -- register_copy + jmp b14 + //SEG113 atan2_16::@14 + b14: + //SEG114 [56] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 + inc i + //SEG115 [57] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 + lda #CORDIC_ITERATIONS_16+1 + cmp i + beq b12_from_b14 + //SEG116 [37] phi from atan2_16::@14 to atan2_16::@10 [phi:atan2_16::@14->atan2_16::@10] + b10_from_b14: + //SEG117 [37] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@14->atan2_16::@10#0] -- register_copy + //SEG118 [37] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@14->atan2_16::@10#1] -- register_copy + //SEG119 [37] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#7 [phi:atan2_16::@14->atan2_16::@10#2] -- register_copy + //SEG120 [37] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#7 [phi:atan2_16::@14->atan2_16::@10#3] -- register_copy + jmp b10 + //SEG121 atan2_16::@13 + b13: + //SEG122 [58] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 -- vwsz1=vwsz1_plus_vwsz2 + lda xi + clc + adc yd + sta xi + lda xi+1 + adc yd+1 + sta xi+1 + //SEG123 [59] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 -- vwsz1=vwsz1_minus_vwsz2 + lda yi + sec + sbc xd + sta yi + lda yi+1 + sbc xd+1 + sta yi+1 + //SEG124 [60] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda i + asl + sta _22 + //SEG125 [61] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 + ldy _22 + clc + lda angle_2 + adc CORDIC_ATAN2_ANGLES_16,y + sta angle_2 + lda angle_2+1 + adc CORDIC_ATAN2_ANGLES_16+1,y + sta angle_2+1 + jmp b14_from_b13 + //SEG126 atan2_16::@4 + b4: + //SEG127 [62] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + lda x + sta xi + lda x+1 + sta xi+1 + jmp b6_from_b4 + //SEG128 atan2_16::@1 + b1: + //SEG129 [63] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + lda y + sta yi + lda y+1 + sta yi+1 + jmp b3_from_b1 +} +//SEG130 init_font_hex +// Make charset from proto chars +// init_font_hex(byte* zeropage($14) charset) +init_font_hex: { + .label _0 = $31 + .label _1 = $32 + .label _2 = $33 + .label idx = $1a + .label i = $19 + .label idx_3 = $34 + .label proto_lo = $16 + .label charset = $14 + .label c1 = $18 + .label proto_hi = $11 + .label c = $13 + //SEG131 [65] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] + b1_from_init_font_hex: + //SEG132 [65] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 + lda #0 + sta c + //SEG133 [65] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 + lda #FONT_HEX_PROTO + sta proto_hi+1 + //SEG134 [65] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 + lda #CHARSET + sta charset+1 + jmp b1 + //SEG135 [65] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] + b1_from_b5: + //SEG136 [65] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy + //SEG137 [65] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy + //SEG138 [65] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy + jmp b1 + //SEG139 init_font_hex::@1 + b1: + //SEG140 [66] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] + b2_from_b1: + //SEG141 [66] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 + lda #0 + sta c1 + //SEG142 [66] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 + lda #FONT_HEX_PROTO + sta proto_lo+1 + //SEG143 [66] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy + jmp b2 + //SEG144 [66] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] + b2_from_b4: + //SEG145 [66] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy + //SEG146 [66] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy + //SEG147 [66] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy + jmp b2 + //SEG148 init_font_hex::@2 + b2: + //SEG149 [67] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (charset),y + //SEG150 [68] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] + b3_from_b2: + //SEG151 [68] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 + lda #1 + sta idx + //SEG152 [68] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuz1=vbuc1 + lda #0 + sta i + jmp b3 + //SEG153 [68] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] + b3_from_b3: + //SEG154 [68] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy + //SEG155 [68] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy + jmp b3 + //SEG156 init_font_hex::@3 + b3: + //SEG157 [69] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuz3_rol_4 + ldy i + lda (proto_hi),y + asl + asl + asl + asl + sta _0 + //SEG158 [70] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuz1=pbuz2_derefidx_vbuz3_rol_1 + ldy i + lda (proto_lo),y + asl + sta _1 + //SEG159 [71] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuz1=vbuz2_bor_vbuz3 + lda _0 + ora _1 + sta _2 + //SEG160 [72] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuz3 + lda _2 + ldy idx + sta (charset),y + //SEG161 [73] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 + inc idx + //SEG162 [74] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuz1=_inc_vbuz1 + inc i + //SEG163 [75] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuz1_neq_vbuc1_then_la1 + lda #5 + cmp i + bne b3_from_b3 + jmp b4 + //SEG164 init_font_hex::@4 + b4: + //SEG165 [76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + lda #0 + ldy idx + sta (charset),y + //SEG166 [77] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuz1=_inc_vbuz2 + ldy idx + iny + sty idx_3 + //SEG167 [78] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + lda #0 + ldy idx_3 + sta (charset),y + //SEG168 [79] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + lda #5 + clc + adc proto_lo + sta proto_lo + bcc !+ + inc proto_lo+1 + !: + //SEG169 [80] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + lda #8 + clc + adc charset + sta charset + bcc !+ + inc charset+1 + !: + //SEG170 [81] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 + inc c1 + //SEG171 [82] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #$10 + cmp c1 + bne b2_from_b4 + jmp b5 + //SEG172 init_font_hex::@5 + b5: + //SEG173 [83] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + lda #5 + clc + adc proto_hi + sta proto_hi + bcc !+ + inc proto_hi+1 + !: + //SEG174 [84] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 + inc c + //SEG175 [85] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$10 + cmp c + bne b1_from_b5 + jmp breturn + //SEG176 init_font_hex::@return + breturn: + //SEG177 [86] return + rts +} +//SEG178 File Data + // Bit patterns for symbols 0-f (3x5 pixels) used in font hex + FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 +.pc = CORDIC_ATAN2_ANGLES_16 "CORDIC_ATAN2_ANGLES_16" + .for (var i=0; i (word~) main::$11 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$12 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$12 ] ) always clobbers reg byte a +Statement [22] (byte~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$13 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$13 ] ) always clobbers reg byte a reg byte y +Statement [23] *((byte*) main::screen#2) ← (byte~) main::$13 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 ] ) always clobbers reg byte y +Statement [30] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) [ ] ( main:5 [ ] ) always clobbers reg byte a +Statement [31] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [32] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [34] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [35] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [38] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ atan2_16::i#2 atan2_16::i#1 ] +Statement [40] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [41] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [42] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [45] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [48] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 ] ) always clobbers reg byte a +Statement [49] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ) always clobbers reg byte a +Statement [50] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ) always clobbers reg byte a +Statement [51] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#2 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [52] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [53] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a +Statement [54] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [58] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [59] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [60] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a +Statement [61] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [62] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#8 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#8 ] ) always clobbers reg byte a +Statement [63] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#11 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#11 ] ) always clobbers reg byte a +Statement [67] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Statement [69] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ init_font_hex::i#2 init_font_hex::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Statement [70] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:49 [ init_font_hex::$0 ] +Statement [76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a +Statement [78] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a +Statement [79] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [80] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [83] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:5::init_font_hex:8 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a +Statement [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:5 [ ] ) always clobbers reg byte a +Statement [13] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::xw#0 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::xw#0 ] ) always clobbers reg byte a reg byte y +Statement [14] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::xw#0 main::yw#0 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::xw#0 main::yw#0 ] ) always clobbers reg byte a reg byte y +Statement [15] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::yw#0 atan2_16::x#0 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [16] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [18] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::return#2 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [19] (word) main::angle_w#0 ← (word) atan2_16::return#2 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::angle_w#0 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::angle_w#0 ] ) always clobbers reg byte a +Statement [20] (word~) main::$11 ← (word) main::angle_w#0 + (byte) $80 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$11 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$11 ] ) always clobbers reg byte a +Statement [21] (byte~) main::$12 ← > (word~) main::$11 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$12 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$12 ] ) always clobbers reg byte a +Statement [22] (byte~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$13 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 main::$13 ] ) always clobbers reg byte a reg byte y +Statement [23] *((byte*) main::screen#2) ← (byte~) main::$13 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 ] ( main:5 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 ] ) always clobbers reg byte y +Statement [30] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) [ ] ( main:5 [ ] ) always clobbers reg byte a +Statement [31] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [32] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [34] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [35] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [38] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [40] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [41] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [42] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [45] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [48] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 ] ) always clobbers reg byte a +Statement [49] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ) always clobbers reg byte a +Statement [50] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::yd#0 ] ) always clobbers reg byte a +Statement [51] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#2 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [52] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [53] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a +Statement [54] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [58] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#0 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [59] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [60] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a +Statement [61] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [62] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#8 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#8 ] ) always clobbers reg byte a +Statement [63] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#11 ] ( main:5::atan2_16:17 [ main::y#4 main::x#2 main::screen_ref#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#11 ] ) always clobbers reg byte a +Statement [67] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y +Statement [69] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a +Statement [70] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a +Statement [76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a +Statement [78] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a +Statement [79] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [80] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:5::init_font_hex:8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [83] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:5::init_font_hex:8 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::y#4 main::y#1 ] : zp ZP_BYTE:2 , reg byte x , +Potential registers zp ZP_BYTE:3 [ main::x#2 main::x#1 ] : zp ZP_BYTE:3 , reg byte x , +Potential registers zp ZP_WORD:4 [ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] : zp ZP_WORD:4 , +Potential registers zp ZP_WORD:6 [ main::screen#2 main::screen#4 main::screen#1 ] : zp ZP_WORD:6 , +Potential registers zp ZP_WORD:8 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp ZP_WORD:8 , +Potential registers zp ZP_WORD:10 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp ZP_WORD:10 , +Potential registers zp ZP_BYTE:12 [ atan2_16::i#2 atan2_16::i#1 ] : zp ZP_BYTE:12 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp ZP_WORD:13 , +Potential registers zp ZP_WORD:15 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] : zp ZP_WORD:15 , +Potential registers zp ZP_WORD:17 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] : zp ZP_WORD:17 , +Potential registers zp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] : zp ZP_BYTE:19 , reg byte x , +Potential registers zp ZP_WORD:20 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] : zp ZP_WORD:20 , +Potential registers zp ZP_WORD:22 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] : zp ZP_WORD:22 , +Potential registers zp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] : zp ZP_BYTE:24 , reg byte x , +Potential registers zp ZP_BYTE:25 [ init_font_hex::i#2 init_font_hex::i#1 ] : zp ZP_BYTE:25 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:26 [ init_font_hex::idx#5 init_font_hex::idx#2 ] : zp ZP_BYTE:26 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:27 [ main::xw#0 ] : zp ZP_WORD:27 , +Potential registers zp ZP_WORD:29 [ main::yw#0 ] : zp ZP_WORD:29 , +Potential registers zp ZP_WORD:31 [ atan2_16::x#0 ] : zp ZP_WORD:31 , +Potential registers zp ZP_WORD:33 [ atan2_16::y#0 ] : zp ZP_WORD:33 , +Potential registers zp ZP_WORD:35 [ atan2_16::return#2 ] : zp ZP_WORD:35 , +Potential registers zp ZP_WORD:37 [ main::angle_w#0 ] : zp ZP_WORD:37 , +Potential registers zp ZP_WORD:39 [ main::$11 ] : zp ZP_WORD:39 , +Potential registers zp ZP_BYTE:41 [ main::$12 ] : zp ZP_BYTE:41 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:42 [ main::$13 ] : zp ZP_BYTE:42 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:43 [ atan2_16::xd#0 ] : zp ZP_WORD:43 , +Potential registers zp ZP_WORD:45 [ atan2_16::yd#0 ] : zp ZP_WORD:45 , +Potential registers zp ZP_BYTE:47 [ atan2_16::$23 ] : zp ZP_BYTE:47 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:48 [ atan2_16::$22 ] : zp ZP_BYTE:48 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:49 [ init_font_hex::$0 ] : zp ZP_BYTE:49 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:50 [ init_font_hex::$1 ] : zp ZP_BYTE:50 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:51 [ init_font_hex::$2 ] : zp ZP_BYTE:51 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:52 [ init_font_hex::idx#3 ] : zp ZP_BYTE:52 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [atan2_16] 7,706.67: zp ZP_WORD:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 3,203.15: zp ZP_WORD:8 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,817.2: zp ZP_WORD:10 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:47 [ atan2_16::$23 ] 2,002: zp ZP_BYTE:48 [ atan2_16::$22 ] 1,930.5: zp ZP_BYTE:12 [ atan2_16::i#2 atan2_16::i#1 ] 1,501.5: zp ZP_WORD:45 [ atan2_16::yd#0 ] 600.6: zp ZP_WORD:43 [ atan2_16::xd#0 ] 202: zp ZP_WORD:35 [ atan2_16::return#2 ] 50: zp ZP_WORD:15 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 3.89: zp ZP_WORD:31 [ atan2_16::x#0 ] 3.63: zp ZP_WORD:33 [ atan2_16::y#0 ] +Uplift Scope [init_font_hex] 2,168.83: zp ZP_BYTE:25 [ init_font_hex::i#2 init_font_hex::i#1 ] 2,002: zp ZP_BYTE:50 [ init_font_hex::$1 ] 2,002: zp ZP_BYTE:51 [ init_font_hex::$2 ] 1,151.6: zp ZP_BYTE:26 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 1,001: zp ZP_BYTE:49 [ init_font_hex::$0 ] 202: zp ZP_BYTE:52 [ init_font_hex::idx#3 ] 165.86: zp ZP_WORD:20 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 164.97: zp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 143.04: zp ZP_WORD:22 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 64.17: zp ZP_WORD:17 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 17.66: zp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplift Scope [main] 202: zp ZP_WORD:37 [ main::angle_w#0 ] 202: zp ZP_WORD:39 [ main::$11 ] 202: zp ZP_BYTE:41 [ main::$12 ] 202: zp ZP_BYTE:42 [ main::$13 ] 165.93: zp ZP_BYTE:3 [ main::x#2 main::x#1 ] 88.75: zp ZP_WORD:4 [ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] 83.67: zp ZP_WORD:6 [ main::screen#2 main::screen#4 main::screen#1 ] 50.5: zp ZP_WORD:27 [ main::xw#0 ] 50.5: zp ZP_WORD:29 [ main::yw#0 ] 17.79: zp ZP_BYTE:2 [ main::y#4 main::y#1 ] +Uplift Scope [] + +Uplifting [atan2_16] best 416005 combination zp ZP_WORD:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:8 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:10 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] zp ZP_BYTE:12 [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:45 [ atan2_16::yd#0 ] zp ZP_WORD:43 [ atan2_16::xd#0 ] zp ZP_WORD:35 [ atan2_16::return#2 ] zp ZP_WORD:15 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:31 [ atan2_16::x#0 ] zp ZP_WORD:33 [ atan2_16::y#0 ] +Uplifting [init_font_hex] best 397005 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp ZP_BYTE:26 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp ZP_BYTE:49 [ init_font_hex::$0 ] zp ZP_BYTE:52 [ init_font_hex::idx#3 ] zp ZP_WORD:20 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp ZP_WORD:22 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp ZP_WORD:17 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] +Limited combination testing to 100 combinations of 6912 possible. +Uplifting [main] best 394805 combination zp ZP_WORD:37 [ main::angle_w#0 ] zp ZP_WORD:39 [ main::$11 ] reg byte a [ main::$12 ] reg byte a [ main::$13 ] reg byte x [ main::x#2 main::x#1 ] zp ZP_WORD:4 [ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] zp ZP_WORD:6 [ main::screen#2 main::screen#4 main::screen#1 ] zp ZP_WORD:27 [ main::xw#0 ] zp ZP_WORD:29 [ main::yw#0 ] zp ZP_BYTE:2 [ main::y#4 main::y#1 ] +Uplifting [] best 394805 combination +Attempting to uplift remaining variables inzp ZP_BYTE:12 [ atan2_16::i#2 atan2_16::i#1 ] +Uplifting [atan2_16] best 394805 combination zp ZP_BYTE:12 [ atan2_16::i#2 atan2_16::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:26 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Uplifting [init_font_hex] best 394805 combination zp ZP_BYTE:26 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Attempting to uplift remaining variables inzp ZP_BYTE:49 [ init_font_hex::$0 ] +Uplifting [init_font_hex] best 394805 combination zp ZP_BYTE:49 [ init_font_hex::$0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:52 [ init_font_hex::idx#3 ] +Uplifting [init_font_hex] best 394205 combination reg byte y [ init_font_hex::idx#3 ] +Attempting to uplift remaining variables inzp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Uplifting [init_font_hex] best 394205 combination zp ZP_BYTE:24 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::y#4 main::y#1 ] +Uplifting [main] best 394205 combination zp ZP_BYTE:2 [ main::y#4 main::y#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplifting [init_font_hex] best 394205 combination zp ZP_BYTE:19 [ init_font_hex::c#6 init_font_hex::c#1 ] +Coalescing zero page register with common assignment [ zp ZP_WORD:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:15 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:27 [ main::xw#0 ] ] with [ zp ZP_WORD:31 [ atan2_16::x#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:29 [ main::yw#0 ] ] with [ zp ZP_WORD:33 [ atan2_16::y#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:35 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:37 [ main::angle_w#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] with [ zp ZP_WORD:35 [ atan2_16::return#2 main::angle_w#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:13 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 main::angle_w#0 ] ] with [ zp ZP_WORD:39 [ main::$11 ] ] - score: 1 +Allocated (was zp ZP_WORD:4) zp ZP_WORD:3 [ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] +Allocated (was zp ZP_WORD:6) zp ZP_WORD:5 [ main::screen#2 main::screen#4 main::screen#1 ] +Allocated (was zp ZP_WORD:8) zp ZP_WORD:7 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +Allocated (was zp ZP_WORD:10) zp ZP_WORD:9 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +Allocated (was zp ZP_BYTE:12) zp ZP_BYTE:11 [ atan2_16::i#2 atan2_16::i#1 ] +Allocated (was zp ZP_WORD:13) zp ZP_WORD:12 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 main::angle_w#0 main::$11 ] +Allocated (was zp ZP_WORD:17) zp ZP_WORD:14 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] +Allocated (was zp ZP_BYTE:19) zp ZP_BYTE:16 [ init_font_hex::c#6 init_font_hex::c#1 ] +Allocated (was zp ZP_WORD:20) zp ZP_WORD:17 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] +Allocated (was zp ZP_WORD:22) zp ZP_WORD:19 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +Allocated (was zp ZP_BYTE:24) zp ZP_BYTE:21 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Allocated (was zp ZP_BYTE:26) zp ZP_BYTE:22 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Allocated (was zp ZP_WORD:27) zp ZP_WORD:23 [ main::xw#0 atan2_16::x#0 ] +Allocated (was zp ZP_WORD:29) zp ZP_WORD:25 [ main::yw#0 atan2_16::y#0 ] +Allocated (was zp ZP_WORD:43) zp ZP_WORD:27 [ atan2_16::xd#0 ] +Allocated (was zp ZP_WORD:45) zp ZP_WORD:29 [ atan2_16::yd#0 ] +Allocated (was zp ZP_BYTE:49) zp ZP_BYTE:31 [ init_font_hex::$0 ] + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 File Comments +// Find atan2(x, y) using the CORDIC method +// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + // The number of iterations performed during 16-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_16 = $f + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_16 = $1000 + // The number of iterations performed during 8-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_8 = 8 + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_8 = $1100 + .label D018 = $d018 + // Color Ram + .label COLS = $d800 + .label CHARSET = $2000 + .label SCREEN = $2800 + .label SCREEN_REF = $2c00 +//SEG3 @begin +bbegin: + jmp b1 +//SEG4 @1 +b1: +//SEG5 kickasm(location (const word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; i@4] +b4_from_b3: + jmp b4 +//SEG11 @4 +b4: +//SEG12 [5] call main +//SEG13 [7] phi from @4 to main [phi:@4->main] +main_from_b4: + jsr main +//SEG14 [6] phi from @4 to @end [phi:@4->@end] +bend_from_b4: + jmp bend +//SEG15 @end +bend: +//SEG16 main +main: { + .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f + .label _11 = $c + .label xw = $17 + .label yw = $19 + .label angle_w = $c + .label screen = 5 + .label screen_ref = 3 + .label y = 2 + //SEG17 [8] call init_font_hex + //SEG18 [64] phi from main to init_font_hex [phi:main->init_font_hex] + init_font_hex_from_main: + jsr init_font_hex + //SEG19 [9] phi from main to main::toD0181 [phi:main->main::toD0181] + toD0181_from_main: + jmp toD0181 + //SEG20 main::toD0181 + toD0181: + jmp b5 + //SEG21 main::@5 + b5: + //SEG22 [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 + lda #toD0181_return + sta D018 + //SEG23 [11] phi from main::@5 to main::@1 [phi:main::@5->main::@1] + b1_from_b5: + //SEG24 [11] phi (byte*) main::screen#4 = (const byte*) SCREEN#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 + lda #SCREEN + sta screen+1 + //SEG25 [11] phi (byte*) main::screen_ref#4 = (const byte*) SCREEN_REF#0 [phi:main::@5->main::@1#1] -- pbuz1=pbuc1 + lda #SCREEN_REF + sta screen_ref+1 + //SEG26 [11] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@5->main::@1#2] -- vbsz1=vbsc1 + lda #-$c + sta y + jmp b1 + //SEG27 [11] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + b1_from_b3: + //SEG28 [11] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy + //SEG29 [11] phi (byte*) main::screen_ref#4 = (byte*) main::screen_ref#1 [phi:main::@3->main::@1#1] -- register_copy + //SEG30 [11] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#2] -- register_copy + jmp b1 + //SEG31 main::@1 + b1: + //SEG32 [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + //SEG33 [12] phi (byte*) main::screen#2 = (byte*) main::screen#4 [phi:main::@1->main::@2#0] -- register_copy + //SEG34 [12] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#4 [phi:main::@1->main::@2#1] -- register_copy + //SEG35 [12] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#2] -- vbsxx=vbsc1 + ldx #-$13 + jmp b2 + //SEG36 [12] phi from main::@6 to main::@2 [phi:main::@6->main::@2] + b2_from_b6: + //SEG37 [12] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@6->main::@2#0] -- register_copy + //SEG38 [12] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#1 [phi:main::@6->main::@2#1] -- register_copy + //SEG39 [12] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@2#2] -- register_copy + jmp b2 + //SEG40 main::@2 + b2: + //SEG41 [13] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 -- vwuz1=vbuxx_word_vbuc1 + ldy #0 + txa + sta xw+1 + sty xw + //SEG42 [14] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + lda y + ldy #0 + sta yw+1 + sty yw + //SEG43 [15] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 + //SEG44 [16] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 + //SEG45 [17] call atan2_16 + jsr atan2_16 + //SEG46 [18] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + jmp b6 + //SEG47 main::@6 + b6: + //SEG48 [19] (word) main::angle_w#0 ← (word) atan2_16::return#2 + //SEG49 [20] (word~) main::$11 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + lda #$80 + clc + adc _11 + sta _11 + bcc !+ + inc _11+1 + !: + //SEG50 [21] (byte~) main::$12 ← > (word~) main::$11 -- vbuaa=_hi_vwuz1 + lda _11+1 + //SEG51 [22] (byte~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) -- vbuaa=vbuaa_minus__deref_pbuz1 + sec + ldy #0 + sbc (screen_ref),y + //SEG52 [23] *((byte*) main::screen#2) ← (byte~) main::$13 -- _deref_pbuz1=vbuaa + //*screen++ = (>angle_w)-angle_b; + //*screen++ = >angle_w; + ldy #0 + sta (screen),y + //SEG53 [24] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 + inc screen + bne !+ + inc screen+1 + !: + //SEG54 [25] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 -- pbuz1=_inc_pbuz1 + inc screen_ref + bne !+ + inc screen_ref+1 + !: + //SEG55 [26] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsxx=_inc_vbsxx + inx + //SEG56 [27] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsxx_neq_vbsc1_then_la1 + cpx #$15 + bne b2_from_b6 + jmp b3 + //SEG57 main::@3 + b3: + //SEG58 [28] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 + inc y + //SEG59 [29] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 + lda #$d + cmp y + bne b1_from_b3 + jmp b4 + //SEG60 main::@4 + b4: + //SEG61 [30] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) -- _deref_pbuc1=_inc__deref_pbuc2 + lda COLS+$c*$28+$13 + clc + adc #1 + sta COLS+$c*$28+$13 + jmp b4 +} +//SEG62 atan2_16 +// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) +// Finding the angle requires a binary search using CORDIC_ITERATIONS_16 +// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) +// atan2_16(signed word zeropage($17) x, signed word zeropage($19) y) +atan2_16: { + .label _2 = 7 + .label _7 = 9 + .label yi = 7 + .label xi = 9 + .label xd = $1b + .label yd = $1d + .label angle = $c + .label i = $b + .label return = $c + .label x = $17 + .label y = $19 + //SEG63 [31] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 -- vwsz1_gt_0_then_la1 + lda y+1 + bne !+ + lda y + beq !e+ + lsr + !: + bpl b1 + !e: + jmp b2 + //SEG64 atan2_16::@2 + b2: + //SEG65 [32] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + sec + lda #0 + sbc y + sta _2 + lda #0 + sbc y+1 + sta _2+1 + //SEG66 [33] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + b3_from_b1: + b3_from_b2: + //SEG67 [33] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#11 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + jmp b3 + //SEG68 atan2_16::@3 + b3: + //SEG69 [34] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 -- vwsz1_gt_0_then_la1 + lda x+1 + bne !+ + lda x + beq !e+ + lsr + !: + bpl b4 + !e: + jmp b5 + //SEG70 atan2_16::@5 + b5: + //SEG71 [35] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + sec + lda #0 + sbc x + sta _7 + lda #0 + sbc x+1 + sta _7+1 + //SEG72 [36] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + b6_from_b4: + b6_from_b5: + //SEG73 [36] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#8 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + jmp b6 + //SEG74 atan2_16::@6 + b6: + //SEG75 [37] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + b10_from_b6: + //SEG76 [37] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + lda #0 + sta angle + lda #0 + sta angle+1 + //SEG77 [37] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 + lda #0 + sta i + //SEG78 [37] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + //SEG79 [37] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + jmp b10 + //SEG80 atan2_16::@10 + b10: + //SEG81 [38] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + lda yi+1 + bne b11 + lda yi + bne b11 + //SEG82 [39] phi from atan2_16::@10 atan2_16::@14 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@14->atan2_16::@12] + b12_from_b10: + b12_from_b14: + //SEG83 [39] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@14->atan2_16::@12#0] -- register_copy + jmp b12 + //SEG84 atan2_16::@12 + b12: + //SEG85 [40] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + lsr angle+1 + ror angle + //SEG86 [41] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + lda x+1 + bpl b7_from_b12 + jmp b16 + //SEG87 atan2_16::@16 + b16: + //SEG88 [42] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + sec + lda #<$8000 + sbc angle + sta angle + lda #>$8000 + sbc angle+1 + sta angle+1 + //SEG89 [43] phi from atan2_16::@12 atan2_16::@16 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@16->atan2_16::@7] + b7_from_b12: + b7_from_b16: + //SEG90 [43] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@16->atan2_16::@7#0] -- register_copy + jmp b7 + //SEG91 atan2_16::@7 + b7: + //SEG92 [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + lda y+1 + bpl b8_from_b7 + jmp b9 + //SEG93 atan2_16::@9 + b9: + //SEG94 [45] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + sec + lda #0 + sbc angle + sta angle + lda #0 + sbc angle+1 + sta angle+1 + //SEG95 [46] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + b8_from_b7: + b8_from_b9: + //SEG96 [46] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + jmp b8 + //SEG97 atan2_16::@8 + b8: + jmp breturn + //SEG98 atan2_16::@return + breturn: + //SEG99 [47] return + rts + //SEG100 atan2_16::@11 + b11: + //SEG101 [48] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 -- vwsz1=vwsz2_ror_vbuz3 + ldy i + lda xi + sta xd + lda xi+1 + sta xd+1 + cpy #0 + beq !e+ + !: + lda xd+1 + cmp #$80 + ror xd+1 + ror xd + dey + bne !- + !e: + //SEG102 [49] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 -- vwsz1=vwsz2_ror_vbuz3 + ldy i + lda yi + sta yd + lda yi+1 + sta yd+1 + cpy #0 + beq !e+ + !: + lda yd+1 + cmp #$80 + ror yd+1 + ror yd + dey + bne !- + !e: + //SEG103 [50] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 -- vwsz1_gt_0_then_la1 + lda yi+1 + bne !+ + lda yi + beq !e+ + lsr + !: + bpl b13 + !e: + jmp b15 + //SEG104 atan2_16::@15 + b15: + //SEG105 [51] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 -- vwsz1=vwsz1_minus_vwsz2 + lda xi + sec + sbc yd + sta xi + lda xi+1 + sbc yd+1 + sta xi+1 + //SEG106 [52] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 -- vwsz1=vwsz1_plus_vwsz2 + lda yi + clc + adc xd + sta yi + lda yi+1 + adc xd+1 + sta yi+1 + //SEG107 [53] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda i + asl + //SEG108 [54] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa + tay + sec + lda angle + sbc CORDIC_ATAN2_ANGLES_16,y + sta angle + lda angle+1 + sbc CORDIC_ATAN2_ANGLES_16+1,y + sta angle+1 + //SEG109 [55] phi from atan2_16::@13 atan2_16::@15 to atan2_16::@14 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14] + b14_from_b13: + b14_from_b15: + //SEG110 [55] phi (signed word) atan2_16::xi#7 = (signed word) atan2_16::xi#1 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#0] -- register_copy + //SEG111 [55] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#1] -- register_copy + //SEG112 [55] phi (signed word) atan2_16::yi#7 = (signed word) atan2_16::yi#1 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#2] -- register_copy + jmp b14 + //SEG113 atan2_16::@14 + b14: + //SEG114 [56] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 + inc i + //SEG115 [57] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 + lda #CORDIC_ITERATIONS_16+1 + cmp i + beq b12_from_b14 + //SEG116 [37] phi from atan2_16::@14 to atan2_16::@10 [phi:atan2_16::@14->atan2_16::@10] + b10_from_b14: + //SEG117 [37] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@14->atan2_16::@10#0] -- register_copy + //SEG118 [37] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@14->atan2_16::@10#1] -- register_copy + //SEG119 [37] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#7 [phi:atan2_16::@14->atan2_16::@10#2] -- register_copy + //SEG120 [37] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#7 [phi:atan2_16::@14->atan2_16::@10#3] -- register_copy + jmp b10 + //SEG121 atan2_16::@13 + b13: + //SEG122 [58] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 -- vwsz1=vwsz1_plus_vwsz2 + lda xi + clc + adc yd + sta xi + lda xi+1 + adc yd+1 + sta xi+1 + //SEG123 [59] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 -- vwsz1=vwsz1_minus_vwsz2 + lda yi + sec + sbc xd + sta yi + lda yi+1 + sbc xd+1 + sta yi+1 + //SEG124 [60] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda i + asl + //SEG125 [61] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa + tay + clc + lda angle + adc CORDIC_ATAN2_ANGLES_16,y + sta angle + lda angle+1 + adc CORDIC_ATAN2_ANGLES_16+1,y + sta angle+1 + jmp b14_from_b13 + //SEG126 atan2_16::@4 + b4: + //SEG127 [62] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + lda x + sta xi + lda x+1 + sta xi+1 + jmp b6_from_b4 + //SEG128 atan2_16::@1 + b1: + //SEG129 [63] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + lda y + sta yi + lda y+1 + sta yi+1 + jmp b3_from_b1 +} +//SEG130 init_font_hex +// Make charset from proto chars +// init_font_hex(byte* zeropage($11) charset) +init_font_hex: { + .label _0 = $1f + .label idx = $16 + .label proto_lo = $13 + .label charset = $11 + .label c1 = $15 + .label proto_hi = $e + .label c = $10 + //SEG131 [65] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] + b1_from_init_font_hex: + //SEG132 [65] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 + lda #0 + sta c + //SEG133 [65] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 + lda #FONT_HEX_PROTO + sta proto_hi+1 + //SEG134 [65] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 + lda #CHARSET + sta charset+1 + jmp b1 + //SEG135 [65] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] + b1_from_b5: + //SEG136 [65] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy + //SEG137 [65] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy + //SEG138 [65] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy + jmp b1 + //SEG139 init_font_hex::@1 + b1: + //SEG140 [66] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] + b2_from_b1: + //SEG141 [66] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 + lda #0 + sta c1 + //SEG142 [66] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 + lda #FONT_HEX_PROTO + sta proto_lo+1 + //SEG143 [66] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy + jmp b2 + //SEG144 [66] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] + b2_from_b4: + //SEG145 [66] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy + //SEG146 [66] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy + //SEG147 [66] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy + jmp b2 + //SEG148 init_font_hex::@2 + b2: + //SEG149 [67] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (charset),y + //SEG150 [68] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] + b3_from_b2: + //SEG151 [68] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 + lda #1 + sta idx + //SEG152 [68] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 + ldx #0 + jmp b3 + //SEG153 [68] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] + b3_from_b3: + //SEG154 [68] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy + //SEG155 [68] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy + jmp b3 + //SEG156 init_font_hex::@3 + b3: + //SEG157 [69] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4 + txa + tay + lda (proto_hi),y + asl + asl + asl + asl + sta _0 + //SEG158 [70] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1 + txa + tay + lda (proto_lo),y + asl + //SEG159 [71] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa + ora _0 + //SEG160 [72] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa + ldy idx + sta (charset),y + //SEG161 [73] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 + inc idx + //SEG162 [74] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx + inx + //SEG163 [75] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 + cpx #5 + bne b3_from_b3 + jmp b4 + //SEG164 init_font_hex::@4 + b4: + //SEG165 [76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + lda #0 + ldy idx + sta (charset),y + //SEG166 [77] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 + ldy idx + iny + //SEG167 [78] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + lda #0 + sta (charset),y + //SEG168 [79] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + lda #5 + clc + adc proto_lo + sta proto_lo + bcc !+ + inc proto_lo+1 + !: + //SEG169 [80] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + lda #8 + clc + adc charset + sta charset + bcc !+ + inc charset+1 + !: + //SEG170 [81] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 + inc c1 + //SEG171 [82] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #$10 + cmp c1 + bne b2_from_b4 + jmp b5 + //SEG172 init_font_hex::@5 + b5: + //SEG173 [83] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + lda #5 + clc + adc proto_hi + sta proto_hi + bcc !+ + inc proto_hi+1 + !: + //SEG174 [84] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 + inc c + //SEG175 [85] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$10 + cmp c + bne b1_from_b5 + jmp breturn + //SEG176 init_font_hex::@return + breturn: + //SEG177 [86] return + rts +} +//SEG178 File Data + // Bit patterns for symbols 0-f (3x5 pixels) used in font hex + FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 +.pc = CORDIC_ATAN2_ANGLES_16 "CORDIC_ATAN2_ANGLES_16" + .for (var i=0; i(word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f +(byte*) main::toD0181_screen +(signed byte) main::x +(signed byte) main::x#1 reg byte x 151.5 +(signed byte) main::x#2 reg byte x 14.428571428571429 +(signed word) main::xw +(word) main::xw#0 xw zp ZP_WORD:23 50.5 +(signed byte) main::y +(signed byte) main::y#1 y zp ZP_BYTE:2 16.5 +(signed byte) main::y#4 y zp ZP_BYTE:2 1.2941176470588236 +(signed word) main::yw +(word) main::yw#0 yw zp ZP_WORD:25 50.5 + +zp ZP_BYTE:2 [ main::y#4 main::y#1 ] +reg byte x [ main::x#2 main::x#1 ] +zp ZP_WORD:3 [ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] +zp ZP_WORD:5 [ main::screen#2 main::screen#4 main::screen#1 ] +zp ZP_WORD:7 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +zp ZP_WORD:9 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +zp ZP_BYTE:11 [ atan2_16::i#2 atan2_16::i#1 ] +zp ZP_WORD:12 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 main::angle_w#0 main::$11 ] +zp ZP_WORD:14 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] +zp ZP_BYTE:16 [ init_font_hex::c#6 init_font_hex::c#1 ] +zp ZP_WORD:17 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] +zp ZP_WORD:19 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +zp ZP_BYTE:21 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] +zp ZP_BYTE:22 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +zp ZP_WORD:23 [ main::xw#0 atan2_16::x#0 ] +zp ZP_WORD:25 [ main::yw#0 atan2_16::y#0 ] +reg byte a [ main::$12 ] +reg byte a [ main::$13 ] +zp ZP_WORD:27 [ atan2_16::xd#0 ] +zp ZP_WORD:29 [ atan2_16::yd#0 ] +reg byte a [ atan2_16::$23 ] +reg byte a [ atan2_16::$22 ] +zp ZP_BYTE:31 [ init_font_hex::$0 ] +reg byte a [ init_font_hex::$1 ] +reg byte a [ init_font_hex::$2 ] +reg byte y [ init_font_hex::idx#3 ] + + +FINAL ASSEMBLER +Score: 367037 + +//SEG0 File Comments +// Find atan2(x, y) using the CORDIC method +// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG2 Global Constants & labels + // The number of iterations performed during 16-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_16 = $f + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_16 = $1000 + // The number of iterations performed during 8-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_8 = 8 + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_8 = $1100 + .label D018 = $d018 + // Color Ram + .label COLS = $d800 + .label CHARSET = $2000 + .label SCREEN = $2800 + .label SCREEN_REF = $2c00 +//SEG3 @begin +//SEG4 @1 +//SEG5 kickasm(location (const word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; i@4] +//SEG11 @4 +//SEG12 [5] call main +//SEG13 [7] phi from @4 to main [phi:@4->main] +//SEG14 [6] phi from @4 to @end [phi:@4->@end] +//SEG15 @end +//SEG16 main +main: { + .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f + .label _11 = $c + .label xw = $17 + .label yw = $19 + .label angle_w = $c + .label screen = 5 + .label screen_ref = 3 + .label y = 2 + //SEG17 [8] call init_font_hex + //SEG18 [64] phi from main to init_font_hex [phi:main->init_font_hex] + jsr init_font_hex + //SEG19 [9] phi from main to main::toD0181 [phi:main->main::toD0181] + //SEG20 main::toD0181 + //SEG21 main::@5 + //SEG22 [10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 + lda #toD0181_return + sta D018 + //SEG23 [11] phi from main::@5 to main::@1 [phi:main::@5->main::@1] + //SEG24 [11] phi (byte*) main::screen#4 = (const byte*) SCREEN#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 + lda #SCREEN + sta screen+1 + //SEG25 [11] phi (byte*) main::screen_ref#4 = (const byte*) SCREEN_REF#0 [phi:main::@5->main::@1#1] -- pbuz1=pbuc1 + lda #SCREEN_REF + sta screen_ref+1 + //SEG26 [11] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@5->main::@1#2] -- vbsz1=vbsc1 + lda #-$c + sta y + //SEG27 [11] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + //SEG28 [11] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy + //SEG29 [11] phi (byte*) main::screen_ref#4 = (byte*) main::screen_ref#1 [phi:main::@3->main::@1#1] -- register_copy + //SEG30 [11] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#2] -- register_copy + //SEG31 main::@1 + b1: + //SEG32 [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + //SEG33 [12] phi (byte*) main::screen#2 = (byte*) main::screen#4 [phi:main::@1->main::@2#0] -- register_copy + //SEG34 [12] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#4 [phi:main::@1->main::@2#1] -- register_copy + //SEG35 [12] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#2] -- vbsxx=vbsc1 + ldx #-$13 + //SEG36 [12] phi from main::@6 to main::@2 [phi:main::@6->main::@2] + //SEG37 [12] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@6->main::@2#0] -- register_copy + //SEG38 [12] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#1 [phi:main::@6->main::@2#1] -- register_copy + //SEG39 [12] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@2#2] -- register_copy + //SEG40 main::@2 + b2: + //SEG41 [13] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 -- vwuz1=vbuxx_word_vbuc1 + ldy #0 + txa + sta xw+1 + sty xw + //SEG42 [14] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + lda y + sta yw+1 + sty yw + //SEG43 [15] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 + //SEG44 [16] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 + //SEG45 [17] call atan2_16 + jsr atan2_16 + //SEG46 [18] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + //SEG47 main::@6 + //SEG48 [19] (word) main::angle_w#0 ← (word) atan2_16::return#2 + //SEG49 [20] (word~) main::$11 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + lda #$80 + clc + adc _11 + sta _11 + bcc !+ + inc _11+1 + !: + //SEG50 [21] (byte~) main::$12 ← > (word~) main::$11 -- vbuaa=_hi_vwuz1 + lda _11+1 + //SEG51 [22] (byte~) main::$13 ← (byte~) main::$12 - *((byte*) main::screen_ref#2) -- vbuaa=vbuaa_minus__deref_pbuz1 + sec + ldy #0 + sbc (screen_ref),y + //SEG52 [23] *((byte*) main::screen#2) ← (byte~) main::$13 -- _deref_pbuz1=vbuaa + //*screen++ = (>angle_w)-angle_b; + //*screen++ = >angle_w; + sta (screen),y + //SEG53 [24] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 + inc screen + bne !+ + inc screen+1 + !: + //SEG54 [25] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 -- pbuz1=_inc_pbuz1 + inc screen_ref + bne !+ + inc screen_ref+1 + !: + //SEG55 [26] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsxx=_inc_vbsxx + inx + //SEG56 [27] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsxx_neq_vbsc1_then_la1 + cpx #$15 + bne b2 + //SEG57 main::@3 + //SEG58 [28] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 + inc y + //SEG59 [29] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 + lda #$d + cmp y + bne b1 + //SEG60 main::@4 + b4: + //SEG61 [30] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) -- _deref_pbuc1=_inc__deref_pbuc2 + lda COLS+$c*$28+$13 + clc + adc #1 + sta COLS+$c*$28+$13 + jmp b4 +} +//SEG62 atan2_16 +// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) +// Finding the angle requires a binary search using CORDIC_ITERATIONS_16 +// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) +// atan2_16(signed word zeropage($17) x, signed word zeropage($19) y) +atan2_16: { + .label _2 = 7 + .label _7 = 9 + .label yi = 7 + .label xi = 9 + .label xd = $1b + .label yd = $1d + .label angle = $c + .label i = $b + .label return = $c + .label x = $17 + .label y = $19 + //SEG63 [31] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 -- vwsz1_gt_0_then_la1 + lda y+1 + bne !+ + lda y + beq !e+ + lsr + !: + bmi !b1+ + jmp b1 + !b1: + !e: + //SEG64 atan2_16::@2 + //SEG65 [32] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + sec + lda #0 + sbc y + sta _2 + lda #0 + sbc y+1 + sta _2+1 + //SEG66 [33] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + //SEG67 [33] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#11 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + //SEG68 atan2_16::@3 + b3: + //SEG69 [34] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 -- vwsz1_gt_0_then_la1 + lda x+1 + bne !+ + lda x + beq !e+ + lsr + !: + bmi !b4+ + jmp b4 + !b4: + !e: + //SEG70 atan2_16::@5 + //SEG71 [35] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + sec + lda #0 + sbc x + sta _7 + lda #0 + sbc x+1 + sta _7+1 + //SEG72 [36] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + //SEG73 [36] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#8 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + //SEG74 atan2_16::@6 + b6: + //SEG75 [37] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + //SEG76 [37] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + lda #0 + sta angle + sta angle+1 + //SEG77 [37] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 + sta i + //SEG78 [37] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + //SEG79 [37] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + //SEG80 atan2_16::@10 + b10: + //SEG81 [38] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + lda yi+1 + bne b11 + lda yi + bne b11 + //SEG82 [39] phi from atan2_16::@10 atan2_16::@14 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@14->atan2_16::@12] + //SEG83 [39] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@14->atan2_16::@12#0] -- register_copy + //SEG84 atan2_16::@12 + b12: + //SEG85 [40] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + lsr angle+1 + ror angle + //SEG86 [41] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + lda x+1 + bpl b7 + //SEG87 atan2_16::@16 + //SEG88 [42] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + sec + lda #<$8000 + sbc angle + sta angle + lda #>$8000 + sbc angle+1 + sta angle+1 + //SEG89 [43] phi from atan2_16::@12 atan2_16::@16 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@16->atan2_16::@7] + //SEG90 [43] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@16->atan2_16::@7#0] -- register_copy + //SEG91 atan2_16::@7 + b7: + //SEG92 [44] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + lda y+1 + bpl b8 + //SEG93 atan2_16::@9 + //SEG94 [45] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + sec + lda #0 + sbc angle + sta angle + lda #0 + sbc angle+1 + sta angle+1 + //SEG95 [46] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + //SEG96 [46] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + //SEG97 atan2_16::@8 + b8: + //SEG98 atan2_16::@return + //SEG99 [47] return + rts + //SEG100 atan2_16::@11 + b11: + //SEG101 [48] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 -- vwsz1=vwsz2_ror_vbuz3 + ldy i + lda xi + sta xd + lda xi+1 + sta xd+1 + cpy #0 + beq !e+ + !: + lda xd+1 + cmp #$80 + ror xd+1 + ror xd + dey + bne !- + !e: + //SEG102 [49] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 -- vwsz1=vwsz2_ror_vbuz3 + ldy i + lda yi + sta yd + lda yi+1 + sta yd+1 + cpy #0 + beq !e+ + !: + lda yd+1 + cmp #$80 + ror yd+1 + ror yd + dey + bne !- + !e: + //SEG103 [50] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 -- vwsz1_gt_0_then_la1 + lda yi+1 + bne !+ + lda yi + beq !e+ + lsr + !: + bpl b13 + !e: + //SEG104 atan2_16::@15 + //SEG105 [51] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 -- vwsz1=vwsz1_minus_vwsz2 + lda xi + sec + sbc yd + sta xi + lda xi+1 + sbc yd+1 + sta xi+1 + //SEG106 [52] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 -- vwsz1=vwsz1_plus_vwsz2 + lda yi + clc + adc xd + sta yi + lda yi+1 + adc xd+1 + sta yi+1 + //SEG107 [53] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda i + asl + //SEG108 [54] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa + tay + sec + lda angle + sbc CORDIC_ATAN2_ANGLES_16,y + sta angle + lda angle+1 + sbc CORDIC_ATAN2_ANGLES_16+1,y + sta angle+1 + //SEG109 [55] phi from atan2_16::@13 atan2_16::@15 to atan2_16::@14 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14] + //SEG110 [55] phi (signed word) atan2_16::xi#7 = (signed word) atan2_16::xi#1 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#0] -- register_copy + //SEG111 [55] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#1] -- register_copy + //SEG112 [55] phi (signed word) atan2_16::yi#7 = (signed word) atan2_16::yi#1 [phi:atan2_16::@13/atan2_16::@15->atan2_16::@14#2] -- register_copy + //SEG113 atan2_16::@14 + b14: + //SEG114 [56] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 + inc i + //SEG115 [57] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 + lda #CORDIC_ITERATIONS_16+1 + cmp i + bne !b12+ + jmp b12 + !b12: + //SEG116 [37] phi from atan2_16::@14 to atan2_16::@10 [phi:atan2_16::@14->atan2_16::@10] + //SEG117 [37] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@14->atan2_16::@10#0] -- register_copy + //SEG118 [37] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@14->atan2_16::@10#1] -- register_copy + //SEG119 [37] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#7 [phi:atan2_16::@14->atan2_16::@10#2] -- register_copy + //SEG120 [37] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#7 [phi:atan2_16::@14->atan2_16::@10#3] -- register_copy + jmp b10 + //SEG121 atan2_16::@13 + b13: + //SEG122 [58] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 -- vwsz1=vwsz1_plus_vwsz2 + lda xi + clc + adc yd + sta xi + lda xi+1 + adc yd+1 + sta xi+1 + //SEG123 [59] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 -- vwsz1=vwsz1_minus_vwsz2 + lda yi + sec + sbc xd + sta yi + lda yi+1 + sbc xd+1 + sta yi+1 + //SEG124 [60] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + lda i + asl + //SEG125 [61] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa + tay + clc + lda angle + adc CORDIC_ATAN2_ANGLES_16,y + sta angle + lda angle+1 + adc CORDIC_ATAN2_ANGLES_16+1,y + sta angle+1 + jmp b14 + //SEG126 atan2_16::@4 + b4: + //SEG127 [62] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + lda x + sta xi + lda x+1 + sta xi+1 + jmp b6 + //SEG128 atan2_16::@1 + b1: + //SEG129 [63] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + lda y + sta yi + lda y+1 + sta yi+1 + jmp b3 +} +//SEG130 init_font_hex +// Make charset from proto chars +// init_font_hex(byte* zeropage($11) charset) +init_font_hex: { + .label _0 = $1f + .label idx = $16 + .label proto_lo = $13 + .label charset = $11 + .label c1 = $15 + .label proto_hi = $e + .label c = $10 + //SEG131 [65] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] + //SEG132 [65] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 + lda #0 + sta c + //SEG133 [65] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 + lda #FONT_HEX_PROTO + sta proto_hi+1 + //SEG134 [65] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 + lda #CHARSET + sta charset+1 + //SEG135 [65] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] + //SEG136 [65] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy + //SEG137 [65] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy + //SEG138 [65] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy + //SEG139 init_font_hex::@1 + b1: + //SEG140 [66] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] + //SEG141 [66] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 + lda #0 + sta c1 + //SEG142 [66] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 + lda #FONT_HEX_PROTO + sta proto_lo+1 + //SEG143 [66] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy + //SEG144 [66] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] + //SEG145 [66] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy + //SEG146 [66] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy + //SEG147 [66] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy + //SEG148 init_font_hex::@2 + b2: + //SEG149 [67] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + lda #0 + tay + sta (charset),y + //SEG150 [68] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] + //SEG151 [68] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 + lda #1 + sta idx + //SEG152 [68] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 + ldx #0 + //SEG153 [68] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] + //SEG154 [68] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy + //SEG155 [68] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy + //SEG156 init_font_hex::@3 + b3: + //SEG157 [69] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4 + txa + tay + lda (proto_hi),y + asl + asl + asl + asl + sta _0 + //SEG158 [70] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1 + txa + tay + lda (proto_lo),y + asl + //SEG159 [71] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa + ora _0 + //SEG160 [72] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa + ldy idx + sta (charset),y + //SEG161 [73] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 + inc idx + //SEG162 [74] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx + inx + //SEG163 [75] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 + cpx #5 + bne b3 + //SEG164 init_font_hex::@4 + //SEG165 [76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + lda #0 + ldy idx + sta (charset),y + //SEG166 [77] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 + iny + //SEG167 [78] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + sta (charset),y + //SEG168 [79] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + lda #5 + clc + adc proto_lo + sta proto_lo + bcc !+ + inc proto_lo+1 + !: + //SEG169 [80] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + lda #8 + clc + adc charset + sta charset + bcc !+ + inc charset+1 + !: + //SEG170 [81] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 + inc c1 + //SEG171 [82] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 + lda #$10 + cmp c1 + bne b2 + //SEG172 init_font_hex::@5 + //SEG173 [83] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + lda #5 + clc + adc proto_hi + sta proto_hi + bcc !+ + inc proto_hi+1 + !: + //SEG174 [84] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 + inc c + //SEG175 [85] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #$10 + cmp c + bne b1 + //SEG176 init_font_hex::@return + //SEG177 [86] return + rts +} +//SEG178 File Data + // Bit patterns for symbols 0-f (3x5 pixels) used in font hex + FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 +.pc = CORDIC_ATAN2_ANGLES_16 "CORDIC_ATAN2_ANGLES_16" + .for (var i=0; i(word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f +(byte*) main::toD0181_screen +(signed byte) main::x +(signed byte) main::x#1 reg byte x 151.5 +(signed byte) main::x#2 reg byte x 14.428571428571429 +(signed word) main::xw +(word) main::xw#0 xw zp ZP_WORD:23 50.5 +(signed byte) main::y +(signed byte) main::y#1 y zp ZP_BYTE:2 16.5 +(signed byte) main::y#4 y zp ZP_BYTE:2 1.2941176470588236 +(signed word) main::yw +(word) main::yw#0 yw zp ZP_WORD:25 50.5 + +zp ZP_BYTE:2 [ main::y#4 main::y#1 ] +reg byte x [ main::x#2 main::x#1 ] +zp ZP_WORD:3 [ main::screen_ref#2 main::screen_ref#4 main::screen_ref#1 ] +zp ZP_WORD:5 [ main::screen#2 main::screen#4 main::screen#1 ] +zp ZP_WORD:7 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +zp ZP_WORD:9 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +zp ZP_BYTE:11 [ atan2_16::i#2 atan2_16::i#1 ] +zp ZP_WORD:12 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 main::angle_w#0 main::$11 ] +zp ZP_WORD:14 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] +zp ZP_BYTE:16 [ init_font_hex::c#6 init_font_hex::c#1 ] +zp ZP_WORD:17 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] +zp ZP_WORD:19 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] +zp ZP_BYTE:21 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] +zp ZP_BYTE:22 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +zp ZP_WORD:23 [ main::xw#0 atan2_16::x#0 ] +zp ZP_WORD:25 [ main::yw#0 atan2_16::y#0 ] +reg byte a [ main::$12 ] +reg byte a [ main::$13 ] +zp ZP_WORD:27 [ atan2_16::xd#0 ] +zp ZP_WORD:29 [ atan2_16::yd#0 ] +reg byte a [ atan2_16::$23 ] +reg byte a [ atan2_16::$22 ] +zp ZP_BYTE:31 [ init_font_hex::$0 ] +reg byte a [ init_font_hex::$1 ] +reg byte a [ init_font_hex::$2 ] +reg byte y [ init_font_hex::idx#3 ] diff --git a/src/test/ref/cordic-atan2.asm b/src/test/ref/cordic-atan2.asm index 9674c58db..4e757cc04 100644 --- a/src/test/ref/cordic-atan2.asm +++ b/src/test/ref/cordic-atan2.asm @@ -6,12 +6,17 @@ .label D018 = $d018 // Color Ram .label COLS = $d800 + // The number of iterations performed during 16-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_16 = $f + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_16 = $1000 + // The number of iterations performed during 8-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_8 = 8 + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_8 = $1100 .label CHARSET = $2000 .label SCREEN = $2800 - // The number of iterations performed during CORDIC atan2 calculation - .const CORDIC_ITERATIONS = 8 - // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... - .label CORDIC_ATAN2_ANGLES = $1000 +// Populate cordic angles table // Populate cordic angles table main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f @@ -31,7 +36,7 @@ main: { lda #-$13 sta x b2: - jsr atan2 + jsr atan2_8 txa ldy #0 sta (screen),y @@ -56,16 +61,16 @@ main: { } // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS -// Returns the angle in hex-degrees (0=0, 128=PI, 256=2*PI) -// atan2(signed byte zeropage(3) x, signed byte zeropage(2) y) -atan2: { +// Returns the angle in hex-degrees (0=0, 0x80=PI, 0x100=2*PI) +// atan2_8(signed byte zeropage(3) x, signed byte zeropage(2) y) +atan2_8: { .label _7 = 6 - .label x = 3 - .label y = 2 .label xi = 6 .label xd = $12 .label angle = 8 .label i = 7 + .label x = 3 + .label y = 2 lda y cmp #0 beq !+ @@ -161,11 +166,11 @@ atan2: { lda angle ldy i sec - sbc CORDIC_ATAN2_ANGLES,y + sbc CORDIC_ATAN2_ANGLES_8,y sta angle b14: inc i - lda #CORDIC_ITERATIONS+1 + lda #CORDIC_ITERATIONS_8+1 cmp i beq b12 jmp b10 @@ -181,7 +186,7 @@ atan2: { lda angle ldy i clc - adc CORDIC_ATAN2_ANGLES,y + adc CORDIC_ATAN2_ANGLES_8,y sta angle jmp b14 b4: @@ -284,6 +289,10 @@ init_font_hex: { } // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 -.pc = CORDIC_ATAN2_ANGLES "CORDIC_ATAN2_ANGLES" - .fill CORDIC_ITERATIONS, 2*256*atan(1/pow(2,i))/PI/2 +.pc = CORDIC_ATAN2_ANGLES_16 "CORDIC_ATAN2_ANGLES_16" + .for (var i=0; i(signed byte) 0) goto atan2::@1 - to:atan2::@2 -atan2::@2: scope:[atan2] from atan2 - [24] (signed byte~) atan2::$2 ← - (signed byte) atan2::y#0 - to:atan2::@3 -atan2::@3: scope:[atan2] from atan2::@1 atan2::@2 - [25] (signed byte) atan2::yi#0 ← phi( atan2::@1/(signed byte~) atan2::yi#11 atan2::@2/(signed byte~) atan2::$2 ) - [26] if((signed byte) atan2::x#0>(signed byte) 0) goto atan2::@4 - to:atan2::@5 -atan2::@5: scope:[atan2] from atan2::@3 - [27] (signed byte~) atan2::$7 ← - (signed byte) atan2::x#0 - to:atan2::@6 -atan2::@6: scope:[atan2] from atan2::@4 atan2::@5 - [28] (signed byte) atan2::xi#0 ← phi( atan2::@4/(signed byte~) atan2::xi#8 atan2::@5/(signed byte~) atan2::$7 ) - to:atan2::@10 -atan2::@10: scope:[atan2] from atan2::@14 atan2::@6 - [29] (byte) atan2::angle#12 ← phi( atan2::@14/(byte) atan2::angle#13 atan2::@6/(byte) 0 ) - [29] (byte) atan2::i#2 ← phi( atan2::@14/(byte) atan2::i#1 atan2::@6/(byte) 0 ) - [29] (signed byte) atan2::xi#3 ← phi( atan2::@14/(signed byte) atan2::xi#7 atan2::@6/(signed byte) atan2::xi#0 ) - [29] (signed byte) atan2::yi#3 ← phi( atan2::@14/(signed byte) atan2::yi#7 atan2::@6/(signed byte) atan2::yi#0 ) - [30] if((signed byte) atan2::yi#3!=(signed byte) 0) goto atan2::@11 - to:atan2::@12 -atan2::@12: scope:[atan2] from atan2::@10 atan2::@14 - [31] (byte) atan2::angle#6 ← phi( atan2::@10/(byte) atan2::angle#12 atan2::@14/(byte) atan2::angle#13 ) - [32] (byte) atan2::angle#1 ← (byte) atan2::angle#6 >> (byte) 1 - [33] if((signed byte) atan2::x#0>=(signed byte) 0) goto atan2::@7 - to:atan2::@16 -atan2::@16: scope:[atan2] from atan2::@12 - [34] (byte) atan2::angle#4 ← (byte) $80 - (byte) atan2::angle#1 - to:atan2::@7 -atan2::@7: scope:[atan2] from atan2::@12 atan2::@16 - [35] (byte) atan2::angle#11 ← phi( atan2::@12/(byte) atan2::angle#1 atan2::@16/(byte) atan2::angle#4 ) - [36] if((signed byte) atan2::y#0>=(signed byte) 0) goto atan2::@8 - to:atan2::@9 -atan2::@9: scope:[atan2] from atan2::@7 - [37] (byte) atan2::angle#5 ← - (byte) atan2::angle#11 - to:atan2::@8 -atan2::@8: scope:[atan2] from atan2::@7 atan2::@9 - [38] (byte) atan2::return#1 ← phi( atan2::@9/(byte) atan2::angle#5 atan2::@7/(byte) atan2::angle#11 ) - to:atan2::@return -atan2::@return: scope:[atan2] from atan2::@8 - [39] return +atan2_8: scope:[atan2_8] from main::@2 + [24] if((signed byte) atan2_8::y#0>(signed byte) 0) goto atan2_8::@1 + to:atan2_8::@2 +atan2_8::@2: scope:[atan2_8] from atan2_8 + [25] (signed byte~) atan2_8::$2 ← - (signed byte) atan2_8::y#0 + to:atan2_8::@3 +atan2_8::@3: scope:[atan2_8] from atan2_8::@1 atan2_8::@2 + [26] (signed byte) atan2_8::yi#0 ← phi( atan2_8::@1/(signed byte~) atan2_8::yi#11 atan2_8::@2/(signed byte~) atan2_8::$2 ) + [27] if((signed byte) atan2_8::x#0>(signed byte) 0) goto atan2_8::@4 + to:atan2_8::@5 +atan2_8::@5: scope:[atan2_8] from atan2_8::@3 + [28] (signed byte~) atan2_8::$7 ← - (signed byte) atan2_8::x#0 + to:atan2_8::@6 +atan2_8::@6: scope:[atan2_8] from atan2_8::@4 atan2_8::@5 + [29] (signed byte) atan2_8::xi#0 ← phi( atan2_8::@4/(signed byte~) atan2_8::xi#8 atan2_8::@5/(signed byte~) atan2_8::$7 ) + to:atan2_8::@10 +atan2_8::@10: scope:[atan2_8] from atan2_8::@14 atan2_8::@6 + [30] (byte) atan2_8::angle#12 ← phi( atan2_8::@14/(byte) atan2_8::angle#13 atan2_8::@6/(byte) 0 ) + [30] (byte) atan2_8::i#2 ← phi( atan2_8::@14/(byte) atan2_8::i#1 atan2_8::@6/(byte) 0 ) + [30] (signed byte) atan2_8::xi#3 ← phi( atan2_8::@14/(signed byte) atan2_8::xi#7 atan2_8::@6/(signed byte) atan2_8::xi#0 ) + [30] (signed byte) atan2_8::yi#3 ← phi( atan2_8::@14/(signed byte) atan2_8::yi#7 atan2_8::@6/(signed byte) atan2_8::yi#0 ) + [31] if((signed byte) atan2_8::yi#3!=(signed byte) 0) goto atan2_8::@11 + to:atan2_8::@12 +atan2_8::@12: scope:[atan2_8] from atan2_8::@10 atan2_8::@14 + [32] (byte) atan2_8::angle#6 ← phi( atan2_8::@10/(byte) atan2_8::angle#12 atan2_8::@14/(byte) atan2_8::angle#13 ) + [33] (byte) atan2_8::angle#1 ← (byte) atan2_8::angle#6 >> (byte) 1 + [34] if((signed byte) atan2_8::x#0>=(signed byte) 0) goto atan2_8::@7 + to:atan2_8::@16 +atan2_8::@16: scope:[atan2_8] from atan2_8::@12 + [35] (byte) atan2_8::angle#4 ← (byte) $80 - (byte) atan2_8::angle#1 + to:atan2_8::@7 +atan2_8::@7: scope:[atan2_8] from atan2_8::@12 atan2_8::@16 + [36] (byte) atan2_8::angle#11 ← phi( atan2_8::@12/(byte) atan2_8::angle#1 atan2_8::@16/(byte) atan2_8::angle#4 ) + [37] if((signed byte) atan2_8::y#0>=(signed byte) 0) goto atan2_8::@8 + to:atan2_8::@9 +atan2_8::@9: scope:[atan2_8] from atan2_8::@7 + [38] (byte) atan2_8::angle#5 ← - (byte) atan2_8::angle#11 + to:atan2_8::@8 +atan2_8::@8: scope:[atan2_8] from atan2_8::@7 atan2_8::@9 + [39] (byte) atan2_8::return#0 ← phi( atan2_8::@9/(byte) atan2_8::angle#5 atan2_8::@7/(byte) atan2_8::angle#11 ) + to:atan2_8::@return +atan2_8::@return: scope:[atan2_8] from atan2_8::@8 + [40] return to:@return -atan2::@11: scope:[atan2] from atan2::@10 - [40] (signed byte) atan2::xd#0 ← (signed byte) atan2::xi#3 >> (byte) atan2::i#2 - [41] (signed byte) atan2::yd#0 ← (signed byte) atan2::yi#3 >> (byte) atan2::i#2 - [42] if((signed byte) atan2::yi#3>(signed byte) 0) goto atan2::@13 - to:atan2::@15 -atan2::@15: scope:[atan2] from atan2::@11 - [43] (signed byte) atan2::xi#2 ← (signed byte) atan2::xi#3 - (signed byte) atan2::yd#0 - [44] (signed byte) atan2::yi#2 ← (signed byte) atan2::yi#3 + (signed byte) atan2::xd#0 - [45] (byte) atan2::angle#3 ← (byte) atan2::angle#12 - *((const byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#2) - to:atan2::@14 -atan2::@14: scope:[atan2] from atan2::@13 atan2::@15 - [46] (signed byte) atan2::xi#7 ← phi( atan2::@13/(signed byte) atan2::xi#1 atan2::@15/(signed byte) atan2::xi#2 ) - [46] (byte) atan2::angle#13 ← phi( atan2::@13/(byte) atan2::angle#2 atan2::@15/(byte) atan2::angle#3 ) - [46] (signed byte) atan2::yi#7 ← phi( atan2::@13/(signed byte) atan2::yi#1 atan2::@15/(signed byte) atan2::yi#2 ) - [47] (byte) atan2::i#1 ← ++ (byte) atan2::i#2 - [48] if((byte) atan2::i#1==(const byte) CORDIC_ITERATIONS#0+(byte) 1) goto atan2::@12 - to:atan2::@10 -atan2::@13: scope:[atan2] from atan2::@11 - [49] (signed byte) atan2::xi#1 ← (signed byte) atan2::xi#3 + (signed byte) atan2::yd#0 - [50] (signed byte) atan2::yi#1 ← (signed byte) atan2::yi#3 - (signed byte) atan2::xd#0 - [51] (byte) atan2::angle#2 ← (byte) atan2::angle#12 + *((const byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#2) - to:atan2::@14 -atan2::@4: scope:[atan2] from atan2::@3 - [52] (signed byte~) atan2::xi#8 ← (signed byte) atan2::x#0 - to:atan2::@6 -atan2::@1: scope:[atan2] from atan2 - [53] (signed byte~) atan2::yi#11 ← (signed byte) atan2::y#0 - to:atan2::@3 +atan2_8::@11: scope:[atan2_8] from atan2_8::@10 + [41] (signed byte) atan2_8::xd#0 ← (signed byte) atan2_8::xi#3 >> (byte) atan2_8::i#2 + [42] (signed byte) atan2_8::yd#0 ← (signed byte) atan2_8::yi#3 >> (byte) atan2_8::i#2 + [43] if((signed byte) atan2_8::yi#3>(signed byte) 0) goto atan2_8::@13 + to:atan2_8::@15 +atan2_8::@15: scope:[atan2_8] from atan2_8::@11 + [44] (signed byte) atan2_8::xi#2 ← (signed byte) atan2_8::xi#3 - (signed byte) atan2_8::yd#0 + [45] (signed byte) atan2_8::yi#2 ← (signed byte) atan2_8::yi#3 + (signed byte) atan2_8::xd#0 + [46] (byte) atan2_8::angle#3 ← (byte) atan2_8::angle#12 - *((const byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#2) + to:atan2_8::@14 +atan2_8::@14: scope:[atan2_8] from atan2_8::@13 atan2_8::@15 + [47] (signed byte) atan2_8::xi#7 ← phi( atan2_8::@13/(signed byte) atan2_8::xi#1 atan2_8::@15/(signed byte) atan2_8::xi#2 ) + [47] (byte) atan2_8::angle#13 ← phi( atan2_8::@13/(byte) atan2_8::angle#2 atan2_8::@15/(byte) atan2_8::angle#3 ) + [47] (signed byte) atan2_8::yi#7 ← phi( atan2_8::@13/(signed byte) atan2_8::yi#1 atan2_8::@15/(signed byte) atan2_8::yi#2 ) + [48] (byte) atan2_8::i#1 ← ++ (byte) atan2_8::i#2 + [49] if((byte) atan2_8::i#1==(const byte) CORDIC_ITERATIONS_8#0+(byte) 1) goto atan2_8::@12 + to:atan2_8::@10 +atan2_8::@13: scope:[atan2_8] from atan2_8::@11 + [50] (signed byte) atan2_8::xi#1 ← (signed byte) atan2_8::xi#3 + (signed byte) atan2_8::yd#0 + [51] (signed byte) atan2_8::yi#1 ← (signed byte) atan2_8::yi#3 - (signed byte) atan2_8::xd#0 + [52] (byte) atan2_8::angle#2 ← (byte) atan2_8::angle#12 + *((const byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#2) + to:atan2_8::@14 +atan2_8::@4: scope:[atan2_8] from atan2_8::@3 + [53] (signed byte~) atan2_8::xi#8 ← (signed byte) atan2_8::x#0 + to:atan2_8::@6 +atan2_8::@1: scope:[atan2_8] from atan2_8 + [54] (signed byte~) atan2_8::yi#11 ← (signed byte) atan2_8::y#0 + to:atan2_8::@3 init_font_hex: scope:[init_font_hex] from main - [54] phi() + [55] phi() to:init_font_hex::@1 init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5 - [55] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 ) - [55] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) - [55] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 ) + [56] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 ) + [56] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) + [56] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 ) to:init_font_hex::@2 init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4 - [56] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) - [56] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) - [56] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) - [57] *((byte*) init_font_hex::charset#2) ← (byte) 0 + [57] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) + [57] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) + [57] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) + [58] *((byte*) init_font_hex::charset#2) ← (byte) 0 to:init_font_hex::@3 init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3 - [58] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) - [58] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 ) - [59] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 - [60] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 - [61] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 - [62] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 - [63] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 - [64] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 - [65] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 + [59] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) + [59] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 ) + [60] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 + [61] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 + [62] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 + [63] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 + [64] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 + [65] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 + [66] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 to:init_font_hex::@4 init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3 - [66] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 - [67] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 - [68] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 - [69] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 - [70] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 - [71] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 - [72] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 + [67] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 + [68] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 + [69] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 + [70] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 + [71] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 + [72] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 + [73] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 to:init_font_hex::@5 init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4 - [73] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 - [74] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 - [75] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 + [74] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 + [75] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 + [76] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 to:init_font_hex::@return init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 - [76] return + [77] return to:@return diff --git a/src/test/ref/cordic-atan2.log b/src/test/ref/cordic-atan2.log index adf3d3827..e97e2427b 100644 --- a/src/test/ref/cordic-atan2.log +++ b/src/test/ref/cordic-atan2.log @@ -44,30 +44,34 @@ Adding pointer type conversion cast (byte*) CIA2_PORT_B_DDR in (byte*) CIA2_PORT Adding pointer type conversion cast (byte*) CIA2_INTERRUPT in (byte*) CIA2_INTERRUPT ← (number) $dd0d Adding pointer type conversion cast (void()**) KERNEL_IRQ in (void()**) KERNEL_IRQ ← (number) $314 Adding pointer type conversion cast (void()**) HARDWARE_IRQ in (void()**) HARDWARE_IRQ ← (number) $fffe +Adding pointer type conversion cast (word*) CORDIC_ATAN2_ANGLES_16 in (word*) CORDIC_ATAN2_ANGLES_16 ← (number) $1000 +Adding pointer type conversion cast (byte*) CORDIC_ATAN2_ANGLES_8 in (byte*) CORDIC_ATAN2_ANGLES_8 ← (number) $1100 Adding pointer type conversion cast (byte*) CHARSET in (byte*) CHARSET ← (number) $2000 Adding pointer type conversion cast (byte*) SCREEN in (byte*) SCREEN ← (number) $2800 -Adding pointer type conversion cast (byte*) CORDIC_ATAN2_ANGLES in (byte*) CORDIC_ATAN2_ANGLES ← (number) $1000 -Identified constant variable (byte*) CORDIC_ATAN2_ANGLES +Fixing pointer array-indexing *((word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) +Fixing pointer array-indexing *((word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) +Identified constant variable (word*) CORDIC_ATAN2_ANGLES_16 +Identified constant variable (byte*) CORDIC_ATAN2_ANGLES_8 Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (byte*) SCREEN (byte*) CHARSET Culled Empty Block (label) init_font_hex::@6 Culled Empty Block (label) @2 Culled Empty Block (label) @3 Culled Empty Block (label) @4 +Culled Empty Block (label) atan2_8::@9 +Culled Empty Block (label) atan2_8::@10 +Culled Empty Block (label) atan2_8::@11 +Culled Empty Block (label) atan2_8::@12 +Culled Empty Block (label) atan2_8::@20 +Culled Empty Block (label) atan2_8::@21 +Culled Empty Block (label) atan2_8::@23 +Culled Empty Block (label) atan2_8::@24 +Culled Empty Block (label) atan2_8::@14 Culled Empty Block (label) main::toD0181_@1 Culled Empty Block (label) main::@8 Culled Empty Block (label) main::@7 Culled Empty Block (label) main::@9 Culled Empty Block (label) main::@10 -Culled Empty Block (label) atan2::@9 -Culled Empty Block (label) atan2::@10 -Culled Empty Block (label) atan2::@11 -Culled Empty Block (label) atan2::@12 -Culled Empty Block (label) atan2::@20 -Culled Empty Block (label) atan2::@21 -Culled Empty Block (label) atan2::@23 -Culled Empty Block (label) atan2::@24 -Culled Empty Block (label) atan2::@14 CONTROL FLOW GRAPH SSA @begin: scope:[] from @@ -147,10 +151,169 @@ init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 (byte*) COLS#0 ← ((byte*)) (number) $d800 to:@5 @5: scope:[] from @1 + (byte) CORDIC_ITERATIONS_16#0 ← (number) $f + (word*) CORDIC_ATAN2_ANGLES_16#0 ← ((word*)) (number) $1000 + kickasm(location (word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; i (number) 0 + if((bool~) atan2_8::$0) goto atan2_8::@1 + to:atan2_8::@2 +atan2_8::@1: scope:[atan2_8] from atan2_8 + (signed byte) atan2_8::x#5 ← phi( atan2_8/(signed byte) atan2_8::x#9 ) + (signed byte) atan2_8::y#2 ← phi( atan2_8/(signed byte) atan2_8::y#1 ) + (signed byte~) atan2_8::$3 ← (signed byte) atan2_8::y#2 + to:atan2_8::@3 +atan2_8::@2: scope:[atan2_8] from atan2_8 + (signed byte) atan2_8::x#6 ← phi( atan2_8/(signed byte) atan2_8::x#9 ) + (signed byte) atan2_8::y#3 ← phi( atan2_8/(signed byte) atan2_8::y#1 ) + (signed byte~) atan2_8::$1 ← - (signed byte) atan2_8::y#3 + (signed byte~) atan2_8::$2 ← (signed byte~) atan2_8::$1 + to:atan2_8::@3 +atan2_8::@3: scope:[atan2_8] from atan2_8::@1 atan2_8::@2 + (signed byte) atan2_8::y#15 ← phi( atan2_8::@1/(signed byte) atan2_8::y#2 atan2_8::@2/(signed byte) atan2_8::y#3 ) + (signed byte) atan2_8::x#1 ← phi( atan2_8::@1/(signed byte) atan2_8::x#5 atan2_8::@2/(signed byte) atan2_8::x#6 ) + (signed byte~) atan2_8::$4 ← phi( atan2_8::@1/(signed byte~) atan2_8::$3 atan2_8::@2/(signed byte~) atan2_8::$2 ) + (signed byte) atan2_8::yi#0 ← (signed byte~) atan2_8::$4 + (bool~) atan2_8::$5 ← (signed byte) atan2_8::x#1 > (number) 0 + if((bool~) atan2_8::$5) goto atan2_8::@4 + to:atan2_8::@5 +atan2_8::@4: scope:[atan2_8] from atan2_8::@3 + (signed byte) atan2_8::y#12 ← phi( atan2_8::@3/(signed byte) atan2_8::y#15 ) + (signed byte) atan2_8::yi#9 ← phi( atan2_8::@3/(signed byte) atan2_8::yi#0 ) + (signed byte) atan2_8::x#2 ← phi( atan2_8::@3/(signed byte) atan2_8::x#1 ) + (signed byte~) atan2_8::$8 ← (signed byte) atan2_8::x#2 + to:atan2_8::@6 +atan2_8::@5: scope:[atan2_8] from atan2_8::@3 + (signed byte) atan2_8::y#13 ← phi( atan2_8::@3/(signed byte) atan2_8::y#15 ) + (signed byte) atan2_8::yi#10 ← phi( atan2_8::@3/(signed byte) atan2_8::yi#0 ) + (signed byte) atan2_8::x#3 ← phi( atan2_8::@3/(signed byte) atan2_8::x#1 ) + (signed byte~) atan2_8::$6 ← - (signed byte) atan2_8::x#3 + (signed byte~) atan2_8::$7 ← (signed byte~) atan2_8::$6 + to:atan2_8::@6 +atan2_8::@6: scope:[atan2_8] from atan2_8::@4 atan2_8::@5 + (signed byte) atan2_8::y#9 ← phi( atan2_8::@4/(signed byte) atan2_8::y#12 atan2_8::@5/(signed byte) atan2_8::y#13 ) + (signed byte) atan2_8::x#10 ← phi( atan2_8::@4/(signed byte) atan2_8::x#2 atan2_8::@5/(signed byte) atan2_8::x#3 ) + (signed byte) atan2_8::yi#8 ← phi( atan2_8::@4/(signed byte) atan2_8::yi#9 atan2_8::@5/(signed byte) atan2_8::yi#10 ) + (signed byte~) atan2_8::$9 ← phi( atan2_8::@4/(signed byte~) atan2_8::$8 atan2_8::@5/(signed byte~) atan2_8::$7 ) + (signed byte) atan2_8::xi#0 ← (signed byte~) atan2_8::$9 + (byte) atan2_8::angle#0 ← (number) 0 + (byte) atan2_8::i#0 ← (byte) 0 + to:atan2_8::@15 +atan2_8::@15: scope:[atan2_8] from atan2_8::@19 atan2_8::@6 + (signed byte) atan2_8::y#7 ← phi( atan2_8::@19/(signed byte) atan2_8::y#8 atan2_8::@6/(signed byte) atan2_8::y#9 ) + (signed byte) atan2_8::x#7 ← phi( atan2_8::@19/(signed byte) atan2_8::x#8 atan2_8::@6/(signed byte) atan2_8::x#10 ) + (byte) atan2_8::angle#12 ← phi( atan2_8::@19/(byte) atan2_8::angle#13 atan2_8::@6/(byte) atan2_8::angle#0 ) + (byte) atan2_8::i#6 ← phi( atan2_8::@19/(byte) atan2_8::i#1 atan2_8::@6/(byte) atan2_8::i#0 ) + (signed byte) atan2_8::xi#6 ← phi( atan2_8::@19/(signed byte) atan2_8::xi#7 atan2_8::@6/(signed byte) atan2_8::xi#0 ) + (signed byte) atan2_8::yi#3 ← phi( atan2_8::@19/(signed byte) atan2_8::yi#7 atan2_8::@6/(signed byte) atan2_8::yi#8 ) + (bool~) atan2_8::$17 ← (signed byte) atan2_8::yi#3 == (number) 0 + (bool~) atan2_8::$18 ← ! (bool~) atan2_8::$17 + if((bool~) atan2_8::$18) goto atan2_8::@16 + to:atan2_8::@17 +atan2_8::@16: scope:[atan2_8] from atan2_8::@15 + (signed byte) atan2_8::y#14 ← phi( atan2_8::@15/(signed byte) atan2_8::y#7 ) + (signed byte) atan2_8::x#13 ← phi( atan2_8::@15/(signed byte) atan2_8::x#7 ) + (byte) atan2_8::angle#14 ← phi( atan2_8::@15/(byte) atan2_8::angle#12 ) + (signed byte) atan2_8::yi#4 ← phi( atan2_8::@15/(signed byte) atan2_8::yi#3 ) + (byte) atan2_8::i#2 ← phi( atan2_8::@15/(byte) atan2_8::i#6 ) + (signed byte) atan2_8::xi#3 ← phi( atan2_8::@15/(signed byte) atan2_8::xi#6 ) + (signed byte~) atan2_8::$19 ← (signed byte) atan2_8::xi#3 >> (byte) atan2_8::i#2 + (signed byte) atan2_8::xd#0 ← (signed byte~) atan2_8::$19 + (signed byte~) atan2_8::$20 ← (signed byte) atan2_8::yi#4 >> (byte) atan2_8::i#2 + (signed byte) atan2_8::yd#0 ← (signed byte~) atan2_8::$20 + (bool~) atan2_8::$21 ← (signed byte) atan2_8::yi#4 > (number) 0 + if((bool~) atan2_8::$21) goto atan2_8::@18 + to:atan2_8::@22 +atan2_8::@17: scope:[atan2_8] from atan2_8::@15 atan2_8::@19 + (signed byte) atan2_8::y#5 ← phi( atan2_8::@15/(signed byte) atan2_8::y#7 atan2_8::@19/(signed byte) atan2_8::y#8 ) + (signed byte) atan2_8::x#4 ← phi( atan2_8::@15/(signed byte) atan2_8::x#7 atan2_8::@19/(signed byte) atan2_8::x#8 ) + (byte) atan2_8::angle#6 ← phi( atan2_8::@15/(byte) atan2_8::angle#12 atan2_8::@19/(byte) atan2_8::angle#13 ) + (number~) atan2_8::$10 ← (byte) atan2_8::angle#6 / (number) 2 + (byte) atan2_8::angle#1 ← (number~) atan2_8::$10 + (bool~) atan2_8::$11 ← (signed byte) atan2_8::x#4 < (number) 0 + (bool~) atan2_8::$12 ← ! (bool~) atan2_8::$11 + if((bool~) atan2_8::$12) goto atan2_8::@7 + to:atan2_8::@25 +atan2_8::@18: scope:[atan2_8] from atan2_8::@16 + (signed byte) atan2_8::y#10 ← phi( atan2_8::@16/(signed byte) atan2_8::y#14 ) + (signed byte) atan2_8::x#11 ← phi( atan2_8::@16/(signed byte) atan2_8::x#13 ) + (byte) atan2_8::i#3 ← phi( atan2_8::@16/(byte) atan2_8::i#2 ) + (byte) atan2_8::angle#7 ← phi( atan2_8::@16/(byte) atan2_8::angle#14 ) + (signed byte) atan2_8::xd#1 ← phi( atan2_8::@16/(signed byte) atan2_8::xd#0 ) + (signed byte) atan2_8::yi#5 ← phi( atan2_8::@16/(signed byte) atan2_8::yi#4 ) + (signed byte) atan2_8::yd#1 ← phi( atan2_8::@16/(signed byte) atan2_8::yd#0 ) + (signed byte) atan2_8::xi#4 ← phi( atan2_8::@16/(signed byte) atan2_8::xi#3 ) + (signed byte) atan2_8::xi#1 ← (signed byte) atan2_8::xi#4 + (signed byte) atan2_8::yd#1 + (signed byte) atan2_8::yi#1 ← (signed byte) atan2_8::yi#5 - (signed byte) atan2_8::xd#1 + (byte) atan2_8::angle#2 ← (byte) atan2_8::angle#7 + *((byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#3) + to:atan2_8::@19 +atan2_8::@22: scope:[atan2_8] from atan2_8::@16 + (signed byte) atan2_8::y#11 ← phi( atan2_8::@16/(signed byte) atan2_8::y#14 ) + (signed byte) atan2_8::x#12 ← phi( atan2_8::@16/(signed byte) atan2_8::x#13 ) + (byte) atan2_8::i#4 ← phi( atan2_8::@16/(byte) atan2_8::i#2 ) + (byte) atan2_8::angle#8 ← phi( atan2_8::@16/(byte) atan2_8::angle#14 ) + (signed byte) atan2_8::xd#2 ← phi( atan2_8::@16/(signed byte) atan2_8::xd#0 ) + (signed byte) atan2_8::yi#6 ← phi( atan2_8::@16/(signed byte) atan2_8::yi#4 ) + (signed byte) atan2_8::yd#2 ← phi( atan2_8::@16/(signed byte) atan2_8::yd#0 ) + (signed byte) atan2_8::xi#5 ← phi( atan2_8::@16/(signed byte) atan2_8::xi#3 ) + (signed byte) atan2_8::xi#2 ← (signed byte) atan2_8::xi#5 - (signed byte) atan2_8::yd#2 + (signed byte) atan2_8::yi#2 ← (signed byte) atan2_8::yi#6 + (signed byte) atan2_8::xd#2 + (byte) atan2_8::angle#3 ← (byte) atan2_8::angle#8 - *((byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#4) + to:atan2_8::@19 +atan2_8::@19: scope:[atan2_8] from atan2_8::@18 atan2_8::@22 + (signed byte) atan2_8::y#8 ← phi( atan2_8::@18/(signed byte) atan2_8::y#10 atan2_8::@22/(signed byte) atan2_8::y#11 ) + (signed byte) atan2_8::xi#7 ← phi( atan2_8::@18/(signed byte) atan2_8::xi#1 atan2_8::@22/(signed byte) atan2_8::xi#2 ) + (signed byte) atan2_8::x#8 ← phi( atan2_8::@18/(signed byte) atan2_8::x#11 atan2_8::@22/(signed byte) atan2_8::x#12 ) + (byte) atan2_8::angle#13 ← phi( atan2_8::@18/(byte) atan2_8::angle#2 atan2_8::@22/(byte) atan2_8::angle#3 ) + (signed byte) atan2_8::yi#7 ← phi( atan2_8::@18/(signed byte) atan2_8::yi#1 atan2_8::@22/(signed byte) atan2_8::yi#2 ) + (byte) atan2_8::i#5 ← phi( atan2_8::@18/(byte) atan2_8::i#3 atan2_8::@22/(byte) atan2_8::i#4 ) + (byte) atan2_8::i#1 ← (byte) atan2_8::i#5 + rangenext(0,CORDIC_ITERATIONS_8#0) + (bool~) atan2_8::$22 ← (byte) atan2_8::i#1 != rangelast(0,CORDIC_ITERATIONS_8#0) + if((bool~) atan2_8::$22) goto atan2_8::@15 + to:atan2_8::@17 +atan2_8::@7: scope:[atan2_8] from atan2_8::@17 atan2_8::@25 + (byte) atan2_8::angle#15 ← phi( atan2_8::@17/(byte) atan2_8::angle#1 atan2_8::@25/(byte) atan2_8::angle#4 ) + (signed byte) atan2_8::y#4 ← phi( atan2_8::@17/(signed byte) atan2_8::y#5 atan2_8::@25/(signed byte) atan2_8::y#6 ) + (bool~) atan2_8::$14 ← (signed byte) atan2_8::y#4 < (number) 0 + (bool~) atan2_8::$15 ← ! (bool~) atan2_8::$14 + if((bool~) atan2_8::$15) goto atan2_8::@8 + to:atan2_8::@13 +atan2_8::@25: scope:[atan2_8] from atan2_8::@17 + (signed byte) atan2_8::y#6 ← phi( atan2_8::@17/(signed byte) atan2_8::y#5 ) + (byte) atan2_8::angle#9 ← phi( atan2_8::@17/(byte) atan2_8::angle#1 ) + (number~) atan2_8::$13 ← (number) $80 - (byte) atan2_8::angle#9 + (byte) atan2_8::angle#4 ← (number~) atan2_8::$13 + to:atan2_8::@7 +atan2_8::@8: scope:[atan2_8] from atan2_8::@13 atan2_8::@7 + (byte) atan2_8::angle#10 ← phi( atan2_8::@13/(byte) atan2_8::angle#5 atan2_8::@7/(byte) atan2_8::angle#15 ) + (byte) atan2_8::return#0 ← (byte) atan2_8::angle#10 + to:atan2_8::@return +atan2_8::@13: scope:[atan2_8] from atan2_8::@7 + (byte) atan2_8::angle#11 ← phi( atan2_8::@7/(byte) atan2_8::angle#15 ) + (byte~) atan2_8::$16 ← - (byte) atan2_8::angle#11 + (byte) atan2_8::angle#5 ← (byte~) atan2_8::$16 + to:atan2_8::@8 +atan2_8::@return: scope:[atan2_8] from atan2_8::@8 + (byte) atan2_8::return#3 ← phi( atan2_8::@8/(byte) atan2_8::return#0 ) + (byte) atan2_8::return#1 ← (byte) atan2_8::return#3 + return + to:@return +@7: scope:[] from @6 (byte*) CHARSET#0 ← ((byte*)) (number) $2000 (byte*) SCREEN#0 ← ((byte*)) (number) $2800 - to:@6 -main: scope:[main] from @7 + to:@8 +main: scope:[main] from @8 (byte*) init_font_hex::charset#1 ← (byte*) CHARSET#0 call init_font_hex to:main::@12 @@ -192,17 +355,17 @@ main::@2: scope:[main] from main::@1 main::@13 (byte*) main::screen#3 ← phi( main::@1/(byte*) main::screen#4 main::@13/(byte*) main::screen#1 ) (signed byte) main::y#2 ← phi( main::@1/(signed byte) main::y#4 main::@13/(signed byte) main::y#5 ) (signed byte) main::x#2 ← phi( main::@1/(signed byte) main::x#0 main::@13/(signed byte) main::x#1 ) - (signed byte) atan2::x#0 ← (signed byte) main::x#2 - (signed byte) atan2::y#0 ← (signed byte) main::y#2 - call atan2 - (byte) atan2::return#0 ← (byte) atan2::return#2 + (signed byte) atan2_8::x#0 ← (signed byte) main::x#2 + (signed byte) atan2_8::y#0 ← (signed byte) main::y#2 + call atan2_8 + (byte) atan2_8::return#2 ← (byte) atan2_8::return#1 to:main::@13 main::@13: scope:[main] from main::@2 (signed byte) main::y#5 ← phi( main::@2/(signed byte) main::y#2 ) (signed byte) main::x#3 ← phi( main::@2/(signed byte) main::x#2 ) (byte*) main::screen#2 ← phi( main::@2/(byte*) main::screen#3 ) - (byte) atan2::return#3 ← phi( main::@2/(byte) atan2::return#0 ) - (byte~) main::$4 ← (byte) atan2::return#3 + (byte) atan2_8::return#4 ← phi( main::@2/(byte) atan2_8::return#2 ) + (byte~) main::$4 ← (byte) atan2_8::return#4 (byte) main::angle#0 ← (byte~) main::$4 *((byte*) main::screen#2) ← (byte) main::angle#0 (byte*) main::screen#1 ← ++ (byte*) main::screen#2 @@ -233,163 +396,12 @@ main::@6: scope:[main] from main::@5 main::@return: scope:[main] from main::@5 return to:@return -@6: scope:[] from @5 - (byte) CORDIC_ITERATIONS#0 ← (number) 8 - (byte*) CORDIC_ATAN2_ANGLES#0 ← ((byte*)) (number) $1000 - kickasm(location (byte*) CORDIC_ATAN2_ANGLES#0) {{ .fill CORDIC_ITERATIONS, 2*256*atan(1/pow(2,i))/PI/2 - }} - to:@7 -atan2: scope:[atan2] from main::@2 - (signed byte) atan2::x#9 ← phi( main::@2/(signed byte) atan2::x#0 ) - (signed byte) atan2::y#1 ← phi( main::@2/(signed byte) atan2::y#0 ) - (bool~) atan2::$0 ← (signed byte) atan2::y#1 > (number) 0 - if((bool~) atan2::$0) goto atan2::@1 - to:atan2::@2 -atan2::@1: scope:[atan2] from atan2 - (signed byte) atan2::x#5 ← phi( atan2/(signed byte) atan2::x#9 ) - (signed byte) atan2::y#2 ← phi( atan2/(signed byte) atan2::y#1 ) - (signed byte~) atan2::$3 ← (signed byte) atan2::y#2 - to:atan2::@3 -atan2::@2: scope:[atan2] from atan2 - (signed byte) atan2::x#6 ← phi( atan2/(signed byte) atan2::x#9 ) - (signed byte) atan2::y#3 ← phi( atan2/(signed byte) atan2::y#1 ) - (signed byte~) atan2::$1 ← - (signed byte) atan2::y#3 - (signed byte~) atan2::$2 ← (signed byte~) atan2::$1 - to:atan2::@3 -atan2::@3: scope:[atan2] from atan2::@1 atan2::@2 - (signed byte) atan2::y#15 ← phi( atan2::@1/(signed byte) atan2::y#2 atan2::@2/(signed byte) atan2::y#3 ) - (signed byte) atan2::x#1 ← phi( atan2::@1/(signed byte) atan2::x#5 atan2::@2/(signed byte) atan2::x#6 ) - (signed byte~) atan2::$4 ← phi( atan2::@1/(signed byte~) atan2::$3 atan2::@2/(signed byte~) atan2::$2 ) - (signed byte) atan2::yi#0 ← (signed byte~) atan2::$4 - (bool~) atan2::$5 ← (signed byte) atan2::x#1 > (number) 0 - if((bool~) atan2::$5) goto atan2::@4 - to:atan2::@5 -atan2::@4: scope:[atan2] from atan2::@3 - (signed byte) atan2::y#12 ← phi( atan2::@3/(signed byte) atan2::y#15 ) - (signed byte) atan2::yi#9 ← phi( atan2::@3/(signed byte) atan2::yi#0 ) - (signed byte) atan2::x#2 ← phi( atan2::@3/(signed byte) atan2::x#1 ) - (signed byte~) atan2::$8 ← (signed byte) atan2::x#2 - to:atan2::@6 -atan2::@5: scope:[atan2] from atan2::@3 - (signed byte) atan2::y#13 ← phi( atan2::@3/(signed byte) atan2::y#15 ) - (signed byte) atan2::yi#10 ← phi( atan2::@3/(signed byte) atan2::yi#0 ) - (signed byte) atan2::x#3 ← phi( atan2::@3/(signed byte) atan2::x#1 ) - (signed byte~) atan2::$6 ← - (signed byte) atan2::x#3 - (signed byte~) atan2::$7 ← (signed byte~) atan2::$6 - to:atan2::@6 -atan2::@6: scope:[atan2] from atan2::@4 atan2::@5 - (signed byte) atan2::y#9 ← phi( atan2::@4/(signed byte) atan2::y#12 atan2::@5/(signed byte) atan2::y#13 ) - (signed byte) atan2::x#10 ← phi( atan2::@4/(signed byte) atan2::x#2 atan2::@5/(signed byte) atan2::x#3 ) - (signed byte) atan2::yi#8 ← phi( atan2::@4/(signed byte) atan2::yi#9 atan2::@5/(signed byte) atan2::yi#10 ) - (signed byte~) atan2::$9 ← phi( atan2::@4/(signed byte~) atan2::$8 atan2::@5/(signed byte~) atan2::$7 ) - (signed byte) atan2::xi#0 ← (signed byte~) atan2::$9 - (byte) atan2::angle#0 ← (number) 0 - (byte) atan2::i#0 ← (byte) 0 - to:atan2::@15 -atan2::@15: scope:[atan2] from atan2::@19 atan2::@6 - (signed byte) atan2::y#7 ← phi( atan2::@19/(signed byte) atan2::y#8 atan2::@6/(signed byte) atan2::y#9 ) - (signed byte) atan2::x#7 ← phi( atan2::@19/(signed byte) atan2::x#8 atan2::@6/(signed byte) atan2::x#10 ) - (byte) atan2::angle#12 ← phi( atan2::@19/(byte) atan2::angle#13 atan2::@6/(byte) atan2::angle#0 ) - (byte) atan2::i#6 ← phi( atan2::@19/(byte) atan2::i#1 atan2::@6/(byte) atan2::i#0 ) - (signed byte) atan2::xi#6 ← phi( atan2::@19/(signed byte) atan2::xi#7 atan2::@6/(signed byte) atan2::xi#0 ) - (signed byte) atan2::yi#3 ← phi( atan2::@19/(signed byte) atan2::yi#7 atan2::@6/(signed byte) atan2::yi#8 ) - (bool~) atan2::$16 ← (signed byte) atan2::yi#3 == (number) 0 - (bool~) atan2::$17 ← ! (bool~) atan2::$16 - if((bool~) atan2::$17) goto atan2::@16 - to:atan2::@17 -atan2::@16: scope:[atan2] from atan2::@15 - (signed byte) atan2::y#14 ← phi( atan2::@15/(signed byte) atan2::y#7 ) - (signed byte) atan2::x#13 ← phi( atan2::@15/(signed byte) atan2::x#7 ) - (byte) atan2::angle#14 ← phi( atan2::@15/(byte) atan2::angle#12 ) - (signed byte) atan2::yi#4 ← phi( atan2::@15/(signed byte) atan2::yi#3 ) - (byte) atan2::i#2 ← phi( atan2::@15/(byte) atan2::i#6 ) - (signed byte) atan2::xi#3 ← phi( atan2::@15/(signed byte) atan2::xi#6 ) - (signed byte~) atan2::$18 ← (signed byte) atan2::xi#3 >> (byte) atan2::i#2 - (signed byte) atan2::xd#0 ← (signed byte~) atan2::$18 - (signed byte~) atan2::$19 ← (signed byte) atan2::yi#4 >> (byte) atan2::i#2 - (signed byte) atan2::yd#0 ← (signed byte~) atan2::$19 - (bool~) atan2::$20 ← (signed byte) atan2::yi#4 > (number) 0 - if((bool~) atan2::$20) goto atan2::@18 - to:atan2::@22 -atan2::@17: scope:[atan2] from atan2::@15 atan2::@19 - (signed byte) atan2::y#5 ← phi( atan2::@15/(signed byte) atan2::y#7 atan2::@19/(signed byte) atan2::y#8 ) - (signed byte) atan2::x#4 ← phi( atan2::@15/(signed byte) atan2::x#7 atan2::@19/(signed byte) atan2::x#8 ) - (byte) atan2::angle#6 ← phi( atan2::@15/(byte) atan2::angle#12 atan2::@19/(byte) atan2::angle#13 ) - (byte) atan2::angle#1 ← (byte) atan2::angle#6 / (number) 2 - (bool~) atan2::$10 ← (signed byte) atan2::x#4 < (number) 0 - (bool~) atan2::$11 ← ! (bool~) atan2::$10 - if((bool~) atan2::$11) goto atan2::@7 - to:atan2::@25 -atan2::@18: scope:[atan2] from atan2::@16 - (signed byte) atan2::y#10 ← phi( atan2::@16/(signed byte) atan2::y#14 ) - (signed byte) atan2::x#11 ← phi( atan2::@16/(signed byte) atan2::x#13 ) - (byte) atan2::i#3 ← phi( atan2::@16/(byte) atan2::i#2 ) - (byte) atan2::angle#7 ← phi( atan2::@16/(byte) atan2::angle#14 ) - (signed byte) atan2::xd#1 ← phi( atan2::@16/(signed byte) atan2::xd#0 ) - (signed byte) atan2::yi#5 ← phi( atan2::@16/(signed byte) atan2::yi#4 ) - (signed byte) atan2::yd#1 ← phi( atan2::@16/(signed byte) atan2::yd#0 ) - (signed byte) atan2::xi#4 ← phi( atan2::@16/(signed byte) atan2::xi#3 ) - (signed byte) atan2::xi#1 ← (signed byte) atan2::xi#4 + (signed byte) atan2::yd#1 - (signed byte) atan2::yi#1 ← (signed byte) atan2::yi#5 - (signed byte) atan2::xd#1 - (byte) atan2::angle#2 ← (byte) atan2::angle#7 + *((byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#3) - to:atan2::@19 -atan2::@22: scope:[atan2] from atan2::@16 - (signed byte) atan2::y#11 ← phi( atan2::@16/(signed byte) atan2::y#14 ) - (signed byte) atan2::x#12 ← phi( atan2::@16/(signed byte) atan2::x#13 ) - (byte) atan2::i#4 ← phi( atan2::@16/(byte) atan2::i#2 ) - (byte) atan2::angle#8 ← phi( atan2::@16/(byte) atan2::angle#14 ) - (signed byte) atan2::xd#2 ← phi( atan2::@16/(signed byte) atan2::xd#0 ) - (signed byte) atan2::yi#6 ← phi( atan2::@16/(signed byte) atan2::yi#4 ) - (signed byte) atan2::yd#2 ← phi( atan2::@16/(signed byte) atan2::yd#0 ) - (signed byte) atan2::xi#5 ← phi( atan2::@16/(signed byte) atan2::xi#3 ) - (signed byte) atan2::xi#2 ← (signed byte) atan2::xi#5 - (signed byte) atan2::yd#2 - (signed byte) atan2::yi#2 ← (signed byte) atan2::yi#6 + (signed byte) atan2::xd#2 - (byte) atan2::angle#3 ← (byte) atan2::angle#8 - *((byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#4) - to:atan2::@19 -atan2::@19: scope:[atan2] from atan2::@18 atan2::@22 - (signed byte) atan2::y#8 ← phi( atan2::@18/(signed byte) atan2::y#10 atan2::@22/(signed byte) atan2::y#11 ) - (signed byte) atan2::xi#7 ← phi( atan2::@18/(signed byte) atan2::xi#1 atan2::@22/(signed byte) atan2::xi#2 ) - (signed byte) atan2::x#8 ← phi( atan2::@18/(signed byte) atan2::x#11 atan2::@22/(signed byte) atan2::x#12 ) - (byte) atan2::angle#13 ← phi( atan2::@18/(byte) atan2::angle#2 atan2::@22/(byte) atan2::angle#3 ) - (signed byte) atan2::yi#7 ← phi( atan2::@18/(signed byte) atan2::yi#1 atan2::@22/(signed byte) atan2::yi#2 ) - (byte) atan2::i#5 ← phi( atan2::@18/(byte) atan2::i#3 atan2::@22/(byte) atan2::i#4 ) - (byte) atan2::i#1 ← (byte) atan2::i#5 + rangenext(0,CORDIC_ITERATIONS#0) - (bool~) atan2::$21 ← (byte) atan2::i#1 != rangelast(0,CORDIC_ITERATIONS#0) - if((bool~) atan2::$21) goto atan2::@15 - to:atan2::@17 -atan2::@7: scope:[atan2] from atan2::@17 atan2::@25 - (byte) atan2::angle#15 ← phi( atan2::@17/(byte) atan2::angle#1 atan2::@25/(byte) atan2::angle#4 ) - (signed byte) atan2::y#4 ← phi( atan2::@17/(signed byte) atan2::y#5 atan2::@25/(signed byte) atan2::y#6 ) - (bool~) atan2::$13 ← (signed byte) atan2::y#4 < (number) 0 - (bool~) atan2::$14 ← ! (bool~) atan2::$13 - if((bool~) atan2::$14) goto atan2::@8 - to:atan2::@13 -atan2::@25: scope:[atan2] from atan2::@17 - (signed byte) atan2::y#6 ← phi( atan2::@17/(signed byte) atan2::y#5 ) - (byte) atan2::angle#9 ← phi( atan2::@17/(byte) atan2::angle#1 ) - (number~) atan2::$12 ← (number) $80 - (byte) atan2::angle#9 - (byte) atan2::angle#4 ← (number~) atan2::$12 - to:atan2::@7 -atan2::@8: scope:[atan2] from atan2::@13 atan2::@7 - (byte) atan2::angle#10 ← phi( atan2::@13/(byte) atan2::angle#5 atan2::@7/(byte) atan2::angle#15 ) - (byte) atan2::return#1 ← (byte) atan2::angle#10 - to:atan2::@return -atan2::@13: scope:[atan2] from atan2::@7 - (byte) atan2::angle#11 ← phi( atan2::@7/(byte) atan2::angle#15 ) - (byte~) atan2::$15 ← - (byte) atan2::angle#11 - (byte) atan2::angle#5 ← (byte~) atan2::$15 - to:atan2::@8 -atan2::@return: scope:[atan2] from atan2::@8 - (byte) atan2::return#4 ← phi( atan2::@8/(byte) atan2::return#1 ) - (byte) atan2::return#2 ← (byte) atan2::return#4 - return - to:@return -@7: scope:[] from @6 - call main - to:@8 @8: scope:[] from @7 + call main + to:@9 +@9: scope:[] from @8 to:@end -@end: scope:[] from @8 +@end: scope:[] from @9 SYMBOL TABLE SSA (label) @1 @@ -397,154 +409,160 @@ SYMBOL TABLE SSA (label) @6 (label) @7 (label) @8 +(label) @9 (label) @begin (label) @end (byte*) CHARSET (byte*) CHARSET#0 (byte*) COLS (byte*) COLS#0 -(byte*) CORDIC_ATAN2_ANGLES -(byte*) CORDIC_ATAN2_ANGLES#0 -(byte) CORDIC_ITERATIONS -(byte) CORDIC_ITERATIONS#0 +(word*) CORDIC_ATAN2_ANGLES_16 +(word*) CORDIC_ATAN2_ANGLES_16#0 +(byte*) CORDIC_ATAN2_ANGLES_8 +(byte*) CORDIC_ATAN2_ANGLES_8#0 +(byte) CORDIC_ITERATIONS_16 +(byte) CORDIC_ITERATIONS_16#0 +(byte) CORDIC_ITERATIONS_8 +(byte) CORDIC_ITERATIONS_8#0 (byte*) D018 (byte*) D018#0 (byte[]) FONT_HEX_PROTO (byte[]) FONT_HEX_PROTO#0 (byte*) SCREEN (byte*) SCREEN#0 -(byte()) atan2((signed byte) atan2::x , (signed byte) atan2::y) -(bool~) atan2::$0 -(signed byte~) atan2::$1 -(bool~) atan2::$10 -(bool~) atan2::$11 -(number~) atan2::$12 -(bool~) atan2::$13 -(bool~) atan2::$14 -(byte~) atan2::$15 -(bool~) atan2::$16 -(bool~) atan2::$17 -(signed byte~) atan2::$18 -(signed byte~) atan2::$19 -(signed byte~) atan2::$2 -(bool~) atan2::$20 -(bool~) atan2::$21 -(signed byte~) atan2::$3 -(signed byte~) atan2::$4 -(bool~) atan2::$5 -(signed byte~) atan2::$6 -(signed byte~) atan2::$7 -(signed byte~) atan2::$8 -(signed byte~) atan2::$9 -(label) atan2::@1 -(label) atan2::@13 -(label) atan2::@15 -(label) atan2::@16 -(label) atan2::@17 -(label) atan2::@18 -(label) atan2::@19 -(label) atan2::@2 -(label) atan2::@22 -(label) atan2::@25 -(label) atan2::@3 -(label) atan2::@4 -(label) atan2::@5 -(label) atan2::@6 -(label) atan2::@7 -(label) atan2::@8 -(label) atan2::@return -(byte) atan2::angle -(byte) atan2::angle#0 -(byte) atan2::angle#1 -(byte) atan2::angle#10 -(byte) atan2::angle#11 -(byte) atan2::angle#12 -(byte) atan2::angle#13 -(byte) atan2::angle#14 -(byte) atan2::angle#15 -(byte) atan2::angle#2 -(byte) atan2::angle#3 -(byte) atan2::angle#4 -(byte) atan2::angle#5 -(byte) atan2::angle#6 -(byte) atan2::angle#7 -(byte) atan2::angle#8 -(byte) atan2::angle#9 -(byte) atan2::i -(byte) atan2::i#0 -(byte) atan2::i#1 -(byte) atan2::i#2 -(byte) atan2::i#3 -(byte) atan2::i#4 -(byte) atan2::i#5 -(byte) atan2::i#6 -(byte) atan2::return -(byte) atan2::return#0 -(byte) atan2::return#1 -(byte) atan2::return#2 -(byte) atan2::return#3 -(byte) atan2::return#4 -(signed byte) atan2::x -(signed byte) atan2::x#0 -(signed byte) atan2::x#1 -(signed byte) atan2::x#10 -(signed byte) atan2::x#11 -(signed byte) atan2::x#12 -(signed byte) atan2::x#13 -(signed byte) atan2::x#2 -(signed byte) atan2::x#3 -(signed byte) atan2::x#4 -(signed byte) atan2::x#5 -(signed byte) atan2::x#6 -(signed byte) atan2::x#7 -(signed byte) atan2::x#8 -(signed byte) atan2::x#9 -(signed byte) atan2::xd -(signed byte) atan2::xd#0 -(signed byte) atan2::xd#1 -(signed byte) atan2::xd#2 -(signed byte) atan2::xi -(signed byte) atan2::xi#0 -(signed byte) atan2::xi#1 -(signed byte) atan2::xi#2 -(signed byte) atan2::xi#3 -(signed byte) atan2::xi#4 -(signed byte) atan2::xi#5 -(signed byte) atan2::xi#6 -(signed byte) atan2::xi#7 -(signed byte) atan2::y -(signed byte) atan2::y#0 -(signed byte) atan2::y#1 -(signed byte) atan2::y#10 -(signed byte) atan2::y#11 -(signed byte) atan2::y#12 -(signed byte) atan2::y#13 -(signed byte) atan2::y#14 -(signed byte) atan2::y#15 -(signed byte) atan2::y#2 -(signed byte) atan2::y#3 -(signed byte) atan2::y#4 -(signed byte) atan2::y#5 -(signed byte) atan2::y#6 -(signed byte) atan2::y#7 -(signed byte) atan2::y#8 -(signed byte) atan2::y#9 -(signed byte) atan2::yd -(signed byte) atan2::yd#0 -(signed byte) atan2::yd#1 -(signed byte) atan2::yd#2 -(signed byte) atan2::yi -(signed byte) atan2::yi#0 -(signed byte) atan2::yi#1 -(signed byte) atan2::yi#10 -(signed byte) atan2::yi#2 -(signed byte) atan2::yi#3 -(signed byte) atan2::yi#4 -(signed byte) atan2::yi#5 -(signed byte) atan2::yi#6 -(signed byte) atan2::yi#7 -(signed byte) atan2::yi#8 -(signed byte) atan2::yi#9 +(byte()) atan2_8((signed byte) atan2_8::x , (signed byte) atan2_8::y) +(bool~) atan2_8::$0 +(signed byte~) atan2_8::$1 +(number~) atan2_8::$10 +(bool~) atan2_8::$11 +(bool~) atan2_8::$12 +(number~) atan2_8::$13 +(bool~) atan2_8::$14 +(bool~) atan2_8::$15 +(byte~) atan2_8::$16 +(bool~) atan2_8::$17 +(bool~) atan2_8::$18 +(signed byte~) atan2_8::$19 +(signed byte~) atan2_8::$2 +(signed byte~) atan2_8::$20 +(bool~) atan2_8::$21 +(bool~) atan2_8::$22 +(signed byte~) atan2_8::$3 +(signed byte~) atan2_8::$4 +(bool~) atan2_8::$5 +(signed byte~) atan2_8::$6 +(signed byte~) atan2_8::$7 +(signed byte~) atan2_8::$8 +(signed byte~) atan2_8::$9 +(label) atan2_8::@1 +(label) atan2_8::@13 +(label) atan2_8::@15 +(label) atan2_8::@16 +(label) atan2_8::@17 +(label) atan2_8::@18 +(label) atan2_8::@19 +(label) atan2_8::@2 +(label) atan2_8::@22 +(label) atan2_8::@25 +(label) atan2_8::@3 +(label) atan2_8::@4 +(label) atan2_8::@5 +(label) atan2_8::@6 +(label) atan2_8::@7 +(label) atan2_8::@8 +(label) atan2_8::@return +(byte) atan2_8::angle +(byte) atan2_8::angle#0 +(byte) atan2_8::angle#1 +(byte) atan2_8::angle#10 +(byte) atan2_8::angle#11 +(byte) atan2_8::angle#12 +(byte) atan2_8::angle#13 +(byte) atan2_8::angle#14 +(byte) atan2_8::angle#15 +(byte) atan2_8::angle#2 +(byte) atan2_8::angle#3 +(byte) atan2_8::angle#4 +(byte) atan2_8::angle#5 +(byte) atan2_8::angle#6 +(byte) atan2_8::angle#7 +(byte) atan2_8::angle#8 +(byte) atan2_8::angle#9 +(byte) atan2_8::i +(byte) atan2_8::i#0 +(byte) atan2_8::i#1 +(byte) atan2_8::i#2 +(byte) atan2_8::i#3 +(byte) atan2_8::i#4 +(byte) atan2_8::i#5 +(byte) atan2_8::i#6 +(byte) atan2_8::return +(byte) atan2_8::return#0 +(byte) atan2_8::return#1 +(byte) atan2_8::return#2 +(byte) atan2_8::return#3 +(byte) atan2_8::return#4 +(signed byte) atan2_8::x +(signed byte) atan2_8::x#0 +(signed byte) atan2_8::x#1 +(signed byte) atan2_8::x#10 +(signed byte) atan2_8::x#11 +(signed byte) atan2_8::x#12 +(signed byte) atan2_8::x#13 +(signed byte) atan2_8::x#2 +(signed byte) atan2_8::x#3 +(signed byte) atan2_8::x#4 +(signed byte) atan2_8::x#5 +(signed byte) atan2_8::x#6 +(signed byte) atan2_8::x#7 +(signed byte) atan2_8::x#8 +(signed byte) atan2_8::x#9 +(signed byte) atan2_8::xd +(signed byte) atan2_8::xd#0 +(signed byte) atan2_8::xd#1 +(signed byte) atan2_8::xd#2 +(signed byte) atan2_8::xi +(signed byte) atan2_8::xi#0 +(signed byte) atan2_8::xi#1 +(signed byte) atan2_8::xi#2 +(signed byte) atan2_8::xi#3 +(signed byte) atan2_8::xi#4 +(signed byte) atan2_8::xi#5 +(signed byte) atan2_8::xi#6 +(signed byte) atan2_8::xi#7 +(signed byte) atan2_8::y +(signed byte) atan2_8::y#0 +(signed byte) atan2_8::y#1 +(signed byte) atan2_8::y#10 +(signed byte) atan2_8::y#11 +(signed byte) atan2_8::y#12 +(signed byte) atan2_8::y#13 +(signed byte) atan2_8::y#14 +(signed byte) atan2_8::y#15 +(signed byte) atan2_8::y#2 +(signed byte) atan2_8::y#3 +(signed byte) atan2_8::y#4 +(signed byte) atan2_8::y#5 +(signed byte) atan2_8::y#6 +(signed byte) atan2_8::y#7 +(signed byte) atan2_8::y#8 +(signed byte) atan2_8::y#9 +(signed byte) atan2_8::yd +(signed byte) atan2_8::yd#0 +(signed byte) atan2_8::yd#1 +(signed byte) atan2_8::yd#2 +(signed byte) atan2_8::yi +(signed byte) atan2_8::yi#0 +(signed byte) atan2_8::yi#1 +(signed byte) atan2_8::yi#10 +(signed byte) atan2_8::yi#2 +(signed byte) atan2_8::yi#3 +(signed byte) atan2_8::yi#4 +(signed byte) atan2_8::yi#5 +(signed byte) atan2_8::yi#6 +(signed byte) atan2_8::yi#7 +(signed byte) atan2_8::yi#8 +(signed byte) atan2_8::yi#9 (void()) init_font_hex((byte*) init_font_hex::charset) (byte~) init_font_hex::$0 (byte~) init_font_hex::$1 @@ -690,6 +708,19 @@ Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#4 Adding number conversion cast (unumber) 5 in (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#3 + (number) 5 Adding number conversion cast (unumber) 8 in (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#4 + (number) 8 Adding number conversion cast (unumber) 5 in (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#3 + (number) 5 +Adding number conversion cast (unumber) $f in (byte) CORDIC_ITERATIONS_16#0 ← (number) $f +Adding number conversion cast (unumber) 8 in (byte) CORDIC_ITERATIONS_8#0 ← (number) 8 +Adding number conversion cast (snumber) 0 in (bool~) atan2_8::$0 ← (signed byte) atan2_8::y#1 > (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) atan2_8::$5 ← (signed byte) atan2_8::x#1 > (number) 0 +Adding number conversion cast (unumber) 0 in (byte) atan2_8::angle#0 ← (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) atan2_8::$17 ← (signed byte) atan2_8::yi#3 == (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) atan2_8::$21 ← (signed byte) atan2_8::yi#4 > (number) 0 +Adding number conversion cast (unumber) 2 in (number~) atan2_8::$10 ← (byte) atan2_8::angle#6 / (number) 2 +Adding number conversion cast (unumber) atan2_8::$10 in (number~) atan2_8::$10 ← (byte) atan2_8::angle#6 / (unumber)(number) 2 +Adding number conversion cast (snumber) 0 in (bool~) atan2_8::$11 ← (signed byte) atan2_8::x#4 < (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) atan2_8::$14 ← (signed byte) atan2_8::y#4 < (number) 0 +Adding number conversion cast (unumber) $80 in (number~) atan2_8::$13 ← (number) $80 - (byte) atan2_8::angle#9 +Adding number conversion cast (unumber) atan2_8::$13 in (number~) atan2_8::$13 ← (unumber)(number) $80 - (byte) atan2_8::angle#9 Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (number) $3fff Adding number conversion cast (unumber) main::toD0181_$1#0 in (number~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (unumber)(number) $3fff Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$2#0 ← (unumber~) main::toD0181_$1#0 * (number) 4 @@ -702,17 +733,6 @@ Adding number conversion cast (unumber) main::toD0181_$7#0 in (number~) main::to Adding number conversion cast (unumber) main::toD0181_$8#0 in (number~) main::toD0181_$8#0 ← (unumber~) main::toD0181_$3#0 | (unumber~) main::toD0181_$7#0 Adding number conversion cast (unumber) $c*$28 in (byte*~) main::$2 ← (byte*) COLS#0 + (number) $c*(number) $28 Adding number conversion cast (unumber) $13 in (byte*~) main::$3 ← (byte*~) main::$2 + (number) $13 -Adding number conversion cast (unumber) 8 in (byte) CORDIC_ITERATIONS#0 ← (number) 8 -Adding number conversion cast (snumber) 0 in (bool~) atan2::$0 ← (signed byte) atan2::y#1 > (number) 0 -Adding number conversion cast (snumber) 0 in (bool~) atan2::$5 ← (signed byte) atan2::x#1 > (number) 0 -Adding number conversion cast (unumber) 0 in (byte) atan2::angle#0 ← (number) 0 -Adding number conversion cast (snumber) 0 in (bool~) atan2::$16 ← (signed byte) atan2::yi#3 == (number) 0 -Adding number conversion cast (snumber) 0 in (bool~) atan2::$20 ← (signed byte) atan2::yi#4 > (number) 0 -Adding number conversion cast (unumber) 2 in (byte) atan2::angle#1 ← (byte) atan2::angle#6 / (number) 2 -Adding number conversion cast (snumber) 0 in (bool~) atan2::$10 ← (signed byte) atan2::x#4 < (number) 0 -Adding number conversion cast (snumber) 0 in (bool~) atan2::$13 ← (signed byte) atan2::y#4 < (number) 0 -Adding number conversion cast (unumber) $80 in (number~) atan2::$12 ← (number) $80 - (byte) atan2::angle#9 -Adding number conversion cast (unumber) atan2::$12 in (number~) atan2::$12 ← (unumber)(number) $80 - (byte) atan2::angle#9 Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (byte) to elements in (byte[]) FONT_HEX_PROTO#0 ← { (byte)(number) 2, (byte)(number) 5, (byte)(number) 5, (byte)(number) 5, (byte)(number) 2, (byte)(number) 6, (byte)(number) 2, (byte)(number) 2, (byte)(number) 2, (byte)(number) 7, (byte)(number) 6, (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 7, (byte)(number) 6, (byte)(number) 1, (byte)(number) 2, (byte)(number) 1, (byte)(number) 6, (byte)(number) 5, (byte)(number) 5, (byte)(number) 7, (byte)(number) 1, (byte)(number) 1, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 1, (byte)(number) 6, (byte)(number) 3, (byte)(number) 4, (byte)(number) 6, (byte)(number) 5, (byte)(number) 2, (byte)(number) 7, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 2, (byte)(number) 5, (byte)(number) 2, (byte)(number) 5, (byte)(number) 2, (byte)(number) 2, (byte)(number) 5, (byte)(number) 3, (byte)(number) 1, (byte)(number) 1, (byte)(number) 2, (byte)(number) 5, (byte)(number) 7, (byte)(number) 5, (byte)(number) 5, (byte)(number) 6, (byte)(number) 5, (byte)(number) 6, (byte)(number) 5, (byte)(number) 6, (byte)(number) 2, (byte)(number) 5, (byte)(number) 4, (byte)(number) 5, (byte)(number) 2, (byte)(number) 6, (byte)(number) 5, (byte)(number) 5, (byte)(number) 5, (byte)(number) 6, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 4, (byte)(number) 7, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 4, (byte)(number) 4 } Successful SSA optimization PassNAddArrayNumberTypeConversions @@ -722,13 +742,15 @@ Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (unumber)(number) 0 Inlining cast (byte*) D018#0 ← (byte*)(number) $d018 Inlining cast (byte*) COLS#0 ← (byte*)(number) $d800 +Inlining cast (byte) CORDIC_ITERATIONS_16#0 ← (unumber)(number) $f +Inlining cast (word*) CORDIC_ATAN2_ANGLES_16#0 ← (word*)(number) $1000 +Inlining cast (byte) CORDIC_ITERATIONS_8#0 ← (unumber)(number) 8 +Inlining cast (byte*) CORDIC_ATAN2_ANGLES_8#0 ← (byte*)(number) $1100 +Inlining cast (byte) atan2_8::angle#0 ← (unumber)(number) 0 Inlining cast (byte*) CHARSET#0 ← (byte*)(number) $2000 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $2800 Inlining cast (word~) main::toD0181_$0#0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4#0 ← (word)(byte*) main::toD0181_gfx#1 -Inlining cast (byte) CORDIC_ITERATIONS#0 ← (unumber)(number) 8 -Inlining cast (byte*) CORDIC_ATAN2_ANGLES#0 ← (byte*)(number) $1000 -Inlining cast (byte) atan2::angle#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -821,15 +843,10 @@ Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant pointer cast (byte*) 8192 -Simplifying constant pointer cast (byte*) 10240 -Simplifying constant integer cast $3fff -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 Simplifying constant integer cast $f -Simplifying constant integer cast $13 +Simplifying constant pointer cast (word*) 4096 Simplifying constant integer cast 8 -Simplifying constant pointer cast (byte*) 4096 +Simplifying constant pointer cast (byte*) 4352 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -839,6 +856,13 @@ Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast $80 +Simplifying constant pointer cast (byte*) 8192 +Simplifying constant pointer cast (byte*) 10240 +Simplifying constant integer cast $3fff +Simplifying constant integer cast 4 +Simplifying constant integer cast 4 +Simplifying constant integer cast $f +Simplifying constant integer cast $13 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -849,11 +873,7 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 5 -Finalized unsigned number type (word) $3fff -Finalized unsigned number type (byte) 4 -Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 8 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 @@ -864,17 +884,23 @@ Finalized unsigned number type (byte) 2 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) $80 +Finalized unsigned number type (word) $3fff +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) $f +Finalized unsigned number type (byte) $13 Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to byte in (unumber~) atan2_8::$10 ← (byte) atan2_8::angle#6 / (byte) 2 +Inferred type updated to byte in (unumber~) atan2_8::$13 ← (byte) $80 - (byte) atan2_8::angle#9 Inferred type updated to word in (unumber~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (word) $3fff Inferred type updated to word in (unumber~) main::toD0181_$2#0 ← (word~) main::toD0181_$1#0 * (byte) 4 Inferred type updated to byte in (unumber~) main::toD0181_$3#0 ← > (word~) main::toD0181_$2#0 Inferred type updated to byte in (unumber~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (byte) 4 Inferred type updated to byte in (unumber~) main::toD0181_$7#0 ← (byte~) main::toD0181_$6#0 & (byte) $f Inferred type updated to byte in (unumber~) main::toD0181_$8#0 ← (byte~) main::toD0181_$3#0 | (byte~) main::toD0181_$7#0 -Inferred type updated to byte in (unumber~) atan2::$12 ← (byte) $80 - (byte) atan2::angle#9 -Inversing boolean not [116] (bool~) atan2::$17 ← (signed byte) atan2::yi#3 != (signed byte) 0 from [115] (bool~) atan2::$16 ← (signed byte) atan2::yi#3 == (signed byte) 0 -Inversing boolean not [128] (bool~) atan2::$11 ← (signed byte) atan2::x#4 >= (signed byte) 0 from [127] (bool~) atan2::$10 ← (signed byte) atan2::x#4 < (signed byte) 0 -Inversing boolean not [144] (bool~) atan2::$14 ← (signed byte) atan2::y#4 >= (signed byte) 0 from [143] (bool~) atan2::$13 ← (signed byte) atan2::y#4 < (signed byte) 0 +Inversing boolean not [68] (bool~) atan2_8::$18 ← (signed byte) atan2_8::yi#3 != (signed byte) 0 from [67] (bool~) atan2_8::$17 ← (signed byte) atan2_8::yi#3 == (signed byte) 0 +Inversing boolean not [81] (bool~) atan2_8::$12 ← (signed byte) atan2_8::x#4 >= (signed byte) 0 from [80] (bool~) atan2_8::$11 ← (signed byte) atan2_8::x#4 < (signed byte) 0 +Inversing boolean not [97] (bool~) atan2_8::$15 ← (signed byte) atan2_8::y#4 >= (signed byte) 0 from [96] (bool~) atan2_8::$14 ← (signed byte) atan2_8::y#4 < (signed byte) 0 Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) init_font_hex::charset#3 = (byte*) init_font_hex::charset#4 Alias (byte) init_font_hex::idx#2 = (byte) init_font_hex::idx#6 @@ -883,10 +909,32 @@ Alias (byte) init_font_hex::c1#2 = (byte) init_font_hex::c1#3 Alias (byte*) init_font_hex::proto_hi#2 = (byte*) init_font_hex::proto_hi#5 (byte*) init_font_hex::proto_hi#3 Alias (byte) init_font_hex::c#2 = (byte) init_font_hex::c#3 (byte) init_font_hex::c#4 Alias (byte*) init_font_hex::charset#0 = (byte*) init_font_hex::charset#7 +Alias (signed byte) atan2_8::y#1 = (signed byte) atan2_8::y#2 (signed byte~) atan2_8::$3 (signed byte) atan2_8::y#3 +Alias (signed byte) atan2_8::x#5 = (signed byte) atan2_8::x#9 (signed byte) atan2_8::x#6 +Alias (signed byte~) atan2_8::$2 = (signed byte~) atan2_8::$1 +Alias (signed byte) atan2_8::yi#0 = (signed byte~) atan2_8::$4 (signed byte) atan2_8::yi#9 (signed byte) atan2_8::yi#10 +Alias (signed byte) atan2_8::x#1 = (signed byte) atan2_8::x#2 (signed byte~) atan2_8::$8 (signed byte) atan2_8::x#3 +Alias (signed byte) atan2_8::y#12 = (signed byte) atan2_8::y#15 (signed byte) atan2_8::y#13 +Alias (signed byte~) atan2_8::$7 = (signed byte~) atan2_8::$6 +Alias (signed byte) atan2_8::xi#0 = (signed byte~) atan2_8::$9 +Alias (signed byte) atan2_8::xi#3 = (signed byte) atan2_8::xi#6 (signed byte) atan2_8::xi#4 (signed byte) atan2_8::xi#5 +Alias (byte) atan2_8::i#2 = (byte) atan2_8::i#6 (byte) atan2_8::i#3 (byte) atan2_8::i#4 +Alias (signed byte) atan2_8::yi#3 = (signed byte) atan2_8::yi#4 (signed byte) atan2_8::yi#5 (signed byte) atan2_8::yi#6 +Alias (byte) atan2_8::angle#12 = (byte) atan2_8::angle#14 (byte) atan2_8::angle#7 (byte) atan2_8::angle#8 +Alias (signed byte) atan2_8::x#11 = (signed byte) atan2_8::x#13 (signed byte) atan2_8::x#7 (signed byte) atan2_8::x#12 +Alias (signed byte) atan2_8::y#10 = (signed byte) atan2_8::y#14 (signed byte) atan2_8::y#7 (signed byte) atan2_8::y#11 +Alias (signed byte) atan2_8::xd#0 = (signed byte~) atan2_8::$19 (signed byte) atan2_8::xd#1 (signed byte) atan2_8::xd#2 +Alias (signed byte) atan2_8::yd#0 = (signed byte~) atan2_8::$20 (signed byte) atan2_8::yd#1 (signed byte) atan2_8::yd#2 +Alias (byte) atan2_8::angle#1 = (byte~) atan2_8::$10 (byte) atan2_8::angle#9 +Alias (signed byte) atan2_8::y#5 = (signed byte) atan2_8::y#6 +Alias (byte) atan2_8::angle#4 = (byte~) atan2_8::$13 +Alias (byte) atan2_8::return#0 = (byte) atan2_8::angle#10 (byte) atan2_8::return#3 (byte) atan2_8::return#1 +Alias (byte) atan2_8::angle#11 = (byte) atan2_8::angle#15 +Alias (byte) atan2_8::angle#5 = (byte~) atan2_8::$16 Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1 Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 Alias (byte) main::toD0181_return#0 = (byte~) main::toD0181_$8#0 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$1 -Alias (byte) atan2::return#0 = (byte) atan2::return#3 +Alias (byte) atan2_8::return#2 = (byte) atan2_8::return#4 Alias (byte*) main::screen#2 = (byte*) main::screen#3 Alias (signed byte) main::x#2 = (signed byte) main::x#3 Alias (signed byte) main::y#2 = (signed byte) main::y#5 (signed byte) main::y#3 @@ -894,49 +942,27 @@ Alias (byte) main::angle#0 = (byte~) main::$4 Alias (byte*) main::screen#1 = (byte*) main::screen#5 Alias (byte*) main::col00#0 = (byte*~) main::$3 Alias (byte*) main::col00#1 = (byte*) main::col00#2 -Alias (signed byte) atan2::y#1 = (signed byte) atan2::y#2 (signed byte~) atan2::$3 (signed byte) atan2::y#3 -Alias (signed byte) atan2::x#5 = (signed byte) atan2::x#9 (signed byte) atan2::x#6 -Alias (signed byte~) atan2::$2 = (signed byte~) atan2::$1 -Alias (signed byte) atan2::yi#0 = (signed byte~) atan2::$4 (signed byte) atan2::yi#9 (signed byte) atan2::yi#10 -Alias (signed byte) atan2::x#1 = (signed byte) atan2::x#2 (signed byte~) atan2::$8 (signed byte) atan2::x#3 -Alias (signed byte) atan2::y#12 = (signed byte) atan2::y#15 (signed byte) atan2::y#13 -Alias (signed byte~) atan2::$7 = (signed byte~) atan2::$6 -Alias (signed byte) atan2::xi#0 = (signed byte~) atan2::$9 -Alias (signed byte) atan2::xi#3 = (signed byte) atan2::xi#6 (signed byte) atan2::xi#4 (signed byte) atan2::xi#5 -Alias (byte) atan2::i#2 = (byte) atan2::i#6 (byte) atan2::i#3 (byte) atan2::i#4 -Alias (signed byte) atan2::yi#3 = (signed byte) atan2::yi#4 (signed byte) atan2::yi#5 (signed byte) atan2::yi#6 -Alias (byte) atan2::angle#12 = (byte) atan2::angle#14 (byte) atan2::angle#7 (byte) atan2::angle#8 -Alias (signed byte) atan2::x#11 = (signed byte) atan2::x#13 (signed byte) atan2::x#7 (signed byte) atan2::x#12 -Alias (signed byte) atan2::y#10 = (signed byte) atan2::y#14 (signed byte) atan2::y#7 (signed byte) atan2::y#11 -Alias (signed byte) atan2::xd#0 = (signed byte~) atan2::$18 (signed byte) atan2::xd#1 (signed byte) atan2::xd#2 -Alias (signed byte) atan2::yd#0 = (signed byte~) atan2::$19 (signed byte) atan2::yd#1 (signed byte) atan2::yd#2 -Alias (byte) atan2::angle#1 = (byte) atan2::angle#9 -Alias (signed byte) atan2::y#5 = (signed byte) atan2::y#6 -Alias (byte) atan2::angle#4 = (byte~) atan2::$12 -Alias (byte) atan2::return#1 = (byte) atan2::angle#10 (byte) atan2::return#4 (byte) atan2::return#2 -Alias (byte) atan2::angle#11 = (byte) atan2::angle#15 -Alias (byte) atan2::angle#5 = (byte~) atan2::$15 Successful SSA optimization Pass2AliasElimination -Alias (signed byte) atan2::x#1 = (signed byte) atan2::x#5 (signed byte) atan2::x#10 -Alias (signed byte) atan2::y#1 = (signed byte) atan2::y#12 (signed byte) atan2::y#9 -Alias (signed byte) atan2::yi#0 = (signed byte) atan2::yi#8 -Alias (byte) atan2::i#2 = (byte) atan2::i#5 -Alias (signed byte) atan2::x#11 = (signed byte) atan2::x#8 -Alias (signed byte) atan2::y#10 = (signed byte) atan2::y#8 -Alias (signed byte) atan2::y#4 = (signed byte) atan2::y#5 +Alias (signed byte) atan2_8::x#1 = (signed byte) atan2_8::x#5 (signed byte) atan2_8::x#10 +Alias (signed byte) atan2_8::y#1 = (signed byte) atan2_8::y#12 (signed byte) atan2_8::y#9 +Alias (signed byte) atan2_8::yi#0 = (signed byte) atan2_8::yi#8 +Alias (byte) atan2_8::i#2 = (byte) atan2_8::i#5 +Alias (signed byte) atan2_8::x#11 = (signed byte) atan2_8::x#8 +Alias (signed byte) atan2_8::y#10 = (signed byte) atan2_8::y#8 +Alias (signed byte) atan2_8::y#4 = (signed byte) atan2_8::y#5 Successful SSA optimization Pass2AliasElimination -Alias (signed byte) atan2::x#11 = (signed byte) atan2::x#4 -Alias (signed byte) atan2::y#10 = (signed byte) atan2::y#4 +Alias (signed byte) atan2_8::x#11 = (signed byte) atan2_8::x#4 +Alias (signed byte) atan2_8::y#10 = (signed byte) atan2_8::y#4 Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) init_font_hex::proto_hi#2 Self Phi Eliminated (byte*) init_font_hex::proto_lo#2 Self Phi Eliminated (byte*) init_font_hex::charset#3 Self Phi Eliminated (byte) init_font_hex::c1#2 Self Phi Eliminated (byte) init_font_hex::c#2 +Self Phi Eliminated (signed byte) atan2_8::x#11 +Self Phi Eliminated (signed byte) atan2_8::y#10 Self Phi Eliminated (signed byte) main::y#2 Self Phi Eliminated (byte*) main::col00#1 -Self Phi Eliminated (signed byte) atan2::x#11 -Self Phi Eliminated (signed byte) atan2::y#10 Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) init_font_hex::charset#6 (byte*) init_font_hex::charset#1 Identical Phi Values (byte*) init_font_hex::proto_hi#2 (byte*) init_font_hex::proto_hi#4 @@ -944,27 +970,27 @@ Identical Phi Values (byte*) init_font_hex::proto_lo#2 (byte*) init_font_hex::pr Identical Phi Values (byte*) init_font_hex::charset#3 (byte*) init_font_hex::charset#2 Identical Phi Values (byte) init_font_hex::c1#2 (byte) init_font_hex::c1#4 Identical Phi Values (byte) init_font_hex::c#2 (byte) init_font_hex::c#5 +Identical Phi Values (signed byte) atan2_8::y#1 (signed byte) atan2_8::y#0 +Identical Phi Values (signed byte) atan2_8::x#1 (signed byte) atan2_8::x#0 +Identical Phi Values (signed byte) atan2_8::x#11 (signed byte) atan2_8::x#1 +Identical Phi Values (signed byte) atan2_8::y#10 (signed byte) atan2_8::y#1 Identical Phi Values (signed byte) main::y#2 (signed byte) main::y#4 Identical Phi Values (byte*) main::col00#1 (byte*) main::col00#0 -Identical Phi Values (signed byte) atan2::y#1 (signed byte) atan2::y#0 -Identical Phi Values (signed byte) atan2::x#1 (signed byte) atan2::x#0 -Identical Phi Values (signed byte) atan2::x#11 (signed byte) atan2::x#1 -Identical Phi Values (signed byte) atan2::y#10 (signed byte) atan2::y#1 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) init_font_hex::$3 [19] if((byte) init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 Simple Condition (bool~) init_font_hex::$4 [29] if((byte) init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 Simple Condition (bool~) init_font_hex::$5 [34] if((byte) init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 -Simple Condition (bool~) main::$5 [77] if((signed byte) main::x#1!=rangelast(-$13,$14)) goto main::@2 -Simple Condition (bool~) main::$6 [81] if((signed byte) main::y#1!=rangelast(-$c,$c)) goto main::@1 -Simple Condition (bool~) atan2::$0 [95] if((signed byte) atan2::y#0>(signed byte) 0) goto atan2::@1 -Simple Condition (bool~) atan2::$5 [104] if((signed byte) atan2::x#0>(signed byte) 0) goto atan2::@4 -Simple Condition (bool~) atan2::$17 [117] if((signed byte) atan2::yi#3!=(signed byte) 0) goto atan2::@16 -Simple Condition (bool~) atan2::$20 [124] if((signed byte) atan2::yi#3>(signed byte) 0) goto atan2::@18 -Simple Condition (bool~) atan2::$11 [129] if((signed byte) atan2::x#0>=(signed byte) 0) goto atan2::@7 -Simple Condition (bool~) atan2::$21 [141] if((byte) atan2::i#1!=rangelast(0,CORDIC_ITERATIONS#0)) goto atan2::@15 -Simple Condition (bool~) atan2::$14 [145] if((signed byte) atan2::y#0>=(signed byte) 0) goto atan2::@8 +Simple Condition (bool~) atan2_8::$0 [47] if((signed byte) atan2_8::y#0>(signed byte) 0) goto atan2_8::@1 +Simple Condition (bool~) atan2_8::$5 [56] if((signed byte) atan2_8::x#0>(signed byte) 0) goto atan2_8::@4 +Simple Condition (bool~) atan2_8::$18 [69] if((signed byte) atan2_8::yi#3!=(signed byte) 0) goto atan2_8::@16 +Simple Condition (bool~) atan2_8::$21 [76] if((signed byte) atan2_8::yi#3>(signed byte) 0) goto atan2_8::@18 +Simple Condition (bool~) atan2_8::$12 [82] if((signed byte) atan2_8::x#0>=(signed byte) 0) goto atan2_8::@7 +Simple Condition (bool~) atan2_8::$22 [94] if((byte) atan2_8::i#1!=rangelast(0,CORDIC_ITERATIONS_8#0)) goto atan2_8::@15 +Simple Condition (bool~) atan2_8::$15 [98] if((signed byte) atan2_8::y#0>=(signed byte) 0) goto atan2_8::@8 +Simple Condition (bool~) main::$5 [148] if((signed byte) main::x#1!=rangelast(-$13,$14)) goto main::@2 +Simple Condition (bool~) main::$6 [152] if((signed byte) main::y#1!=rangelast(-$c,$c)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification -Negating conditional jump and destination [141] if((byte) atan2::i#1==rangelast(0,CORDIC_ITERATIONS#0)) goto atan2::@17 +Negating conditional jump and destination [94] if((byte) atan2_8::i#1==rangelast(0,CORDIC_ITERATIONS_8#0)) goto atan2_8::@17 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement Constant right-side identified [36] (byte[]) FONT_HEX_PROTO#0 ← { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } Successful SSA optimization Pass2ConstantRValueConsolidation @@ -975,14 +1001,16 @@ Constant (const byte) init_font_hex::i#0 = 0 Constant (const byte[]) FONT_HEX_PROTO#0 = { 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 } Constant (const byte*) D018#0 = (byte*) 53272 Constant (const byte*) COLS#0 = (byte*) 55296 +Constant (const byte) CORDIC_ITERATIONS_16#0 = $f +Constant (const word*) CORDIC_ATAN2_ANGLES_16#0 = (word*) 4096 +Constant (const byte) CORDIC_ITERATIONS_8#0 = 8 +Constant (const byte*) CORDIC_ATAN2_ANGLES_8#0 = (byte*) 4352 +Constant (const byte) atan2_8::angle#0 = 0 +Constant (const byte) atan2_8::i#0 = 0 Constant (const byte*) CHARSET#0 = (byte*) 8192 Constant (const byte*) SCREEN#0 = (byte*) 10240 Constant (const signed byte) main::y#0 = -$c Constant (const signed byte) main::x#0 = -$13 -Constant (const byte) CORDIC_ITERATIONS#0 = 8 -Constant (const byte*) CORDIC_ATAN2_ANGLES#0 = (byte*) 4096 -Constant (const byte) atan2::angle#0 = 0 -Constant (const byte) atan2::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) init_font_hex::proto_hi#0 = FONT_HEX_PROTO#0 Constant (const byte*) init_font_hex::proto_lo#0 = FONT_HEX_PROTO#0 @@ -991,10 +1019,10 @@ Constant (const byte*) main::toD0181_screen#0 = SCREEN#0 Constant (const byte*) main::toD0181_gfx#0 = CHARSET#0 Constant (const byte*) main::screen#0 = SCREEN#0 Successful SSA optimization Pass2ConstantIdentification -Constant value identified (word)main::toD0181_screen#0 in [46] (word~) main::toD0181_$0#0 ← (word)(const byte*) main::toD0181_screen#0 -Constant value identified (word)main::toD0181_gfx#0 in [50] (word~) main::toD0181_$4#0 ← (word)(const byte*) main::toD0181_gfx#0 +Constant value identified (word)main::toD0181_screen#0 in [117] (word~) main::toD0181_$0#0 ← (word)(const byte*) main::toD0181_screen#0 +Constant value identified (word)main::toD0181_gfx#0 in [121] (word~) main::toD0181_$4#0 ← (word)(const byte*) main::toD0181_gfx#0 Successful SSA optimization Pass2ConstantValues -if() condition always true - replacing block destination [86] if(true) goto main::@6 +if() condition always true - replacing block destination [157] if(true) goto main::@6 Successful SSA optimization Pass2ConstantIfs Resolved ranged next value [17] init_font_hex::i#1 ← ++ init_font_hex::i#2 to ++ Resolved ranged comparison value [19] if(init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 to (number) 5 @@ -1002,44 +1030,44 @@ Resolved ranged next value [27] init_font_hex::c1#1 ← ++ init_font_hex::c1#4 t Resolved ranged comparison value [29] if(init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 to (number) $10 Resolved ranged next value [32] init_font_hex::c#1 ← ++ init_font_hex::c#5 to ++ Resolved ranged comparison value [34] if(init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 to (number) $10 -Resolved ranged next value [75] main::x#1 ← ++ main::x#2 to ++ -Resolved ranged comparison value [77] if(main::x#1!=rangelast(-$13,$14)) goto main::@2 to (number) $15 -Resolved ranged next value [79] main::y#1 ← ++ main::y#4 to ++ -Resolved ranged comparison value [81] if(main::y#1!=rangelast(-$c,$c)) goto main::@1 to (number) $d -Resolved ranged next value [139] atan2::i#1 ← ++ atan2::i#2 to ++ -Resolved ranged comparison value [141] if(atan2::i#1==rangelast(0,CORDIC_ITERATIONS#0)) goto atan2::@17 to (const byte) CORDIC_ITERATIONS#0+(number) 1 -Converting *(pointer+n) to pointer[n] [88] *((byte*) main::col00#0) ← ++ *((byte*) main::col00#0) -- *(main::$2 + $13) -Converting *(pointer+n) to pointer[n] [88] *((byte*) main::col00#0) ← ++ *((byte*~) main::$2 + (byte) $13) -- *(main::$2 + $13) +Resolved ranged next value [92] atan2_8::i#1 ← ++ atan2_8::i#2 to ++ +Resolved ranged comparison value [94] if(atan2_8::i#1==rangelast(0,CORDIC_ITERATIONS_8#0)) goto atan2_8::@17 to (const byte) CORDIC_ITERATIONS_8#0+(number) 1 +Resolved ranged next value [146] main::x#1 ← ++ main::x#2 to ++ +Resolved ranged comparison value [148] if(main::x#1!=rangelast(-$13,$14)) goto main::@2 to (number) $15 +Resolved ranged next value [150] main::y#1 ← ++ main::y#4 to ++ +Resolved ranged comparison value [152] if(main::y#1!=rangelast(-$c,$c)) goto main::@1 to (number) $d +Converting *(pointer+n) to pointer[n] [159] *((byte*) main::col00#0) ← ++ *((byte*) main::col00#0) -- *(main::$2 + $13) +Converting *(pointer+n) to pointer[n] [159] *((byte*) main::col00#0) ← ++ *((byte*~) main::$2 + (byte) $13) -- *(main::$2 + $13) Successful SSA optimization Pass2InlineDerefIdx Simplifying expression containing zero init_font_hex::charset#2 in [8] *((byte*) init_font_hex::charset#2 + (const byte) init_font_hex::idx#0) ← (byte) 0 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable (byte) init_font_hex::idx#4 and assignment [15] (byte) init_font_hex::idx#4 ← ++ (byte) init_font_hex::idx#3 -Eliminating unused variable (byte*) main::col00#0 and assignment [49] (byte*) main::col00#0 ← (byte*~) main::$2 + (byte) $13 +Eliminating unused variable (byte*) main::col00#0 and assignment [80] (byte*) main::col00#0 ← (byte*~) main::$2 + (byte) $13 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks Adding number conversion cast (unumber) 5 in if((byte) init_font_hex::i#1!=(number) 5) goto init_font_hex::@3 Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c1#1!=(number) $10) goto init_font_hex::@2 Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c#1!=(number) $10) goto init_font_hex::@1 +Adding number conversion cast (unumber) CORDIC_ITERATIONS_8#0+1 in if((byte) atan2_8::i#1==(const byte) CORDIC_ITERATIONS_8#0+(number) 1) goto atan2_8::@17 +Adding number conversion cast (unumber) 1 in if((byte) atan2_8::i#1==(unumber)(const byte) CORDIC_ITERATIONS_8#0+(number) 1) goto atan2_8::@17 Adding number conversion cast (snumber) $15 in if((signed byte) main::x#1!=(number) $15) goto main::@2 Adding number conversion cast (snumber) $d in if((signed byte) main::y#1!=(number) $d) goto main::@1 -Adding number conversion cast (unumber) CORDIC_ITERATIONS#0+1 in if((byte) atan2::i#1==(const byte) CORDIC_ITERATIONS#0+(number) 1) goto atan2::@17 -Adding number conversion cast (unumber) 1 in if((byte) atan2::i#1==(unumber)(const byte) CORDIC_ITERATIONS#0+(number) 1) goto atan2::@17 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast 5 Simplifying constant integer cast $10 Simplifying constant integer cast $10 +Simplifying constant integer cast (const byte) CORDIC_ITERATIONS_8#0+(unumber)(number) 1 +Simplifying constant integer cast 1 Simplifying constant integer cast $15 Simplifying constant integer cast $d -Simplifying constant integer cast (const byte) CORDIC_ITERATIONS#0+(unumber)(number) 1 -Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $10 +Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) $15 Finalized signed number type (signed byte) $d -Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Self Phi Eliminated (byte*) init_font_hex::proto_hi#4 Self Phi Eliminated (byte) init_font_hex::c#5 @@ -1048,36 +1076,36 @@ Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::pr Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [3] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 -Constant right-side identified [47] (byte*~) main::$2 ← (const byte*) COLS#0 + (word)(number) $c*(number) $28 +Constant right-side identified [78] (byte*~) main::$2 ← (const byte*) COLS#0 + (word)(number) $c*(number) $28 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) init_font_hex::idx#1 = ++init_font_hex::idx#0 Constant (const word) main::toD0181_$0#0 = (word)main::toD0181_screen#0 Constant (const word) main::toD0181_$4#0 = (word)main::toD0181_gfx#0 Constant (const byte*) main::$2 = COLS#0+(word)$c*$28 Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [23] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff -Constant right-side identified [26] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 +Constant right-side identified [54] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff +Constant right-side identified [57] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) main::toD0181_$1#0 = main::toD0181_$0#0&$3fff Constant (const byte) main::toD0181_$5#0 = >main::toD0181_$4#0 Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [23] (word~) main::toD0181_$2#0 ← (const word) main::toD0181_$1#0 * (byte) 4 -Constant right-side identified [25] (byte~) main::toD0181_$6#0 ← (const byte) main::toD0181_$5#0 / (byte) 4 +Constant right-side identified [54] (word~) main::toD0181_$2#0 ← (const word) main::toD0181_$1#0 * (byte) 4 +Constant right-side identified [56] (byte~) main::toD0181_$6#0 ← (const byte) main::toD0181_$5#0 / (byte) 4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) main::toD0181_$2#0 = main::toD0181_$1#0*4 Constant (const byte) main::toD0181_$6#0 = main::toD0181_$5#0/4 Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [23] (byte~) main::toD0181_$3#0 ← > (const word) main::toD0181_$2#0 -Constant right-side identified [24] (byte~) main::toD0181_$7#0 ← (const byte) main::toD0181_$6#0 & (byte) $f +Constant right-side identified [54] (byte~) main::toD0181_$3#0 ← > (const word) main::toD0181_$2#0 +Constant right-side identified [55] (byte~) main::toD0181_$7#0 ← (const byte) main::toD0181_$6#0 & (byte) $f Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::toD0181_$3#0 = >main::toD0181_$2#0 Constant (const byte) main::toD0181_$7#0 = main::toD0181_$6#0&$f Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [23] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3#0 | (const byte) main::toD0181_$7#0 +Constant right-side identified [54] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3#0 | (const byte) main::toD0181_$7#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0 Successful SSA optimization Pass2ConstantIdentification -Rewriting division to use shift [51] (byte) atan2::angle#1 ← (byte) atan2::angle#6 / (byte) 2 +Rewriting division to use shift [36] (byte) atan2_8::angle#1 ← (byte) atan2_8::angle#6 / (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte) init_font_hex::c#0 Inlining constant with var siblings (const byte) init_font_hex::c1#0 @@ -1087,16 +1115,16 @@ Inlining constant with var siblings (const byte*) init_font_hex::proto_hi#0 Inlining constant with var siblings (const byte*) init_font_hex::proto_lo#0 Inlining constant with var siblings (const byte*) init_font_hex::charset#1 Inlining constant with var siblings (const byte) init_font_hex::idx#1 +Inlining constant with var siblings (const byte) atan2_8::angle#0 +Inlining constant with var siblings (const byte) atan2_8::i#0 Inlining constant with var siblings (const signed byte) main::y#0 Inlining constant with var siblings (const signed byte) main::x#0 Inlining constant with var siblings (const byte*) main::screen#0 -Inlining constant with var siblings (const byte) atan2::angle#0 -Inlining constant with var siblings (const byte) atan2::i#0 Constant inlined main::screen#0 = (const byte*) SCREEN#0 Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN#0 Constant inlined main::toD0181_gfx#0 = (const byte*) CHARSET#0 -Constant inlined atan2::angle#0 = (byte) 0 Constant inlined init_font_hex::proto_hi#0 = (const byte[]) FONT_HEX_PROTO#0 +Constant inlined atan2_8::angle#0 = (byte) 0 Constant inlined main::toD0181_$0#0 = (word)(const byte*) SCREEN#0 Constant inlined main::x#0 = (signed byte) -$13 Constant inlined main::toD0181_$1#0 = (word)(const byte*) SCREEN#0&(word) $3fff @@ -1105,7 +1133,6 @@ Constant inlined init_font_hex::i#0 = (byte) 0 Constant inlined init_font_hex::charset#1 = (const byte*) CHARSET#0 Constant inlined main::toD0181_$6#0 = >(word)(const byte*) CHARSET#0/(byte) 4 Constant inlined main::toD0181_$7#0 = >(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f -Constant inlined atan2::i#0 = (byte) 0 Constant inlined init_font_hex::idx#1 = ++(byte) 0 Constant inlined init_font_hex::idx#0 = (byte) 0 Constant inlined main::toD0181_$2#0 = (word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4 @@ -1114,6 +1141,7 @@ Constant inlined main::toD0181_$3#0 = >(word)(const byte*) SCREEN#0&(word) $3fff Constant inlined main::toD0181_$4#0 = (word)(const byte*) CHARSET#0 Constant inlined main::toD0181_$5#0 = >(word)(const byte*) CHARSET#0 Constant inlined init_font_hex::proto_lo#0 = (const byte[]) FONT_HEX_PROTO#0 +Constant inlined atan2_8::i#0 = (byte) 0 Constant inlined init_font_hex::c#0 = (byte) 0 Constant inlined init_font_hex::c1#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining @@ -1125,18 +1153,18 @@ Successful SSA optimization Pass2ConstantSimplification Added new block during phi lifting init_font_hex::@7(between init_font_hex::@5 and init_font_hex::@1) Added new block during phi lifting init_font_hex::@8(between init_font_hex::@4 and init_font_hex::@2) Added new block during phi lifting init_font_hex::@9(between init_font_hex::@3 and init_font_hex::@3) +Added new block during phi lifting atan2_8::@26(between atan2_8::@19 and atan2_8::@15) +Added new block during phi lifting atan2_8::@27(between atan2_8::@15 and atan2_8::@17) +Added new block during phi lifting atan2_8::@28(between atan2_8::@19 and atan2_8::@17) +Added new block during phi lifting atan2_8::@29(between atan2_8::@17 and atan2_8::@7) +Added new block during phi lifting atan2_8::@30(between atan2_8::@7 and atan2_8::@8) Added new block during phi lifting main::@14(between main::@3 and main::@1) Added new block during phi lifting main::@15(between main::@13 and main::@2) -Added new block during phi lifting atan2::@26(between atan2::@19 and atan2::@15) -Added new block during phi lifting atan2::@27(between atan2::@15 and atan2::@17) -Added new block during phi lifting atan2::@28(between atan2::@19 and atan2::@17) -Added new block during phi lifting atan2::@29(between atan2::@17 and atan2::@7) -Added new block during phi lifting atan2::@30(between atan2::@7 and atan2::@8) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 -Adding NOP phi() at start of @5 Adding NOP phi() at start of @7 Adding NOP phi() at start of @8 +Adding NOP phi() at start of @9 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@12 @@ -1146,79 +1174,80 @@ Adding NOP phi() at start of main::@4 Adding NOP phi() at start of main::@5 Adding NOP phi() at start of init_font_hex CALL GRAPH -Calls in [] to main:5 -Calls in [main] to init_font_hex:9 atan2:19 +Calls in [] to main:6 +Calls in [main] to init_font_hex:10 atan2_8:20 Created 24 initial phi equivalence classes -Coalesced [15] main::screen#7 ← main::screen#4 -Coalesced [31] main::y#6 ← main::y#1 -Coalesced [32] main::screen#6 ← main::screen#1 -Coalesced [33] main::x#4 ← main::x#1 -Coalesced (already) [34] main::screen#8 ← main::screen#1 -Coalesced [37] atan2::yi#12 ← atan2::$2 -Coalesced [41] atan2::xi#9 ← atan2::$7 -Coalesced [43] atan2::yi#14 ← atan2::yi#0 -Coalesced [44] atan2::xi#11 ← atan2::xi#0 -Coalesced [47] atan2::angle#17 ← atan2::angle#12 -Coalesced [52] atan2::angle#22 ← atan2::angle#4 -Coalesced [56] atan2::return#5 ← atan2::angle#5 -Coalesced [59] atan2::return#6 ← atan2::angle#11 -Coalesced [60] atan2::angle#21 ← atan2::angle#1 -Coalesced [67] atan2::yi#16 ← atan2::yi#2 -Coalesced [68] atan2::angle#20 ← atan2::angle#3 -Coalesced [69] atan2::xi#13 ← atan2::xi#2 -Coalesced [73] atan2::yi#13 ← atan2::yi#7 -Coalesced [74] atan2::xi#10 ← atan2::xi#7 -Coalesced [75] atan2::i#7 ← atan2::i#1 -Coalesced [76] atan2::angle#16 ← atan2::angle#13 -Coalesced (already) [77] atan2::angle#18 ← atan2::angle#13 -Coalesced [81] atan2::yi#15 ← atan2::yi#1 -Coalesced [82] atan2::angle#19 ← atan2::angle#2 -Coalesced [83] atan2::xi#12 ← atan2::xi#1 -Not coalescing [84] atan2::xi#8 ← atan2::x#0 -Not coalescing [85] atan2::yi#11 ← atan2::y#0 -Coalesced [88] init_font_hex::charset#9 ← init_font_hex::charset#5 -Coalesced [110] init_font_hex::charset#8 ← init_font_hex::charset#0 -Coalesced [111] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1 -Coalesced [112] init_font_hex::c#7 ← init_font_hex::c#1 -Coalesced (already) [113] init_font_hex::charset#10 ← init_font_hex::charset#0 -Coalesced [114] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1 -Coalesced [115] init_font_hex::c1#5 ← init_font_hex::c1#1 -Coalesced [116] init_font_hex::i#3 ← init_font_hex::i#1 -Coalesced [117] init_font_hex::idx#7 ← init_font_hex::idx#2 +Coalesced [16] main::screen#7 ← main::screen#4 +Coalesced [32] main::y#6 ← main::y#1 +Coalesced [33] main::screen#6 ← main::screen#1 +Coalesced [34] main::x#4 ← main::x#1 +Coalesced (already) [35] main::screen#8 ← main::screen#1 +Coalesced [38] atan2_8::yi#12 ← atan2_8::$2 +Coalesced [42] atan2_8::xi#9 ← atan2_8::$7 +Coalesced [44] atan2_8::yi#14 ← atan2_8::yi#0 +Coalesced [45] atan2_8::xi#11 ← atan2_8::xi#0 +Coalesced [48] atan2_8::angle#17 ← atan2_8::angle#12 +Coalesced [53] atan2_8::angle#22 ← atan2_8::angle#4 +Coalesced [57] atan2_8::return#5 ← atan2_8::angle#5 +Coalesced [60] atan2_8::return#6 ← atan2_8::angle#11 +Coalesced [61] atan2_8::angle#21 ← atan2_8::angle#1 +Coalesced [68] atan2_8::yi#16 ← atan2_8::yi#2 +Coalesced [69] atan2_8::angle#20 ← atan2_8::angle#3 +Coalesced [70] atan2_8::xi#13 ← atan2_8::xi#2 +Coalesced [74] atan2_8::yi#13 ← atan2_8::yi#7 +Coalesced [75] atan2_8::xi#10 ← atan2_8::xi#7 +Coalesced [76] atan2_8::i#7 ← atan2_8::i#1 +Coalesced [77] atan2_8::angle#16 ← atan2_8::angle#13 +Coalesced (already) [78] atan2_8::angle#18 ← atan2_8::angle#13 +Coalesced [82] atan2_8::yi#15 ← atan2_8::yi#1 +Coalesced [83] atan2_8::angle#19 ← atan2_8::angle#2 +Coalesced [84] atan2_8::xi#12 ← atan2_8::xi#1 +Not coalescing [85] atan2_8::xi#8 ← atan2_8::x#0 +Not coalescing [86] atan2_8::yi#11 ← atan2_8::y#0 +Coalesced [89] init_font_hex::charset#9 ← init_font_hex::charset#5 +Coalesced [111] init_font_hex::charset#8 ← init_font_hex::charset#0 +Coalesced [112] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1 +Coalesced [113] init_font_hex::c#7 ← init_font_hex::c#1 +Coalesced (already) [114] init_font_hex::charset#10 ← init_font_hex::charset#0 +Coalesced [115] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1 +Coalesced [116] init_font_hex::c1#5 ← init_font_hex::c1#1 +Coalesced [117] init_font_hex::i#3 ← init_font_hex::i#1 +Coalesced [118] init_font_hex::idx#7 ← init_font_hex::idx#2 Coalesced down to 17 phi equivalence classes Culled Empty Block (label) @1 -Culled Empty Block (label) @5 -Culled Empty Block (label) @8 +Culled Empty Block (label) @7 +Culled Empty Block (label) @9 Culled Empty Block (label) main::@12 Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@4 Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@14 Culled Empty Block (label) main::@15 -Culled Empty Block (label) atan2::@27 -Culled Empty Block (label) atan2::@30 -Culled Empty Block (label) atan2::@29 -Culled Empty Block (label) atan2::@26 -Culled Empty Block (label) atan2::@28 +Culled Empty Block (label) atan2_8::@27 +Culled Empty Block (label) atan2_8::@30 +Culled Empty Block (label) atan2_8::@29 +Culled Empty Block (label) atan2_8::@26 +Culled Empty Block (label) atan2_8::@28 Culled Empty Block (label) init_font_hex::@7 Culled Empty Block (label) init_font_hex::@8 Culled Empty Block (label) init_font_hex::@9 -Renumbering block @6 to @1 -Renumbering block @7 to @2 +Renumbering block @5 to @1 +Renumbering block @6 to @2 +Renumbering block @8 to @3 +Renumbering block atan2_8::@13 to atan2_8::@9 +Renumbering block atan2_8::@15 to atan2_8::@10 +Renumbering block atan2_8::@16 to atan2_8::@11 +Renumbering block atan2_8::@17 to atan2_8::@12 +Renumbering block atan2_8::@18 to atan2_8::@13 +Renumbering block atan2_8::@19 to atan2_8::@14 +Renumbering block atan2_8::@22 to atan2_8::@15 +Renumbering block atan2_8::@25 to atan2_8::@16 Renumbering block main::@6 to main::@4 Renumbering block main::@11 to main::@5 Renumbering block main::@13 to main::@6 -Renumbering block atan2::@13 to atan2::@9 -Renumbering block atan2::@15 to atan2::@10 -Renumbering block atan2::@16 to atan2::@11 -Renumbering block atan2::@17 to atan2::@12 -Renumbering block atan2::@18 to atan2::@13 -Renumbering block atan2::@19 to atan2::@14 -Renumbering block atan2::@22 to atan2::@15 -Renumbering block atan2::@25 to atan2::@16 Adding NOP phi() at start of @begin -Adding NOP phi() at start of @2 +Adding NOP phi() at start of @3 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::toD0181 @@ -1229,216 +1258,223 @@ FINAL CONTROL FLOW GRAPH [0] phi() to:@1 @1: scope:[] from @begin - kickasm(location (const byte*) CORDIC_ATAN2_ANGLES#0) {{ .fill CORDIC_ITERATIONS, 2*256*atan(1/pow(2,i))/PI/2 + kickasm(location (const word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; i(signed byte) 0) goto atan2::@1 - to:atan2::@2 -atan2::@2: scope:[atan2] from atan2 - [24] (signed byte~) atan2::$2 ← - (signed byte) atan2::y#0 - to:atan2::@3 -atan2::@3: scope:[atan2] from atan2::@1 atan2::@2 - [25] (signed byte) atan2::yi#0 ← phi( atan2::@1/(signed byte~) atan2::yi#11 atan2::@2/(signed byte~) atan2::$2 ) - [26] if((signed byte) atan2::x#0>(signed byte) 0) goto atan2::@4 - to:atan2::@5 -atan2::@5: scope:[atan2] from atan2::@3 - [27] (signed byte~) atan2::$7 ← - (signed byte) atan2::x#0 - to:atan2::@6 -atan2::@6: scope:[atan2] from atan2::@4 atan2::@5 - [28] (signed byte) atan2::xi#0 ← phi( atan2::@4/(signed byte~) atan2::xi#8 atan2::@5/(signed byte~) atan2::$7 ) - to:atan2::@10 -atan2::@10: scope:[atan2] from atan2::@14 atan2::@6 - [29] (byte) atan2::angle#12 ← phi( atan2::@14/(byte) atan2::angle#13 atan2::@6/(byte) 0 ) - [29] (byte) atan2::i#2 ← phi( atan2::@14/(byte) atan2::i#1 atan2::@6/(byte) 0 ) - [29] (signed byte) atan2::xi#3 ← phi( atan2::@14/(signed byte) atan2::xi#7 atan2::@6/(signed byte) atan2::xi#0 ) - [29] (signed byte) atan2::yi#3 ← phi( atan2::@14/(signed byte) atan2::yi#7 atan2::@6/(signed byte) atan2::yi#0 ) - [30] if((signed byte) atan2::yi#3!=(signed byte) 0) goto atan2::@11 - to:atan2::@12 -atan2::@12: scope:[atan2] from atan2::@10 atan2::@14 - [31] (byte) atan2::angle#6 ← phi( atan2::@10/(byte) atan2::angle#12 atan2::@14/(byte) atan2::angle#13 ) - [32] (byte) atan2::angle#1 ← (byte) atan2::angle#6 >> (byte) 1 - [33] if((signed byte) atan2::x#0>=(signed byte) 0) goto atan2::@7 - to:atan2::@16 -atan2::@16: scope:[atan2] from atan2::@12 - [34] (byte) atan2::angle#4 ← (byte) $80 - (byte) atan2::angle#1 - to:atan2::@7 -atan2::@7: scope:[atan2] from atan2::@12 atan2::@16 - [35] (byte) atan2::angle#11 ← phi( atan2::@12/(byte) atan2::angle#1 atan2::@16/(byte) atan2::angle#4 ) - [36] if((signed byte) atan2::y#0>=(signed byte) 0) goto atan2::@8 - to:atan2::@9 -atan2::@9: scope:[atan2] from atan2::@7 - [37] (byte) atan2::angle#5 ← - (byte) atan2::angle#11 - to:atan2::@8 -atan2::@8: scope:[atan2] from atan2::@7 atan2::@9 - [38] (byte) atan2::return#1 ← phi( atan2::@9/(byte) atan2::angle#5 atan2::@7/(byte) atan2::angle#11 ) - to:atan2::@return -atan2::@return: scope:[atan2] from atan2::@8 - [39] return +atan2_8: scope:[atan2_8] from main::@2 + [24] if((signed byte) atan2_8::y#0>(signed byte) 0) goto atan2_8::@1 + to:atan2_8::@2 +atan2_8::@2: scope:[atan2_8] from atan2_8 + [25] (signed byte~) atan2_8::$2 ← - (signed byte) atan2_8::y#0 + to:atan2_8::@3 +atan2_8::@3: scope:[atan2_8] from atan2_8::@1 atan2_8::@2 + [26] (signed byte) atan2_8::yi#0 ← phi( atan2_8::@1/(signed byte~) atan2_8::yi#11 atan2_8::@2/(signed byte~) atan2_8::$2 ) + [27] if((signed byte) atan2_8::x#0>(signed byte) 0) goto atan2_8::@4 + to:atan2_8::@5 +atan2_8::@5: scope:[atan2_8] from atan2_8::@3 + [28] (signed byte~) atan2_8::$7 ← - (signed byte) atan2_8::x#0 + to:atan2_8::@6 +atan2_8::@6: scope:[atan2_8] from atan2_8::@4 atan2_8::@5 + [29] (signed byte) atan2_8::xi#0 ← phi( atan2_8::@4/(signed byte~) atan2_8::xi#8 atan2_8::@5/(signed byte~) atan2_8::$7 ) + to:atan2_8::@10 +atan2_8::@10: scope:[atan2_8] from atan2_8::@14 atan2_8::@6 + [30] (byte) atan2_8::angle#12 ← phi( atan2_8::@14/(byte) atan2_8::angle#13 atan2_8::@6/(byte) 0 ) + [30] (byte) atan2_8::i#2 ← phi( atan2_8::@14/(byte) atan2_8::i#1 atan2_8::@6/(byte) 0 ) + [30] (signed byte) atan2_8::xi#3 ← phi( atan2_8::@14/(signed byte) atan2_8::xi#7 atan2_8::@6/(signed byte) atan2_8::xi#0 ) + [30] (signed byte) atan2_8::yi#3 ← phi( atan2_8::@14/(signed byte) atan2_8::yi#7 atan2_8::@6/(signed byte) atan2_8::yi#0 ) + [31] if((signed byte) atan2_8::yi#3!=(signed byte) 0) goto atan2_8::@11 + to:atan2_8::@12 +atan2_8::@12: scope:[atan2_8] from atan2_8::@10 atan2_8::@14 + [32] (byte) atan2_8::angle#6 ← phi( atan2_8::@10/(byte) atan2_8::angle#12 atan2_8::@14/(byte) atan2_8::angle#13 ) + [33] (byte) atan2_8::angle#1 ← (byte) atan2_8::angle#6 >> (byte) 1 + [34] if((signed byte) atan2_8::x#0>=(signed byte) 0) goto atan2_8::@7 + to:atan2_8::@16 +atan2_8::@16: scope:[atan2_8] from atan2_8::@12 + [35] (byte) atan2_8::angle#4 ← (byte) $80 - (byte) atan2_8::angle#1 + to:atan2_8::@7 +atan2_8::@7: scope:[atan2_8] from atan2_8::@12 atan2_8::@16 + [36] (byte) atan2_8::angle#11 ← phi( atan2_8::@12/(byte) atan2_8::angle#1 atan2_8::@16/(byte) atan2_8::angle#4 ) + [37] if((signed byte) atan2_8::y#0>=(signed byte) 0) goto atan2_8::@8 + to:atan2_8::@9 +atan2_8::@9: scope:[atan2_8] from atan2_8::@7 + [38] (byte) atan2_8::angle#5 ← - (byte) atan2_8::angle#11 + to:atan2_8::@8 +atan2_8::@8: scope:[atan2_8] from atan2_8::@7 atan2_8::@9 + [39] (byte) atan2_8::return#0 ← phi( atan2_8::@9/(byte) atan2_8::angle#5 atan2_8::@7/(byte) atan2_8::angle#11 ) + to:atan2_8::@return +atan2_8::@return: scope:[atan2_8] from atan2_8::@8 + [40] return to:@return -atan2::@11: scope:[atan2] from atan2::@10 - [40] (signed byte) atan2::xd#0 ← (signed byte) atan2::xi#3 >> (byte) atan2::i#2 - [41] (signed byte) atan2::yd#0 ← (signed byte) atan2::yi#3 >> (byte) atan2::i#2 - [42] if((signed byte) atan2::yi#3>(signed byte) 0) goto atan2::@13 - to:atan2::@15 -atan2::@15: scope:[atan2] from atan2::@11 - [43] (signed byte) atan2::xi#2 ← (signed byte) atan2::xi#3 - (signed byte) atan2::yd#0 - [44] (signed byte) atan2::yi#2 ← (signed byte) atan2::yi#3 + (signed byte) atan2::xd#0 - [45] (byte) atan2::angle#3 ← (byte) atan2::angle#12 - *((const byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#2) - to:atan2::@14 -atan2::@14: scope:[atan2] from atan2::@13 atan2::@15 - [46] (signed byte) atan2::xi#7 ← phi( atan2::@13/(signed byte) atan2::xi#1 atan2::@15/(signed byte) atan2::xi#2 ) - [46] (byte) atan2::angle#13 ← phi( atan2::@13/(byte) atan2::angle#2 atan2::@15/(byte) atan2::angle#3 ) - [46] (signed byte) atan2::yi#7 ← phi( atan2::@13/(signed byte) atan2::yi#1 atan2::@15/(signed byte) atan2::yi#2 ) - [47] (byte) atan2::i#1 ← ++ (byte) atan2::i#2 - [48] if((byte) atan2::i#1==(const byte) CORDIC_ITERATIONS#0+(byte) 1) goto atan2::@12 - to:atan2::@10 -atan2::@13: scope:[atan2] from atan2::@11 - [49] (signed byte) atan2::xi#1 ← (signed byte) atan2::xi#3 + (signed byte) atan2::yd#0 - [50] (signed byte) atan2::yi#1 ← (signed byte) atan2::yi#3 - (signed byte) atan2::xd#0 - [51] (byte) atan2::angle#2 ← (byte) atan2::angle#12 + *((const byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#2) - to:atan2::@14 -atan2::@4: scope:[atan2] from atan2::@3 - [52] (signed byte~) atan2::xi#8 ← (signed byte) atan2::x#0 - to:atan2::@6 -atan2::@1: scope:[atan2] from atan2 - [53] (signed byte~) atan2::yi#11 ← (signed byte) atan2::y#0 - to:atan2::@3 +atan2_8::@11: scope:[atan2_8] from atan2_8::@10 + [41] (signed byte) atan2_8::xd#0 ← (signed byte) atan2_8::xi#3 >> (byte) atan2_8::i#2 + [42] (signed byte) atan2_8::yd#0 ← (signed byte) atan2_8::yi#3 >> (byte) atan2_8::i#2 + [43] if((signed byte) atan2_8::yi#3>(signed byte) 0) goto atan2_8::@13 + to:atan2_8::@15 +atan2_8::@15: scope:[atan2_8] from atan2_8::@11 + [44] (signed byte) atan2_8::xi#2 ← (signed byte) atan2_8::xi#3 - (signed byte) atan2_8::yd#0 + [45] (signed byte) atan2_8::yi#2 ← (signed byte) atan2_8::yi#3 + (signed byte) atan2_8::xd#0 + [46] (byte) atan2_8::angle#3 ← (byte) atan2_8::angle#12 - *((const byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#2) + to:atan2_8::@14 +atan2_8::@14: scope:[atan2_8] from atan2_8::@13 atan2_8::@15 + [47] (signed byte) atan2_8::xi#7 ← phi( atan2_8::@13/(signed byte) atan2_8::xi#1 atan2_8::@15/(signed byte) atan2_8::xi#2 ) + [47] (byte) atan2_8::angle#13 ← phi( atan2_8::@13/(byte) atan2_8::angle#2 atan2_8::@15/(byte) atan2_8::angle#3 ) + [47] (signed byte) atan2_8::yi#7 ← phi( atan2_8::@13/(signed byte) atan2_8::yi#1 atan2_8::@15/(signed byte) atan2_8::yi#2 ) + [48] (byte) atan2_8::i#1 ← ++ (byte) atan2_8::i#2 + [49] if((byte) atan2_8::i#1==(const byte) CORDIC_ITERATIONS_8#0+(byte) 1) goto atan2_8::@12 + to:atan2_8::@10 +atan2_8::@13: scope:[atan2_8] from atan2_8::@11 + [50] (signed byte) atan2_8::xi#1 ← (signed byte) atan2_8::xi#3 + (signed byte) atan2_8::yd#0 + [51] (signed byte) atan2_8::yi#1 ← (signed byte) atan2_8::yi#3 - (signed byte) atan2_8::xd#0 + [52] (byte) atan2_8::angle#2 ← (byte) atan2_8::angle#12 + *((const byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#2) + to:atan2_8::@14 +atan2_8::@4: scope:[atan2_8] from atan2_8::@3 + [53] (signed byte~) atan2_8::xi#8 ← (signed byte) atan2_8::x#0 + to:atan2_8::@6 +atan2_8::@1: scope:[atan2_8] from atan2_8 + [54] (signed byte~) atan2_8::yi#11 ← (signed byte) atan2_8::y#0 + to:atan2_8::@3 init_font_hex: scope:[init_font_hex] from main - [54] phi() + [55] phi() to:init_font_hex::@1 init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5 - [55] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 ) - [55] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) - [55] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 ) + [56] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 ) + [56] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) + [56] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 ) to:init_font_hex::@2 init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4 - [56] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) - [56] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) - [56] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) - [57] *((byte*) init_font_hex::charset#2) ← (byte) 0 + [57] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) + [57] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) + [57] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) + [58] *((byte*) init_font_hex::charset#2) ← (byte) 0 to:init_font_hex::@3 init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3 - [58] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) - [58] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 ) - [59] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 - [60] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 - [61] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 - [62] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 - [63] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 - [64] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 - [65] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 + [59] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) + [59] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 ) + [60] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 + [61] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 + [62] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 + [63] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 + [64] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 + [65] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 + [66] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 to:init_font_hex::@4 init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3 - [66] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 - [67] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 - [68] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 - [69] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 - [70] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 - [71] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 - [72] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 + [67] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 + [68] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 + [69] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 + [70] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 + [71] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 + [72] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 + [73] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 to:init_font_hex::@5 init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4 - [73] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 - [74] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 - [75] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 + [74] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 + [75] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 + [76] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 to:init_font_hex::@return init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 - [76] return + [77] return to:@return VARIABLE REGISTER WEIGHTS (byte*) CHARSET (byte*) COLS -(byte*) CORDIC_ATAN2_ANGLES -(byte) CORDIC_ITERATIONS +(word*) CORDIC_ATAN2_ANGLES_16 +(byte*) CORDIC_ATAN2_ANGLES_8 +(byte) CORDIC_ITERATIONS_16 +(byte) CORDIC_ITERATIONS_8 (byte*) D018 (byte[]) FONT_HEX_PROTO (byte*) SCREEN -(byte()) atan2((signed byte) atan2::x , (signed byte) atan2::y) -(signed byte~) atan2::$2 4.0 -(signed byte~) atan2::$7 4.0 -(byte) atan2::angle -(byte) atan2::angle#1 3.0 -(byte) atan2::angle#11 4.0 -(byte) atan2::angle#12 444.8888888888889 -(byte) atan2::angle#13 1334.6666666666667 -(byte) atan2::angle#2 2002.0 -(byte) atan2::angle#3 2002.0 -(byte) atan2::angle#4 4.0 -(byte) atan2::angle#5 4.0 -(byte) atan2::angle#6 2004.0 -(byte) atan2::i -(byte) atan2::i#1 1501.5 -(byte) atan2::i#2 500.50000000000006 -(byte) atan2::return -(byte) atan2::return#0 202.0 -(byte) atan2::return#1 34.99999999999999 -(signed byte) atan2::x -(signed byte) atan2::x#0 4.192307692307692 -(signed byte) atan2::xd -(signed byte) atan2::xd#0 600.5999999999999 -(signed byte) atan2::xi -(signed byte) atan2::xi#0 6.0 -(signed byte) atan2::xi#1 667.3333333333334 -(signed byte) atan2::xi#2 667.3333333333334 -(signed byte) atan2::xi#3 801.2 -(signed byte) atan2::xi#7 1001.0 -(signed byte~) atan2::xi#8 4.0 -(signed byte) atan2::y -(signed byte) atan2::y#0 3.8928571428571437 -(signed byte) atan2::yd -(signed byte) atan2::yd#0 1501.5 -(signed byte) atan2::yi -(signed byte) atan2::yi#0 1.2000000000000002 -(signed byte) atan2::yi#1 1001.0 -(signed byte~) atan2::yi#11 4.0 -(signed byte) atan2::yi#2 1001.0 -(signed byte) atan2::yi#3 858.2857142857142 -(signed byte) atan2::yi#7 1001.0 +(byte()) atan2_8((signed byte) atan2_8::x , (signed byte) atan2_8::y) +(signed byte~) atan2_8::$2 4.0 +(signed byte~) atan2_8::$7 4.0 +(byte) atan2_8::angle +(byte) atan2_8::angle#1 3.0 +(byte) atan2_8::angle#11 4.0 +(byte) atan2_8::angle#12 444.8888888888889 +(byte) atan2_8::angle#13 1334.6666666666667 +(byte) atan2_8::angle#2 2002.0 +(byte) atan2_8::angle#3 2002.0 +(byte) atan2_8::angle#4 4.0 +(byte) atan2_8::angle#5 4.0 +(byte) atan2_8::angle#6 2004.0 +(byte) atan2_8::i +(byte) atan2_8::i#1 1501.5 +(byte) atan2_8::i#2 500.50000000000006 +(byte) atan2_8::return +(byte) atan2_8::return#0 34.99999999999999 +(byte) atan2_8::return#2 202.0 +(signed byte) atan2_8::x +(signed byte) atan2_8::x#0 4.192307692307692 +(signed byte) atan2_8::xd +(signed byte) atan2_8::xd#0 600.5999999999999 +(signed byte) atan2_8::xi +(signed byte) atan2_8::xi#0 6.0 +(signed byte) atan2_8::xi#1 667.3333333333334 +(signed byte) atan2_8::xi#2 667.3333333333334 +(signed byte) atan2_8::xi#3 801.2 +(signed byte) atan2_8::xi#7 1001.0 +(signed byte~) atan2_8::xi#8 4.0 +(signed byte) atan2_8::y +(signed byte) atan2_8::y#0 3.8928571428571437 +(signed byte) atan2_8::yd +(signed byte) atan2_8::yd#0 1501.5 +(signed byte) atan2_8::yi +(signed byte) atan2_8::yi#0 1.2000000000000002 +(signed byte) atan2_8::yi#1 1001.0 +(signed byte~) atan2_8::yi#11 4.0 +(signed byte) atan2_8::yi#2 1001.0 +(signed byte) atan2_8::yi#3 858.2857142857142 +(signed byte) atan2_8::yi#7 1001.0 (void()) init_font_hex((byte*) init_font_hex::charset) (byte~) init_font_hex::$0 1001.0 (byte~) init_font_hex::$1 2002.0 @@ -1497,11 +1533,11 @@ Initial phi equivalence classes [ main::y#4 main::y#1 ] [ main::x#2 main::x#1 ] [ main::screen#2 main::screen#4 main::screen#1 ] -[ atan2::yi#3 atan2::yi#7 atan2::yi#0 atan2::yi#11 atan2::$2 atan2::yi#1 atan2::yi#2 ] -[ atan2::xi#3 atan2::xi#7 atan2::xi#0 atan2::xi#8 atan2::$7 atan2::xi#1 atan2::xi#2 ] -[ atan2::i#2 atan2::i#1 ] -[ atan2::angle#6 atan2::angle#12 atan2::angle#13 atan2::angle#2 atan2::angle#3 ] -[ atan2::return#1 atan2::angle#5 atan2::angle#11 atan2::angle#1 atan2::angle#4 ] +[ atan2_8::yi#3 atan2_8::yi#7 atan2_8::yi#0 atan2_8::yi#11 atan2_8::$2 atan2_8::yi#1 atan2_8::yi#2 ] +[ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] +[ atan2_8::i#2 atan2_8::i#1 ] +[ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] +[ atan2_8::return#0 atan2_8::angle#5 atan2_8::angle#11 atan2_8::angle#1 atan2_8::angle#4 ] [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] [ init_font_hex::c#6 init_font_hex::c#1 ] [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] @@ -1509,12 +1545,12 @@ Initial phi equivalence classes [ init_font_hex::c1#4 init_font_hex::c1#1 ] [ init_font_hex::i#2 init_font_hex::i#1 ] [ init_font_hex::idx#5 init_font_hex::idx#2 ] -Added variable atan2::x#0 to zero page equivalence class [ atan2::x#0 ] -Added variable atan2::y#0 to zero page equivalence class [ atan2::y#0 ] -Added variable atan2::return#0 to zero page equivalence class [ atan2::return#0 ] +Added variable atan2_8::x#0 to zero page equivalence class [ atan2_8::x#0 ] +Added variable atan2_8::y#0 to zero page equivalence class [ atan2_8::y#0 ] +Added variable atan2_8::return#2 to zero page equivalence class [ atan2_8::return#2 ] Added variable main::angle#0 to zero page equivalence class [ main::angle#0 ] -Added variable atan2::xd#0 to zero page equivalence class [ atan2::xd#0 ] -Added variable atan2::yd#0 to zero page equivalence class [ atan2::yd#0 ] +Added variable atan2_8::xd#0 to zero page equivalence class [ atan2_8::xd#0 ] +Added variable atan2_8::yd#0 to zero page equivalence class [ atan2_8::yd#0 ] Added variable init_font_hex::$0 to zero page equivalence class [ init_font_hex::$0 ] Added variable init_font_hex::$1 to zero page equivalence class [ init_font_hex::$1 ] Added variable init_font_hex::$2 to zero page equivalence class [ init_font_hex::$2 ] @@ -1523,11 +1559,11 @@ Complete equivalence classes [ main::y#4 main::y#1 ] [ main::x#2 main::x#1 ] [ main::screen#2 main::screen#4 main::screen#1 ] -[ atan2::yi#3 atan2::yi#7 atan2::yi#0 atan2::yi#11 atan2::$2 atan2::yi#1 atan2::yi#2 ] -[ atan2::xi#3 atan2::xi#7 atan2::xi#0 atan2::xi#8 atan2::$7 atan2::xi#1 atan2::xi#2 ] -[ atan2::i#2 atan2::i#1 ] -[ atan2::angle#6 atan2::angle#12 atan2::angle#13 atan2::angle#2 atan2::angle#3 ] -[ atan2::return#1 atan2::angle#5 atan2::angle#11 atan2::angle#1 atan2::angle#4 ] +[ atan2_8::yi#3 atan2_8::yi#7 atan2_8::yi#0 atan2_8::yi#11 atan2_8::$2 atan2_8::yi#1 atan2_8::yi#2 ] +[ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] +[ atan2_8::i#2 atan2_8::i#1 ] +[ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] +[ atan2_8::return#0 atan2_8::angle#5 atan2_8::angle#11 atan2_8::angle#1 atan2_8::angle#4 ] [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] [ init_font_hex::c#6 init_font_hex::c#1 ] [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] @@ -1535,12 +1571,12 @@ Complete equivalence classes [ init_font_hex::c1#4 init_font_hex::c1#1 ] [ init_font_hex::i#2 init_font_hex::i#1 ] [ init_font_hex::idx#5 init_font_hex::idx#2 ] -[ atan2::x#0 ] -[ atan2::y#0 ] -[ atan2::return#0 ] +[ atan2_8::x#0 ] +[ atan2_8::y#0 ] +[ atan2_8::return#2 ] [ main::angle#0 ] -[ atan2::xd#0 ] -[ atan2::yd#0 ] +[ atan2_8::xd#0 ] +[ atan2_8::yd#0 ] [ init_font_hex::$0 ] [ init_font_hex::$1 ] [ init_font_hex::$2 ] @@ -1548,11 +1584,11 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::y#4 main::y#1 ] Allocated zp ZP_BYTE:3 [ main::x#2 main::x#1 ] Allocated zp ZP_WORD:4 [ main::screen#2 main::screen#4 main::screen#1 ] -Allocated zp ZP_BYTE:6 [ atan2::yi#3 atan2::yi#7 atan2::yi#0 atan2::yi#11 atan2::$2 atan2::yi#1 atan2::yi#2 ] -Allocated zp ZP_BYTE:7 [ atan2::xi#3 atan2::xi#7 atan2::xi#0 atan2::xi#8 atan2::$7 atan2::xi#1 atan2::xi#2 ] -Allocated zp ZP_BYTE:8 [ atan2::i#2 atan2::i#1 ] -Allocated zp ZP_BYTE:9 [ atan2::angle#6 atan2::angle#12 atan2::angle#13 atan2::angle#2 atan2::angle#3 ] -Allocated zp ZP_BYTE:10 [ atan2::return#1 atan2::angle#5 atan2::angle#11 atan2::angle#1 atan2::angle#4 ] +Allocated zp ZP_BYTE:6 [ atan2_8::yi#3 atan2_8::yi#7 atan2_8::yi#0 atan2_8::yi#11 atan2_8::$2 atan2_8::yi#1 atan2_8::yi#2 ] +Allocated zp ZP_BYTE:7 [ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] +Allocated zp ZP_BYTE:8 [ atan2_8::i#2 atan2_8::i#1 ] +Allocated zp ZP_BYTE:9 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] +Allocated zp ZP_BYTE:10 [ atan2_8::return#0 atan2_8::angle#5 atan2_8::angle#11 atan2_8::angle#1 atan2_8::angle#4 ] Allocated zp ZP_WORD:11 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] Allocated zp ZP_BYTE:13 [ init_font_hex::c#6 init_font_hex::c#1 ] Allocated zp ZP_WORD:14 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] @@ -1560,12 +1596,12 @@ Allocated zp ZP_WORD:16 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] Allocated zp ZP_BYTE:18 [ init_font_hex::c1#4 init_font_hex::c1#1 ] Allocated zp ZP_BYTE:19 [ init_font_hex::i#2 init_font_hex::i#1 ] Allocated zp ZP_BYTE:20 [ init_font_hex::idx#5 init_font_hex::idx#2 ] -Allocated zp ZP_BYTE:21 [ atan2::x#0 ] -Allocated zp ZP_BYTE:22 [ atan2::y#0 ] -Allocated zp ZP_BYTE:23 [ atan2::return#0 ] +Allocated zp ZP_BYTE:21 [ atan2_8::x#0 ] +Allocated zp ZP_BYTE:22 [ atan2_8::y#0 ] +Allocated zp ZP_BYTE:23 [ atan2_8::return#2 ] Allocated zp ZP_BYTE:24 [ main::angle#0 ] -Allocated zp ZP_BYTE:25 [ atan2::xd#0 ] -Allocated zp ZP_BYTE:26 [ atan2::yd#0 ] +Allocated zp ZP_BYTE:25 [ atan2_8::xd#0 ] +Allocated zp ZP_BYTE:26 [ atan2_8::yd#0 ] Allocated zp ZP_BYTE:27 [ init_font_hex::$0 ] Allocated zp ZP_BYTE:28 [ init_font_hex::$1 ] Allocated zp ZP_BYTE:29 [ init_font_hex::$2 ] @@ -1583,149 +1619,155 @@ INITIAL ASM .label D018 = $d018 // Color Ram .label COLS = $d800 + // The number of iterations performed during 16-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_16 = $f + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_16 = $1000 + // The number of iterations performed during 8-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_8 = 8 + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_8 = $1100 .label CHARSET = $2000 .label SCREEN = $2800 - // The number of iterations performed during CORDIC atan2 calculation - .const CORDIC_ITERATIONS = 8 - // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... - .label CORDIC_ATAN2_ANGLES = $1000 //SEG3 @begin bbegin: jmp b1 //SEG4 @1 b1: -//SEG5 kickasm(location (const byte*) CORDIC_ATAN2_ANGLES#0) {{ .fill CORDIC_ITERATIONS, 2*256*atan(1/pow(2,i))/PI/2 }} -// Populate cordic angles table -//SEG6 [2] phi from @1 to @2 [phi:@1->@2] -b2_from_b1: +//SEG5 kickasm(location (const word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; imain] -main_from_b2: +//SEG7 kickasm(location (const byte*) CORDIC_ATAN2_ANGLES_8#0 uses CORDIC_ITERATIONS_8#0) {{ .fill CORDIC_ITERATIONS_8, 2*256*atan(1/pow(2,i))/PI/2 }} +// Populate cordic angles table +//SEG8 [3] phi from @2 to @3 [phi:@2->@3] +b3_from_b2: + jmp b3 +//SEG9 @3 +b3: +//SEG10 [4] call main +//SEG11 [6] phi from @3 to main [phi:@3->main] +main_from_b3: jsr main -//SEG10 [4] phi from @2 to @end [phi:@2->@end] -bend_from_b2: +//SEG12 [5] phi from @3 to @end [phi:@3->@end] +bend_from_b3: jmp bend -//SEG11 @end +//SEG13 @end bend: -//SEG12 main +//SEG14 main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .label angle = $18 .label screen = 4 .label x = 3 .label y = 2 - //SEG13 [6] call init_font_hex - //SEG14 [54] phi from main to init_font_hex [phi:main->init_font_hex] + //SEG15 [7] call init_font_hex + //SEG16 [55] phi from main to init_font_hex [phi:main->init_font_hex] init_font_hex_from_main: jsr init_font_hex - //SEG15 [7] phi from main to main::toD0181 [phi:main->main::toD0181] + //SEG17 [8] phi from main to main::toD0181 [phi:main->main::toD0181] toD0181_from_main: jmp toD0181 - //SEG16 main::toD0181 + //SEG18 main::toD0181 toD0181: jmp b5 - //SEG17 main::@5 + //SEG19 main::@5 b5: - //SEG18 [8] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 + //SEG20 [9] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 - //SEG19 [9] phi from main::@5 to main::@1 [phi:main::@5->main::@1] + //SEG21 [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] b1_from_b5: - //SEG20 [9] phi (byte*) main::screen#4 = (const byte*) SCREEN#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 + //SEG22 [10] phi (byte*) main::screen#4 = (const byte*) SCREEN#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 lda #SCREEN sta screen+1 - //SEG21 [9] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@5->main::@1#1] -- vbsz1=vbsc1 + //SEG23 [10] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@5->main::@1#1] -- vbsz1=vbsc1 lda #-$c sta y jmp b1 - //SEG22 [9] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + //SEG24 [10] phi from main::@3 to main::@1 [phi:main::@3->main::@1] b1_from_b3: - //SEG23 [9] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy - //SEG24 [9] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#1] -- register_copy + //SEG25 [10] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy + //SEG26 [10] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#1] -- register_copy jmp b1 - //SEG25 main::@1 + //SEG27 main::@1 b1: - //SEG26 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + //SEG28 [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2] b2_from_b1: - //SEG27 [10] phi (byte*) main::screen#2 = (byte*) main::screen#4 [phi:main::@1->main::@2#0] -- register_copy - //SEG28 [10] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#1] -- vbsz1=vbsc1 + //SEG29 [11] phi (byte*) main::screen#2 = (byte*) main::screen#4 [phi:main::@1->main::@2#0] -- register_copy + //SEG30 [11] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#1] -- vbsz1=vbsc1 lda #-$13 sta x jmp b2 - //SEG29 [10] phi from main::@6 to main::@2 [phi:main::@6->main::@2] + //SEG31 [11] phi from main::@6 to main::@2 [phi:main::@6->main::@2] b2_from_b6: - //SEG30 [10] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@6->main::@2#0] -- register_copy - //SEG31 [10] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@2#1] -- register_copy + //SEG32 [11] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@6->main::@2#0] -- register_copy + //SEG33 [11] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@2#1] -- register_copy jmp b2 - //SEG32 main::@2 + //SEG34 main::@2 b2: - //SEG33 [11] (signed byte) atan2::x#0 ← (signed byte) main::x#2 -- vbsz1=vbsz2 + //SEG35 [12] (signed byte) atan2_8::x#0 ← (signed byte) main::x#2 -- vbsz1=vbsz2 lda x - sta atan2.x - //SEG34 [12] (signed byte) atan2::y#0 ← (signed byte) main::y#4 -- vbsz1=vbsz2 + sta atan2_8.x + //SEG36 [13] (signed byte) atan2_8::y#0 ← (signed byte) main::y#4 -- vbsz1=vbsz2 lda y - sta atan2.y - //SEG35 [13] call atan2 - jsr atan2 - //SEG36 [14] (byte) atan2::return#0 ← (byte) atan2::return#1 -- vbuz1=vbuz2 - lda atan2.return_1 - sta atan2.return + sta atan2_8.y + //SEG37 [14] call atan2_8 + jsr atan2_8 + //SEG38 [15] (byte) atan2_8::return#2 ← (byte) atan2_8::return#0 -- vbuz1=vbuz2 + lda atan2_8.return + sta atan2_8.return_2 jmp b6 - //SEG37 main::@6 + //SEG39 main::@6 b6: - //SEG38 [15] (byte) main::angle#0 ← (byte) atan2::return#0 -- vbuz1=vbuz2 - lda atan2.return + //SEG40 [16] (byte) main::angle#0 ← (byte) atan2_8::return#2 -- vbuz1=vbuz2 + lda atan2_8.return_2 sta angle - //SEG39 [16] *((byte*) main::screen#2) ← (byte) main::angle#0 -- _deref_pbuz1=vbuz2 + //SEG41 [17] *((byte*) main::screen#2) ← (byte) main::angle#0 -- _deref_pbuz1=vbuz2 lda angle ldy #0 sta (screen),y - //SEG40 [17] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 + //SEG42 [18] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - //SEG41 [18] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1 + //SEG43 [19] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1 inc x - //SEG42 [19] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsz1_neq_vbsc1_then_la1 + //SEG44 [20] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsz1_neq_vbsc1_then_la1 lda #$15 cmp x bne b2_from_b6 jmp b3 - //SEG43 main::@3 + //SEG45 main::@3 b3: - //SEG44 [20] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 + //SEG46 [21] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 inc y - //SEG45 [21] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 + //SEG47 [22] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 lda #$d cmp y bne b1_from_b3 jmp b4 - //SEG46 main::@4 + //SEG48 main::@4 b4: - //SEG47 [22] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) -- _deref_pbuc1=_inc__deref_pbuc2 + //SEG49 [23] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) -- _deref_pbuc1=_inc__deref_pbuc2 lda COLS+$c*$28+$13 clc adc #1 sta COLS+$c*$28+$13 jmp b4 } -//SEG48 atan2 +//SEG50 atan2_8 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS -// Returns the angle in hex-degrees (0=0, 128=PI, 256=2*PI) -// atan2(signed byte zeropage($15) x, signed byte zeropage($16) y) -atan2: { +// Returns the angle in hex-degrees (0=0, 0x80=PI, 0x100=2*PI) +// atan2_8(signed byte zeropage($15) x, signed byte zeropage($16) y) +atan2_8: { .label _2 = 6 .label _7 = 7 - .label x = $15 - .label y = $16 - .label return = $17 .label yi = 6 .label xi = 7 .label xd = $19 @@ -1734,129 +1776,132 @@ atan2: { .label angle_2 = 9 .label angle_3 = 9 .label i = 8 - .label return_1 = $a + .label return = $a + .label x = $15 + .label y = $16 + .label return_2 = $17 .label angle_6 = 9 .label angle_12 = 9 .label angle_13 = 9 - //SEG49 [23] if((signed byte) atan2::y#0>(signed byte) 0) goto atan2::@1 -- vbsz1_gt_0_then_la1 + //SEG51 [24] if((signed byte) atan2_8::y#0>(signed byte) 0) goto atan2_8::@1 -- vbsz1_gt_0_then_la1 lda y cmp #0 beq !+ bpl b1 !: jmp b2 - //SEG50 atan2::@2 + //SEG52 atan2_8::@2 b2: - //SEG51 [24] (signed byte~) atan2::$2 ← - (signed byte) atan2::y#0 -- vbsz1=_neg_vbsz2 + //SEG53 [25] (signed byte~) atan2_8::$2 ← - (signed byte) atan2_8::y#0 -- vbsz1=_neg_vbsz2 lda y eor #$ff clc adc #1 sta _2 - //SEG52 [25] phi from atan2::@1 atan2::@2 to atan2::@3 [phi:atan2::@1/atan2::@2->atan2::@3] + //SEG54 [26] phi from atan2_8::@1 atan2_8::@2 to atan2_8::@3 [phi:atan2_8::@1/atan2_8::@2->atan2_8::@3] b3_from_b1: b3_from_b2: - //SEG53 [25] phi (signed byte) atan2::yi#0 = (signed byte~) atan2::yi#11 [phi:atan2::@1/atan2::@2->atan2::@3#0] -- register_copy + //SEG55 [26] phi (signed byte) atan2_8::yi#0 = (signed byte~) atan2_8::yi#11 [phi:atan2_8::@1/atan2_8::@2->atan2_8::@3#0] -- register_copy jmp b3 - //SEG54 atan2::@3 + //SEG56 atan2_8::@3 b3: - //SEG55 [26] if((signed byte) atan2::x#0>(signed byte) 0) goto atan2::@4 -- vbsz1_gt_0_then_la1 + //SEG57 [27] if((signed byte) atan2_8::x#0>(signed byte) 0) goto atan2_8::@4 -- vbsz1_gt_0_then_la1 lda x cmp #0 beq !+ bpl b4 !: jmp b5 - //SEG56 atan2::@5 + //SEG58 atan2_8::@5 b5: - //SEG57 [27] (signed byte~) atan2::$7 ← - (signed byte) atan2::x#0 -- vbsz1=_neg_vbsz2 + //SEG59 [28] (signed byte~) atan2_8::$7 ← - (signed byte) atan2_8::x#0 -- vbsz1=_neg_vbsz2 lda x eor #$ff clc adc #1 sta _7 - //SEG58 [28] phi from atan2::@4 atan2::@5 to atan2::@6 [phi:atan2::@4/atan2::@5->atan2::@6] + //SEG60 [29] phi from atan2_8::@4 atan2_8::@5 to atan2_8::@6 [phi:atan2_8::@4/atan2_8::@5->atan2_8::@6] b6_from_b4: b6_from_b5: - //SEG59 [28] phi (signed byte) atan2::xi#0 = (signed byte~) atan2::xi#8 [phi:atan2::@4/atan2::@5->atan2::@6#0] -- register_copy + //SEG61 [29] phi (signed byte) atan2_8::xi#0 = (signed byte~) atan2_8::xi#8 [phi:atan2_8::@4/atan2_8::@5->atan2_8::@6#0] -- register_copy jmp b6 - //SEG60 atan2::@6 + //SEG62 atan2_8::@6 b6: - //SEG61 [29] phi from atan2::@6 to atan2::@10 [phi:atan2::@6->atan2::@10] + //SEG63 [30] phi from atan2_8::@6 to atan2_8::@10 [phi:atan2_8::@6->atan2_8::@10] b10_from_b6: - //SEG62 [29] phi (byte) atan2::angle#12 = (byte) 0 [phi:atan2::@6->atan2::@10#0] -- vbuz1=vbuc1 + //SEG64 [30] phi (byte) atan2_8::angle#12 = (byte) 0 [phi:atan2_8::@6->atan2_8::@10#0] -- vbuz1=vbuc1 lda #0 sta angle_12 - //SEG63 [29] phi (byte) atan2::i#2 = (byte) 0 [phi:atan2::@6->atan2::@10#1] -- vbuz1=vbuc1 + //SEG65 [30] phi (byte) atan2_8::i#2 = (byte) 0 [phi:atan2_8::@6->atan2_8::@10#1] -- vbuz1=vbuc1 lda #0 sta i - //SEG64 [29] phi (signed byte) atan2::xi#3 = (signed byte) atan2::xi#0 [phi:atan2::@6->atan2::@10#2] -- register_copy - //SEG65 [29] phi (signed byte) atan2::yi#3 = (signed byte) atan2::yi#0 [phi:atan2::@6->atan2::@10#3] -- register_copy + //SEG66 [30] phi (signed byte) atan2_8::xi#3 = (signed byte) atan2_8::xi#0 [phi:atan2_8::@6->atan2_8::@10#2] -- register_copy + //SEG67 [30] phi (signed byte) atan2_8::yi#3 = (signed byte) atan2_8::yi#0 [phi:atan2_8::@6->atan2_8::@10#3] -- register_copy jmp b10 - //SEG66 atan2::@10 + //SEG68 atan2_8::@10 b10: - //SEG67 [30] if((signed byte) atan2::yi#3!=(signed byte) 0) goto atan2::@11 -- vbsz1_neq_0_then_la1 + //SEG69 [31] if((signed byte) atan2_8::yi#3!=(signed byte) 0) goto atan2_8::@11 -- vbsz1_neq_0_then_la1 lda yi cmp #0 bne b11 - //SEG68 [31] phi from atan2::@10 atan2::@14 to atan2::@12 [phi:atan2::@10/atan2::@14->atan2::@12] + //SEG70 [32] phi from atan2_8::@10 atan2_8::@14 to atan2_8::@12 [phi:atan2_8::@10/atan2_8::@14->atan2_8::@12] b12_from_b10: b12_from_b14: - //SEG69 [31] phi (byte) atan2::angle#6 = (byte) atan2::angle#12 [phi:atan2::@10/atan2::@14->atan2::@12#0] -- register_copy + //SEG71 [32] phi (byte) atan2_8::angle#6 = (byte) atan2_8::angle#12 [phi:atan2_8::@10/atan2_8::@14->atan2_8::@12#0] -- register_copy jmp b12 - //SEG70 atan2::@12 + //SEG72 atan2_8::@12 b12: - //SEG71 [32] (byte) atan2::angle#1 ← (byte) atan2::angle#6 >> (byte) 1 -- vbuz1=vbuz2_ror_1 + //SEG73 [33] (byte) atan2_8::angle#1 ← (byte) atan2_8::angle#6 >> (byte) 1 -- vbuz1=vbuz2_ror_1 lda angle_6 lsr sta angle - //SEG72 [33] if((signed byte) atan2::x#0>=(signed byte) 0) goto atan2::@7 -- vbsz1_ge_0_then_la1 + //SEG74 [34] if((signed byte) atan2_8::x#0>=(signed byte) 0) goto atan2_8::@7 -- vbsz1_ge_0_then_la1 lda x cmp #0 bpl b7_from_b12 jmp b16 - //SEG73 atan2::@16 + //SEG75 atan2_8::@16 b16: - //SEG74 [34] (byte) atan2::angle#4 ← (byte) $80 - (byte) atan2::angle#1 -- vbuz1=vbuc1_minus_vbuz1 + //SEG76 [35] (byte) atan2_8::angle#4 ← (byte) $80 - (byte) atan2_8::angle#1 -- vbuz1=vbuc1_minus_vbuz1 lda #$80 sec sbc angle sta angle - //SEG75 [35] phi from atan2::@12 atan2::@16 to atan2::@7 [phi:atan2::@12/atan2::@16->atan2::@7] + //SEG77 [36] phi from atan2_8::@12 atan2_8::@16 to atan2_8::@7 [phi:atan2_8::@12/atan2_8::@16->atan2_8::@7] b7_from_b12: b7_from_b16: - //SEG76 [35] phi (byte) atan2::angle#11 = (byte) atan2::angle#1 [phi:atan2::@12/atan2::@16->atan2::@7#0] -- register_copy + //SEG78 [36] phi (byte) atan2_8::angle#11 = (byte) atan2_8::angle#1 [phi:atan2_8::@12/atan2_8::@16->atan2_8::@7#0] -- register_copy jmp b7 - //SEG77 atan2::@7 + //SEG79 atan2_8::@7 b7: - //SEG78 [36] if((signed byte) atan2::y#0>=(signed byte) 0) goto atan2::@8 -- vbsz1_ge_0_then_la1 + //SEG80 [37] if((signed byte) atan2_8::y#0>=(signed byte) 0) goto atan2_8::@8 -- vbsz1_ge_0_then_la1 lda y cmp #0 bpl b8_from_b7 jmp b9 - //SEG79 atan2::@9 + //SEG81 atan2_8::@9 b9: - //SEG80 [37] (byte) atan2::angle#5 ← - (byte) atan2::angle#11 -- vbuz1=_neg_vbuz1 + //SEG82 [38] (byte) atan2_8::angle#5 ← - (byte) atan2_8::angle#11 -- vbuz1=_neg_vbuz1 lda angle eor #$ff clc adc #1 sta angle - //SEG81 [38] phi from atan2::@7 atan2::@9 to atan2::@8 [phi:atan2::@7/atan2::@9->atan2::@8] + //SEG83 [39] phi from atan2_8::@7 atan2_8::@9 to atan2_8::@8 [phi:atan2_8::@7/atan2_8::@9->atan2_8::@8] b8_from_b7: b8_from_b9: - //SEG82 [38] phi (byte) atan2::return#1 = (byte) atan2::angle#11 [phi:atan2::@7/atan2::@9->atan2::@8#0] -- register_copy + //SEG84 [39] phi (byte) atan2_8::return#0 = (byte) atan2_8::angle#11 [phi:atan2_8::@7/atan2_8::@9->atan2_8::@8#0] -- register_copy jmp b8 - //SEG83 atan2::@8 + //SEG85 atan2_8::@8 b8: jmp breturn - //SEG84 atan2::@return + //SEG86 atan2_8::@return breturn: - //SEG85 [39] return + //SEG87 [40] return rts - //SEG86 atan2::@11 + //SEG88 atan2_8::@11 b11: - //SEG87 [40] (signed byte) atan2::xd#0 ← (signed byte) atan2::xi#3 >> (byte) atan2::i#2 -- vbsz1=vbsz2_ror_vbuz3 + //SEG89 [41] (signed byte) atan2_8::xd#0 ← (signed byte) atan2_8::xi#3 >> (byte) atan2_8::i#2 -- vbsz1=vbsz2_ror_vbuz3 lda xi ldy i cpy #0 @@ -1868,7 +1913,7 @@ atan2: { bne !l- !e: sta xd - //SEG88 [41] (signed byte) atan2::yd#0 ← (signed byte) atan2::yi#3 >> (byte) atan2::i#2 -- vbsz1=vbsz2_ror_vbuz3 + //SEG90 [42] (signed byte) atan2_8::yd#0 ← (signed byte) atan2_8::yi#3 >> (byte) atan2_8::i#2 -- vbsz1=vbsz2_ror_vbuz3 lda yi ldy i cpy #0 @@ -1880,86 +1925,86 @@ atan2: { bne !l- !e: sta yd - //SEG89 [42] if((signed byte) atan2::yi#3>(signed byte) 0) goto atan2::@13 -- vbsz1_gt_0_then_la1 + //SEG91 [43] if((signed byte) atan2_8::yi#3>(signed byte) 0) goto atan2_8::@13 -- vbsz1_gt_0_then_la1 lda yi cmp #0 beq !+ bpl b13 !: jmp b15 - //SEG90 atan2::@15 + //SEG92 atan2_8::@15 b15: - //SEG91 [43] (signed byte) atan2::xi#2 ← (signed byte) atan2::xi#3 - (signed byte) atan2::yd#0 -- vbsz1=vbsz1_minus_vbsz2 + //SEG93 [44] (signed byte) atan2_8::xi#2 ← (signed byte) atan2_8::xi#3 - (signed byte) atan2_8::yd#0 -- vbsz1=vbsz1_minus_vbsz2 lda xi sec sbc yd sta xi - //SEG92 [44] (signed byte) atan2::yi#2 ← (signed byte) atan2::yi#3 + (signed byte) atan2::xd#0 -- vbsz1=vbsz1_plus_vbsz2 + //SEG94 [45] (signed byte) atan2_8::yi#2 ← (signed byte) atan2_8::yi#3 + (signed byte) atan2_8::xd#0 -- vbsz1=vbsz1_plus_vbsz2 lda yi clc adc xd sta yi - //SEG93 [45] (byte) atan2::angle#3 ← (byte) atan2::angle#12 - *((const byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#2) -- vbuz1=vbuz1_minus_pbuc1_derefidx_vbuz2 + //SEG95 [46] (byte) atan2_8::angle#3 ← (byte) atan2_8::angle#12 - *((const byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#2) -- vbuz1=vbuz1_minus_pbuc1_derefidx_vbuz2 lda angle_3 ldy i sec - sbc CORDIC_ATAN2_ANGLES,y + sbc CORDIC_ATAN2_ANGLES_8,y sta angle_3 - //SEG94 [46] phi from atan2::@13 atan2::@15 to atan2::@14 [phi:atan2::@13/atan2::@15->atan2::@14] + //SEG96 [47] phi from atan2_8::@13 atan2_8::@15 to atan2_8::@14 [phi:atan2_8::@13/atan2_8::@15->atan2_8::@14] b14_from_b13: b14_from_b15: - //SEG95 [46] phi (signed byte) atan2::xi#7 = (signed byte) atan2::xi#1 [phi:atan2::@13/atan2::@15->atan2::@14#0] -- register_copy - //SEG96 [46] phi (byte) atan2::angle#13 = (byte) atan2::angle#2 [phi:atan2::@13/atan2::@15->atan2::@14#1] -- register_copy - //SEG97 [46] phi (signed byte) atan2::yi#7 = (signed byte) atan2::yi#1 [phi:atan2::@13/atan2::@15->atan2::@14#2] -- register_copy + //SEG97 [47] phi (signed byte) atan2_8::xi#7 = (signed byte) atan2_8::xi#1 [phi:atan2_8::@13/atan2_8::@15->atan2_8::@14#0] -- register_copy + //SEG98 [47] phi (byte) atan2_8::angle#13 = (byte) atan2_8::angle#2 [phi:atan2_8::@13/atan2_8::@15->atan2_8::@14#1] -- register_copy + //SEG99 [47] phi (signed byte) atan2_8::yi#7 = (signed byte) atan2_8::yi#1 [phi:atan2_8::@13/atan2_8::@15->atan2_8::@14#2] -- register_copy jmp b14 - //SEG98 atan2::@14 + //SEG100 atan2_8::@14 b14: - //SEG99 [47] (byte) atan2::i#1 ← ++ (byte) atan2::i#2 -- vbuz1=_inc_vbuz1 + //SEG101 [48] (byte) atan2_8::i#1 ← ++ (byte) atan2_8::i#2 -- vbuz1=_inc_vbuz1 inc i - //SEG100 [48] if((byte) atan2::i#1==(const byte) CORDIC_ITERATIONS#0+(byte) 1) goto atan2::@12 -- vbuz1_eq_vbuc1_then_la1 - lda #CORDIC_ITERATIONS+1 + //SEG102 [49] if((byte) atan2_8::i#1==(const byte) CORDIC_ITERATIONS_8#0+(byte) 1) goto atan2_8::@12 -- vbuz1_eq_vbuc1_then_la1 + lda #CORDIC_ITERATIONS_8+1 cmp i beq b12_from_b14 - //SEG101 [29] phi from atan2::@14 to atan2::@10 [phi:atan2::@14->atan2::@10] + //SEG103 [30] phi from atan2_8::@14 to atan2_8::@10 [phi:atan2_8::@14->atan2_8::@10] b10_from_b14: - //SEG102 [29] phi (byte) atan2::angle#12 = (byte) atan2::angle#13 [phi:atan2::@14->atan2::@10#0] -- register_copy - //SEG103 [29] phi (byte) atan2::i#2 = (byte) atan2::i#1 [phi:atan2::@14->atan2::@10#1] -- register_copy - //SEG104 [29] phi (signed byte) atan2::xi#3 = (signed byte) atan2::xi#7 [phi:atan2::@14->atan2::@10#2] -- register_copy - //SEG105 [29] phi (signed byte) atan2::yi#3 = (signed byte) atan2::yi#7 [phi:atan2::@14->atan2::@10#3] -- register_copy + //SEG104 [30] phi (byte) atan2_8::angle#12 = (byte) atan2_8::angle#13 [phi:atan2_8::@14->atan2_8::@10#0] -- register_copy + //SEG105 [30] phi (byte) atan2_8::i#2 = (byte) atan2_8::i#1 [phi:atan2_8::@14->atan2_8::@10#1] -- register_copy + //SEG106 [30] phi (signed byte) atan2_8::xi#3 = (signed byte) atan2_8::xi#7 [phi:atan2_8::@14->atan2_8::@10#2] -- register_copy + //SEG107 [30] phi (signed byte) atan2_8::yi#3 = (signed byte) atan2_8::yi#7 [phi:atan2_8::@14->atan2_8::@10#3] -- register_copy jmp b10 - //SEG106 atan2::@13 + //SEG108 atan2_8::@13 b13: - //SEG107 [49] (signed byte) atan2::xi#1 ← (signed byte) atan2::xi#3 + (signed byte) atan2::yd#0 -- vbsz1=vbsz1_plus_vbsz2 + //SEG109 [50] (signed byte) atan2_8::xi#1 ← (signed byte) atan2_8::xi#3 + (signed byte) atan2_8::yd#0 -- vbsz1=vbsz1_plus_vbsz2 lda xi clc adc yd sta xi - //SEG108 [50] (signed byte) atan2::yi#1 ← (signed byte) atan2::yi#3 - (signed byte) atan2::xd#0 -- vbsz1=vbsz1_minus_vbsz2 + //SEG110 [51] (signed byte) atan2_8::yi#1 ← (signed byte) atan2_8::yi#3 - (signed byte) atan2_8::xd#0 -- vbsz1=vbsz1_minus_vbsz2 lda yi sec sbc xd sta yi - //SEG109 [51] (byte) atan2::angle#2 ← (byte) atan2::angle#12 + *((const byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#2) -- vbuz1=vbuz1_plus_pbuc1_derefidx_vbuz2 + //SEG111 [52] (byte) atan2_8::angle#2 ← (byte) atan2_8::angle#12 + *((const byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#2) -- vbuz1=vbuz1_plus_pbuc1_derefidx_vbuz2 lda angle_2 ldy i clc - adc CORDIC_ATAN2_ANGLES,y + adc CORDIC_ATAN2_ANGLES_8,y sta angle_2 jmp b14_from_b13 - //SEG110 atan2::@4 + //SEG112 atan2_8::@4 b4: - //SEG111 [52] (signed byte~) atan2::xi#8 ← (signed byte) atan2::x#0 -- vbsz1=vbsz2 + //SEG113 [53] (signed byte~) atan2_8::xi#8 ← (signed byte) atan2_8::x#0 -- vbsz1=vbsz2 lda x sta xi jmp b6_from_b4 - //SEG112 atan2::@1 + //SEG114 atan2_8::@1 b1: - //SEG113 [53] (signed byte~) atan2::yi#11 ← (signed byte) atan2::y#0 -- vbsz1=vbsz2 + //SEG115 [54] (signed byte~) atan2_8::yi#11 ← (signed byte) atan2_8::y#0 -- vbsz1=vbsz2 lda y sta yi jmp b3_from_b1 } -//SEG114 init_font_hex +//SEG116 init_font_hex // Make charset from proto chars // init_font_hex(byte* zeropage($e) charset) init_font_hex: { @@ -1974,71 +2019,71 @@ init_font_hex: { .label c1 = $12 .label proto_hi = $b .label c = $d - //SEG115 [55] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] + //SEG117 [56] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] b1_from_init_font_hex: - //SEG116 [55] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 + //SEG118 [56] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 lda #0 sta c - //SEG117 [55] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 + //SEG119 [56] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta proto_hi+1 - //SEG118 [55] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 + //SEG120 [56] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 lda #CHARSET sta charset+1 jmp b1 - //SEG119 [55] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] + //SEG121 [56] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] b1_from_b5: - //SEG120 [55] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy - //SEG121 [55] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy - //SEG122 [55] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy + //SEG122 [56] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy + //SEG123 [56] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy + //SEG124 [56] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy jmp b1 - //SEG123 init_font_hex::@1 + //SEG125 init_font_hex::@1 b1: - //SEG124 [56] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] + //SEG126 [57] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] b2_from_b1: - //SEG125 [56] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 + //SEG127 [57] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 lda #0 sta c1 - //SEG126 [56] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 + //SEG128 [57] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta proto_lo+1 - //SEG127 [56] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy + //SEG129 [57] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy jmp b2 - //SEG128 [56] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] + //SEG130 [57] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] b2_from_b4: - //SEG129 [56] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy - //SEG130 [56] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy - //SEG131 [56] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy + //SEG131 [57] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy + //SEG132 [57] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy + //SEG133 [57] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy jmp b2 - //SEG132 init_font_hex::@2 + //SEG134 init_font_hex::@2 b2: - //SEG133 [57] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + //SEG135 [58] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (charset),y - //SEG134 [58] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] + //SEG136 [59] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] b3_from_b2: - //SEG135 [58] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 + //SEG137 [59] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 lda #1 sta idx - //SEG136 [58] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuz1=vbuc1 + //SEG138 [59] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuz1=vbuc1 lda #0 sta i jmp b3 - //SEG137 [58] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] + //SEG139 [59] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] b3_from_b3: - //SEG138 [58] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy - //SEG139 [58] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy + //SEG140 [59] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy + //SEG141 [59] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy jmp b3 - //SEG140 init_font_hex::@3 + //SEG142 init_font_hex::@3 b3: - //SEG141 [59] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuz3_rol_4 + //SEG143 [60] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuz3_rol_4 ldy i lda (proto_hi),y asl @@ -2046,43 +2091,43 @@ init_font_hex: { asl asl sta _0 - //SEG142 [60] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuz1=pbuz2_derefidx_vbuz3_rol_1 + //SEG144 [61] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuz1=pbuz2_derefidx_vbuz3_rol_1 ldy i lda (proto_lo),y asl sta _1 - //SEG143 [61] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuz1=vbuz2_bor_vbuz3 + //SEG145 [62] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuz1=vbuz2_bor_vbuz3 lda _0 ora _1 sta _2 - //SEG144 [62] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuz3 + //SEG146 [63] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuz3 lda _2 ldy idx sta (charset),y - //SEG145 [63] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 + //SEG147 [64] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 inc idx - //SEG146 [64] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuz1=_inc_vbuz1 + //SEG148 [65] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuz1=_inc_vbuz1 inc i - //SEG147 [65] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuz1_neq_vbuc1_then_la1 + //SEG149 [66] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuz1_neq_vbuc1_then_la1 lda #5 cmp i bne b3_from_b3 jmp b4 - //SEG148 init_font_hex::@4 + //SEG150 init_font_hex::@4 b4: - //SEG149 [66] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + //SEG151 [67] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy idx sta (charset),y - //SEG150 [67] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuz1=_inc_vbuz2 + //SEG152 [68] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuz1=_inc_vbuz2 ldy idx iny sty idx_3 - //SEG151 [68] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + //SEG153 [69] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy idx_3 sta (charset),y - //SEG152 [69] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + //SEG154 [70] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc proto_lo @@ -2090,7 +2135,7 @@ init_font_hex: { bcc !+ inc proto_lo+1 !: - //SEG153 [70] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + //SEG155 [71] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc charset @@ -2098,16 +2143,16 @@ init_font_hex: { bcc !+ inc charset+1 !: - //SEG154 [71] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 + //SEG156 [72] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 inc c1 - //SEG155 [72] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 + //SEG157 [73] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp c1 bne b2_from_b4 jmp b5 - //SEG156 init_font_hex::@5 + //SEG158 init_font_hex::@5 b5: - //SEG157 [73] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + //SEG159 [74] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc proto_hi @@ -2115,118 +2160,122 @@ init_font_hex: { bcc !+ inc proto_hi+1 !: - //SEG158 [74] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 + //SEG160 [75] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 inc c - //SEG159 [75] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 + //SEG161 [76] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp c bne b1_from_b5 jmp breturn - //SEG160 init_font_hex::@return + //SEG162 init_font_hex::@return breturn: - //SEG161 [76] return + //SEG163 [77] return rts } -//SEG162 File Data +//SEG164 File Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 -.pc = CORDIC_ATAN2_ANGLES "CORDIC_ATAN2_ANGLES" - .fill CORDIC_ITERATIONS, 2*256*atan(1/pow(2,i))/PI/2 +.pc = CORDIC_ATAN2_ANGLES_16 "CORDIC_ATAN2_ANGLES_16" + .for (var i=0; i(signed byte) 0) goto atan2::@4 [ atan2::x#0 atan2::y#0 atan2::yi#0 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ atan2::yi#3 atan2::yi#7 atan2::yi#0 atan2::yi#11 atan2::$2 atan2::yi#1 atan2::yi#2 ] -Statement [27] (signed byte~) atan2::$7 ← - (signed byte) atan2::x#0 [ atan2::x#0 atan2::y#0 atan2::yi#0 atan2::$7 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#0 atan2::$7 ] ) always clobbers reg byte a -Statement [30] if((signed byte) atan2::yi#3!=(signed byte) 0) goto atan2::@11 [ atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ atan2::xi#3 atan2::xi#7 atan2::xi#0 atan2::xi#8 atan2::$7 atan2::xi#1 atan2::xi#2 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ atan2::i#2 atan2::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ atan2::angle#6 atan2::angle#12 atan2::angle#13 atan2::angle#2 atan2::angle#3 ] -Statement [32] (byte) atan2::angle#1 ← (byte) atan2::angle#6 >> (byte) 1 [ atan2::x#0 atan2::y#0 atan2::angle#1 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::angle#1 ] ) always clobbers reg byte a -Statement [34] (byte) atan2::angle#4 ← (byte) $80 - (byte) atan2::angle#1 [ atan2::y#0 atan2::angle#4 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::y#0 atan2::angle#4 ] ) always clobbers reg byte a -Statement [37] (byte) atan2::angle#5 ← - (byte) atan2::angle#11 [ atan2::angle#5 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::angle#5 ] ) always clobbers reg byte a -Potential register analysis [40] atan2::xd#0 ← atan2::xi#3 >> atan2::i#2 missing fragment Fragment not found vbsaa=vbsxx_ror_vbuxx. Attempted variations vbsaa=vbsxx_ror_vbuxx allocation: reg byte x [ atan2::i#2 atan2::i#1 ] reg byte a [ atan2::xd#0 ] reg byte x [ atan2::xi#3 atan2::xi#7 atan2::xi#0 atan2::xi#8 atan2::$7 atan2::xi#1 atan2::xi#2 ] -Potential register analysis [40] atan2::xd#0 ← atan2::xi#3 >> atan2::i#2 missing fragment Fragment not found vbsaa=vbsyy_ror_vbuyy. Attempted variations vbsaa=vbsyy_ror_vbuyy allocation: reg byte y [ atan2::i#2 atan2::i#1 ] reg byte a [ atan2::xd#0 ] reg byte y [ atan2::xi#3 atan2::xi#7 atan2::xi#0 atan2::xi#8 atan2::$7 atan2::xi#1 atan2::xi#2 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ atan2_8::x#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ atan2_8::y#0 ] +Statement [27] if((signed byte) atan2_8::x#0>(signed byte) 0) goto atan2_8::@4 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#0 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ atan2_8::yi#3 atan2_8::yi#7 atan2_8::yi#0 atan2_8::yi#11 atan2_8::$2 atan2_8::yi#1 atan2_8::yi#2 ] +Statement [28] (signed byte~) atan2_8::$7 ← - (signed byte) atan2_8::x#0 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#0 atan2_8::$7 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#0 atan2_8::$7 ] ) always clobbers reg byte a +Statement [31] if((signed byte) atan2_8::yi#3!=(signed byte) 0) goto atan2_8::@11 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ atan2_8::i#2 atan2_8::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] +Statement [33] (byte) atan2_8::angle#1 ← (byte) atan2_8::angle#6 >> (byte) 1 [ atan2_8::x#0 atan2_8::y#0 atan2_8::angle#1 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::angle#1 ] ) always clobbers reg byte a +Statement [35] (byte) atan2_8::angle#4 ← (byte) $80 - (byte) atan2_8::angle#1 [ atan2_8::y#0 atan2_8::angle#4 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::y#0 atan2_8::angle#4 ] ) always clobbers reg byte a +Statement [38] (byte) atan2_8::angle#5 ← - (byte) atan2_8::angle#11 [ atan2_8::angle#5 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::angle#5 ] ) always clobbers reg byte a +Potential register analysis [41] atan2_8::xd#0 ← atan2_8::xi#3 >> atan2_8::i#2 missing fragment Fragment not found vbsaa=vbsxx_ror_vbuxx. Attempted variations vbsaa=vbsxx_ror_vbuxx allocation: reg byte a [ atan2_8::xd#0 ] reg byte x [ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] reg byte x [ atan2_8::i#2 atan2_8::i#1 ] +Potential register analysis [41] atan2_8::xd#0 ← atan2_8::xi#3 >> atan2_8::i#2 missing fragment Fragment not found vbsaa=vbsyy_ror_vbuyy. Attempted variations vbsaa=vbsyy_ror_vbuyy allocation: reg byte a [ atan2_8::xd#0 ] reg byte y [ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] reg byte y [ atan2_8::i#2 atan2_8::i#1 ] MISSING FRAGMENTS Fragment not found vbsaa=vbsxx_ror_vbuxx. Attempted variations vbsaa=vbsxx_ror_vbuxx Fragment not found vbsaa=vbsyy_ror_vbuyy. Attempted variations vbsaa=vbsyy_ror_vbuyy -Statement [40] (signed byte) atan2::xd#0 ← (signed byte) atan2::xi#3 >> (byte) atan2::i#2 [ atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 ] ) always clobbers reg byte a -Potential register analysis [41] atan2::yd#0 ← atan2::yi#3 >> atan2::i#2 missing fragment Fragment not found vbsaa=vbsxx_ror_vbuxx. Attempted variations vbsaa=vbsxx_ror_vbuxx allocation: reg byte a [ atan2::yd#0 ] reg byte x [ atan2::i#2 atan2::i#1 ] reg byte x [ atan2::yi#3 atan2::yi#7 atan2::yi#0 atan2::yi#11 atan2::$2 atan2::yi#1 atan2::yi#2 ] -Potential register analysis [41] atan2::yd#0 ← atan2::yi#3 >> atan2::i#2 missing fragment Fragment not found vbsaa=vbsyy_ror_vbuyy. Attempted variations vbsaa=vbsyy_ror_vbuyy allocation: reg byte a [ atan2::yd#0 ] reg byte y [ atan2::i#2 atan2::i#1 ] reg byte y [ atan2::yi#3 atan2::yi#7 atan2::yi#0 atan2::yi#11 atan2::$2 atan2::yi#1 atan2::yi#2 ] +Statement [41] (signed byte) atan2_8::xd#0 ← (signed byte) atan2_8::xi#3 >> (byte) atan2_8::i#2 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 ] ) always clobbers reg byte a +Potential register analysis [42] atan2_8::yd#0 ← atan2_8::yi#3 >> atan2_8::i#2 missing fragment Fragment not found vbsaa=vbsxx_ror_vbuxx. Attempted variations vbsaa=vbsxx_ror_vbuxx allocation: reg byte a [ atan2_8::yd#0 ] reg byte x [ atan2_8::yi#3 atan2_8::yi#7 atan2_8::yi#0 atan2_8::yi#11 atan2_8::$2 atan2_8::yi#1 atan2_8::yi#2 ] reg byte x [ atan2_8::i#2 atan2_8::i#1 ] +Potential register analysis [42] atan2_8::yd#0 ← atan2_8::yi#3 >> atan2_8::i#2 missing fragment Fragment not found vbsaa=vbsyy_ror_vbuyy. Attempted variations vbsaa=vbsyy_ror_vbuyy allocation: reg byte a [ atan2_8::yd#0 ] reg byte y [ atan2_8::yi#3 atan2_8::yi#7 atan2_8::yi#0 atan2_8::yi#11 atan2_8::$2 atan2_8::yi#1 atan2_8::yi#2 ] reg byte y [ atan2_8::i#2 atan2_8::i#1 ] MISSING FRAGMENTS Fragment not found vbsaa=vbsxx_ror_vbuxx. Attempted variations vbsaa=vbsxx_ror_vbuxx Fragment not found vbsaa=vbsyy_ror_vbuyy. Attempted variations vbsaa=vbsyy_ror_vbuyy -Statement [41] (signed byte) atan2::yd#0 ← (signed byte) atan2::yi#3 >> (byte) atan2::i#2 [ atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::yd#0 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::yd#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ atan2::xd#0 ] -Statement [42] if((signed byte) atan2::yi#3>(signed byte) 0) goto atan2::@13 [ atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::yd#0 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::yd#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ atan2::yd#0 ] -Statement [43] (signed byte) atan2::xi#2 ← (signed byte) atan2::xi#3 - (signed byte) atan2::yd#0 [ atan2::x#0 atan2::y#0 atan2::yi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::xi#2 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::xi#2 ] ) always clobbers reg byte a -Statement [44] (signed byte) atan2::yi#2 ← (signed byte) atan2::yi#3 + (signed byte) atan2::xd#0 [ atan2::x#0 atan2::y#0 atan2::i#2 atan2::angle#12 atan2::xi#2 atan2::yi#2 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::i#2 atan2::angle#12 atan2::xi#2 atan2::yi#2 ] ) always clobbers reg byte a -Statement [45] (byte) atan2::angle#3 ← (byte) atan2::angle#12 - *((const byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#2) [ atan2::x#0 atan2::y#0 atan2::i#2 atan2::xi#2 atan2::yi#2 atan2::angle#3 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::i#2 atan2::xi#2 atan2::yi#2 atan2::angle#3 ] ) always clobbers reg byte a -Statement [49] (signed byte) atan2::xi#1 ← (signed byte) atan2::xi#3 + (signed byte) atan2::yd#0 [ atan2::x#0 atan2::y#0 atan2::yi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::xi#1 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::xi#1 ] ) always clobbers reg byte a -Statement [50] (signed byte) atan2::yi#1 ← (signed byte) atan2::yi#3 - (signed byte) atan2::xd#0 [ atan2::x#0 atan2::y#0 atan2::i#2 atan2::angle#12 atan2::yi#1 atan2::xi#1 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::i#2 atan2::angle#12 atan2::yi#1 atan2::xi#1 ] ) always clobbers reg byte a -Statement [51] (byte) atan2::angle#2 ← (byte) atan2::angle#12 + *((const byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#2) [ atan2::x#0 atan2::y#0 atan2::i#2 atan2::yi#1 atan2::angle#2 atan2::xi#1 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::i#2 atan2::yi#1 atan2::angle#2 atan2::xi#1 ] ) always clobbers reg byte a -Statement [57] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:3::init_font_hex:6 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y +Statement [42] (signed byte) atan2_8::yd#0 ← (signed byte) atan2_8::yi#3 >> (byte) atan2_8::i#2 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::yd#0 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::yd#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ atan2_8::xd#0 ] +Statement [43] if((signed byte) atan2_8::yi#3>(signed byte) 0) goto atan2_8::@13 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::yd#0 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::yd#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ atan2_8::yd#0 ] +Statement [44] (signed byte) atan2_8::xi#2 ← (signed byte) atan2_8::xi#3 - (signed byte) atan2_8::yd#0 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::xi#2 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::xi#2 ] ) always clobbers reg byte a +Statement [45] (signed byte) atan2_8::yi#2 ← (signed byte) atan2_8::yi#3 + (signed byte) atan2_8::xd#0 [ atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::angle#12 atan2_8::xi#2 atan2_8::yi#2 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::angle#12 atan2_8::xi#2 atan2_8::yi#2 ] ) always clobbers reg byte a +Statement [46] (byte) atan2_8::angle#3 ← (byte) atan2_8::angle#12 - *((const byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#2) [ atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::xi#2 atan2_8::yi#2 atan2_8::angle#3 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::xi#2 atan2_8::yi#2 atan2_8::angle#3 ] ) always clobbers reg byte a +Statement [50] (signed byte) atan2_8::xi#1 ← (signed byte) atan2_8::xi#3 + (signed byte) atan2_8::yd#0 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::xi#1 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::xi#1 ] ) always clobbers reg byte a +Statement [51] (signed byte) atan2_8::yi#1 ← (signed byte) atan2_8::yi#3 - (signed byte) atan2_8::xd#0 [ atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::angle#12 atan2_8::yi#1 atan2_8::xi#1 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::angle#12 atan2_8::yi#1 atan2_8::xi#1 ] ) always clobbers reg byte a +Statement [52] (byte) atan2_8::angle#2 ← (byte) atan2_8::angle#12 + *((const byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#2) [ atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::yi#1 atan2_8::angle#2 atan2_8::xi#1 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::yi#1 atan2_8::angle#2 atan2_8::xi#1 ] ) always clobbers reg byte a +Statement [58] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:4::init_font_hex:7 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ init_font_hex::c#6 init_font_hex::c#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:13 [ init_font_hex::c#6 init_font_hex::c#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ init_font_hex::c1#4 init_font_hex::c1#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:18 [ init_font_hex::c1#4 init_font_hex::c1#1 ] -Statement [59] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:3::init_font_hex:6 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a +Statement [60] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:4::init_font_hex:7 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ init_font_hex::i#2 init_font_hex::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ init_font_hex::idx#5 init_font_hex::idx#2 ] -Statement [60] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:3::init_font_hex:6 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a +Statement [61] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:4::init_font_hex:7 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:27 [ init_font_hex::$0 ] -Statement [66] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:3::init_font_hex:6 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a -Statement [68] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:3::init_font_hex:6 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a -Statement [69] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:3::init_font_hex:6 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a -Statement [70] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:3::init_font_hex:6 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a -Statement [73] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:3::init_font_hex:6 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a -Statement [8] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [16] *((byte*) main::screen#2) ← (byte) main::angle#0 [ main::y#4 main::x#2 main::screen#2 ] ( main:3 [ main::y#4 main::x#2 main::screen#2 ] ) always clobbers reg byte y -Statement [22] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) [ ] ( main:3 [ ] ) always clobbers reg byte a -Statement [23] if((signed byte) atan2::y#0>(signed byte) 0) goto atan2::@1 [ atan2::x#0 atan2::y#0 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 ] ) always clobbers reg byte a -Statement [24] (signed byte~) atan2::$2 ← - (signed byte) atan2::y#0 [ atan2::x#0 atan2::y#0 atan2::$2 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::$2 ] ) always clobbers reg byte a -Statement [26] if((signed byte) atan2::x#0>(signed byte) 0) goto atan2::@4 [ atan2::x#0 atan2::y#0 atan2::yi#0 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#0 ] ) always clobbers reg byte a -Statement [27] (signed byte~) atan2::$7 ← - (signed byte) atan2::x#0 [ atan2::x#0 atan2::y#0 atan2::yi#0 atan2::$7 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#0 atan2::$7 ] ) always clobbers reg byte a -Statement [30] if((signed byte) atan2::yi#3!=(signed byte) 0) goto atan2::@11 [ atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 ] ) always clobbers reg byte a -Statement [32] (byte) atan2::angle#1 ← (byte) atan2::angle#6 >> (byte) 1 [ atan2::x#0 atan2::y#0 atan2::angle#1 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::angle#1 ] ) always clobbers reg byte a -Statement [34] (byte) atan2::angle#4 ← (byte) $80 - (byte) atan2::angle#1 [ atan2::y#0 atan2::angle#4 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::y#0 atan2::angle#4 ] ) always clobbers reg byte a -Statement [37] (byte) atan2::angle#5 ← - (byte) atan2::angle#11 [ atan2::angle#5 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::angle#5 ] ) always clobbers reg byte a -Statement [40] (signed byte) atan2::xd#0 ← (signed byte) atan2::xi#3 >> (byte) atan2::i#2 [ atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 ] ) always clobbers reg byte a -Statement [41] (signed byte) atan2::yd#0 ← (signed byte) atan2::yi#3 >> (byte) atan2::i#2 [ atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::yd#0 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::yd#0 ] ) always clobbers reg byte a -Statement [42] if((signed byte) atan2::yi#3>(signed byte) 0) goto atan2::@13 [ atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::yd#0 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#3 atan2::xi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::yd#0 ] ) always clobbers reg byte a -Statement [43] (signed byte) atan2::xi#2 ← (signed byte) atan2::xi#3 - (signed byte) atan2::yd#0 [ atan2::x#0 atan2::y#0 atan2::yi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::xi#2 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::xi#2 ] ) always clobbers reg byte a -Statement [44] (signed byte) atan2::yi#2 ← (signed byte) atan2::yi#3 + (signed byte) atan2::xd#0 [ atan2::x#0 atan2::y#0 atan2::i#2 atan2::angle#12 atan2::xi#2 atan2::yi#2 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::i#2 atan2::angle#12 atan2::xi#2 atan2::yi#2 ] ) always clobbers reg byte a -Statement [45] (byte) atan2::angle#3 ← (byte) atan2::angle#12 - *((const byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#2) [ atan2::x#0 atan2::y#0 atan2::i#2 atan2::xi#2 atan2::yi#2 atan2::angle#3 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::i#2 atan2::xi#2 atan2::yi#2 atan2::angle#3 ] ) always clobbers reg byte a -Statement [49] (signed byte) atan2::xi#1 ← (signed byte) atan2::xi#3 + (signed byte) atan2::yd#0 [ atan2::x#0 atan2::y#0 atan2::yi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::xi#1 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::yi#3 atan2::i#2 atan2::angle#12 atan2::xd#0 atan2::xi#1 ] ) always clobbers reg byte a -Statement [50] (signed byte) atan2::yi#1 ← (signed byte) atan2::yi#3 - (signed byte) atan2::xd#0 [ atan2::x#0 atan2::y#0 atan2::i#2 atan2::angle#12 atan2::yi#1 atan2::xi#1 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::i#2 atan2::angle#12 atan2::yi#1 atan2::xi#1 ] ) always clobbers reg byte a -Statement [51] (byte) atan2::angle#2 ← (byte) atan2::angle#12 + *((const byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#2) [ atan2::x#0 atan2::y#0 atan2::i#2 atan2::yi#1 atan2::angle#2 atan2::xi#1 ] ( main:3::atan2:13 [ main::y#4 main::x#2 main::screen#2 atan2::x#0 atan2::y#0 atan2::i#2 atan2::yi#1 atan2::angle#2 atan2::xi#1 ] ) always clobbers reg byte a -Statement [57] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:3::init_font_hex:6 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y -Statement [59] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:3::init_font_hex:6 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a -Statement [60] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:3::init_font_hex:6 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a -Statement [66] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:3::init_font_hex:6 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a -Statement [68] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:3::init_font_hex:6 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a -Statement [69] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:3::init_font_hex:6 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a -Statement [70] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:3::init_font_hex:6 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a -Statement [73] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:3::init_font_hex:6 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a +Statement [67] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:4::init_font_hex:7 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a +Statement [69] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:4::init_font_hex:7 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a +Statement [70] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:4::init_font_hex:7 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [71] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:4::init_font_hex:7 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [74] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:4::init_font_hex:7 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a +Statement [9] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:4 [ ] ) always clobbers reg byte a +Statement [17] *((byte*) main::screen#2) ← (byte) main::angle#0 [ main::y#4 main::x#2 main::screen#2 ] ( main:4 [ main::y#4 main::x#2 main::screen#2 ] ) always clobbers reg byte y +Statement [23] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) [ ] ( main:4 [ ] ) always clobbers reg byte a +Statement [24] if((signed byte) atan2_8::y#0>(signed byte) 0) goto atan2_8::@1 [ atan2_8::x#0 atan2_8::y#0 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 ] ) always clobbers reg byte a +Statement [25] (signed byte~) atan2_8::$2 ← - (signed byte) atan2_8::y#0 [ atan2_8::x#0 atan2_8::y#0 atan2_8::$2 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::$2 ] ) always clobbers reg byte a +Statement [27] if((signed byte) atan2_8::x#0>(signed byte) 0) goto atan2_8::@4 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#0 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#0 ] ) always clobbers reg byte a +Statement [28] (signed byte~) atan2_8::$7 ← - (signed byte) atan2_8::x#0 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#0 atan2_8::$7 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#0 atan2_8::$7 ] ) always clobbers reg byte a +Statement [31] if((signed byte) atan2_8::yi#3!=(signed byte) 0) goto atan2_8::@11 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 ] ) always clobbers reg byte a +Statement [33] (byte) atan2_8::angle#1 ← (byte) atan2_8::angle#6 >> (byte) 1 [ atan2_8::x#0 atan2_8::y#0 atan2_8::angle#1 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::angle#1 ] ) always clobbers reg byte a +Statement [35] (byte) atan2_8::angle#4 ← (byte) $80 - (byte) atan2_8::angle#1 [ atan2_8::y#0 atan2_8::angle#4 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::y#0 atan2_8::angle#4 ] ) always clobbers reg byte a +Statement [38] (byte) atan2_8::angle#5 ← - (byte) atan2_8::angle#11 [ atan2_8::angle#5 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::angle#5 ] ) always clobbers reg byte a +Statement [41] (signed byte) atan2_8::xd#0 ← (signed byte) atan2_8::xi#3 >> (byte) atan2_8::i#2 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 ] ) always clobbers reg byte a +Statement [42] (signed byte) atan2_8::yd#0 ← (signed byte) atan2_8::yi#3 >> (byte) atan2_8::i#2 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::yd#0 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::yd#0 ] ) always clobbers reg byte a +Statement [43] if((signed byte) atan2_8::yi#3>(signed byte) 0) goto atan2_8::@13 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::yd#0 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::xi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::yd#0 ] ) always clobbers reg byte a +Statement [44] (signed byte) atan2_8::xi#2 ← (signed byte) atan2_8::xi#3 - (signed byte) atan2_8::yd#0 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::xi#2 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::xi#2 ] ) always clobbers reg byte a +Statement [45] (signed byte) atan2_8::yi#2 ← (signed byte) atan2_8::yi#3 + (signed byte) atan2_8::xd#0 [ atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::angle#12 atan2_8::xi#2 atan2_8::yi#2 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::angle#12 atan2_8::xi#2 atan2_8::yi#2 ] ) always clobbers reg byte a +Statement [46] (byte) atan2_8::angle#3 ← (byte) atan2_8::angle#12 - *((const byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#2) [ atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::xi#2 atan2_8::yi#2 atan2_8::angle#3 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::xi#2 atan2_8::yi#2 atan2_8::angle#3 ] ) always clobbers reg byte a +Statement [50] (signed byte) atan2_8::xi#1 ← (signed byte) atan2_8::xi#3 + (signed byte) atan2_8::yd#0 [ atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::xi#1 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::yi#3 atan2_8::i#2 atan2_8::angle#12 atan2_8::xd#0 atan2_8::xi#1 ] ) always clobbers reg byte a +Statement [51] (signed byte) atan2_8::yi#1 ← (signed byte) atan2_8::yi#3 - (signed byte) atan2_8::xd#0 [ atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::angle#12 atan2_8::yi#1 atan2_8::xi#1 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::angle#12 atan2_8::yi#1 atan2_8::xi#1 ] ) always clobbers reg byte a +Statement [52] (byte) atan2_8::angle#2 ← (byte) atan2_8::angle#12 + *((const byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#2) [ atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::yi#1 atan2_8::angle#2 atan2_8::xi#1 ] ( main:4::atan2_8:14 [ main::y#4 main::x#2 main::screen#2 atan2_8::x#0 atan2_8::y#0 atan2_8::i#2 atan2_8::yi#1 atan2_8::angle#2 atan2_8::xi#1 ] ) always clobbers reg byte a +Statement [58] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:4::init_font_hex:7 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y +Statement [60] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:4::init_font_hex:7 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a +Statement [61] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:4::init_font_hex:7 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a +Statement [67] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:4::init_font_hex:7 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a +Statement [69] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:4::init_font_hex:7 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a +Statement [70] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:4::init_font_hex:7 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [71] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:4::init_font_hex:7 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a +Statement [74] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:4::init_font_hex:7 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::y#4 main::y#1 ] : zp ZP_BYTE:2 , reg byte x , Potential registers zp ZP_BYTE:3 [ main::x#2 main::x#1 ] : zp ZP_BYTE:3 , reg byte x , Potential registers zp ZP_WORD:4 [ main::screen#2 main::screen#4 main::screen#1 ] : zp ZP_WORD:4 , -Potential registers zp ZP_BYTE:6 [ atan2::yi#3 atan2::yi#7 atan2::yi#0 atan2::yi#11 atan2::$2 atan2::yi#1 atan2::yi#2 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:7 [ atan2::xi#3 atan2::xi#7 atan2::xi#0 atan2::xi#8 atan2::$7 atan2::xi#1 atan2::xi#2 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:8 [ atan2::i#2 atan2::i#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:9 [ atan2::angle#6 atan2::angle#12 atan2::angle#13 atan2::angle#2 atan2::angle#3 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:10 [ atan2::return#1 atan2::angle#5 atan2::angle#11 atan2::angle#1 atan2::angle#4 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:6 [ atan2_8::yi#3 atan2_8::yi#7 atan2_8::yi#0 atan2_8::yi#11 atan2_8::$2 atan2_8::yi#1 atan2_8::yi#2 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:7 [ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:8 [ atan2_8::i#2 atan2_8::i#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:9 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:10 [ atan2_8::return#0 atan2_8::angle#5 atan2_8::angle#11 atan2_8::angle#1 atan2_8::angle#4 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:11 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] : zp ZP_WORD:11 , Potential registers zp ZP_BYTE:13 [ init_font_hex::c#6 init_font_hex::c#1 ] : zp ZP_BYTE:13 , reg byte x , Potential registers zp ZP_WORD:14 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] : zp ZP_WORD:14 , @@ -2234,73 +2283,73 @@ Potential registers zp ZP_WORD:16 [ init_font_hex::proto_lo#4 init_font_hex::pro Potential registers zp ZP_BYTE:18 [ init_font_hex::c1#4 init_font_hex::c1#1 ] : zp ZP_BYTE:18 , reg byte x , Potential registers zp ZP_BYTE:19 [ init_font_hex::i#2 init_font_hex::i#1 ] : zp ZP_BYTE:19 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:20 [ init_font_hex::idx#5 init_font_hex::idx#2 ] : zp ZP_BYTE:20 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:21 [ atan2::x#0 ] : zp ZP_BYTE:21 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:22 [ atan2::y#0 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:23 [ atan2::return#0 ] : zp ZP_BYTE:23 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:21 [ atan2_8::x#0 ] : zp ZP_BYTE:21 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:22 [ atan2_8::y#0 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:23 [ atan2_8::return#2 ] : zp ZP_BYTE:23 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:24 [ main::angle#0 ] : zp ZP_BYTE:24 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:25 [ atan2::xd#0 ] : zp ZP_BYTE:25 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:26 [ atan2::yd#0 ] : zp ZP_BYTE:26 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:25 [ atan2_8::xd#0 ] : zp ZP_BYTE:25 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:26 [ atan2_8::yd#0 ] : zp ZP_BYTE:26 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:27 [ init_font_hex::$0 ] : zp ZP_BYTE:27 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:28 [ init_font_hex::$1 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:29 [ init_font_hex::$2 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:30 [ init_font_hex::idx#3 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [atan2] 7,787.56: zp ZP_BYTE:9 [ atan2::angle#6 atan2::angle#12 atan2::angle#13 atan2::angle#2 atan2::angle#3 ] 3,870.49: zp ZP_BYTE:6 [ atan2::yi#3 atan2::yi#7 atan2::yi#0 atan2::yi#11 atan2::$2 atan2::yi#1 atan2::yi#2 ] 3,150.87: zp ZP_BYTE:7 [ atan2::xi#3 atan2::xi#7 atan2::xi#0 atan2::xi#8 atan2::$7 atan2::xi#1 atan2::xi#2 ] 2,002: zp ZP_BYTE:8 [ atan2::i#2 atan2::i#1 ] 1,501.5: zp ZP_BYTE:26 [ atan2::yd#0 ] 600.6: zp ZP_BYTE:25 [ atan2::xd#0 ] 202: zp ZP_BYTE:23 [ atan2::return#0 ] 50: zp ZP_BYTE:10 [ atan2::return#1 atan2::angle#5 atan2::angle#11 atan2::angle#1 atan2::angle#4 ] 4.19: zp ZP_BYTE:21 [ atan2::x#0 ] 3.89: zp ZP_BYTE:22 [ atan2::y#0 ] +Uplift Scope [atan2_8] 7,787.56: zp ZP_BYTE:9 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] 3,870.49: zp ZP_BYTE:6 [ atan2_8::yi#3 atan2_8::yi#7 atan2_8::yi#0 atan2_8::yi#11 atan2_8::$2 atan2_8::yi#1 atan2_8::yi#2 ] 3,150.87: zp ZP_BYTE:7 [ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] 2,002: zp ZP_BYTE:8 [ atan2_8::i#2 atan2_8::i#1 ] 1,501.5: zp ZP_BYTE:26 [ atan2_8::yd#0 ] 600.6: zp ZP_BYTE:25 [ atan2_8::xd#0 ] 202: zp ZP_BYTE:23 [ atan2_8::return#2 ] 50: zp ZP_BYTE:10 [ atan2_8::return#0 atan2_8::angle#5 atan2_8::angle#11 atan2_8::angle#1 atan2_8::angle#4 ] 4.19: zp ZP_BYTE:21 [ atan2_8::x#0 ] 3.89: zp ZP_BYTE:22 [ atan2_8::y#0 ] Uplift Scope [init_font_hex] 2,168.83: zp ZP_BYTE:19 [ init_font_hex::i#2 init_font_hex::i#1 ] 2,002: zp ZP_BYTE:28 [ init_font_hex::$1 ] 2,002: zp ZP_BYTE:29 [ init_font_hex::$2 ] 1,151.6: zp ZP_BYTE:20 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 1,001: zp ZP_BYTE:27 [ init_font_hex::$0 ] 202: zp ZP_BYTE:30 [ init_font_hex::idx#3 ] 165.86: zp ZP_WORD:14 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 164.97: zp ZP_BYTE:18 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 143.04: zp ZP_WORD:16 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 64.17: zp ZP_WORD:11 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 17.66: zp ZP_BYTE:13 [ init_font_hex::c#6 init_font_hex::c#1 ] Uplift Scope [main] 202: zp ZP_BYTE:24 [ main::angle#0 ] 189.38: zp ZP_BYTE:3 [ main::x#2 main::x#1 ] 109.46: zp ZP_WORD:4 [ main::screen#2 main::screen#4 main::screen#1 ] 27.68: zp ZP_BYTE:2 [ main::y#4 main::y#1 ] Uplift Scope [] -Uplifting [atan2] best 280923 combination zp ZP_BYTE:9 [ atan2::angle#6 atan2::angle#12 atan2::angle#13 atan2::angle#2 atan2::angle#3 ] reg byte x [ atan2::yi#3 atan2::yi#7 atan2::yi#0 atan2::yi#11 atan2::$2 atan2::yi#1 atan2::yi#2 ] zp ZP_BYTE:7 [ atan2::xi#3 atan2::xi#7 atan2::xi#0 atan2::xi#8 atan2::$7 atan2::xi#1 atan2::xi#2 ] zp ZP_BYTE:8 [ atan2::i#2 atan2::i#1 ] zp ZP_BYTE:26 [ atan2::yd#0 ] zp ZP_BYTE:25 [ atan2::xd#0 ] zp ZP_BYTE:23 [ atan2::return#0 ] zp ZP_BYTE:10 [ atan2::return#1 atan2::angle#5 atan2::angle#11 atan2::angle#1 atan2::angle#4 ] zp ZP_BYTE:21 [ atan2::x#0 ] zp ZP_BYTE:22 [ atan2::y#0 ] +Uplifting [atan2_8] best 283486 combination zp ZP_BYTE:9 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] reg byte x [ atan2_8::yi#3 atan2_8::yi#7 atan2_8::yi#0 atan2_8::yi#11 atan2_8::$2 atan2_8::yi#1 atan2_8::yi#2 ] zp ZP_BYTE:7 [ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] zp ZP_BYTE:8 [ atan2_8::i#2 atan2_8::i#1 ] zp ZP_BYTE:26 [ atan2_8::yd#0 ] zp ZP_BYTE:25 [ atan2_8::xd#0 ] zp ZP_BYTE:23 [ atan2_8::return#2 ] zp ZP_BYTE:10 [ atan2_8::return#0 atan2_8::angle#5 atan2_8::angle#11 atan2_8::angle#1 atan2_8::angle#4 ] zp ZP_BYTE:21 [ atan2_8::x#0 ] zp ZP_BYTE:22 [ atan2_8::y#0 ] Limited combination testing to 100 combinations of 104976 possible. -Uplifting [init_font_hex] best 261923 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp ZP_BYTE:20 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp ZP_BYTE:27 [ init_font_hex::$0 ] zp ZP_BYTE:30 [ init_font_hex::idx#3 ] zp ZP_WORD:14 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp ZP_BYTE:18 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp ZP_WORD:16 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp ZP_WORD:11 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp ZP_BYTE:13 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplifting [init_font_hex] best 264486 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp ZP_BYTE:20 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp ZP_BYTE:27 [ init_font_hex::$0 ] zp ZP_BYTE:30 [ init_font_hex::idx#3 ] zp ZP_WORD:14 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp ZP_BYTE:18 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp ZP_WORD:16 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp ZP_WORD:11 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp ZP_BYTE:13 [ init_font_hex::c#6 init_font_hex::c#1 ] Limited combination testing to 100 combinations of 6912 possible. -Uplifting [main] best 261323 combination reg byte a [ main::angle#0 ] zp ZP_BYTE:3 [ main::x#2 main::x#1 ] zp ZP_WORD:4 [ main::screen#2 main::screen#4 main::screen#1 ] zp ZP_BYTE:2 [ main::y#4 main::y#1 ] -Uplifting [] best 261323 combination -Attempting to uplift remaining variables inzp ZP_BYTE:9 [ atan2::angle#6 atan2::angle#12 atan2::angle#13 atan2::angle#2 atan2::angle#3 ] -Uplifting [atan2] best 261323 combination zp ZP_BYTE:9 [ atan2::angle#6 atan2::angle#12 atan2::angle#13 atan2::angle#2 atan2::angle#3 ] -Attempting to uplift remaining variables inzp ZP_BYTE:7 [ atan2::xi#3 atan2::xi#7 atan2::xi#0 atan2::xi#8 atan2::$7 atan2::xi#1 atan2::xi#2 ] -Uplifting [atan2] best 261323 combination zp ZP_BYTE:7 [ atan2::xi#3 atan2::xi#7 atan2::xi#0 atan2::xi#8 atan2::$7 atan2::xi#1 atan2::xi#2 ] -Attempting to uplift remaining variables inzp ZP_BYTE:8 [ atan2::i#2 atan2::i#1 ] -Uplifting [atan2] best 261323 combination zp ZP_BYTE:8 [ atan2::i#2 atan2::i#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:26 [ atan2::yd#0 ] -Uplifting [atan2] best 260323 combination reg byte y [ atan2::yd#0 ] +Uplifting [main] best 263886 combination reg byte a [ main::angle#0 ] zp ZP_BYTE:3 [ main::x#2 main::x#1 ] zp ZP_WORD:4 [ main::screen#2 main::screen#4 main::screen#1 ] zp ZP_BYTE:2 [ main::y#4 main::y#1 ] +Uplifting [] best 263886 combination +Attempting to uplift remaining variables inzp ZP_BYTE:9 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] +Uplifting [atan2_8] best 263886 combination zp ZP_BYTE:9 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] +Attempting to uplift remaining variables inzp ZP_BYTE:7 [ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] +Uplifting [atan2_8] best 263886 combination zp ZP_BYTE:7 [ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] +Attempting to uplift remaining variables inzp ZP_BYTE:8 [ atan2_8::i#2 atan2_8::i#1 ] +Uplifting [atan2_8] best 263886 combination zp ZP_BYTE:8 [ atan2_8::i#2 atan2_8::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:26 [ atan2_8::yd#0 ] +Uplifting [atan2_8] best 262886 combination reg byte y [ atan2_8::yd#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:20 [ init_font_hex::idx#5 init_font_hex::idx#2 ] -Uplifting [init_font_hex] best 260323 combination zp ZP_BYTE:20 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Uplifting [init_font_hex] best 262886 combination zp ZP_BYTE:20 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:27 [ init_font_hex::$0 ] -Uplifting [init_font_hex] best 260323 combination zp ZP_BYTE:27 [ init_font_hex::$0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:25 [ atan2::xd#0 ] -Uplifting [atan2] best 260323 combination zp ZP_BYTE:25 [ atan2::xd#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:23 [ atan2::return#0 ] -Uplifting [atan2] best 259723 combination reg byte a [ atan2::return#0 ] +Uplifting [init_font_hex] best 262886 combination zp ZP_BYTE:27 [ init_font_hex::$0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:25 [ atan2_8::xd#0 ] +Uplifting [atan2_8] best 262886 combination zp ZP_BYTE:25 [ atan2_8::xd#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:23 [ atan2_8::return#2 ] +Uplifting [atan2_8] best 262286 combination reg byte a [ atan2_8::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:30 [ init_font_hex::idx#3 ] -Uplifting [init_font_hex] best 259123 combination reg byte y [ init_font_hex::idx#3 ] +Uplifting [init_font_hex] best 261686 combination reg byte y [ init_font_hex::idx#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::x#2 main::x#1 ] -Uplifting [main] best 259123 combination zp ZP_BYTE:3 [ main::x#2 main::x#1 ] +Uplifting [main] best 261686 combination zp ZP_BYTE:3 [ main::x#2 main::x#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:18 [ init_font_hex::c1#4 init_font_hex::c1#1 ] -Uplifting [init_font_hex] best 259123 combination zp ZP_BYTE:18 [ init_font_hex::c1#4 init_font_hex::c1#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:10 [ atan2::return#1 atan2::angle#5 atan2::angle#11 atan2::angle#1 atan2::angle#4 ] -Uplifting [atan2] best 259018 combination reg byte x [ atan2::return#1 atan2::angle#5 atan2::angle#11 atan2::angle#1 atan2::angle#4 ] +Uplifting [init_font_hex] best 261686 combination zp ZP_BYTE:18 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:10 [ atan2_8::return#0 atan2_8::angle#5 atan2_8::angle#11 atan2_8::angle#1 atan2_8::angle#4 ] +Uplifting [atan2_8] best 261581 combination reg byte x [ atan2_8::return#0 atan2_8::angle#5 atan2_8::angle#11 atan2_8::angle#1 atan2_8::angle#4 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::y#4 main::y#1 ] -Uplifting [main] best 259018 combination zp ZP_BYTE:2 [ main::y#4 main::y#1 ] +Uplifting [main] best 261581 combination zp ZP_BYTE:2 [ main::y#4 main::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:13 [ init_font_hex::c#6 init_font_hex::c#1 ] -Uplifting [init_font_hex] best 259018 combination zp ZP_BYTE:13 [ init_font_hex::c#6 init_font_hex::c#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:21 [ atan2::x#0 ] -Uplifting [atan2] best 259018 combination zp ZP_BYTE:21 [ atan2::x#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:22 [ atan2::y#0 ] -Uplifting [atan2] best 259018 combination zp ZP_BYTE:22 [ atan2::y#0 ] -Coalescing zero page register with common assignment [ zp ZP_BYTE:2 [ main::y#4 main::y#1 ] ] with [ zp ZP_BYTE:22 [ atan2::y#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_BYTE:3 [ main::x#2 main::x#1 ] ] with [ zp ZP_BYTE:21 [ atan2::x#0 ] ] - score: 1 -Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:6 [ atan2::xi#3 atan2::xi#7 atan2::xi#0 atan2::xi#8 atan2::$7 atan2::xi#1 atan2::xi#2 ] -Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:7 [ atan2::i#2 atan2::i#1 ] -Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:8 [ atan2::angle#6 atan2::angle#12 atan2::angle#13 atan2::angle#2 atan2::angle#3 ] +Uplifting [init_font_hex] best 261581 combination zp ZP_BYTE:13 [ init_font_hex::c#6 init_font_hex::c#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:21 [ atan2_8::x#0 ] +Uplifting [atan2_8] best 261581 combination zp ZP_BYTE:21 [ atan2_8::x#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:22 [ atan2_8::y#0 ] +Uplifting [atan2_8] best 261581 combination zp ZP_BYTE:22 [ atan2_8::y#0 ] +Coalescing zero page register with common assignment [ zp ZP_BYTE:2 [ main::y#4 main::y#1 ] ] with [ zp ZP_BYTE:22 [ atan2_8::y#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_BYTE:3 [ main::x#2 main::x#1 ] ] with [ zp ZP_BYTE:21 [ atan2_8::x#0 ] ] - score: 1 +Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:6 [ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] +Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:7 [ atan2_8::i#2 atan2_8::i#1 ] +Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:8 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] Allocated (was zp ZP_WORD:11) zp ZP_WORD:9 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] Allocated (was zp ZP_BYTE:13) zp ZP_BYTE:11 [ init_font_hex::c#6 init_font_hex::c#1 ] Allocated (was zp ZP_WORD:14) zp ZP_WORD:12 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] Allocated (was zp ZP_WORD:16) zp ZP_WORD:14 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] Allocated (was zp ZP_BYTE:18) zp ZP_BYTE:16 [ init_font_hex::c1#4 init_font_hex::c1#1 ] Allocated (was zp ZP_BYTE:20) zp ZP_BYTE:17 [ init_font_hex::idx#5 init_font_hex::idx#2 ] -Allocated (was zp ZP_BYTE:25) zp ZP_BYTE:18 [ atan2::xd#0 ] +Allocated (was zp ZP_BYTE:25) zp ZP_BYTE:18 [ atan2_8::xd#0 ] Allocated (was zp ZP_BYTE:27) zp ZP_BYTE:19 [ init_font_hex::$0 ] ASSEMBLER BEFORE OPTIMIZATION @@ -2315,261 +2364,270 @@ ASSEMBLER BEFORE OPTIMIZATION .label D018 = $d018 // Color Ram .label COLS = $d800 + // The number of iterations performed during 16-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_16 = $f + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_16 = $1000 + // The number of iterations performed during 8-bit CORDIC atan2 calculation + .const CORDIC_ITERATIONS_8 = 8 + // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... + .label CORDIC_ATAN2_ANGLES_8 = $1100 .label CHARSET = $2000 .label SCREEN = $2800 - // The number of iterations performed during CORDIC atan2 calculation - .const CORDIC_ITERATIONS = 8 - // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... - .label CORDIC_ATAN2_ANGLES = $1000 //SEG3 @begin bbegin: jmp b1 //SEG4 @1 b1: -//SEG5 kickasm(location (const byte*) CORDIC_ATAN2_ANGLES#0) {{ .fill CORDIC_ITERATIONS, 2*256*atan(1/pow(2,i))/PI/2 }} -// Populate cordic angles table -//SEG6 [2] phi from @1 to @2 [phi:@1->@2] -b2_from_b1: +//SEG5 kickasm(location (const word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; imain] -main_from_b2: +//SEG7 kickasm(location (const byte*) CORDIC_ATAN2_ANGLES_8#0 uses CORDIC_ITERATIONS_8#0) {{ .fill CORDIC_ITERATIONS_8, 2*256*atan(1/pow(2,i))/PI/2 }} +// Populate cordic angles table +//SEG8 [3] phi from @2 to @3 [phi:@2->@3] +b3_from_b2: + jmp b3 +//SEG9 @3 +b3: +//SEG10 [4] call main +//SEG11 [6] phi from @3 to main [phi:@3->main] +main_from_b3: jsr main -//SEG10 [4] phi from @2 to @end [phi:@2->@end] -bend_from_b2: +//SEG12 [5] phi from @3 to @end [phi:@3->@end] +bend_from_b3: jmp bend -//SEG11 @end +//SEG13 @end bend: -//SEG12 main +//SEG14 main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .label screen = 4 .label x = 3 .label y = 2 - //SEG13 [6] call init_font_hex - //SEG14 [54] phi from main to init_font_hex [phi:main->init_font_hex] + //SEG15 [7] call init_font_hex + //SEG16 [55] phi from main to init_font_hex [phi:main->init_font_hex] init_font_hex_from_main: jsr init_font_hex - //SEG15 [7] phi from main to main::toD0181 [phi:main->main::toD0181] + //SEG17 [8] phi from main to main::toD0181 [phi:main->main::toD0181] toD0181_from_main: jmp toD0181 - //SEG16 main::toD0181 + //SEG18 main::toD0181 toD0181: jmp b5 - //SEG17 main::@5 + //SEG19 main::@5 b5: - //SEG18 [8] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 + //SEG20 [9] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 - //SEG19 [9] phi from main::@5 to main::@1 [phi:main::@5->main::@1] + //SEG21 [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] b1_from_b5: - //SEG20 [9] phi (byte*) main::screen#4 = (const byte*) SCREEN#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 + //SEG22 [10] phi (byte*) main::screen#4 = (const byte*) SCREEN#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 lda #SCREEN sta screen+1 - //SEG21 [9] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@5->main::@1#1] -- vbsz1=vbsc1 + //SEG23 [10] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@5->main::@1#1] -- vbsz1=vbsc1 lda #-$c sta y jmp b1 - //SEG22 [9] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + //SEG24 [10] phi from main::@3 to main::@1 [phi:main::@3->main::@1] b1_from_b3: - //SEG23 [9] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy - //SEG24 [9] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#1] -- register_copy + //SEG25 [10] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy + //SEG26 [10] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#1] -- register_copy jmp b1 - //SEG25 main::@1 + //SEG27 main::@1 b1: - //SEG26 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + //SEG28 [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2] b2_from_b1: - //SEG27 [10] phi (byte*) main::screen#2 = (byte*) main::screen#4 [phi:main::@1->main::@2#0] -- register_copy - //SEG28 [10] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#1] -- vbsz1=vbsc1 + //SEG29 [11] phi (byte*) main::screen#2 = (byte*) main::screen#4 [phi:main::@1->main::@2#0] -- register_copy + //SEG30 [11] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#1] -- vbsz1=vbsc1 lda #-$13 sta x jmp b2 - //SEG29 [10] phi from main::@6 to main::@2 [phi:main::@6->main::@2] + //SEG31 [11] phi from main::@6 to main::@2 [phi:main::@6->main::@2] b2_from_b6: - //SEG30 [10] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@6->main::@2#0] -- register_copy - //SEG31 [10] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@2#1] -- register_copy + //SEG32 [11] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@6->main::@2#0] -- register_copy + //SEG33 [11] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@2#1] -- register_copy jmp b2 - //SEG32 main::@2 + //SEG34 main::@2 b2: - //SEG33 [11] (signed byte) atan2::x#0 ← (signed byte) main::x#2 - //SEG34 [12] (signed byte) atan2::y#0 ← (signed byte) main::y#4 - //SEG35 [13] call atan2 - jsr atan2 - //SEG36 [14] (byte) atan2::return#0 ← (byte) atan2::return#1 -- vbuaa=vbuxx + //SEG35 [12] (signed byte) atan2_8::x#0 ← (signed byte) main::x#2 + //SEG36 [13] (signed byte) atan2_8::y#0 ← (signed byte) main::y#4 + //SEG37 [14] call atan2_8 + jsr atan2_8 + //SEG38 [15] (byte) atan2_8::return#2 ← (byte) atan2_8::return#0 -- vbuaa=vbuxx txa jmp b6 - //SEG37 main::@6 + //SEG39 main::@6 b6: - //SEG38 [15] (byte) main::angle#0 ← (byte) atan2::return#0 - //SEG39 [16] *((byte*) main::screen#2) ← (byte) main::angle#0 -- _deref_pbuz1=vbuaa + //SEG40 [16] (byte) main::angle#0 ← (byte) atan2_8::return#2 + //SEG41 [17] *((byte*) main::screen#2) ← (byte) main::angle#0 -- _deref_pbuz1=vbuaa ldy #0 sta (screen),y - //SEG40 [17] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 + //SEG42 [18] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - //SEG41 [18] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1 + //SEG43 [19] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1 inc x - //SEG42 [19] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsz1_neq_vbsc1_then_la1 + //SEG44 [20] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsz1_neq_vbsc1_then_la1 lda #$15 cmp x bne b2_from_b6 jmp b3 - //SEG43 main::@3 + //SEG45 main::@3 b3: - //SEG44 [20] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 + //SEG46 [21] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 inc y - //SEG45 [21] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 + //SEG47 [22] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 lda #$d cmp y bne b1_from_b3 jmp b4 - //SEG46 main::@4 + //SEG48 main::@4 b4: - //SEG47 [22] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) -- _deref_pbuc1=_inc__deref_pbuc2 + //SEG49 [23] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) -- _deref_pbuc1=_inc__deref_pbuc2 lda COLS+$c*$28+$13 clc adc #1 sta COLS+$c*$28+$13 jmp b4 } -//SEG48 atan2 +//SEG50 atan2_8 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS -// Returns the angle in hex-degrees (0=0, 128=PI, 256=2*PI) -// atan2(signed byte zeropage(3) x, signed byte zeropage(2) y) -atan2: { +// Returns the angle in hex-degrees (0=0, 0x80=PI, 0x100=2*PI) +// atan2_8(signed byte zeropage(3) x, signed byte zeropage(2) y) +atan2_8: { .label _7 = 6 - .label x = 3 - .label y = 2 .label xi = 6 .label xd = $12 .label angle = 8 .label i = 7 - //SEG49 [23] if((signed byte) atan2::y#0>(signed byte) 0) goto atan2::@1 -- vbsz1_gt_0_then_la1 + .label x = 3 + .label y = 2 + //SEG51 [24] if((signed byte) atan2_8::y#0>(signed byte) 0) goto atan2_8::@1 -- vbsz1_gt_0_then_la1 lda y cmp #0 beq !+ bpl b1 !: jmp b2 - //SEG50 atan2::@2 + //SEG52 atan2_8::@2 b2: - //SEG51 [24] (signed byte~) atan2::$2 ← - (signed byte) atan2::y#0 -- vbsxx=_neg_vbsz1 + //SEG53 [25] (signed byte~) atan2_8::$2 ← - (signed byte) atan2_8::y#0 -- vbsxx=_neg_vbsz1 lda y eor #$ff clc adc #1 tax - //SEG52 [25] phi from atan2::@1 atan2::@2 to atan2::@3 [phi:atan2::@1/atan2::@2->atan2::@3] + //SEG54 [26] phi from atan2_8::@1 atan2_8::@2 to atan2_8::@3 [phi:atan2_8::@1/atan2_8::@2->atan2_8::@3] b3_from_b1: b3_from_b2: - //SEG53 [25] phi (signed byte) atan2::yi#0 = (signed byte~) atan2::yi#11 [phi:atan2::@1/atan2::@2->atan2::@3#0] -- register_copy + //SEG55 [26] phi (signed byte) atan2_8::yi#0 = (signed byte~) atan2_8::yi#11 [phi:atan2_8::@1/atan2_8::@2->atan2_8::@3#0] -- register_copy jmp b3 - //SEG54 atan2::@3 + //SEG56 atan2_8::@3 b3: - //SEG55 [26] if((signed byte) atan2::x#0>(signed byte) 0) goto atan2::@4 -- vbsz1_gt_0_then_la1 + //SEG57 [27] if((signed byte) atan2_8::x#0>(signed byte) 0) goto atan2_8::@4 -- vbsz1_gt_0_then_la1 lda x cmp #0 beq !+ bpl b4 !: jmp b5 - //SEG56 atan2::@5 + //SEG58 atan2_8::@5 b5: - //SEG57 [27] (signed byte~) atan2::$7 ← - (signed byte) atan2::x#0 -- vbsz1=_neg_vbsz2 + //SEG59 [28] (signed byte~) atan2_8::$7 ← - (signed byte) atan2_8::x#0 -- vbsz1=_neg_vbsz2 lda x eor #$ff clc adc #1 sta _7 - //SEG58 [28] phi from atan2::@4 atan2::@5 to atan2::@6 [phi:atan2::@4/atan2::@5->atan2::@6] + //SEG60 [29] phi from atan2_8::@4 atan2_8::@5 to atan2_8::@6 [phi:atan2_8::@4/atan2_8::@5->atan2_8::@6] b6_from_b4: b6_from_b5: - //SEG59 [28] phi (signed byte) atan2::xi#0 = (signed byte~) atan2::xi#8 [phi:atan2::@4/atan2::@5->atan2::@6#0] -- register_copy + //SEG61 [29] phi (signed byte) atan2_8::xi#0 = (signed byte~) atan2_8::xi#8 [phi:atan2_8::@4/atan2_8::@5->atan2_8::@6#0] -- register_copy jmp b6 - //SEG60 atan2::@6 + //SEG62 atan2_8::@6 b6: - //SEG61 [29] phi from atan2::@6 to atan2::@10 [phi:atan2::@6->atan2::@10] + //SEG63 [30] phi from atan2_8::@6 to atan2_8::@10 [phi:atan2_8::@6->atan2_8::@10] b10_from_b6: - //SEG62 [29] phi (byte) atan2::angle#12 = (byte) 0 [phi:atan2::@6->atan2::@10#0] -- vbuz1=vbuc1 + //SEG64 [30] phi (byte) atan2_8::angle#12 = (byte) 0 [phi:atan2_8::@6->atan2_8::@10#0] -- vbuz1=vbuc1 lda #0 sta angle - //SEG63 [29] phi (byte) atan2::i#2 = (byte) 0 [phi:atan2::@6->atan2::@10#1] -- vbuz1=vbuc1 + //SEG65 [30] phi (byte) atan2_8::i#2 = (byte) 0 [phi:atan2_8::@6->atan2_8::@10#1] -- vbuz1=vbuc1 lda #0 sta i - //SEG64 [29] phi (signed byte) atan2::xi#3 = (signed byte) atan2::xi#0 [phi:atan2::@6->atan2::@10#2] -- register_copy - //SEG65 [29] phi (signed byte) atan2::yi#3 = (signed byte) atan2::yi#0 [phi:atan2::@6->atan2::@10#3] -- register_copy + //SEG66 [30] phi (signed byte) atan2_8::xi#3 = (signed byte) atan2_8::xi#0 [phi:atan2_8::@6->atan2_8::@10#2] -- register_copy + //SEG67 [30] phi (signed byte) atan2_8::yi#3 = (signed byte) atan2_8::yi#0 [phi:atan2_8::@6->atan2_8::@10#3] -- register_copy jmp b10 - //SEG66 atan2::@10 + //SEG68 atan2_8::@10 b10: - //SEG67 [30] if((signed byte) atan2::yi#3!=(signed byte) 0) goto atan2::@11 -- vbsxx_neq_0_then_la1 + //SEG69 [31] if((signed byte) atan2_8::yi#3!=(signed byte) 0) goto atan2_8::@11 -- vbsxx_neq_0_then_la1 txa cmp #0 bne b11 - //SEG68 [31] phi from atan2::@10 atan2::@14 to atan2::@12 [phi:atan2::@10/atan2::@14->atan2::@12] + //SEG70 [32] phi from atan2_8::@10 atan2_8::@14 to atan2_8::@12 [phi:atan2_8::@10/atan2_8::@14->atan2_8::@12] b12_from_b10: b12_from_b14: - //SEG69 [31] phi (byte) atan2::angle#6 = (byte) atan2::angle#12 [phi:atan2::@10/atan2::@14->atan2::@12#0] -- register_copy + //SEG71 [32] phi (byte) atan2_8::angle#6 = (byte) atan2_8::angle#12 [phi:atan2_8::@10/atan2_8::@14->atan2_8::@12#0] -- register_copy jmp b12 - //SEG70 atan2::@12 + //SEG72 atan2_8::@12 b12: - //SEG71 [32] (byte) atan2::angle#1 ← (byte) atan2::angle#6 >> (byte) 1 -- vbuxx=vbuz1_ror_1 + //SEG73 [33] (byte) atan2_8::angle#1 ← (byte) atan2_8::angle#6 >> (byte) 1 -- vbuxx=vbuz1_ror_1 lda angle lsr tax - //SEG72 [33] if((signed byte) atan2::x#0>=(signed byte) 0) goto atan2::@7 -- vbsz1_ge_0_then_la1 + //SEG74 [34] if((signed byte) atan2_8::x#0>=(signed byte) 0) goto atan2_8::@7 -- vbsz1_ge_0_then_la1 lda x cmp #0 bpl b7_from_b12 jmp b16 - //SEG73 atan2::@16 + //SEG75 atan2_8::@16 b16: - //SEG74 [34] (byte) atan2::angle#4 ← (byte) $80 - (byte) atan2::angle#1 -- vbuxx=vbuc1_minus_vbuxx + //SEG76 [35] (byte) atan2_8::angle#4 ← (byte) $80 - (byte) atan2_8::angle#1 -- vbuxx=vbuc1_minus_vbuxx txa eor #$ff clc adc #$80+1 tax - //SEG75 [35] phi from atan2::@12 atan2::@16 to atan2::@7 [phi:atan2::@12/atan2::@16->atan2::@7] + //SEG77 [36] phi from atan2_8::@12 atan2_8::@16 to atan2_8::@7 [phi:atan2_8::@12/atan2_8::@16->atan2_8::@7] b7_from_b12: b7_from_b16: - //SEG76 [35] phi (byte) atan2::angle#11 = (byte) atan2::angle#1 [phi:atan2::@12/atan2::@16->atan2::@7#0] -- register_copy + //SEG78 [36] phi (byte) atan2_8::angle#11 = (byte) atan2_8::angle#1 [phi:atan2_8::@12/atan2_8::@16->atan2_8::@7#0] -- register_copy jmp b7 - //SEG77 atan2::@7 + //SEG79 atan2_8::@7 b7: - //SEG78 [36] if((signed byte) atan2::y#0>=(signed byte) 0) goto atan2::@8 -- vbsz1_ge_0_then_la1 + //SEG80 [37] if((signed byte) atan2_8::y#0>=(signed byte) 0) goto atan2_8::@8 -- vbsz1_ge_0_then_la1 lda y cmp #0 bpl b8_from_b7 jmp b9 - //SEG79 atan2::@9 + //SEG81 atan2_8::@9 b9: - //SEG80 [37] (byte) atan2::angle#5 ← - (byte) atan2::angle#11 -- vbuxx=_neg_vbuxx + //SEG82 [38] (byte) atan2_8::angle#5 ← - (byte) atan2_8::angle#11 -- vbuxx=_neg_vbuxx dex txa eor #$ff tax - //SEG81 [38] phi from atan2::@7 atan2::@9 to atan2::@8 [phi:atan2::@7/atan2::@9->atan2::@8] + //SEG83 [39] phi from atan2_8::@7 atan2_8::@9 to atan2_8::@8 [phi:atan2_8::@7/atan2_8::@9->atan2_8::@8] b8_from_b7: b8_from_b9: - //SEG82 [38] phi (byte) atan2::return#1 = (byte) atan2::angle#11 [phi:atan2::@7/atan2::@9->atan2::@8#0] -- register_copy + //SEG84 [39] phi (byte) atan2_8::return#0 = (byte) atan2_8::angle#11 [phi:atan2_8::@7/atan2_8::@9->atan2_8::@8#0] -- register_copy jmp b8 - //SEG83 atan2::@8 + //SEG85 atan2_8::@8 b8: jmp breturn - //SEG84 atan2::@return + //SEG86 atan2_8::@return breturn: - //SEG85 [39] return + //SEG87 [40] return rts - //SEG86 atan2::@11 + //SEG88 atan2_8::@11 b11: - //SEG87 [40] (signed byte) atan2::xd#0 ← (signed byte) atan2::xi#3 >> (byte) atan2::i#2 -- vbsz1=vbsz2_ror_vbuz3 + //SEG89 [41] (signed byte) atan2_8::xd#0 ← (signed byte) atan2_8::xi#3 >> (byte) atan2_8::i#2 -- vbsz1=vbsz2_ror_vbuz3 lda xi ldy i cpy #0 @@ -2581,7 +2639,7 @@ atan2: { bne !l- !e: sta xd - //SEG88 [41] (signed byte) atan2::yd#0 ← (signed byte) atan2::yi#3 >> (byte) atan2::i#2 -- vbsyy=vbsxx_ror_vbuz1 + //SEG90 [42] (signed byte) atan2_8::yd#0 ← (signed byte) atan2_8::yi#3 >> (byte) atan2_8::i#2 -- vbsyy=vbsxx_ror_vbuz1 ldy i txa cpy #0 @@ -2593,86 +2651,86 @@ atan2: { bne !l- !e: tay - //SEG89 [42] if((signed byte) atan2::yi#3>(signed byte) 0) goto atan2::@13 -- vbsxx_gt_0_then_la1 + //SEG91 [43] if((signed byte) atan2_8::yi#3>(signed byte) 0) goto atan2_8::@13 -- vbsxx_gt_0_then_la1 txa cmp #0 beq !+ bpl b13 !: jmp b15 - //SEG90 atan2::@15 + //SEG92 atan2_8::@15 b15: - //SEG91 [43] (signed byte) atan2::xi#2 ← (signed byte) atan2::xi#3 - (signed byte) atan2::yd#0 -- vbsz1=vbsz1_minus_vbsyy + //SEG93 [44] (signed byte) atan2_8::xi#2 ← (signed byte) atan2_8::xi#3 - (signed byte) atan2_8::yd#0 -- vbsz1=vbsz1_minus_vbsyy tya eor #$ff sec adc xi sta xi - //SEG92 [44] (signed byte) atan2::yi#2 ← (signed byte) atan2::yi#3 + (signed byte) atan2::xd#0 -- vbsxx=vbsxx_plus_vbsz1 + //SEG94 [45] (signed byte) atan2_8::yi#2 ← (signed byte) atan2_8::yi#3 + (signed byte) atan2_8::xd#0 -- vbsxx=vbsxx_plus_vbsz1 txa clc adc xd tax - //SEG93 [45] (byte) atan2::angle#3 ← (byte) atan2::angle#12 - *((const byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#2) -- vbuz1=vbuz1_minus_pbuc1_derefidx_vbuz2 + //SEG95 [46] (byte) atan2_8::angle#3 ← (byte) atan2_8::angle#12 - *((const byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#2) -- vbuz1=vbuz1_minus_pbuc1_derefidx_vbuz2 lda angle ldy i sec - sbc CORDIC_ATAN2_ANGLES,y + sbc CORDIC_ATAN2_ANGLES_8,y sta angle - //SEG94 [46] phi from atan2::@13 atan2::@15 to atan2::@14 [phi:atan2::@13/atan2::@15->atan2::@14] + //SEG96 [47] phi from atan2_8::@13 atan2_8::@15 to atan2_8::@14 [phi:atan2_8::@13/atan2_8::@15->atan2_8::@14] b14_from_b13: b14_from_b15: - //SEG95 [46] phi (signed byte) atan2::xi#7 = (signed byte) atan2::xi#1 [phi:atan2::@13/atan2::@15->atan2::@14#0] -- register_copy - //SEG96 [46] phi (byte) atan2::angle#13 = (byte) atan2::angle#2 [phi:atan2::@13/atan2::@15->atan2::@14#1] -- register_copy - //SEG97 [46] phi (signed byte) atan2::yi#7 = (signed byte) atan2::yi#1 [phi:atan2::@13/atan2::@15->atan2::@14#2] -- register_copy + //SEG97 [47] phi (signed byte) atan2_8::xi#7 = (signed byte) atan2_8::xi#1 [phi:atan2_8::@13/atan2_8::@15->atan2_8::@14#0] -- register_copy + //SEG98 [47] phi (byte) atan2_8::angle#13 = (byte) atan2_8::angle#2 [phi:atan2_8::@13/atan2_8::@15->atan2_8::@14#1] -- register_copy + //SEG99 [47] phi (signed byte) atan2_8::yi#7 = (signed byte) atan2_8::yi#1 [phi:atan2_8::@13/atan2_8::@15->atan2_8::@14#2] -- register_copy jmp b14 - //SEG98 atan2::@14 + //SEG100 atan2_8::@14 b14: - //SEG99 [47] (byte) atan2::i#1 ← ++ (byte) atan2::i#2 -- vbuz1=_inc_vbuz1 + //SEG101 [48] (byte) atan2_8::i#1 ← ++ (byte) atan2_8::i#2 -- vbuz1=_inc_vbuz1 inc i - //SEG100 [48] if((byte) atan2::i#1==(const byte) CORDIC_ITERATIONS#0+(byte) 1) goto atan2::@12 -- vbuz1_eq_vbuc1_then_la1 - lda #CORDIC_ITERATIONS+1 + //SEG102 [49] if((byte) atan2_8::i#1==(const byte) CORDIC_ITERATIONS_8#0+(byte) 1) goto atan2_8::@12 -- vbuz1_eq_vbuc1_then_la1 + lda #CORDIC_ITERATIONS_8+1 cmp i beq b12_from_b14 - //SEG101 [29] phi from atan2::@14 to atan2::@10 [phi:atan2::@14->atan2::@10] + //SEG103 [30] phi from atan2_8::@14 to atan2_8::@10 [phi:atan2_8::@14->atan2_8::@10] b10_from_b14: - //SEG102 [29] phi (byte) atan2::angle#12 = (byte) atan2::angle#13 [phi:atan2::@14->atan2::@10#0] -- register_copy - //SEG103 [29] phi (byte) atan2::i#2 = (byte) atan2::i#1 [phi:atan2::@14->atan2::@10#1] -- register_copy - //SEG104 [29] phi (signed byte) atan2::xi#3 = (signed byte) atan2::xi#7 [phi:atan2::@14->atan2::@10#2] -- register_copy - //SEG105 [29] phi (signed byte) atan2::yi#3 = (signed byte) atan2::yi#7 [phi:atan2::@14->atan2::@10#3] -- register_copy + //SEG104 [30] phi (byte) atan2_8::angle#12 = (byte) atan2_8::angle#13 [phi:atan2_8::@14->atan2_8::@10#0] -- register_copy + //SEG105 [30] phi (byte) atan2_8::i#2 = (byte) atan2_8::i#1 [phi:atan2_8::@14->atan2_8::@10#1] -- register_copy + //SEG106 [30] phi (signed byte) atan2_8::xi#3 = (signed byte) atan2_8::xi#7 [phi:atan2_8::@14->atan2_8::@10#2] -- register_copy + //SEG107 [30] phi (signed byte) atan2_8::yi#3 = (signed byte) atan2_8::yi#7 [phi:atan2_8::@14->atan2_8::@10#3] -- register_copy jmp b10 - //SEG106 atan2::@13 + //SEG108 atan2_8::@13 b13: - //SEG107 [49] (signed byte) atan2::xi#1 ← (signed byte) atan2::xi#3 + (signed byte) atan2::yd#0 -- vbsz1=vbsz1_plus_vbsyy + //SEG109 [50] (signed byte) atan2_8::xi#1 ← (signed byte) atan2_8::xi#3 + (signed byte) atan2_8::yd#0 -- vbsz1=vbsz1_plus_vbsyy tya clc adc xi sta xi - //SEG108 [50] (signed byte) atan2::yi#1 ← (signed byte) atan2::yi#3 - (signed byte) atan2::xd#0 -- vbsxx=vbsxx_minus_vbsz1 + //SEG110 [51] (signed byte) atan2_8::yi#1 ← (signed byte) atan2_8::yi#3 - (signed byte) atan2_8::xd#0 -- vbsxx=vbsxx_minus_vbsz1 txa sec sbc xd tax - //SEG109 [51] (byte) atan2::angle#2 ← (byte) atan2::angle#12 + *((const byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#2) -- vbuz1=vbuz1_plus_pbuc1_derefidx_vbuz2 + //SEG111 [52] (byte) atan2_8::angle#2 ← (byte) atan2_8::angle#12 + *((const byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#2) -- vbuz1=vbuz1_plus_pbuc1_derefidx_vbuz2 lda angle ldy i clc - adc CORDIC_ATAN2_ANGLES,y + adc CORDIC_ATAN2_ANGLES_8,y sta angle jmp b14_from_b13 - //SEG110 atan2::@4 + //SEG112 atan2_8::@4 b4: - //SEG111 [52] (signed byte~) atan2::xi#8 ← (signed byte) atan2::x#0 -- vbsz1=vbsz2 + //SEG113 [53] (signed byte~) atan2_8::xi#8 ← (signed byte) atan2_8::x#0 -- vbsz1=vbsz2 lda x sta xi jmp b6_from_b4 - //SEG112 atan2::@1 + //SEG114 atan2_8::@1 b1: - //SEG113 [53] (signed byte~) atan2::yi#11 ← (signed byte) atan2::y#0 -- vbsxx=vbsz1 + //SEG115 [54] (signed byte~) atan2_8::yi#11 ← (signed byte) atan2_8::y#0 -- vbsxx=vbsz1 ldx y jmp b3_from_b1 } -//SEG114 init_font_hex +//SEG116 init_font_hex // Make charset from proto chars // init_font_hex(byte* zeropage($c) charset) init_font_hex: { @@ -2683,70 +2741,70 @@ init_font_hex: { .label c1 = $10 .label proto_hi = 9 .label c = $b - //SEG115 [55] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] + //SEG117 [56] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] b1_from_init_font_hex: - //SEG116 [55] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 + //SEG118 [56] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 lda #0 sta c - //SEG117 [55] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 + //SEG119 [56] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta proto_hi+1 - //SEG118 [55] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 + //SEG120 [56] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 lda #CHARSET sta charset+1 jmp b1 - //SEG119 [55] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] + //SEG121 [56] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] b1_from_b5: - //SEG120 [55] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy - //SEG121 [55] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy - //SEG122 [55] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy + //SEG122 [56] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy + //SEG123 [56] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy + //SEG124 [56] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy jmp b1 - //SEG123 init_font_hex::@1 + //SEG125 init_font_hex::@1 b1: - //SEG124 [56] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] + //SEG126 [57] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] b2_from_b1: - //SEG125 [56] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 + //SEG127 [57] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 lda #0 sta c1 - //SEG126 [56] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 + //SEG128 [57] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta proto_lo+1 - //SEG127 [56] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy + //SEG129 [57] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy jmp b2 - //SEG128 [56] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] + //SEG130 [57] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] b2_from_b4: - //SEG129 [56] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy - //SEG130 [56] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy - //SEG131 [56] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy + //SEG131 [57] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy + //SEG132 [57] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy + //SEG133 [57] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy jmp b2 - //SEG132 init_font_hex::@2 + //SEG134 init_font_hex::@2 b2: - //SEG133 [57] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + //SEG135 [58] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (charset),y - //SEG134 [58] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] + //SEG136 [59] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] b3_from_b2: - //SEG135 [58] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 + //SEG137 [59] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 lda #1 sta idx - //SEG136 [58] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 + //SEG138 [59] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 ldx #0 jmp b3 - //SEG137 [58] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] + //SEG139 [59] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] b3_from_b3: - //SEG138 [58] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy - //SEG139 [58] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy + //SEG140 [59] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy + //SEG141 [59] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy jmp b3 - //SEG140 init_font_hex::@3 + //SEG142 init_font_hex::@3 b3: - //SEG141 [59] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4 + //SEG143 [60] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4 txa tay lda (proto_hi),y @@ -2755,37 +2813,37 @@ init_font_hex: { asl asl sta _0 - //SEG142 [60] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1 + //SEG144 [61] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1 txa tay lda (proto_lo),y asl - //SEG143 [61] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa + //SEG145 [62] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa ora _0 - //SEG144 [62] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa + //SEG146 [63] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa ldy idx sta (charset),y - //SEG145 [63] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 + //SEG147 [64] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 inc idx - //SEG146 [64] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx + //SEG148 [65] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx inx - //SEG147 [65] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 + //SEG149 [66] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #5 bne b3_from_b3 jmp b4 - //SEG148 init_font_hex::@4 + //SEG150 init_font_hex::@4 b4: - //SEG149 [66] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + //SEG151 [67] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy idx sta (charset),y - //SEG150 [67] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 + //SEG152 [68] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 ldy idx iny - //SEG151 [68] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + //SEG153 [69] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 lda #0 sta (charset),y - //SEG152 [69] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + //SEG154 [70] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc proto_lo @@ -2793,7 +2851,7 @@ init_font_hex: { bcc !+ inc proto_lo+1 !: - //SEG153 [70] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + //SEG155 [71] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc charset @@ -2801,16 +2859,16 @@ init_font_hex: { bcc !+ inc charset+1 !: - //SEG154 [71] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 + //SEG156 [72] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 inc c1 - //SEG155 [72] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 + //SEG157 [73] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp c1 bne b2_from_b4 jmp b5 - //SEG156 init_font_hex::@5 + //SEG158 init_font_hex::@5 b5: - //SEG157 [73] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + //SEG159 [74] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc proto_hi @@ -2818,28 +2876,33 @@ init_font_hex: { bcc !+ inc proto_hi+1 !: - //SEG158 [74] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 + //SEG160 [75] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 inc c - //SEG159 [75] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 + //SEG161 [76] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp c bne b1_from_b5 jmp breturn - //SEG160 init_font_hex::@return + //SEG162 init_font_hex::@return breturn: - //SEG161 [76] return + //SEG163 [77] return rts } -//SEG162 File Data +//SEG164 File Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 -.pc = CORDIC_ATAN2_ANGLES "CORDIC_ATAN2_ANGLES" - .fill CORDIC_ITERATIONS, 2*256*atan(1/pow(2,i))/PI/2 +.pc = CORDIC_ATAN2_ANGLES_16 "CORDIC_ATAN2_ANGLES_16" + .for (var i=0; i@2] -//SEG7 @2 -//SEG8 [3] call main -//SEG9 [5] phi from @2 to main [phi:@2->main] -//SEG10 [4] phi from @2 to @end [phi:@2->@end] -//SEG11 @end -//SEG12 main +//SEG6 @2 +//SEG7 kickasm(location (const byte*) CORDIC_ATAN2_ANGLES_8#0 uses CORDIC_ITERATIONS_8#0) {{ .fill CORDIC_ITERATIONS_8, 2*256*atan(1/pow(2,i))/PI/2 }} +// Populate cordic angles table +//SEG8 [3] phi from @2 to @3 [phi:@2->@3] +//SEG9 @3 +//SEG10 [4] call main +//SEG11 [6] phi from @3 to main [phi:@3->main] +//SEG12 [5] phi from @3 to @end [phi:@3->@end] +//SEG13 @end +//SEG14 main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .label screen = 4 .label x = 3 .label y = 2 - //SEG13 [6] call init_font_hex - //SEG14 [54] phi from main to init_font_hex [phi:main->init_font_hex] + //SEG15 [7] call init_font_hex + //SEG16 [55] phi from main to init_font_hex [phi:main->init_font_hex] jsr init_font_hex - //SEG15 [7] phi from main to main::toD0181 [phi:main->main::toD0181] - //SEG16 main::toD0181 - //SEG17 main::@5 - //SEG18 [8] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 + //SEG17 [8] phi from main to main::toD0181 [phi:main->main::toD0181] + //SEG18 main::toD0181 + //SEG19 main::@5 + //SEG20 [9] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 - //SEG19 [9] phi from main::@5 to main::@1 [phi:main::@5->main::@1] - //SEG20 [9] phi (byte*) main::screen#4 = (const byte*) SCREEN#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 + //SEG21 [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] + //SEG22 [10] phi (byte*) main::screen#4 = (const byte*) SCREEN#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 lda #SCREEN sta screen+1 - //SEG21 [9] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@5->main::@1#1] -- vbsz1=vbsc1 + //SEG23 [10] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@5->main::@1#1] -- vbsz1=vbsc1 lda #-$c sta y - //SEG22 [9] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - //SEG23 [9] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy - //SEG24 [9] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#1] -- register_copy - //SEG25 main::@1 + //SEG24 [10] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + //SEG25 [10] phi (byte*) main::screen#4 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy + //SEG26 [10] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#1] -- register_copy + //SEG27 main::@1 b1: - //SEG26 [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - //SEG27 [10] phi (byte*) main::screen#2 = (byte*) main::screen#4 [phi:main::@1->main::@2#0] -- register_copy - //SEG28 [10] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#1] -- vbsz1=vbsc1 + //SEG28 [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + //SEG29 [11] phi (byte*) main::screen#2 = (byte*) main::screen#4 [phi:main::@1->main::@2#0] -- register_copy + //SEG30 [11] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#1] -- vbsz1=vbsc1 lda #-$13 sta x - //SEG29 [10] phi from main::@6 to main::@2 [phi:main::@6->main::@2] - //SEG30 [10] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@6->main::@2#0] -- register_copy - //SEG31 [10] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@2#1] -- register_copy - //SEG32 main::@2 + //SEG31 [11] phi from main::@6 to main::@2 [phi:main::@6->main::@2] + //SEG32 [11] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@6->main::@2#0] -- register_copy + //SEG33 [11] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@2#1] -- register_copy + //SEG34 main::@2 b2: - //SEG33 [11] (signed byte) atan2::x#0 ← (signed byte) main::x#2 - //SEG34 [12] (signed byte) atan2::y#0 ← (signed byte) main::y#4 - //SEG35 [13] call atan2 - jsr atan2 - //SEG36 [14] (byte) atan2::return#0 ← (byte) atan2::return#1 -- vbuaa=vbuxx + //SEG35 [12] (signed byte) atan2_8::x#0 ← (signed byte) main::x#2 + //SEG36 [13] (signed byte) atan2_8::y#0 ← (signed byte) main::y#4 + //SEG37 [14] call atan2_8 + jsr atan2_8 + //SEG38 [15] (byte) atan2_8::return#2 ← (byte) atan2_8::return#0 -- vbuaa=vbuxx txa - //SEG37 main::@6 - //SEG38 [15] (byte) main::angle#0 ← (byte) atan2::return#0 - //SEG39 [16] *((byte*) main::screen#2) ← (byte) main::angle#0 -- _deref_pbuz1=vbuaa + //SEG39 main::@6 + //SEG40 [16] (byte) main::angle#0 ← (byte) atan2_8::return#2 + //SEG41 [17] *((byte*) main::screen#2) ← (byte) main::angle#0 -- _deref_pbuz1=vbuaa ldy #0 sta (screen),y - //SEG40 [17] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 + //SEG42 [18] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - //SEG41 [18] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1 + //SEG43 [19] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1 inc x - //SEG42 [19] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsz1_neq_vbsc1_then_la1 + //SEG44 [20] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsz1_neq_vbsc1_then_la1 lda #$15 cmp x bne b2 - //SEG43 main::@3 - //SEG44 [20] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 + //SEG45 main::@3 + //SEG46 [21] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 inc y - //SEG45 [21] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 + //SEG47 [22] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 lda #$d cmp y bne b1 - //SEG46 main::@4 + //SEG48 main::@4 b4: - //SEG47 [22] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) -- _deref_pbuc1=_inc__deref_pbuc2 + //SEG49 [23] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) -- _deref_pbuc1=_inc__deref_pbuc2 lda COLS+$c*$28+$13 clc adc #1 sta COLS+$c*$28+$13 jmp b4 } -//SEG48 atan2 +//SEG50 atan2_8 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS -// Returns the angle in hex-degrees (0=0, 128=PI, 256=2*PI) -// atan2(signed byte zeropage(3) x, signed byte zeropage(2) y) -atan2: { +// Returns the angle in hex-degrees (0=0, 0x80=PI, 0x100=2*PI) +// atan2_8(signed byte zeropage(3) x, signed byte zeropage(2) y) +atan2_8: { .label _7 = 6 - .label x = 3 - .label y = 2 .label xi = 6 .label xd = $12 .label angle = 8 .label i = 7 - //SEG49 [23] if((signed byte) atan2::y#0>(signed byte) 0) goto atan2::@1 -- vbsz1_gt_0_then_la1 + .label x = 3 + .label y = 2 + //SEG51 [24] if((signed byte) atan2_8::y#0>(signed byte) 0) goto atan2_8::@1 -- vbsz1_gt_0_then_la1 lda y cmp #0 beq !+ @@ -3243,18 +3319,18 @@ atan2: { jmp b1 !b1: !: - //SEG50 atan2::@2 - //SEG51 [24] (signed byte~) atan2::$2 ← - (signed byte) atan2::y#0 -- vbsxx=_neg_vbsz1 + //SEG52 atan2_8::@2 + //SEG53 [25] (signed byte~) atan2_8::$2 ← - (signed byte) atan2_8::y#0 -- vbsxx=_neg_vbsz1 lda y eor #$ff clc adc #1 tax - //SEG52 [25] phi from atan2::@1 atan2::@2 to atan2::@3 [phi:atan2::@1/atan2::@2->atan2::@3] - //SEG53 [25] phi (signed byte) atan2::yi#0 = (signed byte~) atan2::yi#11 [phi:atan2::@1/atan2::@2->atan2::@3#0] -- register_copy - //SEG54 atan2::@3 + //SEG54 [26] phi from atan2_8::@1 atan2_8::@2 to atan2_8::@3 [phi:atan2_8::@1/atan2_8::@2->atan2_8::@3] + //SEG55 [26] phi (signed byte) atan2_8::yi#0 = (signed byte~) atan2_8::yi#11 [phi:atan2_8::@1/atan2_8::@2->atan2_8::@3#0] -- register_copy + //SEG56 atan2_8::@3 b3: - //SEG55 [26] if((signed byte) atan2::x#0>(signed byte) 0) goto atan2::@4 -- vbsz1_gt_0_then_la1 + //SEG57 [27] if((signed byte) atan2_8::x#0>(signed byte) 0) goto atan2_8::@4 -- vbsz1_gt_0_then_la1 lda x cmp #0 beq !+ @@ -3262,74 +3338,74 @@ atan2: { jmp b4 !b4: !: - //SEG56 atan2::@5 - //SEG57 [27] (signed byte~) atan2::$7 ← - (signed byte) atan2::x#0 -- vbsz1=_neg_vbsz2 + //SEG58 atan2_8::@5 + //SEG59 [28] (signed byte~) atan2_8::$7 ← - (signed byte) atan2_8::x#0 -- vbsz1=_neg_vbsz2 lda x eor #$ff clc adc #1 sta _7 - //SEG58 [28] phi from atan2::@4 atan2::@5 to atan2::@6 [phi:atan2::@4/atan2::@5->atan2::@6] - //SEG59 [28] phi (signed byte) atan2::xi#0 = (signed byte~) atan2::xi#8 [phi:atan2::@4/atan2::@5->atan2::@6#0] -- register_copy - //SEG60 atan2::@6 + //SEG60 [29] phi from atan2_8::@4 atan2_8::@5 to atan2_8::@6 [phi:atan2_8::@4/atan2_8::@5->atan2_8::@6] + //SEG61 [29] phi (signed byte) atan2_8::xi#0 = (signed byte~) atan2_8::xi#8 [phi:atan2_8::@4/atan2_8::@5->atan2_8::@6#0] -- register_copy + //SEG62 atan2_8::@6 b6: - //SEG61 [29] phi from atan2::@6 to atan2::@10 [phi:atan2::@6->atan2::@10] - //SEG62 [29] phi (byte) atan2::angle#12 = (byte) 0 [phi:atan2::@6->atan2::@10#0] -- vbuz1=vbuc1 + //SEG63 [30] phi from atan2_8::@6 to atan2_8::@10 [phi:atan2_8::@6->atan2_8::@10] + //SEG64 [30] phi (byte) atan2_8::angle#12 = (byte) 0 [phi:atan2_8::@6->atan2_8::@10#0] -- vbuz1=vbuc1 lda #0 sta angle - //SEG63 [29] phi (byte) atan2::i#2 = (byte) 0 [phi:atan2::@6->atan2::@10#1] -- vbuz1=vbuc1 + //SEG65 [30] phi (byte) atan2_8::i#2 = (byte) 0 [phi:atan2_8::@6->atan2_8::@10#1] -- vbuz1=vbuc1 sta i - //SEG64 [29] phi (signed byte) atan2::xi#3 = (signed byte) atan2::xi#0 [phi:atan2::@6->atan2::@10#2] -- register_copy - //SEG65 [29] phi (signed byte) atan2::yi#3 = (signed byte) atan2::yi#0 [phi:atan2::@6->atan2::@10#3] -- register_copy - //SEG66 atan2::@10 + //SEG66 [30] phi (signed byte) atan2_8::xi#3 = (signed byte) atan2_8::xi#0 [phi:atan2_8::@6->atan2_8::@10#2] -- register_copy + //SEG67 [30] phi (signed byte) atan2_8::yi#3 = (signed byte) atan2_8::yi#0 [phi:atan2_8::@6->atan2_8::@10#3] -- register_copy + //SEG68 atan2_8::@10 b10: - //SEG67 [30] if((signed byte) atan2::yi#3!=(signed byte) 0) goto atan2::@11 -- vbsxx_neq_0_then_la1 + //SEG69 [31] if((signed byte) atan2_8::yi#3!=(signed byte) 0) goto atan2_8::@11 -- vbsxx_neq_0_then_la1 txa cmp #0 bne b11 - //SEG68 [31] phi from atan2::@10 atan2::@14 to atan2::@12 [phi:atan2::@10/atan2::@14->atan2::@12] - //SEG69 [31] phi (byte) atan2::angle#6 = (byte) atan2::angle#12 [phi:atan2::@10/atan2::@14->atan2::@12#0] -- register_copy - //SEG70 atan2::@12 + //SEG70 [32] phi from atan2_8::@10 atan2_8::@14 to atan2_8::@12 [phi:atan2_8::@10/atan2_8::@14->atan2_8::@12] + //SEG71 [32] phi (byte) atan2_8::angle#6 = (byte) atan2_8::angle#12 [phi:atan2_8::@10/atan2_8::@14->atan2_8::@12#0] -- register_copy + //SEG72 atan2_8::@12 b12: - //SEG71 [32] (byte) atan2::angle#1 ← (byte) atan2::angle#6 >> (byte) 1 -- vbuxx=vbuz1_ror_1 + //SEG73 [33] (byte) atan2_8::angle#1 ← (byte) atan2_8::angle#6 >> (byte) 1 -- vbuxx=vbuz1_ror_1 lda angle lsr tax - //SEG72 [33] if((signed byte) atan2::x#0>=(signed byte) 0) goto atan2::@7 -- vbsz1_ge_0_then_la1 + //SEG74 [34] if((signed byte) atan2_8::x#0>=(signed byte) 0) goto atan2_8::@7 -- vbsz1_ge_0_then_la1 lda x cmp #0 bpl b7 - //SEG73 atan2::@16 - //SEG74 [34] (byte) atan2::angle#4 ← (byte) $80 - (byte) atan2::angle#1 -- vbuxx=vbuc1_minus_vbuxx + //SEG75 atan2_8::@16 + //SEG76 [35] (byte) atan2_8::angle#4 ← (byte) $80 - (byte) atan2_8::angle#1 -- vbuxx=vbuc1_minus_vbuxx txa eor #$ff clc adc #$80+1 tax - //SEG75 [35] phi from atan2::@12 atan2::@16 to atan2::@7 [phi:atan2::@12/atan2::@16->atan2::@7] - //SEG76 [35] phi (byte) atan2::angle#11 = (byte) atan2::angle#1 [phi:atan2::@12/atan2::@16->atan2::@7#0] -- register_copy - //SEG77 atan2::@7 + //SEG77 [36] phi from atan2_8::@12 atan2_8::@16 to atan2_8::@7 [phi:atan2_8::@12/atan2_8::@16->atan2_8::@7] + //SEG78 [36] phi (byte) atan2_8::angle#11 = (byte) atan2_8::angle#1 [phi:atan2_8::@12/atan2_8::@16->atan2_8::@7#0] -- register_copy + //SEG79 atan2_8::@7 b7: - //SEG78 [36] if((signed byte) atan2::y#0>=(signed byte) 0) goto atan2::@8 -- vbsz1_ge_0_then_la1 + //SEG80 [37] if((signed byte) atan2_8::y#0>=(signed byte) 0) goto atan2_8::@8 -- vbsz1_ge_0_then_la1 lda y cmp #0 bpl b8 - //SEG79 atan2::@9 - //SEG80 [37] (byte) atan2::angle#5 ← - (byte) atan2::angle#11 -- vbuxx=_neg_vbuxx + //SEG81 atan2_8::@9 + //SEG82 [38] (byte) atan2_8::angle#5 ← - (byte) atan2_8::angle#11 -- vbuxx=_neg_vbuxx dex txa eor #$ff tax - //SEG81 [38] phi from atan2::@7 atan2::@9 to atan2::@8 [phi:atan2::@7/atan2::@9->atan2::@8] - //SEG82 [38] phi (byte) atan2::return#1 = (byte) atan2::angle#11 [phi:atan2::@7/atan2::@9->atan2::@8#0] -- register_copy - //SEG83 atan2::@8 + //SEG83 [39] phi from atan2_8::@7 atan2_8::@9 to atan2_8::@8 [phi:atan2_8::@7/atan2_8::@9->atan2_8::@8] + //SEG84 [39] phi (byte) atan2_8::return#0 = (byte) atan2_8::angle#11 [phi:atan2_8::@7/atan2_8::@9->atan2_8::@8#0] -- register_copy + //SEG85 atan2_8::@8 b8: - //SEG84 atan2::@return - //SEG85 [39] return + //SEG86 atan2_8::@return + //SEG87 [40] return rts - //SEG86 atan2::@11 + //SEG88 atan2_8::@11 b11: - //SEG87 [40] (signed byte) atan2::xd#0 ← (signed byte) atan2::xi#3 >> (byte) atan2::i#2 -- vbsz1=vbsz2_ror_vbuz3 + //SEG89 [41] (signed byte) atan2_8::xd#0 ← (signed byte) atan2_8::xi#3 >> (byte) atan2_8::i#2 -- vbsz1=vbsz2_ror_vbuz3 lda xi ldy i cpy #0 @@ -3341,7 +3417,7 @@ atan2: { bne !l- !e: sta xd - //SEG88 [41] (signed byte) atan2::yd#0 ← (signed byte) atan2::yi#3 >> (byte) atan2::i#2 -- vbsyy=vbsxx_ror_vbuz1 + //SEG90 [42] (signed byte) atan2_8::yd#0 ← (signed byte) atan2_8::yi#3 >> (byte) atan2_8::i#2 -- vbsyy=vbsxx_ror_vbuz1 ldy i txa cpy #0 @@ -3353,80 +3429,80 @@ atan2: { bne !l- !e: tay - //SEG89 [42] if((signed byte) atan2::yi#3>(signed byte) 0) goto atan2::@13 -- vbsxx_gt_0_then_la1 + //SEG91 [43] if((signed byte) atan2_8::yi#3>(signed byte) 0) goto atan2_8::@13 -- vbsxx_gt_0_then_la1 txa cmp #0 beq !+ bpl b13 !: - //SEG90 atan2::@15 - //SEG91 [43] (signed byte) atan2::xi#2 ← (signed byte) atan2::xi#3 - (signed byte) atan2::yd#0 -- vbsz1=vbsz1_minus_vbsyy + //SEG92 atan2_8::@15 + //SEG93 [44] (signed byte) atan2_8::xi#2 ← (signed byte) atan2_8::xi#3 - (signed byte) atan2_8::yd#0 -- vbsz1=vbsz1_minus_vbsyy tya eor #$ff sec adc xi sta xi - //SEG92 [44] (signed byte) atan2::yi#2 ← (signed byte) atan2::yi#3 + (signed byte) atan2::xd#0 -- vbsxx=vbsxx_plus_vbsz1 + //SEG94 [45] (signed byte) atan2_8::yi#2 ← (signed byte) atan2_8::yi#3 + (signed byte) atan2_8::xd#0 -- vbsxx=vbsxx_plus_vbsz1 txa clc adc xd tax - //SEG93 [45] (byte) atan2::angle#3 ← (byte) atan2::angle#12 - *((const byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#2) -- vbuz1=vbuz1_minus_pbuc1_derefidx_vbuz2 + //SEG95 [46] (byte) atan2_8::angle#3 ← (byte) atan2_8::angle#12 - *((const byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#2) -- vbuz1=vbuz1_minus_pbuc1_derefidx_vbuz2 lda angle ldy i sec - sbc CORDIC_ATAN2_ANGLES,y + sbc CORDIC_ATAN2_ANGLES_8,y sta angle - //SEG94 [46] phi from atan2::@13 atan2::@15 to atan2::@14 [phi:atan2::@13/atan2::@15->atan2::@14] - //SEG95 [46] phi (signed byte) atan2::xi#7 = (signed byte) atan2::xi#1 [phi:atan2::@13/atan2::@15->atan2::@14#0] -- register_copy - //SEG96 [46] phi (byte) atan2::angle#13 = (byte) atan2::angle#2 [phi:atan2::@13/atan2::@15->atan2::@14#1] -- register_copy - //SEG97 [46] phi (signed byte) atan2::yi#7 = (signed byte) atan2::yi#1 [phi:atan2::@13/atan2::@15->atan2::@14#2] -- register_copy - //SEG98 atan2::@14 + //SEG96 [47] phi from atan2_8::@13 atan2_8::@15 to atan2_8::@14 [phi:atan2_8::@13/atan2_8::@15->atan2_8::@14] + //SEG97 [47] phi (signed byte) atan2_8::xi#7 = (signed byte) atan2_8::xi#1 [phi:atan2_8::@13/atan2_8::@15->atan2_8::@14#0] -- register_copy + //SEG98 [47] phi (byte) atan2_8::angle#13 = (byte) atan2_8::angle#2 [phi:atan2_8::@13/atan2_8::@15->atan2_8::@14#1] -- register_copy + //SEG99 [47] phi (signed byte) atan2_8::yi#7 = (signed byte) atan2_8::yi#1 [phi:atan2_8::@13/atan2_8::@15->atan2_8::@14#2] -- register_copy + //SEG100 atan2_8::@14 b14: - //SEG99 [47] (byte) atan2::i#1 ← ++ (byte) atan2::i#2 -- vbuz1=_inc_vbuz1 + //SEG101 [48] (byte) atan2_8::i#1 ← ++ (byte) atan2_8::i#2 -- vbuz1=_inc_vbuz1 inc i - //SEG100 [48] if((byte) atan2::i#1==(const byte) CORDIC_ITERATIONS#0+(byte) 1) goto atan2::@12 -- vbuz1_eq_vbuc1_then_la1 - lda #CORDIC_ITERATIONS+1 + //SEG102 [49] if((byte) atan2_8::i#1==(const byte) CORDIC_ITERATIONS_8#0+(byte) 1) goto atan2_8::@12 -- vbuz1_eq_vbuc1_then_la1 + lda #CORDIC_ITERATIONS_8+1 cmp i beq b12 - //SEG101 [29] phi from atan2::@14 to atan2::@10 [phi:atan2::@14->atan2::@10] - //SEG102 [29] phi (byte) atan2::angle#12 = (byte) atan2::angle#13 [phi:atan2::@14->atan2::@10#0] -- register_copy - //SEG103 [29] phi (byte) atan2::i#2 = (byte) atan2::i#1 [phi:atan2::@14->atan2::@10#1] -- register_copy - //SEG104 [29] phi (signed byte) atan2::xi#3 = (signed byte) atan2::xi#7 [phi:atan2::@14->atan2::@10#2] -- register_copy - //SEG105 [29] phi (signed byte) atan2::yi#3 = (signed byte) atan2::yi#7 [phi:atan2::@14->atan2::@10#3] -- register_copy + //SEG103 [30] phi from atan2_8::@14 to atan2_8::@10 [phi:atan2_8::@14->atan2_8::@10] + //SEG104 [30] phi (byte) atan2_8::angle#12 = (byte) atan2_8::angle#13 [phi:atan2_8::@14->atan2_8::@10#0] -- register_copy + //SEG105 [30] phi (byte) atan2_8::i#2 = (byte) atan2_8::i#1 [phi:atan2_8::@14->atan2_8::@10#1] -- register_copy + //SEG106 [30] phi (signed byte) atan2_8::xi#3 = (signed byte) atan2_8::xi#7 [phi:atan2_8::@14->atan2_8::@10#2] -- register_copy + //SEG107 [30] phi (signed byte) atan2_8::yi#3 = (signed byte) atan2_8::yi#7 [phi:atan2_8::@14->atan2_8::@10#3] -- register_copy jmp b10 - //SEG106 atan2::@13 + //SEG108 atan2_8::@13 b13: - //SEG107 [49] (signed byte) atan2::xi#1 ← (signed byte) atan2::xi#3 + (signed byte) atan2::yd#0 -- vbsz1=vbsz1_plus_vbsyy + //SEG109 [50] (signed byte) atan2_8::xi#1 ← (signed byte) atan2_8::xi#3 + (signed byte) atan2_8::yd#0 -- vbsz1=vbsz1_plus_vbsyy tya clc adc xi sta xi - //SEG108 [50] (signed byte) atan2::yi#1 ← (signed byte) atan2::yi#3 - (signed byte) atan2::xd#0 -- vbsxx=vbsxx_minus_vbsz1 + //SEG110 [51] (signed byte) atan2_8::yi#1 ← (signed byte) atan2_8::yi#3 - (signed byte) atan2_8::xd#0 -- vbsxx=vbsxx_minus_vbsz1 txa sec sbc xd tax - //SEG109 [51] (byte) atan2::angle#2 ← (byte) atan2::angle#12 + *((const byte*) CORDIC_ATAN2_ANGLES#0 + (byte) atan2::i#2) -- vbuz1=vbuz1_plus_pbuc1_derefidx_vbuz2 + //SEG111 [52] (byte) atan2_8::angle#2 ← (byte) atan2_8::angle#12 + *((const byte*) CORDIC_ATAN2_ANGLES_8#0 + (byte) atan2_8::i#2) -- vbuz1=vbuz1_plus_pbuc1_derefidx_vbuz2 lda angle ldy i clc - adc CORDIC_ATAN2_ANGLES,y + adc CORDIC_ATAN2_ANGLES_8,y sta angle jmp b14 - //SEG110 atan2::@4 + //SEG112 atan2_8::@4 b4: - //SEG111 [52] (signed byte~) atan2::xi#8 ← (signed byte) atan2::x#0 -- vbsz1=vbsz2 + //SEG113 [53] (signed byte~) atan2_8::xi#8 ← (signed byte) atan2_8::x#0 -- vbsz1=vbsz2 lda x sta xi jmp b6 - //SEG112 atan2::@1 + //SEG114 atan2_8::@1 b1: - //SEG113 [53] (signed byte~) atan2::yi#11 ← (signed byte) atan2::y#0 -- vbsxx=vbsz1 + //SEG115 [54] (signed byte~) atan2_8::yi#11 ← (signed byte) atan2_8::y#0 -- vbsxx=vbsz1 ldx y jmp b3 } -//SEG114 init_font_hex +//SEG116 init_font_hex // Make charset from proto chars // init_font_hex(byte* zeropage($c) charset) init_font_hex: { @@ -3437,58 +3513,58 @@ init_font_hex: { .label c1 = $10 .label proto_hi = 9 .label c = $b - //SEG115 [55] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] - //SEG116 [55] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 + //SEG117 [56] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] + //SEG118 [56] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 lda #0 sta c - //SEG117 [55] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 + //SEG119 [56] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta proto_hi+1 - //SEG118 [55] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 + //SEG120 [56] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 lda #CHARSET sta charset+1 - //SEG119 [55] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] - //SEG120 [55] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy - //SEG121 [55] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy - //SEG122 [55] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy - //SEG123 init_font_hex::@1 + //SEG121 [56] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] + //SEG122 [56] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy + //SEG123 [56] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy + //SEG124 [56] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy + //SEG125 init_font_hex::@1 b1: - //SEG124 [56] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] - //SEG125 [56] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 + //SEG126 [57] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] + //SEG127 [57] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 lda #0 sta c1 - //SEG126 [56] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 + //SEG128 [57] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta proto_lo+1 - //SEG127 [56] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy - //SEG128 [56] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] - //SEG129 [56] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy - //SEG130 [56] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy - //SEG131 [56] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy - //SEG132 init_font_hex::@2 + //SEG129 [57] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy + //SEG130 [57] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] + //SEG131 [57] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy + //SEG132 [57] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy + //SEG133 [57] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy + //SEG134 init_font_hex::@2 b2: - //SEG133 [57] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 + //SEG135 [58] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 tay sta (charset),y - //SEG134 [58] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] - //SEG135 [58] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 + //SEG136 [59] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] + //SEG137 [59] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 lda #1 sta idx - //SEG136 [58] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 + //SEG138 [59] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 ldx #0 - //SEG137 [58] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] - //SEG138 [58] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy - //SEG139 [58] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy - //SEG140 init_font_hex::@3 + //SEG139 [59] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] + //SEG140 [59] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy + //SEG141 [59] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy + //SEG142 init_font_hex::@3 b3: - //SEG141 [59] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4 + //SEG143 [60] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4 txa tay lda (proto_hi),y @@ -3497,33 +3573,33 @@ init_font_hex: { asl asl sta _0 - //SEG142 [60] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1 + //SEG144 [61] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1 txa tay lda (proto_lo),y asl - //SEG143 [61] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa + //SEG145 [62] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa ora _0 - //SEG144 [62] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa + //SEG146 [63] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa ldy idx sta (charset),y - //SEG145 [63] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 + //SEG147 [64] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 inc idx - //SEG146 [64] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx + //SEG148 [65] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx inx - //SEG147 [65] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 + //SEG149 [66] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #5 bne b3 - //SEG148 init_font_hex::@4 - //SEG149 [66] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + //SEG150 init_font_hex::@4 + //SEG151 [67] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy idx sta (charset),y - //SEG150 [67] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 + //SEG152 [68] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 iny - //SEG151 [68] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + //SEG153 [69] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 sta (charset),y - //SEG152 [69] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + //SEG154 [70] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc proto_lo @@ -3531,7 +3607,7 @@ init_font_hex: { bcc !+ inc proto_lo+1 !: - //SEG153 [70] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 + //SEG155 [71] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc charset @@ -3539,14 +3615,14 @@ init_font_hex: { bcc !+ inc charset+1 !: - //SEG154 [71] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 + //SEG156 [72] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 inc c1 - //SEG155 [72] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 + //SEG157 [73] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp c1 bne b2 - //SEG156 init_font_hex::@5 - //SEG157 [73] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 + //SEG158 init_font_hex::@5 + //SEG159 [74] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc proto_hi @@ -3554,20 +3630,24 @@ init_font_hex: { bcc !+ inc proto_hi+1 !: - //SEG158 [74] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 + //SEG160 [75] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 inc c - //SEG159 [75] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 + //SEG161 [76] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp c bne b1 - //SEG160 init_font_hex::@return - //SEG161 [76] return + //SEG162 init_font_hex::@return + //SEG163 [77] return rts } -//SEG162 File Data +//SEG164 File Data // Bit patterns for symbols 0-f (3x5 pixels) used in font hex FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 -.pc = CORDIC_ATAN2_ANGLES "CORDIC_ATAN2_ANGLES" - .fill CORDIC_ITERATIONS, 2*256*atan(1/pow(2,i))/PI/2 +.pc = CORDIC_ATAN2_ANGLES_16 "CORDIC_ATAN2_ANGLES_16" + .for (var i=0; i