Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6 Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1 Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1 Fixing pointer array-indexing *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) Fixing pointer array-indexing *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) Warning! Adding boolean cast to non-boolean condition *((byte*) strlen::str) Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str) Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) Warning! Adding boolean cast to non-boolean sub-expression (byte) atan2_16::shift Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP Identified constant variable (byte*) main::col00 Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const byte*) SCREEN (const byte*) CHARSET Culled Empty Block (label) init_font_hex::@6 Culled Empty Block (label) @1 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::@28 Culled Empty Block (label) atan2_16::@29 Culled Empty Block (label) atan2_16::@21 Culled Empty Block (label) atan2_16::@22 Culled Empty Block (label) atan2_16::@23 Culled Empty Block (label) atan2_16::@31 Culled Empty Block (label) atan2_16::@32 Culled Empty Block (label) atan2_16::@14 Culled Empty Block (label) @2 Culled Empty Block (label) @3 Culled Empty Block (label) @4 Culled Empty Block (label) @5 Culled Empty Block (label) @6 Culled Empty Block (label) @7 Culled Empty Block (label) @8 Culled Empty Block (label) @9 Culled Empty Block (label) @10 Culled Empty Block (label) @11 Culled Empty Block (label) @12 Culled Empty Block (label) @13 Culled Empty Block (label) @14 Culled Empty Block (label) @15 Culled Empty Block (label) @16 Culled Empty Block (label) @17 Culled Empty Block (label) @18 Culled Empty Block (label) @19 Culled Empty Block (label) @21 Culled Empty Block (label) @22 Culled Empty Block (label) @23 Culled Empty Block (label) @24 Culled Empty Block (label) @25 Culled Empty Block (label) @26 Culled Empty Block (label) @27 Culled Empty Block (label) @28 Culled Empty Block (label) @29 Culled Empty Block (label) @30 Culled Empty Block (label) @31 Culled Empty Block (label) @32 Culled Empty Block (label) @33 Culled Empty Block (label) @34 Culled Empty Block (label) @35 Culled Empty Block (label) @36 Culled Empty Block (label) @37 Culled Empty Block (label) @38 Culled Empty Block (label) @39 Culled Empty Block (label) @40 Culled Empty Block (label) @41 Culled Empty Block (label) @42 Culled Empty Block (label) @43 Culled Empty Block (label) @44 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) @45 Culled Empty Block (label) diff::@4 Culled Empty Block (label) diff::@5 Culled Empty Block (label) diff::@6 CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@20 (void()) init_font_hex((byte*) init_font_hex::charset) 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 ← (const byte*) FONT_HEX_PROTO (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 ← (const byte*) FONT_HEX_PROTO (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 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) atan2_16: scope:[atan2_16] from main::@2 (signed word) atan2_16::x#9 ← phi( main::@2/(signed word) atan2_16::x#0 ) (signed word) atan2_16::y#1 ← phi( main::@2/(signed word) atan2_16::y#0 ) (bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 >= (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#12 ← 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#13 ← 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#9 ← phi( atan2_16::@4/(signed word) atan2_16::yi#12 atan2_16::@5/(signed word) atan2_16::yi#13 ) (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::@27 atan2_16::@6 (signed word) atan2_16::y#7 ← phi( atan2_16::@27/(signed word) atan2_16::y#8 atan2_16::@6/(signed word) atan2_16::y#9 ) (signed word) atan2_16::x#7 ← phi( atan2_16::@27/(signed word) atan2_16::x#8 atan2_16::@6/(signed word) atan2_16::x#10 ) (word) atan2_16::angle#12 ← phi( atan2_16::@27/(word) atan2_16::angle#13 atan2_16::@6/(word) atan2_16::angle#0 ) (byte) atan2_16::i#6 ← phi( atan2_16::@27/(byte) atan2_16::i#1 atan2_16::@6/(byte) atan2_16::i#0 ) (signed word) atan2_16::xi#6 ← phi( atan2_16::@27/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) (signed word) atan2_16::yi#3 ← phi( atan2_16::@27/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#9 ) (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#19 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 ) (signed word) atan2_16::x#17 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 ) (word) atan2_16::angle#19 ← phi( atan2_16::@15/(word) atan2_16::angle#12 ) (byte) atan2_16::i#2 ← phi( atan2_16::@15/(byte) atan2_16::i#6 ) (signed word) atan2_16::yi#4 ← phi( atan2_16::@15/(signed word) atan2_16::yi#3 ) (signed word) atan2_16::xi#3 ← phi( atan2_16::@15/(signed word) atan2_16::xi#6 ) (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#4 (byte) atan2_16::shift#0 ← (byte) atan2_16::i#2 to:atan2_16::@18 atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@27 (signed word) atan2_16::y#5 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 atan2_16::@27/(signed word) atan2_16::y#8 ) (signed word) atan2_16::x#4 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 atan2_16::@27/(signed word) atan2_16::x#8 ) (word) atan2_16::angle#6 ← phi( atan2_16::@15/(word) atan2_16::angle#12 atan2_16::@27/(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::@33 atan2_16::@18: scope:[atan2_16] from atan2_16::@16 atan2_16::@19 (signed word) atan2_16::y#18 ← phi( atan2_16::@16/(signed word) atan2_16::y#19 atan2_16::@19/(signed word) atan2_16::y#20 ) (signed word) atan2_16::x#16 ← phi( atan2_16::@16/(signed word) atan2_16::x#17 atan2_16::@19/(signed word) atan2_16::x#18 ) (word) atan2_16::angle#18 ← phi( atan2_16::@16/(word) atan2_16::angle#19 atan2_16::@19/(word) atan2_16::angle#20 ) (byte) atan2_16::i#10 ← phi( atan2_16::@16/(byte) atan2_16::i#2 atan2_16::@19/(byte) atan2_16::i#11 ) (signed word) atan2_16::xi#11 ← phi( atan2_16::@16/(signed word) atan2_16::xi#3 atan2_16::@19/(signed word) atan2_16::xi#12 ) (signed word) atan2_16::yi#14 ← phi( atan2_16::@16/(signed word) atan2_16::yi#4 atan2_16::@19/(signed word) atan2_16::yi#15 ) (signed word) atan2_16::yd#7 ← phi( atan2_16::@16/(signed word) atan2_16::yd#0 atan2_16::@19/(signed word) atan2_16::yd#1 ) (signed word) atan2_16::xd#7 ← phi( atan2_16::@16/(signed word) atan2_16::xd#0 atan2_16::@19/(signed word) atan2_16::xd#1 ) (byte) atan2_16::shift#2 ← phi( atan2_16::@16/(byte) atan2_16::shift#0 atan2_16::@19/(byte) atan2_16::shift#1 ) (bool~) atan2_16::$18 ← (byte) atan2_16::shift#2 >= (number) 2 if((bool~) atan2_16::$18) goto atan2_16::@19 to:atan2_16::@20 atan2_16::@19: scope:[atan2_16] from atan2_16::@18 (signed word) atan2_16::y#20 ← phi( atan2_16::@18/(signed word) atan2_16::y#18 ) (signed word) atan2_16::x#18 ← phi( atan2_16::@18/(signed word) atan2_16::x#16 ) (word) atan2_16::angle#20 ← phi( atan2_16::@18/(word) atan2_16::angle#18 ) (byte) atan2_16::i#11 ← phi( atan2_16::@18/(byte) atan2_16::i#10 ) (signed word) atan2_16::xi#12 ← phi( atan2_16::@18/(signed word) atan2_16::xi#11 ) (signed word) atan2_16::yi#15 ← phi( atan2_16::@18/(signed word) atan2_16::yi#14 ) (byte) atan2_16::shift#3 ← phi( atan2_16::@18/(byte) atan2_16::shift#2 ) (signed word) atan2_16::yd#3 ← phi( atan2_16::@18/(signed word) atan2_16::yd#7 ) (signed word) atan2_16::xd#3 ← phi( atan2_16::@18/(signed word) atan2_16::xd#7 ) (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (number) 2 (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (number) 2 (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#3 - (number) 2 to:atan2_16::@18 atan2_16::@20: scope:[atan2_16] from atan2_16::@18 (signed word) atan2_16::y#16 ← phi( atan2_16::@18/(signed word) atan2_16::y#18 ) (signed word) atan2_16::x#14 ← phi( atan2_16::@18/(signed word) atan2_16::x#16 ) (word) atan2_16::angle#16 ← phi( atan2_16::@18/(word) atan2_16::angle#18 ) (byte) atan2_16::i#8 ← phi( atan2_16::@18/(byte) atan2_16::i#10 ) (signed word) atan2_16::xi#9 ← phi( atan2_16::@18/(signed word) atan2_16::xi#11 ) (signed word) atan2_16::yd#8 ← phi( atan2_16::@18/(signed word) atan2_16::yd#7 ) (signed word) atan2_16::xd#8 ← phi( atan2_16::@18/(signed word) atan2_16::xd#7 ) (signed word) atan2_16::yi#10 ← phi( atan2_16::@18/(signed word) atan2_16::yi#14 ) (byte) atan2_16::shift#4 ← phi( atan2_16::@18/(byte) atan2_16::shift#2 ) (bool~) atan2_16::$24 ← (number) 0 != (byte) atan2_16::shift#4 (bool~) atan2_16::$19 ← ! (bool~) atan2_16::$24 if((bool~) atan2_16::$19) goto atan2_16::@25 to:atan2_16::@24 atan2_16::@25: scope:[atan2_16] from atan2_16::@20 atan2_16::@24 (signed word) atan2_16::y#14 ← phi( atan2_16::@20/(signed word) atan2_16::y#16 atan2_16::@24/(signed word) atan2_16::y#17 ) (signed word) atan2_16::x#13 ← phi( atan2_16::@20/(signed word) atan2_16::x#14 atan2_16::@24/(signed word) atan2_16::x#15 ) (word) atan2_16::angle#14 ← phi( atan2_16::@20/(word) atan2_16::angle#16 atan2_16::@24/(word) atan2_16::angle#17 ) (byte) atan2_16::i#7 ← phi( atan2_16::@20/(byte) atan2_16::i#8 atan2_16::@24/(byte) atan2_16::i#9 ) (signed word) atan2_16::xd#9 ← phi( atan2_16::@20/(signed word) atan2_16::xd#8 atan2_16::@24/(signed word) atan2_16::xd#2 ) (signed word) atan2_16::yd#9 ← phi( atan2_16::@20/(signed word) atan2_16::yd#8 atan2_16::@24/(signed word) atan2_16::yd#2 ) (signed word) atan2_16::xi#7 ← phi( atan2_16::@20/(signed word) atan2_16::xi#9 atan2_16::@24/(signed word) atan2_16::xi#10 ) (signed word) atan2_16::yi#5 ← phi( atan2_16::@20/(signed word) atan2_16::yi#10 atan2_16::@24/(signed word) atan2_16::yi#11 ) (bool~) atan2_16::$20 ← (signed word) atan2_16::yi#5 >= (number) 0 if((bool~) atan2_16::$20) goto atan2_16::@26 to:atan2_16::@30 atan2_16::@24: scope:[atan2_16] from atan2_16::@20 (signed word) atan2_16::y#17 ← phi( atan2_16::@20/(signed word) atan2_16::y#16 ) (signed word) atan2_16::x#15 ← phi( atan2_16::@20/(signed word) atan2_16::x#14 ) (word) atan2_16::angle#17 ← phi( atan2_16::@20/(word) atan2_16::angle#16 ) (byte) atan2_16::i#9 ← phi( atan2_16::@20/(byte) atan2_16::i#8 ) (signed word) atan2_16::xi#10 ← phi( atan2_16::@20/(signed word) atan2_16::xi#9 ) (signed word) atan2_16::yi#11 ← phi( atan2_16::@20/(signed word) atan2_16::yi#10 ) (signed word) atan2_16::yd#4 ← phi( atan2_16::@20/(signed word) atan2_16::yd#8 ) (signed word) atan2_16::xd#4 ← phi( atan2_16::@20/(signed word) atan2_16::xd#8 ) (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#4 >> (number) 1 (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#4 >> (number) 1 to:atan2_16::@25 atan2_16::@26: scope:[atan2_16] from atan2_16::@25 (signed word) atan2_16::y#10 ← phi( atan2_16::@25/(signed word) atan2_16::y#14 ) (signed word) atan2_16::x#11 ← phi( atan2_16::@25/(signed word) atan2_16::x#13 ) (word) atan2_16::angle#7 ← phi( atan2_16::@25/(word) atan2_16::angle#14 ) (byte) atan2_16::i#3 ← phi( atan2_16::@25/(byte) atan2_16::i#7 ) (signed word) atan2_16::xd#5 ← phi( atan2_16::@25/(signed word) atan2_16::xd#9 ) (signed word) atan2_16::yi#6 ← phi( atan2_16::@25/(signed word) atan2_16::yi#5 ) (signed word) atan2_16::yd#5 ← phi( atan2_16::@25/(signed word) atan2_16::yd#9 ) (signed word) atan2_16::xi#4 ← phi( atan2_16::@25/(signed word) atan2_16::xi#7 ) (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#4 + (signed word) atan2_16::yd#5 (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#6 - (signed word) atan2_16::xd#5 (byte~) atan2_16::$22 ← (byte) atan2_16::i#3 * (const byte) SIZEOF_WORD (word) atan2_16::angle#2 ← (word) atan2_16::angle#7 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) to:atan2_16::@27 atan2_16::@30: scope:[atan2_16] from atan2_16::@25 (signed word) atan2_16::y#11 ← phi( atan2_16::@25/(signed word) atan2_16::y#14 ) (signed word) atan2_16::x#12 ← phi( atan2_16::@25/(signed word) atan2_16::x#13 ) (word) atan2_16::angle#8 ← phi( atan2_16::@25/(word) atan2_16::angle#14 ) (byte) atan2_16::i#4 ← phi( atan2_16::@25/(byte) atan2_16::i#7 ) (signed word) atan2_16::xd#6 ← phi( atan2_16::@25/(signed word) atan2_16::xd#9 ) (signed word) atan2_16::yi#7 ← phi( atan2_16::@25/(signed word) atan2_16::yi#5 ) (signed word) atan2_16::yd#6 ← phi( atan2_16::@25/(signed word) atan2_16::yd#9 ) (signed word) atan2_16::xi#5 ← phi( atan2_16::@25/(signed word) atan2_16::xi#7 ) (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#5 - (signed word) atan2_16::yd#6 (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#7 + (signed word) atan2_16::xd#6 (byte~) atan2_16::$23 ← (byte) atan2_16::i#4 * (const byte) SIZEOF_WORD (word) atan2_16::angle#3 ← (word) atan2_16::angle#8 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) to:atan2_16::@27 atan2_16::@27: scope:[atan2_16] from atan2_16::@26 atan2_16::@30 (signed word) atan2_16::y#8 ← phi( atan2_16::@26/(signed word) atan2_16::y#10 atan2_16::@30/(signed word) atan2_16::y#11 ) (signed word) atan2_16::xi#8 ← phi( atan2_16::@26/(signed word) atan2_16::xi#1 atan2_16::@30/(signed word) atan2_16::xi#2 ) (signed word) atan2_16::x#8 ← phi( atan2_16::@26/(signed word) atan2_16::x#11 atan2_16::@30/(signed word) atan2_16::x#12 ) (word) atan2_16::angle#13 ← phi( atan2_16::@26/(word) atan2_16::angle#2 atan2_16::@30/(word) atan2_16::angle#3 ) (signed word) atan2_16::yi#8 ← phi( atan2_16::@26/(signed word) atan2_16::yi#1 atan2_16::@30/(signed word) atan2_16::yi#2 ) (byte) atan2_16::i#5 ← phi( atan2_16::@26/(byte) atan2_16::i#3 atan2_16::@30/(byte) atan2_16::i#4 ) (byte) atan2_16::i#1 ← (byte) atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16-1) (bool~) atan2_16::$21 ← (byte) atan2_16::i#1 != rangelast(0,CORDIC_ITERATIONS_16-1) 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::@33 (word) atan2_16::angle#15 ← phi( atan2_16::@17/(word) atan2_16::angle#1 atan2_16::@33/(word) atan2_16::angle#4 ) (signed word) atan2_16::y#4 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 atan2_16::@33/(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::@33: 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 @20: scope:[] from @begin (byte*) print_screen#0 ← (byte*)(number) $400 (byte*) print_line_cursor#0 ← (byte*) print_screen#0 (byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0 to:@46 (void()) print_word((word) print_word::w) print_word: scope:[print_word] from main::@4 (byte*) print_char_cursor#23 ← phi( main::@4/(byte*) print_char_cursor#25 ) (word) print_word::w#1 ← phi( main::@4/(word) print_word::w#0 ) (byte~) print_word::$0 ← > (word) print_word::w#1 (byte) print_byte::b#0 ← (byte~) print_word::$0 call print_byte to:print_word::@1 print_word::@1: scope:[print_word] from print_word (word) print_word::w#2 ← phi( print_word/(word) print_word::w#1 ) (byte*) print_char_cursor#12 ← phi( print_word/(byte*) print_char_cursor#6 ) (byte*) print_char_cursor#1 ← (byte*) print_char_cursor#12 (byte~) print_word::$2 ← < (word) print_word::w#2 (byte) print_byte::b#1 ← (byte~) print_word::$2 call print_byte to:print_word::@2 print_word::@2: scope:[print_word] from print_word::@1 (byte*) print_char_cursor#13 ← phi( print_word::@1/(byte*) print_char_cursor#6 ) (byte*) print_char_cursor#2 ← (byte*) print_char_cursor#13 to:print_word::@return print_word::@return: scope:[print_word] from print_word::@2 (byte*) print_char_cursor#14 ← phi( print_word::@2/(byte*) print_char_cursor#2 ) (byte*) print_char_cursor#3 ← (byte*) print_char_cursor#14 return to:@return (void()) print_byte((byte) print_byte::b) print_byte: scope:[print_byte] from print_word print_word::@1 (byte*) print_char_cursor#24 ← phi( print_word/(byte*) print_char_cursor#23 print_word::@1/(byte*) print_char_cursor#1 ) (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (number) 4 (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0) call print_char to:print_byte::@1 print_byte::@1: scope:[print_byte] from print_byte (byte) print_byte::b#3 ← phi( print_byte/(byte) print_byte::b#2 ) (byte*) print_char_cursor#15 ← phi( print_byte/(byte*) print_char_cursor#8 ) (byte*) print_char_cursor#4 ← (byte*) print_char_cursor#15 (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f (byte) print_char::ch#1 ← *((const byte*) print_hextab + (number~) print_byte::$2) call print_char to:print_byte::@2 print_byte::@2: scope:[print_byte] from print_byte::@1 (byte*) print_char_cursor#16 ← phi( print_byte::@1/(byte*) print_char_cursor#8 ) (byte*) print_char_cursor#5 ← (byte*) print_char_cursor#16 to:print_byte::@return print_byte::@return: scope:[print_byte] from print_byte::@2 (byte*) print_char_cursor#17 ← phi( print_byte::@2/(byte*) print_char_cursor#5 ) (byte*) print_char_cursor#6 ← (byte*) print_char_cursor#17 return to:@return (void()) print_char((byte) print_char::ch) print_char: scope:[print_char] from print_byte print_byte::@1 (byte*) print_char_cursor#18 ← phi( print_byte/(byte*) print_char_cursor#24 print_byte::@1/(byte*) print_char_cursor#4 ) (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 ) *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2 (byte*) print_char_cursor#7 ← ++ (byte*) print_char_cursor#18 to:print_char::@return print_char::@return: scope:[print_char] from print_char (byte*) print_char_cursor#19 ← phi( print_char/(byte*) print_char_cursor#7 ) (byte*) print_char_cursor#8 ← (byte*) print_char_cursor#19 return to:@return (void()) main() main: scope:[main] from @46 (byte*) print_char_cursor#38 ← phi( @46/(byte*) print_char_cursor#27 ) (byte*) init_font_hex::charset#1 ← (const byte*) CHARSET call init_font_hex to:main::@12 main::@12: scope:[main] from main (byte*) print_char_cursor#37 ← phi( main/(byte*) print_char_cursor#38 ) (byte*) main::toD0181_screen#0 ← (const byte*) SCREEN (byte*) main::toD0181_gfx#0 ← (const byte*) CHARSET to:main::toD0181 main::toD0181: scope:[main] from main::@12 (byte*) print_char_cursor#36 ← phi( main::@12/(byte*) print_char_cursor#37 ) (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 ← ((word)) (byte*) main::toD0181_screen#1 (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (number) $3fff (number~) main::toD0181_$2 ← (number~) main::toD0181_$1 * (number) 4 (number~) main::toD0181_$3 ← > (number~) main::toD0181_$2 (word~) main::toD0181_$4 ← ((word)) (byte*) main::toD0181_gfx#1 (byte~) main::toD0181_$5 ← > (word~) main::toD0181_$4 (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (number) 4 (number~) main::toD0181_$7 ← (number~) main::toD0181_$6 & (number) $f (number~) main::toD0181_$8 ← (number~) main::toD0181_$3 | (number~) main::toD0181_$7 (byte) main::toD0181_return#0 ← (number~) main::toD0181_$8 to:main::toD0181_@return main::toD0181_@return: scope:[main] from main::toD0181 (byte*) print_char_cursor#35 ← phi( main::toD0181/(byte*) print_char_cursor#36 ) (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*) print_char_cursor#34 ← phi( main::toD0181_@return/(byte*) print_char_cursor#35 ) (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 ) (byte~) main::$1 ← (byte) main::toD0181_return#3 *((const byte*) D018) ← (byte~) main::$1 (byte*) main::screen#0 ← (const byte*) SCREEN (byte*) main::screen_ref#0 ← (const byte*) SCREEN_REF (word) main::diff_sum#0 ← (number) 0 (signed byte) main::y#0 ← (signed byte) -$c to:main::@1 main::@1: scope:[main] from main::@11 main::@3 (byte*) print_char_cursor#33 ← phi( main::@11/(byte*) print_char_cursor#34 main::@3/(byte*) print_char_cursor#28 ) (byte*) main::screen#5 ← phi( main::@11/(byte*) main::screen#0 main::@3/(byte*) main::screen#6 ) (word) main::diff_sum#7 ← phi( main::@11/(word) main::diff_sum#0 main::@3/(word) main::diff_sum#5 ) (byte*) main::screen_ref#5 ← phi( main::@11/(byte*) main::screen_ref#0 main::@3/(byte*) main::screen_ref#6 ) (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::@14 (byte*) print_char_cursor#32 ← phi( main::@1/(byte*) print_char_cursor#33 main::@14/(byte*) print_char_cursor#30 ) (byte*) main::screen#4 ← phi( main::@1/(byte*) main::screen#5 main::@14/(byte*) main::screen#1 ) (word) main::diff_sum#6 ← phi( main::@1/(word) main::diff_sum#7 main::@14/(word) main::diff_sum#1 ) (byte*) main::screen_ref#4 ← phi( main::@1/(byte*) main::screen_ref#5 main::@14/(byte*) main::screen_ref#1 ) (signed byte) main::y#2 ← phi( main::@1/(signed byte) main::y#4 main::@14/(signed byte) main::y#5 ) (signed byte) main::x#2 ← phi( main::@1/(signed byte) main::x#0 main::@14/(signed byte) main::x#1 ) (byte~) main::$3 ← ((byte)) (signed byte) main::x#2 (word~) main::$4 ← ((word)) { (byte~) main::$3, (number) 0 } (signed word~) main::$5 ← ((signed word)) (word~) main::$4 (signed word) main::xw#0 ← (signed word~) main::$5 (byte~) main::$6 ← ((byte)) (signed byte) main::y#2 (word~) main::$7 ← ((word)) { (byte~) main::$6, (number) 0 } (signed word~) main::$8 ← ((signed word)) (word~) main::$7 (signed word) main::yw#0 ← (signed word~) main::$8 (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 (byte*) print_char_cursor#31 ← phi( main::@2/(byte*) print_char_cursor#32 ) (signed byte) main::y#6 ← phi( main::@2/(signed byte) main::y#2 ) (signed byte) main::x#4 ← phi( main::@2/(signed byte) main::x#2 ) (byte*) main::screen#3 ← phi( main::@2/(byte*) main::screen#4 ) (word) main::diff_sum#4 ← phi( main::@2/(word) main::diff_sum#6 ) (byte*) main::screen_ref#2 ← phi( main::@2/(byte*) main::screen_ref#4 ) (word) atan2_16::return#4 ← phi( main::@2/(word) atan2_16::return#2 ) (word~) main::$9 ← (word) atan2_16::return#4 (word) main::angle_w#0 ← (word~) main::$9 (number~) main::$10 ← (word) main::angle_w#0 + (number) $80 (number~) main::$11 ← > (number~) main::$10 (byte) main::ang_w#0 ← (number~) main::$11 (byte) diff::bb1#0 ← (byte) main::ang_w#0 (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2) call diff (byte) diff::return#0 ← (byte) diff::return#2 to:main::@14 main::@14: scope:[main] from main::@13 (byte*) print_char_cursor#30 ← phi( main::@13/(byte*) print_char_cursor#31 ) (signed byte) main::y#5 ← phi( main::@13/(signed byte) main::y#6 ) (signed byte) main::x#3 ← phi( main::@13/(signed byte) main::x#4 ) (byte*) main::screen#2 ← phi( main::@13/(byte*) main::screen#3 ) (byte*) main::screen_ref#3 ← phi( main::@13/(byte*) main::screen_ref#2 ) (byte) main::ang_w#1 ← phi( main::@13/(byte) main::ang_w#0 ) (word) main::diff_sum#2 ← phi( main::@13/(word) main::diff_sum#4 ) (byte) diff::return#3 ← phi( main::@13/(byte) diff::return#0 ) (byte~) main::$12 ← (byte) diff::return#3 (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$12 (byte~) main::$13 ← (byte) main::ang_w#1 - *((byte*) main::screen_ref#3) *((byte*) main::screen#2) ← (byte~) main::$13 (byte*) main::screen#1 ← ++ (byte*) main::screen#2 (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#3 (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::@14 (byte*) main::screen#6 ← phi( main::@14/(byte*) main::screen#1 ) (byte*) main::screen_ref#6 ← phi( main::@14/(byte*) main::screen_ref#1 ) (byte*) print_char_cursor#28 ← phi( main::@14/(byte*) print_char_cursor#30 ) (word) main::diff_sum#5 ← phi( main::@14/(word) main::diff_sum#1 ) (signed byte) main::y#3 ← phi( main::@14/(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*) print_char_cursor#25 ← phi( main::@3/(byte*) print_char_cursor#28 ) (word) main::diff_sum#3 ← phi( main::@3/(word) main::diff_sum#5 ) (word) print_word::w#0 ← (word) main::diff_sum#3 call print_word to:main::@15 main::@15: scope:[main] from main::@4 (byte*) print_char_cursor#20 ← phi( main::@4/(byte*) print_char_cursor#3 ) (byte*) print_char_cursor#9 ← (byte*) print_char_cursor#20 to:main::@5 main::@5: scope:[main] from main::@15 main::@6 (byte*) print_char_cursor#26 ← phi( main::@15/(byte*) print_char_cursor#9 main::@6/(byte*) print_char_cursor#29 ) if(true) goto main::@6 to:main::@return main::@6: scope:[main] from main::@5 (byte*) print_char_cursor#29 ← phi( main::@5/(byte*) print_char_cursor#26 ) *((const byte*) main::col00) ← ++ *((const byte*) main::col00) to:main::@5 main::@return: scope:[main] from main::@5 (byte*) print_char_cursor#21 ← phi( main::@5/(byte*) print_char_cursor#26 ) (byte*) print_char_cursor#10 ← (byte*) print_char_cursor#21 return to:@return (byte()) diff((byte) diff::bb1 , (byte) diff::bb2) diff: scope:[diff] from main::@13 (byte) diff::bb2#1 ← phi( main::@13/(byte) diff::bb2#0 ) (byte) diff::bb1#1 ← phi( main::@13/(byte) diff::bb1#0 ) (bool~) diff::$0 ← (byte) diff::bb1#1 < (byte) diff::bb2#1 if((bool~) diff::$0) goto diff::@1 to:diff::@2 diff::@1: scope:[diff] from diff (byte) diff::bb1#2 ← phi( diff/(byte) diff::bb1#1 ) (byte) diff::bb2#2 ← phi( diff/(byte) diff::bb2#1 ) (byte~) diff::$3 ← (byte) diff::bb2#2 - (byte) diff::bb1#2 (byte~) diff::$4 ← (byte~) diff::$3 to:diff::@3 diff::@2: scope:[diff] from diff (byte) diff::bb2#3 ← phi( diff/(byte) diff::bb2#1 ) (byte) diff::bb1#3 ← phi( diff/(byte) diff::bb1#1 ) (byte~) diff::$1 ← (byte) diff::bb1#3 - (byte) diff::bb2#3 (byte~) diff::$2 ← (byte~) diff::$1 to:diff::@3 diff::@3: scope:[diff] from diff::@1 diff::@2 (byte~) diff::$5 ← phi( diff::@1/(byte~) diff::$4 diff::@2/(byte~) diff::$2 ) (byte) diff::return#1 ← (byte~) diff::$5 to:diff::@return diff::@return: scope:[diff] from diff::@3 (byte) diff::return#4 ← phi( diff::@3/(byte) diff::return#1 ) (byte) diff::return#2 ← (byte) diff::return#4 return to:@return @46: scope:[] from @20 (byte*) print_char_cursor#27 ← phi( @20/(byte*) print_char_cursor#0 ) call main to:@47 @47: scope:[] from @46 (byte*) print_char_cursor#22 ← phi( @46/(byte*) print_char_cursor#10 ) (byte*) print_char_cursor#11 ← (byte*) print_char_cursor#22 to:@end @end: scope:[] from @47 SYMBOL TABLE SSA (label) @20 (label) @46 (label) @47 (label) @begin (label) @end (const byte*) CHARSET = (byte*)(number) $2000 (const byte*) COLS = (byte*)(number) $d800 (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i= (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 (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 (unumber) 2 in (bool~) atan2_16::$18 ← (byte) atan2_16::shift#2 >= (number) 2 Adding number conversion cast (snumber) 2 in (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (number) 2 Adding number conversion cast (snumber) 2 in (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (number) 2 Adding number conversion cast (unumber) 2 in (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#3 - (number) 2 Adding number conversion cast (unumber) 0 in (bool~) atan2_16::$24 ← (number) 0 != (byte) atan2_16::shift#4 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$20 ← (signed word) atan2_16::yi#5 >= (number) 0 Adding number conversion cast (snumber) 1 in (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#4 >> (number) 1 Adding number conversion cast (snumber) 1 in (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#4 >> (number) 1 Adding number conversion cast (unumber) 1 in (byte) atan2_16::i#1 ← (byte) atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16-1) 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) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (number) $3fff Adding number conversion cast (unumber) main::toD0181_$1 in (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (unumber)(number) $3fff Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$2 ← (unumber~) main::toD0181_$1 * (number) 4 Adding number conversion cast (unumber) main::toD0181_$2 in (number~) main::toD0181_$2 ← (unumber~) main::toD0181_$1 * (unumber)(number) 4 Adding number conversion cast (unumber) main::toD0181_$3 in (number~) main::toD0181_$3 ← > (unumber~) main::toD0181_$2 Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (number) 4 Adding number conversion cast (unumber) main::toD0181_$6 in (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (unumber)(number) 4 Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (number) $f Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 Adding number conversion cast (unumber) 0 in (word) main::diff_sum#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) main::$10 ← (word) main::angle_w#0 + (number) $80 Adding number conversion cast (unumber) main::$10 in (number~) main::$10 ← (word) main::angle_w#0 + (unumber)(number) $80 Adding number conversion cast (unumber) main::$11 in (number~) main::$11 ← > (unumber~) main::$10 Successful SSA optimization PassNAddNumberTypeConversions 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 (word) atan2_16::angle#0 ← (unumber)(number) 0 Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast (word) main::diff_sum#0 ← (unumber)(number) 0 Inlining cast (byte~) main::$3 ← (byte)(signed byte) main::x#2 Inlining cast (signed word~) main::$5 ← (signed word)(word~) main::$4 Inlining cast (byte~) main::$6 ← (byte)(signed byte) main::y#2 Inlining cast (signed word~) main::$8 ← (signed word)(word~) main::$7 Successful SSA optimization Pass2InlineCast 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 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 $13 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 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 2 Simplifying constant integer cast 2 Simplifying constant integer cast 2 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $8000 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3fff Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast 0 Simplifying constant integer cast (byte~) main::$3 Simplifying constant integer cast 0 Simplifying constant integer cast (byte~) main::$6 Simplifying constant integer cast 0 Simplifying constant integer cast $80 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $13 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 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 unsigned number type (byte) 2 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 2 Finalized signed number type (signed byte) 2 Finalized signed number type (signed byte) 2 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 1 Finalized signed number type (signed byte) 1 Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 0 Finalized unsigned number type (word) $8000 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f 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) 0 Finalized unsigned number type (byte) $80 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 byte in (unumber~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f Inferred type updated to word in (unumber~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (word) $3fff Inferred type updated to word in (unumber~) main::toD0181_$2 ← (word~) main::toD0181_$1 * (byte) 4 Inferred type updated to byte in (unumber~) main::toD0181_$3 ← > (word~) main::toD0181_$2 Inferred type updated to byte in (unumber~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (byte) 4 Inferred type updated to byte in (unumber~) main::toD0181_$7 ← (byte~) main::toD0181_$6 & (byte) $f Inferred type updated to byte in (unumber~) main::toD0181_$8 ← (byte~) main::toD0181_$3 | (byte~) main::toD0181_$7 Inferred type updated to word in (unumber~) main::$10 ← (word) main::angle_w#0 + (byte) $80 Inferred type updated to byte in (unumber~) main::$11 ← > (word~) main::$10 Inversing boolean not [59] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 != (signed byte) 0 from [58] (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (signed byte) 0 Inversing boolean not [68] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [67] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0 Inversing boolean not [79] (bool~) atan2_16::$19 ← (byte) 0 == (byte) atan2_16::shift#4 from [78] (bool~) atan2_16::$24 ← (byte) 0 != (byte) atan2_16::shift#4 Inversing boolean not [103] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [102] (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#12 (signed word) atan2_16::yi#13 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::xd#0 Alias (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#4 (signed word) atan2_16::yd#0 Alias (byte) atan2_16::i#2 = (byte) atan2_16::i#6 (byte) atan2_16::shift#0 Alias (word) atan2_16::angle#12 = (word) atan2_16::angle#19 Alias (signed word) atan2_16::x#17 = (signed word) atan2_16::x#7 Alias (signed word) atan2_16::y#19 = (signed word) atan2_16::y#7 Alias (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#7 (signed word) atan2_16::xd#8 (signed word) atan2_16::xd#4 Alias (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#7 (signed word) atan2_16::yd#8 (signed word) atan2_16::yd#4 Alias (byte) atan2_16::shift#2 = (byte) atan2_16::shift#3 (byte) atan2_16::shift#4 Alias (signed word) atan2_16::yi#10 = (signed word) atan2_16::yi#15 (signed word) atan2_16::yi#14 (signed word) atan2_16::yi#11 Alias (signed word) atan2_16::xi#10 = (signed word) atan2_16::xi#12 (signed word) atan2_16::xi#11 (signed word) atan2_16::xi#9 Alias (byte) atan2_16::i#10 = (byte) atan2_16::i#11 (byte) atan2_16::i#8 (byte) atan2_16::i#9 Alias (word) atan2_16::angle#16 = (word) atan2_16::angle#20 (word) atan2_16::angle#18 (word) atan2_16::angle#17 Alias (signed word) atan2_16::x#14 = (signed word) atan2_16::x#18 (signed word) atan2_16::x#16 (signed word) atan2_16::x#15 Alias (signed word) atan2_16::y#16 = (signed word) atan2_16::y#20 (signed word) atan2_16::y#18 (signed word) atan2_16::y#17 Alias (signed word) atan2_16::xi#4 = (signed word) atan2_16::xi#7 (signed word) atan2_16::xi#5 Alias (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#9 (signed word) atan2_16::yd#6 Alias (signed word) atan2_16::yi#5 = (signed word) atan2_16::yi#6 (signed word) atan2_16::yi#7 Alias (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#9 (signed word) atan2_16::xd#6 Alias (byte) atan2_16::i#3 = (byte) atan2_16::i#7 (byte) atan2_16::i#4 Alias (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#12 Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#14 (signed word) atan2_16::y#11 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*) print_char_cursor#0 = (byte*) print_line_cursor#0 (byte*) print_screen#0 (byte*) print_char_cursor#27 Alias (byte) print_byte::b#0 = (byte~) print_word::$0 Alias (word) print_word::w#1 = (word) print_word::w#2 Alias (byte*) print_char_cursor#1 = (byte*) print_char_cursor#12 Alias (byte) print_byte::b#1 = (byte~) print_word::$2 Alias (byte*) print_char_cursor#13 = (byte*) print_char_cursor#2 (byte*) print_char_cursor#14 (byte*) print_char_cursor#3 Alias (byte) print_byte::b#2 = (byte) print_byte::b#3 Alias (byte*) print_char_cursor#15 = (byte*) print_char_cursor#4 Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#5 (byte*) print_char_cursor#17 (byte*) print_char_cursor#6 Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#7 (byte*) print_char_cursor#8 Alias (byte*) print_char_cursor#34 = (byte*) print_char_cursor#37 (byte*) print_char_cursor#38 (byte*) print_char_cursor#36 (byte*) print_char_cursor#35 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 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$1 Alias (word~) main::$4 = (word~) main::$17 Alias (signed word) main::xw#0 = (signed word~) main::$5 Alias (word~) main::$7 = (word~) main::$18 Alias (signed word) main::yw#0 = (signed word~) main::$8 Alias (word) atan2_16::return#2 = (word) atan2_16::return#4 Alias (byte*) main::screen_ref#2 = (byte*) main::screen_ref#4 (byte*) main::screen_ref#3 Alias (word) main::diff_sum#2 = (word) main::diff_sum#4 (word) main::diff_sum#6 Alias (byte*) main::screen#2 = (byte*) main::screen#3 (byte*) main::screen#4 Alias (signed byte) main::x#2 = (signed byte) main::x#4 (signed byte) main::x#3 Alias (signed byte) main::y#2 = (signed byte) main::y#6 (signed byte) main::y#5 (signed byte) main::y#3 Alias (byte*) print_char_cursor#25 = (byte*) print_char_cursor#31 (byte*) print_char_cursor#32 (byte*) print_char_cursor#30 (byte*) print_char_cursor#28 Alias (word) main::angle_w#0 = (word~) main::$9 Alias (byte) main::ang_w#0 = (byte~) main::$11 (byte) main::ang_w#1 Alias (byte) diff::return#0 = (byte) diff::return#3 Alias (word) main::diff_sum#1 = (word) main::diff_sum#5 (word) main::diff_sum#3 Alias (byte*) main::screen_ref#1 = (byte*) main::screen_ref#6 Alias (byte*) main::screen#1 = (byte*) main::screen#6 Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#9 Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#29 (byte*) print_char_cursor#26 (byte*) print_char_cursor#21 Alias (byte) diff::bb2#1 = (byte) diff::bb2#2 (byte) diff::bb2#3 Alias (byte) diff::bb1#1 = (byte) diff::bb1#2 (byte) diff::bb1#3 Alias (byte~) diff::$4 = (byte~) diff::$3 Alias (byte~) diff::$2 = (byte~) diff::$1 Alias (byte) diff::return#1 = (byte~) diff::$5 (byte) diff::return#4 (byte) diff::return#2 Alias (byte*) print_char_cursor#11 = (byte*) print_char_cursor#22 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#9 Alias (signed word) atan2_16::yi#10 = (signed word) atan2_16::yi#5 Alias (signed word) atan2_16::xi#10 = (signed word) atan2_16::xi#4 Alias (byte) atan2_16::i#10 = (byte) atan2_16::i#3 (byte) atan2_16::i#5 Alias (word) atan2_16::angle#14 = (word) atan2_16::angle#16 Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#14 (signed word) atan2_16::x#8 Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#16 (signed word) atan2_16::y#8 Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5 Successful SSA optimization Pass2AliasElimination 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::yi#10 (signed word) atan2_16::yi#3 Identical Phi Values (signed word) atan2_16::xi#10 (signed word) atan2_16::xi#3 Identical Phi Values (byte) atan2_16::i#10 (byte) atan2_16::i#2 Identical Phi Values (word) atan2_16::angle#14 (word) atan2_16::angle#12 Identical Phi Values (signed word) atan2_16::x#11 (signed word) atan2_16::x#17 Identical Phi Values (signed word) atan2_16::y#10 (signed word) atan2_16::y#19 Identical Phi Values (word) print_word::w#1 (word) print_word::w#0 Identical Phi Values (byte*) print_char_cursor#23 (byte*) print_char_cursor#25 Identical Phi Values (byte*) print_char_cursor#1 (byte*) print_char_cursor#16 Identical Phi Values (byte*) print_char_cursor#13 (byte*) print_char_cursor#16 Identical Phi Values (byte*) print_char_cursor#15 (byte*) print_char_cursor#19 Identical Phi Values (byte*) print_char_cursor#16 (byte*) print_char_cursor#19 Identical Phi Values (byte*) print_char_cursor#34 (byte*) print_char_cursor#0 Identical Phi Values (signed byte) main::y#2 (signed byte) main::y#4 Identical Phi Values (byte*) print_char_cursor#25 (byte*) print_char_cursor#33 Identical Phi Values (byte*) print_char_cursor#20 (byte*) print_char_cursor#13 Identical Phi Values (byte*) print_char_cursor#10 (byte*) print_char_cursor#20 Identical Phi Values (byte) diff::bb1#1 (byte) diff::bb1#0 Identical Phi Values (byte) diff::bb2#1 (byte) diff::bb2#0 Identical Phi Values (byte*) print_char_cursor#11 (byte*) print_char_cursor#10 Successful SSA optimization Pass2IdenticalPhiElimination 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 Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17 Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19 Identical Phi Values (byte*) print_char_cursor#33 (byte*) print_char_cursor#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 [38] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 Simple Condition (bool~) atan2_16::$5 [47] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 Simple Condition (bool~) atan2_16::$17 [60] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16 Simple Condition (bool~) atan2_16::$11 [69] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 Simple Condition (bool~) atan2_16::$18 [72] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19 Simple Condition (bool~) atan2_16::$19 [80] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25 Simple Condition (bool~) atan2_16::$20 [83] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26 Simple Condition (bool~) atan2_16::$21 [100] if((byte) atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@15 Simple Condition (bool~) atan2_16::$14 [104] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 Simple Condition (bool~) main::$14 [215] if((signed byte) main::x#1!=rangelast(-$13,$14)) goto main::@2 Simple Condition (bool~) main::$15 [219] if((signed byte) main::y#1!=rangelast(-$c,$c)) goto main::@1 Simple Condition (bool~) diff::$0 [234] if((byte) diff::bb1#0<(byte) diff::bb2#0) goto diff::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Negating conditional jump and destination [100] if((byte) atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@17 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement Constant (const byte*) init_font_hex::proto_hi#0 = FONT_HEX_PROTO Constant (const byte) init_font_hex::c#0 = 0 Constant (const byte*) init_font_hex::proto_lo#0 = FONT_HEX_PROTO 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 word) atan2_16::angle#0 = 0 Constant (const byte) atan2_16::i#0 = 0 Constant (const byte*) print_char_cursor#0 = (byte*) 1024 Constant (const byte*) init_font_hex::charset#1 = CHARSET Constant (const byte*) main::toD0181_screen#0 = SCREEN Constant (const byte*) main::toD0181_gfx#0 = CHARSET Constant (const byte*) main::screen#0 = SCREEN Constant (const byte*) main::screen_ref#0 = SCREEN_REF Constant (const word) main::diff_sum#0 = 0 Constant (const signed byte) main::y#0 = -$c Constant (const signed byte) main::x#0 = -$13 Successful SSA optimization Pass2ConstantIdentification Constant (const word) main::toD0181_$0 = (word)main::toD0181_screen#0 Constant (const word) main::toD0181_$4 = (word)main::toD0181_gfx#0 Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [226] 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#6 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 [98] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ Resolved ranged comparison value [100] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@17 to (const byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1 Resolved ranged next value [213] main::x#1 ← ++ main::x#2 to ++ Resolved ranged comparison value [215] if(main::x#1!=rangelast(-$13,$14)) goto main::@2 to (number) $15 Resolved ranged next value [217] main::y#1 ← ++ main::y#4 to ++ Resolved ranged comparison value [219] if(main::y#1!=rangelast(-$c,$c)) goto main::@1 to (number) $d 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 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-1+1 in if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(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-(byte) 1+(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-(byte) 1+(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 Constant right-side identified [3] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 Constant right-side identified [79] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff Constant right-side identified [82] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) init_font_hex::idx#1 = ++init_font_hex::idx#0 Constant (const word) main::toD0181_$1 = main::toD0181_$0&$3fff Constant (const byte) main::toD0181_$5 = >main::toD0181_$4 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [78] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4 Constant right-side identified [80] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) main::toD0181_$2 = main::toD0181_$1*4 Constant (const byte) main::toD0181_$6 = main::toD0181_$5/4 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [78] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2 Constant right-side identified [79] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::toD0181_$3 = >main::toD0181_$2 Constant (const byte) main::toD0181_$7 = main::toD0181_$6&$f Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [78] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::toD0181_return#0 = main::toD0181_$3|main::toD0181_$7 Successful SSA optimization Pass2ConstantIdentification Inlining Noop Cast [81] (byte~) main::$3 ← (byte)(signed byte) main::x#2 keeping main::x#2 Inlining Noop Cast [84] (byte~) main::$6 ← (byte)(signed byte) main::y#4 keeping main::y#4 Successful SSA optimization Pass2NopCastInlining Inlining Noop Cast [83] (signed word) main::xw#0 ← (signed word)(word~) main::$4 keeping main::xw#0 Inlining Noop Cast [86] (signed word) main::yw#0 ← (signed word)(word~) main::$7 keeping main::yw#0 Successful SSA optimization Pass2NopCastInlining Rewriting division to use shift [31] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2 Rewriting multiplication to use shift [45] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD Rewriting multiplication to use shift [49] (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::proto_hi#0 Inlining constant with var siblings (const byte) init_font_hex::c#0 Inlining constant with var siblings (const byte*) init_font_hex::proto_lo#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::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 byte*) main::screen#0 Inlining constant with var siblings (const byte*) main::screen_ref#0 Inlining constant with var siblings (const word) main::diff_sum#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*) print_char_cursor#0 Constant inlined main::screen#0 = (const byte*) SCREEN Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN Constant inlined main::toD0181_gfx#0 = (const byte*) CHARSET Constant inlined main::diff_sum#0 = (byte) 0 Constant inlined init_font_hex::proto_hi#0 = (const byte*) FONT_HEX_PROTO Constant inlined atan2_16::angle#0 = (byte) 0 Constant inlined init_font_hex::charset#1 = (const byte*) CHARSET Constant inlined init_font_hex::c1#0 = (byte) 0 Constant inlined main::toD0181_$7 = >(word)(const byte*) CHARSET/(byte) 4&(byte) $f Constant inlined main::screen_ref#0 = (const byte*) SCREEN_REF Constant inlined main::toD0181_$2 = (word)(const byte*) SCREEN&(word) $3fff*(byte) 4 Constant inlined atan2_16::i#0 = (byte) 0 Constant inlined main::toD0181_$1 = (word)(const byte*) SCREEN&(word) $3fff Constant inlined main::toD0181_$0 = (word)(const byte*) SCREEN Constant inlined main::x#0 = (signed byte) -$13 Constant inlined main::y#0 = (signed byte) -$c Constant inlined main::toD0181_$6 = >(word)(const byte*) CHARSET/(byte) 4 Constant inlined init_font_hex::i#0 = (byte) 0 Constant inlined main::toD0181_$5 = >(word)(const byte*) CHARSET Constant inlined main::toD0181_$4 = (word)(const byte*) CHARSET Constant inlined main::toD0181_$3 = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4 Constant inlined print_char_cursor#0 = (byte*) 1024 Constant inlined init_font_hex::idx#1 = ++(byte) 0 Constant inlined init_font_hex::idx#0 = (byte) 0 Constant inlined init_font_hex::proto_lo#0 = (const byte*) FONT_HEX_PROTO Constant inlined init_font_hex::c#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining 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::@34(between atan2_16::@27 and atan2_16::@15) Added new block during phi lifting atan2_16::@35(between atan2_16::@15 and atan2_16::@17) Added new block during phi lifting atan2_16::@36(between atan2_16::@27 and atan2_16::@17) Added new block during phi lifting atan2_16::@37(between atan2_16::@20 and atan2_16::@25) Added new block during phi lifting atan2_16::@38(between atan2_16::@17 and atan2_16::@7) Added new block during phi lifting atan2_16::@39(between atan2_16::@7 and atan2_16::@8) Added new block during phi lifting main::@16(between main::@3 and main::@1) Added new block during phi lifting main::@17(between main::@14 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @20 Adding NOP phi() at start of @46 Adding NOP phi() at start of @47 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::@15 Adding NOP phi() at start of main::@5 Adding NOP phi() at start of print_word::@2 Adding NOP phi() at start of print_byte::@2 Adding NOP phi() at start of init_font_hex CALL GRAPH Calls in [] to main:3 Calls in [main] to init_font_hex:7 atan2_16:21 diff:28 print_word:41 Calls in [print_word] to print_byte:55 print_byte:59 Calls in [print_byte] to print_char:67 print_char:72 Created 38 initial phi equivalence classes Coalesced [13] main::screen_ref#8 ← main::screen_ref#5 Coalesced [14] main::diff_sum#9 ← main::diff_sum#7 Coalesced [15] main::screen#8 ← main::screen#5 Coalesced [45] main::y#7 ← main::y#1 Coalesced [46] main::screen_ref#7 ← main::screen_ref#1 Coalesced [47] main::diff_sum#8 ← main::diff_sum#1 Coalesced [48] main::screen#7 ← main::screen#1 Coalesced [49] main::x#5 ← main::x#1 Coalesced (already) [50] main::screen_ref#9 ← main::screen_ref#1 Coalesced (already) [51] main::diff_sum#10 ← main::diff_sum#1 Coalesced (already) [52] main::screen#9 ← main::screen#1 Coalesced [54] print_byte::b#4 ← print_byte::b#0 Coalesced [57] print_byte::b#5 ← print_byte::b#1 Coalesced [58] print_char_cursor#39 ← print_char_cursor#19 Coalesced [65] print_char::ch#3 ← print_char::ch#0 Coalesced [66] print_char_cursor#40 ← print_char_cursor#24 Coalesced [70] print_char::ch#4 ← print_char::ch#1 Coalesced (already) [71] print_char_cursor#41 ← print_char_cursor#19 Coalesced [81] diff::return#6 ← diff::$2 Coalesced [85] diff::return#5 ← diff::$4 Coalesced [88] atan2_16::yi#17 ← atan2_16::$2 Coalesced [92] atan2_16::xi#14 ← atan2_16::$7 Coalesced [94] atan2_16::yi#19 ← atan2_16::yi#0 Coalesced [95] atan2_16::xi#16 ← atan2_16::xi#0 Coalesced [98] atan2_16::angle#22 ← atan2_16::angle#12 Coalesced [103] atan2_16::angle#27 ← atan2_16::angle#4 Coalesced [107] atan2_16::return#5 ← atan2_16::angle#5 Coalesced [110] atan2_16::return#6 ← atan2_16::angle#11 Coalesced [111] atan2_16::angle#26 ← atan2_16::angle#1 Not coalescing [112] atan2_16::shift#5 ← atan2_16::i#2 Not coalescing [113] atan2_16::xd#10 ← atan2_16::xi#3 Not coalescing [114] atan2_16::yd#10 ← atan2_16::yi#3 Coalesced [120] atan2_16::yd#13 ← atan2_16::yd#2 Coalesced [121] atan2_16::xd#13 ← atan2_16::xd#2 Coalesced [128] atan2_16::yi#21 ← atan2_16::yi#2 Coalesced [129] atan2_16::angle#25 ← atan2_16::angle#3 Coalesced [130] atan2_16::xi#18 ← atan2_16::xi#2 Coalesced [134] atan2_16::yi#18 ← atan2_16::yi#8 Coalesced [135] atan2_16::xi#15 ← atan2_16::xi#8 Coalesced [136] atan2_16::i#12 ← atan2_16::i#1 Coalesced [137] atan2_16::angle#21 ← atan2_16::angle#13 Coalesced (already) [138] atan2_16::angle#23 ← atan2_16::angle#13 Coalesced [143] atan2_16::yi#20 ← atan2_16::yi#1 Coalesced [144] atan2_16::angle#24 ← atan2_16::angle#2 Coalesced [145] atan2_16::xi#17 ← atan2_16::xi#1 Coalesced [146] atan2_16::yd#12 ← atan2_16::yd#3 Coalesced [147] atan2_16::xd#12 ← atan2_16::xd#3 Coalesced [151] atan2_16::shift#6 ← atan2_16::shift#1 Coalesced [152] atan2_16::xd#11 ← atan2_16::xd#1 Coalesced [153] atan2_16::yd#11 ← atan2_16::yd#1 Not coalescing [154] atan2_16::xi#13 ← atan2_16::x#0 Not coalescing [155] atan2_16::yi#16 ← atan2_16::y#0 Coalesced [158] init_font_hex::charset#9 ← init_font_hex::charset#5 Coalesced [180] init_font_hex::charset#8 ← init_font_hex::charset#0 Coalesced [181] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1 Coalesced [182] init_font_hex::c#7 ← init_font_hex::c#1 Coalesced (already) [183] init_font_hex::charset#10 ← init_font_hex::charset#0 Coalesced [184] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1 Coalesced [185] init_font_hex::c1#5 ← init_font_hex::c1#1 Coalesced [186] init_font_hex::i#3 ← init_font_hex::i#1 Coalesced [187] init_font_hex::idx#7 ← init_font_hex::idx#2 Coalesced down to 26 phi equivalence classes Culled Empty Block (label) @20 Culled Empty Block (label) @47 Culled Empty Block (label) main::@12 Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@15 Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@16 Culled Empty Block (label) main::@17 Culled Empty Block (label) print_word::@2 Culled Empty Block (label) print_byte::@2 Culled Empty Block (label) atan2_16::@35 Culled Empty Block (label) atan2_16::@39 Culled Empty Block (label) atan2_16::@38 Culled Empty Block (label) atan2_16::@34 Culled Empty Block (label) atan2_16::@36 Culled Empty Block (label) atan2_16::@37 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 @46 to @1 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::@20 to atan2_16::@15 Renumbering block atan2_16::@24 to atan2_16::@16 Renumbering block atan2_16::@25 to atan2_16::@17 Renumbering block atan2_16::@26 to atan2_16::@18 Renumbering block atan2_16::@27 to atan2_16::@19 Renumbering block atan2_16::@30 to atan2_16::@20 Renumbering block atan2_16::@33 to atan2_16::@21 Renumbering block main::@6 to main::@5 Renumbering block main::@11 to main::@6 Renumbering block main::@13 to main::@7 Renumbering block main::@14 to main::@8 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end Adding NOP phi() at start of main 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 [1] phi() [2] call main to:@end @end: scope:[] from @1 [3] phi() (void()) main() main: scope:[main] from @1 [4] phi() [5] call init_font_hex to:main::toD0181 main::toD0181: scope:[main] from main [6] phi() to:main::@6 main::@6: scope:[main] from main::toD0181 [7] *((const byte*) D018) ← (const byte) main::toD0181_return#0 to:main::@1 main::@1: scope:[main] from main::@3 main::@6 [8] (byte*) main::screen#5 ← phi( main::@6/(const byte*) SCREEN main::@3/(byte*) main::screen#1 ) [8] (word) main::diff_sum#7 ← phi( main::@6/(byte) 0 main::@3/(word) main::diff_sum#1 ) [8] (byte*) main::screen_ref#5 ← phi( main::@6/(const byte*) SCREEN_REF main::@3/(byte*) main::screen_ref#1 ) [8] (signed byte) main::y#4 ← phi( main::@6/(signed byte) -$c main::@3/(signed byte) main::y#1 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@8 [9] (byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#5 main::@8/(byte*) main::screen#1 ) [9] (word) main::diff_sum#2 ← phi( main::@1/(word) main::diff_sum#7 main::@8/(word) main::diff_sum#1 ) [9] (byte*) main::screen_ref#2 ← phi( main::@1/(byte*) main::screen_ref#5 main::@8/(byte*) main::screen_ref#1 ) [9] (signed byte) main::x#2 ← phi( main::@1/(signed byte) -$13 main::@8/(signed byte) main::x#1 ) [10] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 [11] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 [12] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 [13] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 [14] call atan2_16 [15] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:main::@7 main::@7: scope:[main] from main::@2 [16] (word) main::angle_w#0 ← (word) atan2_16::return#2 [17] (word~) main::$10 ← (word) main::angle_w#0 + (byte) $80 [18] (byte) main::ang_w#0 ← > (word~) main::$10 [19] (byte) diff::bb1#0 ← (byte) main::ang_w#0 [20] (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2) [21] call diff [22] (byte) diff::return#0 ← (byte) diff::return#1 to:main::@8 main::@8: scope:[main] from main::@7 [23] (byte~) main::$12 ← (byte) diff::return#0 [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$12 [25] (byte~) main::$13 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2) [26] *((byte*) main::screen#2) ← (byte~) main::$13 [27] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 [28] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 [29] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 [30] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@8 [31] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 [32] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 to:main::@4 main::@4: scope:[main] from main::@3 [33] (word) print_word::w#0 ← (word) main::diff_sum#1 [34] call print_word to:main::@5 main::@5: scope:[main] from main::@4 main::@5 [35] *((const byte*) main::col00) ← ++ *((const byte*) main::col00) to:main::@5 (void()) print_word((word) print_word::w) print_word: scope:[print_word] from main::@4 [36] (byte) print_byte::b#0 ← > (word) print_word::w#0 [37] call print_byte to:print_word::@1 print_word::@1: scope:[print_word] from print_word [38] (byte) print_byte::b#1 ← < (word) print_word::w#0 [39] call print_byte to:print_word::@return print_word::@return: scope:[print_word] from print_word::@1 [40] return to:@return (void()) print_byte((byte) print_byte::b) print_byte: scope:[print_byte] from print_word print_word::@1 [41] (byte*) print_char_cursor#24 ← phi( print_word/(byte*) 1024 print_word::@1/(byte*) print_char_cursor#19 ) [41] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [42] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [43] (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0) [44] call print_char to:print_byte::@1 print_byte::@1: scope:[print_byte] from print_byte [45] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [46] (byte) print_char::ch#1 ← *((const byte*) print_hextab + (byte~) print_byte::$2) [47] call print_char to:print_byte::@return print_byte::@return: scope:[print_byte] from print_byte::@1 [48] return to:@return (void()) print_char((byte) print_char::ch) print_char: scope:[print_char] from print_byte print_byte::@1 [49] (byte*) print_char_cursor#18 ← phi( print_byte/(byte*) print_char_cursor#24 print_byte::@1/(byte*) print_char_cursor#19 ) [49] (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 ) [50] *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2 [51] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#18 to:print_char::@return print_char::@return: scope:[print_char] from print_char [52] return to:@return (byte()) diff((byte) diff::bb1 , (byte) diff::bb2) diff: scope:[diff] from main::@7 [53] if((byte) diff::bb1#0<(byte) diff::bb2#0) goto diff::@1 to:diff::@2 diff::@2: scope:[diff] from diff [54] (byte~) diff::$2 ← (byte) diff::bb1#0 - (byte) diff::bb2#0 to:diff::@3 diff::@3: scope:[diff] from diff::@1 diff::@2 [55] (byte) diff::return#1 ← phi( diff::@1/(byte~) diff::$4 diff::@2/(byte~) diff::$2 ) to:diff::@return diff::@return: scope:[diff] from diff::@3 [56] return to:@return diff::@1: scope:[diff] from diff [57] (byte~) diff::$4 ← (byte) diff::bb2#0 - (byte) diff::bb1#0 to:diff::@3 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) atan2_16: scope:[atan2_16] from main::@2 [58] 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 [59] (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 [60] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) [61] 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 [62] (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 [63] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 [64] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) [64] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [64] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) [64] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) [65] 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::@19 [66] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) [67] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [68] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 to:atan2_16::@21 atan2_16::@21: scope:[atan2_16] from atan2_16::@12 [69] (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::@21 [70] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) [71] 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 [72] (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 [73] (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 [74] return to:@return atan2_16::@11: scope:[atan2_16] from atan2_16::@10 [75] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 [76] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [77] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 to:atan2_16::@13 atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14 [78] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) [78] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) [78] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) [79] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@13 [80] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 to:atan2_16::@16 atan2_16::@16: scope:[atan2_16] from atan2_16::@15 [81] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [82] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 to:atan2_16::@17 atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16 [83] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) [83] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) [84] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 to:atan2_16::@20 atan2_16::@20: scope:[atan2_16] from atan2_16::@17 [85] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [86] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [87] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [88] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) to:atan2_16::@19 atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20 [89] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) [89] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) [89] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) [90] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 [91] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 to:atan2_16::@10 atan2_16::@18: scope:[atan2_16] from atan2_16::@17 [92] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [93] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [94] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [95] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) to:atan2_16::@19 atan2_16::@14: scope:[atan2_16] from atan2_16::@13 [96] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [97] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [98] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 to:atan2_16::@13 atan2_16::@4: scope:[atan2_16] from atan2_16::@3 [99] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@1: scope:[atan2_16] from atan2_16 [100] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 to:atan2_16::@3 (void()) init_font_hex((byte*) init_font_hex::charset) init_font_hex: scope:[init_font_hex] from main [101] phi() to:init_font_hex::@1 init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5 [102] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 ) [102] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte*) FONT_HEX_PROTO init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) [102] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET 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 [103] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) [103] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte*) FONT_HEX_PROTO init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) [103] (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 ) [104] *((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 [105] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) [105] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 ) [106] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [107] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [108] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 [109] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 [110] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 [111] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 [112] 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 [113] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [114] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 [115] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [116] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [117] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [118] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 [119] 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 [120] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [121] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 [122] 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 [123] return to:@return VARIABLE REGISTER WEIGHTS (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 190.66666666666666 (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 208.54166666666669 (word) atan2_16::return (word) atan2_16::return#0 34.99999999999999 (word) atan2_16::return#2 202.0 (byte) atan2_16::shift (byte) atan2_16::shift#1 20002.0 (byte) atan2_16::shift#2 8001.25 (byte) atan2_16::shift#5 667.3333333333334 (signed word) atan2_16::x (signed word) atan2_16::x#0 2.8684210526315796 (signed word) atan2_16::xd (signed word) atan2_16::xd#1 6667.333333333333 (signed word) atan2_16::xd#10 1001.0 (signed word) atan2_16::xd#2 1001.0 (signed word) atan2_16::xd#3 7668.333333333332 (signed word) atan2_16::xd#5 1001.0 (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#13 4.0 (signed word) atan2_16::xi#2 500.5 (signed word) atan2_16::xi#3 267.0666666666667 (signed word) atan2_16::xi#8 1001.0 (signed word) atan2_16::y (signed word) atan2_16::y#0 2.724999999999999 (signed word) atan2_16::yd (signed word) atan2_16::yd#1 10001.0 (signed word) atan2_16::yd#10 2002.0 (signed word) atan2_16::yd#2 2002.0 (signed word) atan2_16::yd#3 4601.0 (signed word) atan2_16::yd#5 2002.0 (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#16 4.0 (signed word) atan2_16::yi#2 667.3333333333334 (signed word) atan2_16::yi#3 353.4117647058823 (signed word) atan2_16::yi#8 1001.0 (byte()) diff((byte) diff::bb1 , (byte) diff::bb2) (byte~) diff::$2 4.0 (byte~) diff::$4 4.0 (byte) diff::bb1 (byte) diff::bb1#0 35.66666666666666 (byte) diff::bb2 (byte) diff::bb2#0 53.5 (byte) diff::return (byte) diff::return#0 202.0 (byte) diff::return#1 34.99999999999999 (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::$10 202.0 (byte~) main::$12 202.0 (byte~) main::$13 202.0 (byte) main::ang_w (byte) main::ang_w#0 43.285714285714285 (word) main::angle_w (word) main::angle_w#0 202.0 (word) main::diff_sum (word) main::diff_sum#1 23.888888888888886 (word) main::diff_sum#2 14.2 (word) main::diff_sum#7 22.0 (byte*) main::screen (byte*) main::screen#1 35.5 (byte*) main::screen#2 17.444444444444443 (byte*) main::screen#5 22.0 (byte*) main::screen_ref (byte*) main::screen_ref#1 42.599999999999994 (byte*) main::screen_ref#2 21.842105263157897 (byte*) main::screen_ref#5 22.0 (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 10.1 (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 0.9565217391304348 (signed word) main::yw (word) main::yw#0 50.5 (void()) print_byte((byte) print_byte::b) (byte~) print_byte::$0 4.0 (byte~) print_byte::$2 4.0 (byte) print_byte::b (byte) print_byte::b#0 4.0 (byte) print_byte::b#1 4.0 (byte) print_byte::b#2 2.0 (void()) print_char((byte) print_char::ch) (byte) print_char::ch (byte) print_char::ch#0 4.0 (byte) print_char::ch#1 4.0 (byte) print_char::ch#2 6.0 (byte*) print_char_cursor (byte*) print_char_cursor#18 4.0 (byte*) print_char_cursor#19 0.6666666666666666 (byte*) print_char_cursor#24 1.3333333333333333 (byte*) print_line_cursor (byte*) print_screen (void()) print_word((word) print_word::w) (word) print_word::w (word) print_word::w#0 2.0 Initial phi equivalence classes [ main::y#4 main::y#1 ] [ main::x#2 main::x#1 ] [ main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ] [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ] [ main::screen#2 main::screen#5 main::screen#1 ] [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ] [ diff::return#1 diff::$4 diff::$2 ] [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 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 ] [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] [ 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 live range equivalence class [ main::xw#0 ] Added variable main::yw#0 to live range equivalence class [ main::yw#0 ] Added variable atan2_16::x#0 to live range equivalence class [ atan2_16::x#0 ] Added variable atan2_16::y#0 to live range equivalence class [ atan2_16::y#0 ] Added variable atan2_16::return#2 to live range equivalence class [ atan2_16::return#2 ] Added variable main::angle_w#0 to live range equivalence class [ main::angle_w#0 ] Added variable main::$10 to live range equivalence class [ main::$10 ] Added variable main::ang_w#0 to live range equivalence class [ main::ang_w#0 ] Added variable diff::bb1#0 to live range equivalence class [ diff::bb1#0 ] Added variable diff::bb2#0 to live range equivalence class [ diff::bb2#0 ] Added variable diff::return#0 to live range equivalence class [ diff::return#0 ] Added variable main::$12 to live range equivalence class [ main::$12 ] Added variable main::$13 to live range equivalence class [ main::$13 ] Added variable print_word::w#0 to live range equivalence class [ print_word::w#0 ] Added variable print_byte::$0 to live range equivalence class [ print_byte::$0 ] Added variable print_byte::$2 to live range equivalence class [ print_byte::$2 ] Added variable atan2_16::$23 to live range equivalence class [ atan2_16::$23 ] Added variable atan2_16::$22 to live range equivalence class [ atan2_16::$22 ] Added variable init_font_hex::$0 to live range equivalence class [ init_font_hex::$0 ] Added variable init_font_hex::$1 to live range equivalence class [ init_font_hex::$1 ] Added variable init_font_hex::$2 to live range equivalence class [ init_font_hex::$2 ] Added variable init_font_hex::idx#3 to live range 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#5 main::screen_ref#1 ] [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ] [ main::screen#2 main::screen#5 main::screen#1 ] [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ] [ diff::return#1 diff::$4 diff::$2 ] [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 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 ] [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] [ 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::$10 ] [ main::ang_w#0 ] [ diff::bb1#0 ] [ diff::bb2#0 ] [ diff::return#0 ] [ main::$12 ] [ main::$13 ] [ print_word::w#0 ] [ print_byte::$0 ] [ print_byte::$2 ] [ 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[1]:2 [ main::y#4 main::y#1 ] Allocated zp[1]:3 [ main::x#2 main::x#1 ] Allocated zp[2]:4 [ main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ] Allocated zp[2]:6 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ] Allocated zp[2]:8 [ main::screen#2 main::screen#5 main::screen#1 ] Allocated zp[1]:10 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Allocated zp[1]:11 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] Allocated zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ] Allocated zp[1]:14 [ diff::return#1 diff::$4 diff::$2 ] Allocated zp[2]:15 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] Allocated zp[2]:17 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] Allocated zp[1]:19 [ atan2_16::i#2 atan2_16::i#1 ] Allocated zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] Allocated zp[2]:22 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] Allocated zp[1]:24 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] Allocated zp[2]:25 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] Allocated zp[2]:27 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] Allocated zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] Allocated zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ] Allocated zp[2]:32 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] Allocated zp[2]:34 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] Allocated zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ] Allocated zp[1]:37 [ init_font_hex::i#2 init_font_hex::i#1 ] Allocated zp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Allocated zp[2]:39 [ main::xw#0 ] Allocated zp[2]:41 [ main::yw#0 ] Allocated zp[2]:43 [ atan2_16::x#0 ] Allocated zp[2]:45 [ atan2_16::y#0 ] Allocated zp[2]:47 [ atan2_16::return#2 ] Allocated zp[2]:49 [ main::angle_w#0 ] Allocated zp[2]:51 [ main::$10 ] Allocated zp[1]:53 [ main::ang_w#0 ] Allocated zp[1]:54 [ diff::bb1#0 ] Allocated zp[1]:55 [ diff::bb2#0 ] Allocated zp[1]:56 [ diff::return#0 ] Allocated zp[1]:57 [ main::$12 ] Allocated zp[1]:58 [ main::$13 ] Allocated zp[2]:59 [ print_word::w#0 ] Allocated zp[1]:61 [ print_byte::$0 ] Allocated zp[1]:62 [ print_byte::$2 ] Allocated zp[1]:63 [ atan2_16::$23 ] Allocated zp[1]:64 [ atan2_16::$22 ] Allocated zp[1]:65 [ init_font_hex::$0 ] Allocated zp[1]:66 [ init_font_hex::$1 ] Allocated zp[1]:67 [ init_font_hex::$2 ] Allocated zp[1]:68 [ init_font_hex::idx#3 ] INITIAL ASM Target platform is c64basic / MOS6502X // File Comments // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf // Upstart .pc = $801 "Basic" :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f .label D018 = $d018 // Color Ram .label COLS = $d800 .label CHARSET = $2000 .label SCREEN = $2800 .label print_char_cursor = $c // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] __b1_from___bbegin: jmp __b1 // @1 __b1: // [2] call main // [4] phi from @1 to main [phi:@1->main] main_from___b1: jsr main // [3] phi from @1 to @end [phi:@1->@end] __bend_from___b1: jmp __bend // @end __bend: // main main: { .label col00 = COLS+$c*$28+$13 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .label __10 = $33 .label __12 = $39 .label __13 = $3a .label xw = $27 .label yw = $29 .label angle_w = $31 .label ang_w = $35 .label diff_sum = 6 .label screen = 8 .label screen_ref = 4 .label x = 3 .label y = 2 // [5] call init_font_hex // [101] phi from main to init_font_hex [phi:main->init_font_hex] init_font_hex_from_main: jsr init_font_hex // [6] phi from main to main::toD0181 [phi:main->main::toD0181] toD0181_from_main: jmp toD0181 // main::toD0181 toD0181: jmp __b6 // main::@6 __b6: // [7] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 // [8] phi from main::@6 to main::@1 [phi:main::@6->main::@1] __b1_from___b6: // [8] phi (byte*) main::screen#5 = (const byte*) SCREEN [phi:main::@6->main::@1#0] -- pbuz1=pbuc1 lda #SCREEN sta.z screen+1 // [8] phi (word) main::diff_sum#7 = (byte) 0 [phi:main::@6->main::@1#1] -- vwuz1=vbuc1 lda #<0 sta.z diff_sum lda #>0 sta.z diff_sum+1 // [8] phi (byte*) main::screen_ref#5 = (const byte*) SCREEN_REF [phi:main::@6->main::@1#2] -- pbuz1=pbuc1 lda #SCREEN_REF sta.z screen_ref+1 // [8] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@6->main::@1#3] -- vbsz1=vbsc1 lda #-$c sta.z y jmp __b1 // [8] phi from main::@3 to main::@1 [phi:main::@3->main::@1] __b1_from___b3: // [8] phi (byte*) main::screen#5 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy // [8] phi (word) main::diff_sum#7 = (word) main::diff_sum#1 [phi:main::@3->main::@1#1] -- register_copy // [8] phi (byte*) main::screen_ref#5 = (byte*) main::screen_ref#1 [phi:main::@3->main::@1#2] -- register_copy // [8] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#3] -- register_copy jmp __b1 // main::@1 __b1: // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: // [9] phi (byte*) main::screen#2 = (byte*) main::screen#5 [phi:main::@1->main::@2#0] -- register_copy // [9] phi (word) main::diff_sum#2 = (word) main::diff_sum#7 [phi:main::@1->main::@2#1] -- register_copy // [9] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#5 [phi:main::@1->main::@2#2] -- register_copy // [9] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#3] -- vbsz1=vbsc1 lda #-$13 sta.z x jmp __b2 // [9] phi from main::@8 to main::@2 [phi:main::@8->main::@2] __b2_from___b8: // [9] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@8->main::@2#0] -- register_copy // [9] phi (word) main::diff_sum#2 = (word) main::diff_sum#1 [phi:main::@8->main::@2#1] -- register_copy // [9] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#1 [phi:main::@8->main::@2#2] -- register_copy // [9] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@8->main::@2#3] -- register_copy jmp __b2 // main::@2 __b2: // [10] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda.z x ldy #0 sta.z xw+1 sty.z xw // [11] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda.z y ldy #0 sta.z yw+1 sty.z yw // [12] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 -- vwsz1=vwsz2 lda.z xw sta.z atan2_16.x lda.z xw+1 sta.z atan2_16.x+1 // [13] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 -- vwsz1=vwsz2 lda.z yw sta.z atan2_16.y lda.z yw+1 sta.z atan2_16.y+1 // [14] call atan2_16 jsr atan2_16 // [15] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 lda.z atan2_16.return sta.z atan2_16.return_1 lda.z atan2_16.return+1 sta.z atan2_16.return_1+1 jmp __b7 // main::@7 __b7: // [16] (word) main::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 lda.z atan2_16.return_1 sta.z angle_w lda.z atan2_16.return_1+1 sta.z angle_w+1 // [17] (word~) main::$10 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 lda #$80 clc adc.z angle_w sta.z __10 lda #0 adc.z angle_w+1 sta.z __10+1 // [18] (byte) main::ang_w#0 ← > (word~) main::$10 -- vbuz1=_hi_vwuz2 lda.z __10+1 sta.z ang_w // [19] (byte) diff::bb1#0 ← (byte) main::ang_w#0 -- vbuz1=vbuz2 lda.z ang_w sta.z diff.bb1 // [20] (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2) -- vbuz1=_deref_pbuz2 ldy #0 lda (screen_ref),y sta.z diff.bb2 // [21] call diff jsr diff // [22] (byte) diff::return#0 ← (byte) diff::return#1 -- vbuz1=vbuz2 lda.z diff.return_1 sta.z diff.return jmp __b8 // main::@8 __b8: // [23] (byte~) main::$12 ← (byte) diff::return#0 -- vbuz1=vbuz2 lda.z diff.return sta.z __12 // [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$12 -- vwuz1=vwuz1_plus_vbuz2 //*screen = (>angle_w)-angle_b; //*screen = >angle_w; lda.z __12 clc adc.z diff_sum sta.z diff_sum bcc !+ inc.z diff_sum+1 !: // [25] (byte~) main::$13 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2) -- vbuz1=vbuz2_minus__deref_pbuz3 lda.z ang_w sec ldy #0 sbc (screen_ref),y sta.z __13 // [26] *((byte*) main::screen#2) ← (byte~) main::$13 -- _deref_pbuz1=vbuz2 lda.z __13 ldy #0 sta (screen),y // [27] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: // [28] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 -- pbuz1=_inc_pbuz1 inc.z screen_ref bne !+ inc.z screen_ref+1 !: // [29] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1 inc.z x // [30] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsz1_neq_vbsc1_then_la1 lda #$15 cmp.z x bne __b2_from___b8 jmp __b3 // main::@3 __b3: // [31] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 inc.z y // [32] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 lda #$d cmp.z y bne __b1_from___b3 jmp __b4 // main::@4 __b4: // [33] (word) print_word::w#0 ← (word) main::diff_sum#1 -- vwuz1=vwuz2 lda.z diff_sum sta.z print_word.w lda.z diff_sum+1 sta.z print_word.w+1 // [34] call print_word jsr print_word jmp __b5 // main::@5 __b5: // [35] *((const byte*) main::col00) ← ++ *((const byte*) main::col00) -- _deref_pbuc1=_inc__deref_pbuc1 inc col00 jmp __b5 } // print_word // Print a word as HEX // print_word(word zeropage($3b) w) print_word: { .label w = $3b // [36] (byte) print_byte::b#0 ← > (word) print_word::w#0 -- vbuz1=_hi_vwuz2 lda.z w+1 sta.z print_byte.b // [37] call print_byte // [41] phi from print_word to print_byte [phi:print_word->print_byte] print_byte_from_print_word: // [41] phi (byte*) print_char_cursor#24 = (byte*) 1024 [phi:print_word->print_byte#0] -- pbuz1=pbuc1 lda #<$400 sta.z print_char_cursor lda #>$400 sta.z print_char_cursor+1 // [41] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy jsr print_byte jmp __b1 // print_word::@1 __b1: // [38] (byte) print_byte::b#1 ← < (word) print_word::w#0 -- vbuz1=_lo_vwuz2 lda.z w sta.z print_byte.b // [39] call print_byte // [41] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] print_byte_from___b1: // [41] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#19 [phi:print_word::@1->print_byte#0] -- register_copy // [41] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy jsr print_byte jmp __breturn // print_word::@return __breturn: // [40] return rts } // print_byte // Print a byte as HEX // print_byte(byte zeropage($a) b) print_byte: { .label __0 = $3d .label __2 = $3e .label b = $a // [42] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 -- vbuz1=vbuz2_ror_4 lda.z b lsr lsr lsr lsr sta.z __0 // [43] (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z __0 lda print_hextab,y sta.z print_char.ch // [44] call print_char // [49] phi from print_byte to print_char [phi:print_byte->print_char] print_char_from_print_byte: // [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#24 [phi:print_byte->print_char#0] -- register_copy // [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy jsr print_char jmp __b1 // print_byte::@1 __b1: // [45] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 lda #$f and.z b sta.z __2 // [46] (byte) print_char::ch#1 ← *((const byte*) print_hextab + (byte~) print_byte::$2) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z __2 lda print_hextab,y sta.z print_char.ch // [47] call print_char // [49] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] print_char_from___b1: // [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#19 [phi:print_byte::@1->print_char#0] -- register_copy // [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_byte::@return __breturn: // [48] return rts } // print_char // Print a single char // print_char(byte zeropage($b) ch) print_char: { .label ch = $b // [50] *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2 -- _deref_pbuz1=vbuz2 lda.z ch ldy #0 sta (print_char_cursor),y // [51] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1 inc.z print_char_cursor bne !+ inc.z print_char_cursor+1 !: jmp __breturn // print_char::@return __breturn: // [52] return rts } // diff // diff(byte zeropage($36) bb1, byte zeropage($37) bb2) diff: { .label __2 = $e .label __4 = $e .label bb1 = $36 .label bb2 = $37 .label return = $38 .label return_1 = $e // [53] if((byte) diff::bb1#0<(byte) diff::bb2#0) goto diff::@1 -- vbuz1_lt_vbuz2_then_la1 lda.z bb1 cmp.z bb2 bcc __b1 jmp __b2 // diff::@2 __b2: // [54] (byte~) diff::$2 ← (byte) diff::bb1#0 - (byte) diff::bb2#0 -- vbuz1=vbuz2_minus_vbuz3 lda.z bb1 sec sbc.z bb2 sta.z __2 // [55] phi from diff::@1 diff::@2 to diff::@3 [phi:diff::@1/diff::@2->diff::@3] __b3_from___b1: __b3_from___b2: // [55] phi (byte) diff::return#1 = (byte~) diff::$4 [phi:diff::@1/diff::@2->diff::@3#0] -- register_copy jmp __b3 // diff::@3 __b3: jmp __breturn // diff::@return __breturn: // [56] return rts // diff::@1 __b1: // [57] (byte~) diff::$4 ← (byte) diff::bb2#0 - (byte) diff::bb1#0 -- vbuz1=vbuz2_minus_vbuz3 lda.z bb2 sec sbc.z bb1 sta.z __4 jmp __b3_from___b1 } // 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($2b) x, signed word zeropage($2d) y) atan2_16: { .label __2 = $f .label __7 = $11 .label __22 = $40 .label __23 = $3f .label yi = $f .label xi = $11 .label angle = $16 .label xd = $1b .label yd = $19 .label shift = $18 .label angle_1 = $14 .label i = $13 .label return = $16 .label x = $2b .label y = $2d .label return_1 = $2f // [58] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b1 jmp __b2 // atan2_16::@2 __b2: // [59] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z y sta.z __2 lda #0 sbc.z y+1 sta.z __2+1 // [60] 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: // [60] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy jmp __b3 // atan2_16::@3 __b3: // [61] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b4 jmp __b5 // atan2_16::@5 __b5: // [62] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z x sta.z __7 lda #0 sbc.z x+1 sta.z __7+1 // [63] 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: // [63] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy jmp __b6 // atan2_16::@6 __b6: // [64] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: // [64] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 lda #<0 sta.z angle_1 lda #>0 sta.z angle_1+1 // [64] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 lda #0 sta.z i // [64] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy // [64] 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 // atan2_16::@10 __b10: // [65] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda.z yi+1 bne __b11 lda.z yi bne __b11 // [66] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] __b12_from___b10: __b12_from___b19: // [66] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy jmp __b12 // atan2_16::@12 __b12: // [67] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 lda.z angle_1+1 lsr sta.z angle+1 lda.z angle_1 ror sta.z angle // [68] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b7_from___b12 jmp __b21 // atan2_16::@21 __b21: // [69] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc.z angle sta.z angle lda #>$8000 sbc.z angle+1 sta.z angle+1 // [70] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] __b7_from___b12: __b7_from___b21: // [70] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy jmp __b7 // atan2_16::@7 __b7: // [71] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b8_from___b7 jmp __b9 // atan2_16::@9 __b9: // [72] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc.z angle sta.z angle lda #0 sbc.z angle+1 sta.z angle+1 // [73] 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: // [73] 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 // atan2_16::@8 __b8: jmp __breturn // atan2_16::@return __breturn: // [74] return rts // atan2_16::@11 __b11: // [75] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 lda.z i sta.z shift // [76] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda.z xi sta.z xd lda.z xi+1 sta.z xd+1 // [77] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda.z yi sta.z yd lda.z yi+1 sta.z yd+1 // [78] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] __b13_from___b11: __b13_from___b14: // [78] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy // [78] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy // [78] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy jmp __b13 // atan2_16::@13 __b13: // [79] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1 lda.z shift cmp #2 bcs __b14 jmp __b15 // atan2_16::@15 __b15: // [80] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z shift beq __b17_from___b15 jmp __b16 // atan2_16::@16 __b16: // [81] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd // [82] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd // [83] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] __b17_from___b15: __b17_from___b16: // [83] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy // [83] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy jmp __b17 // atan2_16::@17 __b17: // [84] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda.z yi+1 bpl __b18 jmp __b20 // atan2_16::@20 __b20: // [85] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z xi sec sbc.z yd sta.z xi lda.z xi+1 sbc.z yd+1 sta.z xi+1 // [86] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z yi clc adc.z xd sta.z yi lda.z yi+1 adc.z xd+1 sta.z yi+1 // [87] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __23 // [88] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 ldy.z __23 sec lda.z angle_1 sbc CORDIC_ATAN2_ANGLES_16,y sta.z angle_1 lda.z angle_1+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta.z angle_1+1 // [89] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] __b19_from___b18: __b19_from___b20: // [89] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy // [89] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy // [89] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy jmp __b19 // atan2_16::@19 __b19: // [90] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 inc.z i // [91] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 lda #CORDIC_ITERATIONS_16-1+1 cmp.z i beq __b12_from___b19 // [64] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] __b10_from___b19: // [64] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy // [64] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy // [64] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy // [64] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp __b10 // atan2_16::@18 __b18: // [92] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z xi clc adc.z yd sta.z xi lda.z xi+1 adc.z yd+1 sta.z xi+1 // [93] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z yi sec sbc.z xd sta.z yi lda.z yi+1 sbc.z xd+1 sta.z yi+1 // [94] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __22 // [95] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 ldy.z __22 clc lda.z angle_1 adc CORDIC_ATAN2_ANGLES_16,y sta.z angle_1 lda.z angle_1+1 adc CORDIC_ATAN2_ANGLES_16+1,y sta.z angle_1+1 jmp __b19_from___b18 // atan2_16::@14 __b14: // [96] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd // [97] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd // [98] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2 dec.z shift dec.z shift jmp __b13_from___b14 // atan2_16::@4 __b4: // [99] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda.z x sta.z xi lda.z x+1 sta.z xi+1 jmp __b6_from___b4 // atan2_16::@1 __b1: // [100] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda.z y sta.z yi lda.z y+1 sta.z yi+1 jmp __b3_from___b1 } // init_font_hex // Make charset from proto chars // init_font_hex(byte* zeropage($20) charset) init_font_hex: { .label __0 = $41 .label __1 = $42 .label __2 = $43 .label idx = $26 .label i = $25 .label idx_1 = $44 .label proto_lo = $22 .label charset = $20 .label c1 = $24 .label proto_hi = $1d .label c = $1f // [102] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] __b1_from_init_font_hex: // [102] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 lda #0 sta.z c // [102] phi (byte*) init_font_hex::proto_hi#6 = (const byte*) FONT_HEX_PROTO [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta.z proto_hi+1 // [102] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 lda #CHARSET sta.z charset+1 jmp __b1 // [102] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] __b1_from___b5: // [102] 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 // [102] 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 // [102] 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 // init_font_hex::@1 __b1: // [103] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] __b2_from___b1: // [103] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 lda #0 sta.z c1 // [103] phi (byte*) init_font_hex::proto_lo#4 = (const byte*) FONT_HEX_PROTO [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta.z proto_lo+1 // [103] 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 // [103] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] __b2_from___b4: // [103] 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 // [103] 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 // [103] 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 // init_font_hex::@2 __b2: // [104] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (charset),y // [105] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] __b3_from___b2: // [105] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 lda #1 sta.z idx // [105] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b3 // [105] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] __b3_from___b3: // [105] 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 // [105] 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 // init_font_hex::@3 __b3: // [106] (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.z i lda (proto_hi),y asl asl asl asl sta.z __0 // [107] (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.z i lda (proto_lo),y asl sta.z __1 // [108] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuz1=vbuz2_bor_vbuz3 lda.z __0 ora.z __1 sta.z __2 // [109] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z __2 ldy.z idx sta (charset),y // [110] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 inc.z idx // [111] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuz1=_inc_vbuz1 inc.z i // [112] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuz1_neq_vbuc1_then_la1 lda #5 cmp.z i bne __b3_from___b3 jmp __b4 // init_font_hex::@4 __b4: // [113] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy.z idx sta (charset),y // [114] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuz1=_inc_vbuz2 ldy.z idx iny sty.z idx_1 // [115] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy.z idx_1 sta (charset),y // [116] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc.z proto_lo sta.z proto_lo bcc !+ inc.z proto_lo+1 !: // [117] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z charset sta.z charset bcc !+ inc.z charset+1 !: // [118] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 inc.z c1 // [119] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z c1 bne __b2_from___b4 jmp __b5 // init_font_hex::@5 __b5: // [120] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc.z proto_hi sta.z proto_hi bcc !+ inc.z proto_hi+1 !: // [121] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 inc.z c // [122] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z c bne __b1_from___b5 jmp __breturn // init_font_hex::@return __breturn: // [123] return rts } // 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 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i (word~) main::$10 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 ] ) always clobbers reg byte a Statement [20] (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2) [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::bb1#0 diff::bb2#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::bb1#0 diff::bb2#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:53 [ main::ang_w#0 ] Removing always clobbered register reg byte y as potential for zp[1]:53 [ main::ang_w#0 ] Removing always clobbered register reg byte a as potential for zp[1]:54 [ diff::bb1#0 ] Removing always clobbered register reg byte y as potential for zp[1]:54 [ diff::bb1#0 ] Statement [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$12 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::ang_w#0 ] ( main:2 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::ang_w#0 ] ) always clobbers reg byte a Statement [25] (byte~) main::$13 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2) [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::$13 ] ( main:2 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::$13 ] ) always clobbers reg byte a reg byte y Statement [26] *((byte*) main::screen#2) ← (byte~) main::$13 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 ] ( main:2 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 ] ) always clobbers reg byte y Statement [33] (word) print_word::w#0 ← (word) main::diff_sum#1 [ print_word::w#0 ] ( main:2 [ print_word::w#0 ] ) always clobbers reg byte a Statement [36] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ print_word::w#0 print_byte::b#0 ] ( main:2::print_word:34 [ print_word::w#0 print_byte::b#0 ] ) always clobbers reg byte a Statement [38] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_byte::b#1 print_char_cursor#19 ] ( main:2::print_word:34 [ print_byte::b#1 print_char_cursor#19 ] ) always clobbers reg byte a Statement [42] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_byte::b#2 print_char_cursor#24 print_byte::$0 ] ( main:2::print_word:34::print_byte:37 [ print_word::w#0 print_byte::b#2 print_char_cursor#24 print_byte::$0 ] main:2::print_word:34::print_byte:39 [ print_byte::b#2 print_char_cursor#24 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:10 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Statement [45] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::print_word:34::print_byte:37 [ print_word::w#0 print_char_cursor#19 print_byte::$2 ] main:2::print_word:34::print_byte:39 [ print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a Statement [50] *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2 [ print_char_cursor#18 ] ( main:2::print_word:34::print_byte:37::print_char:44 [ print_word::w#0 print_byte::b#2 print_char_cursor#18 ] main:2::print_word:34::print_byte:39::print_char:44 [ print_byte::b#2 print_char_cursor#18 ] main:2::print_word:34::print_byte:37::print_char:47 [ print_word::w#0 print_char_cursor#18 ] main:2::print_word:34::print_byte:39::print_char:47 [ print_char_cursor#18 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:10 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Statement [54] (byte~) diff::$2 ← (byte) diff::bb1#0 - (byte) diff::bb2#0 [ diff::$2 ] ( main:2::diff:21 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::$2 ] ) always clobbers reg byte a Statement [57] (byte~) diff::$4 ← (byte) diff::bb2#0 - (byte) diff::bb1#0 [ diff::$4 ] ( main:2::diff:21 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::$4 ] ) always clobbers reg byte a Statement [58] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a Statement [59] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a Statement [61] 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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a Statement [62] (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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [65] 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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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[1]:19 [ atan2_16::i#2 atan2_16::i#1 ] Statement [67] (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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a Statement [68] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a Statement [69] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a Statement [71] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::angle#11 ] ) always clobbers reg byte a Statement [72] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::angle#5 ] ) always clobbers reg byte a Statement [76] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ 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::shift#5 atan2_16::xd#10 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:24 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] Statement [77] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ 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::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a Statement [81] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ 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::yd#3 atan2_16::xd#2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a Statement [82] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ 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#2 atan2_16::yd#2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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#2 atan2_16::yd#2 ] ) always clobbers reg byte a Statement [84] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ 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::yd#5 atan2_16::xd#5 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a Statement [85] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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#5 atan2_16::xi#2 ] ) always clobbers reg byte a Statement [86] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ 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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [87] (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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [88] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [92] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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#5 atan2_16::xi#1 ] ) always clobbers reg byte a Statement [93] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ 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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [94] (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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [95] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [96] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 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::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a Statement [97] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 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::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a Statement [99] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a Statement [100] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a Statement [104] *((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:2::init_font_hex:5 [ 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[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ] Removing always clobbered register reg byte y as potential for zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ] Removing always clobbered register reg byte a as potential for zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ] Removing always clobbered register reg byte y as potential for zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ] Statement [106] (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:2::init_font_hex:5 [ 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[1]:37 [ init_font_hex::i#2 init_font_hex::i#1 ] Removing always clobbered register reg byte a as potential for zp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Statement [107] (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:2::init_font_hex:5 [ 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[1]:65 [ init_font_hex::$0 ] Statement [113] *((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:2::init_font_hex:5 [ 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 [115] *((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:2::init_font_hex:5 [ 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 [116] (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:2::init_font_hex: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 ] ) always clobbers reg byte a Statement [117] (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:2::init_font_hex:5 [ 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 [120] (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:2::init_font_hex:5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a Statement [7] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [10] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::xw#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::xw#0 ] ) always clobbers reg byte a reg byte y Statement [11] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::xw#0 main::yw#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::xw#0 main::yw#0 ] ) always clobbers reg byte a reg byte y Statement [12] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::yw#0 atan2_16::x#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a Statement [13] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a Statement [15] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::return#2 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::return#2 ] ) always clobbers reg byte a Statement [16] (word) main::angle_w#0 ← (word) atan2_16::return#2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::angle_w#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::angle_w#0 ] ) always clobbers reg byte a Statement [17] (word~) main::$10 ← (word) main::angle_w#0 + (byte) $80 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::$10 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::$10 ] ) always clobbers reg byte a Statement [18] (byte) main::ang_w#0 ← > (word~) main::$10 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 ] ) always clobbers reg byte a Statement [20] (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2) [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::bb1#0 diff::bb2#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::bb1#0 diff::bb2#0 ] ) always clobbers reg byte a reg byte y Statement [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$12 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::ang_w#0 ] ( main:2 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::ang_w#0 ] ) always clobbers reg byte a Statement [25] (byte~) main::$13 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2) [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::$13 ] ( main:2 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::$13 ] ) always clobbers reg byte a reg byte y Statement [26] *((byte*) main::screen#2) ← (byte~) main::$13 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 ] ( main:2 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 ] ) always clobbers reg byte y Statement [33] (word) print_word::w#0 ← (word) main::diff_sum#1 [ print_word::w#0 ] ( main:2 [ print_word::w#0 ] ) always clobbers reg byte a Statement [36] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ print_word::w#0 print_byte::b#0 ] ( main:2::print_word:34 [ print_word::w#0 print_byte::b#0 ] ) always clobbers reg byte a Statement [38] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_byte::b#1 print_char_cursor#19 ] ( main:2::print_word:34 [ print_byte::b#1 print_char_cursor#19 ] ) always clobbers reg byte a Statement [42] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_byte::b#2 print_char_cursor#24 print_byte::$0 ] ( main:2::print_word:34::print_byte:37 [ print_word::w#0 print_byte::b#2 print_char_cursor#24 print_byte::$0 ] main:2::print_word:34::print_byte:39 [ print_byte::b#2 print_char_cursor#24 print_byte::$0 ] ) always clobbers reg byte a Statement [45] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::print_word:34::print_byte:37 [ print_word::w#0 print_char_cursor#19 print_byte::$2 ] main:2::print_word:34::print_byte:39 [ print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a Statement [50] *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2 [ print_char_cursor#18 ] ( main:2::print_word:34::print_byte:37::print_char:44 [ print_word::w#0 print_byte::b#2 print_char_cursor#18 ] main:2::print_word:34::print_byte:39::print_char:44 [ print_byte::b#2 print_char_cursor#18 ] main:2::print_word:34::print_byte:37::print_char:47 [ print_word::w#0 print_char_cursor#18 ] main:2::print_word:34::print_byte:39::print_char:47 [ print_char_cursor#18 ] ) always clobbers reg byte y Statement [54] (byte~) diff::$2 ← (byte) diff::bb1#0 - (byte) diff::bb2#0 [ diff::$2 ] ( main:2::diff:21 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::$2 ] ) always clobbers reg byte a Statement [57] (byte~) diff::$4 ← (byte) diff::bb2#0 - (byte) diff::bb1#0 [ diff::$4 ] ( main:2::diff:21 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::$4 ] ) always clobbers reg byte a Statement [58] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a Statement [59] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a Statement [61] 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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a Statement [62] (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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [65] 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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [67] (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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a Statement [68] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a Statement [69] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a Statement [71] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::angle#11 ] ) always clobbers reg byte a Statement [72] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::angle#5 ] ) always clobbers reg byte a Statement [76] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ 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::shift#5 atan2_16::xd#10 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a Statement [77] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ 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::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a Statement [81] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ 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::yd#3 atan2_16::xd#2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a Statement [82] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ 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#2 atan2_16::yd#2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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#2 atan2_16::yd#2 ] ) always clobbers reg byte a Statement [84] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ 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::yd#5 atan2_16::xd#5 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a Statement [85] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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#5 atan2_16::xi#2 ] ) always clobbers reg byte a Statement [86] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ 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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [87] (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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [88] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [92] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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#5 atan2_16::xi#1 ] ) always clobbers reg byte a Statement [93] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ 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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [94] (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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [95] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (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:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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 [96] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 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::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a Statement [97] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 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::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#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::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a Statement [99] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a Statement [100] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a Statement [104] *((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:2::init_font_hex:5 [ 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 [106] (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:2::init_font_hex:5 [ 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 [107] (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:2::init_font_hex:5 [ 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 [113] *((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:2::init_font_hex:5 [ 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 [115] *((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:2::init_font_hex:5 [ 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 [116] (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:2::init_font_hex: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 ] ) always clobbers reg byte a Statement [117] (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:2::init_font_hex:5 [ 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 [120] (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:2::init_font_hex:5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::y#4 main::y#1 ] : zp[1]:2 , reg byte x , Potential registers zp[1]:3 [ main::x#2 main::x#1 ] : zp[1]:3 , reg byte x , Potential registers zp[2]:4 [ main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ] : zp[2]:4 , Potential registers zp[2]:6 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ] : zp[2]:6 , Potential registers zp[2]:8 [ main::screen#2 main::screen#5 main::screen#1 ] : zp[2]:8 , Potential registers zp[1]:10 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp[1]:10 , reg byte x , Potential registers zp[1]:11 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ] : zp[2]:12 , Potential registers zp[1]:14 [ diff::return#1 diff::$4 diff::$2 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:15 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp[2]:15 , Potential registers zp[2]:17 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp[2]:17 , Potential registers zp[1]:19 [ atan2_16::i#2 atan2_16::i#1 ] : zp[1]:19 , reg byte x , reg byte y , Potential registers zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp[2]:20 , Potential registers zp[2]:22 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] : zp[2]:22 , Potential registers zp[1]:24 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp[1]:24 , reg byte x , reg byte y , Potential registers zp[2]:25 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp[2]:25 , Potential registers zp[2]:27 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp[2]:27 , Potential registers zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] : zp[2]:29 , Potential registers zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ] : zp[1]:31 , reg byte x , Potential registers zp[2]:32 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] : zp[2]:32 , Potential registers zp[2]:34 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] : zp[2]:34 , Potential registers zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ] : zp[1]:36 , reg byte x , Potential registers zp[1]:37 [ init_font_hex::i#2 init_font_hex::i#1 ] : zp[1]:37 , reg byte x , reg byte y , Potential registers zp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] : zp[1]:38 , reg byte x , reg byte y , Potential registers zp[2]:39 [ main::xw#0 ] : zp[2]:39 , Potential registers zp[2]:41 [ main::yw#0 ] : zp[2]:41 , Potential registers zp[2]:43 [ atan2_16::x#0 ] : zp[2]:43 , Potential registers zp[2]:45 [ atan2_16::y#0 ] : zp[2]:45 , Potential registers zp[2]:47 [ atan2_16::return#2 ] : zp[2]:47 , Potential registers zp[2]:49 [ main::angle_w#0 ] : zp[2]:49 , Potential registers zp[2]:51 [ main::$10 ] : zp[2]:51 , Potential registers zp[1]:53 [ main::ang_w#0 ] : zp[1]:53 , reg byte x , Potential registers zp[1]:54 [ diff::bb1#0 ] : zp[1]:54 , reg byte x , Potential registers zp[1]:55 [ diff::bb2#0 ] : zp[1]:55 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:56 [ diff::return#0 ] : zp[1]:56 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:57 [ main::$12 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:58 [ main::$13 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:59 [ print_word::w#0 ] : zp[2]:59 , Potential registers zp[1]:61 [ print_byte::$0 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:62 [ print_byte::$2 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:63 [ atan2_16::$23 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:64 [ atan2_16::$22 ] : zp[1]:64 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:65 [ init_font_hex::$0 ] : zp[1]:65 , reg byte x , reg byte y , Potential registers zp[1]:66 [ init_font_hex::$1 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:67 [ init_font_hex::$2 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:68 [ init_font_hex::idx#3 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES Uplift Scope [atan2_16] 28,670.58: zp[1]:24 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp[2]:25 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp[2]:27 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp[2]:15 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp[2]:17 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp[1]:63 [ atan2_16::$23 ] 2,002: zp[1]:64 [ atan2_16::$22 ] 1,710.04: zp[1]:19 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp[2]:47 [ atan2_16::return#2 ] 50: zp[2]:22 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp[2]:43 [ atan2_16::x#0 ] 2.72: zp[2]:45 [ atan2_16::y#0 ] Uplift Scope [init_font_hex] 2,168.83: zp[1]:37 [ init_font_hex::i#2 init_font_hex::i#1 ] 2,002: zp[1]:66 [ init_font_hex::$1 ] 2,002: zp[1]:67 [ init_font_hex::$2 ] 1,151.6: zp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 1,001: zp[1]:65 [ init_font_hex::$0 ] 202: zp[1]:68 [ init_font_hex::idx#3 ] 165.86: zp[2]:32 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 164.97: zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 143.04: zp[2]:34 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 64.17: zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 17.66: zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ] Uplift Scope [main] 202: zp[2]:49 [ main::angle_w#0 ] 202: zp[2]:51 [ main::$10 ] 202: zp[1]:57 [ main::$12 ] 202: zp[1]:58 [ main::$13 ] 161.6: zp[1]:3 [ main::x#2 main::x#1 ] 86.44: zp[2]:4 [ main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ] 74.94: zp[2]:8 [ main::screen#2 main::screen#5 main::screen#1 ] 60.09: zp[2]:6 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ] 50.5: zp[2]:39 [ main::xw#0 ] 50.5: zp[2]:41 [ main::yw#0 ] 43.29: zp[1]:53 [ main::ang_w#0 ] 17.46: zp[1]:2 [ main::y#4 main::y#1 ] Uplift Scope [diff] 202: zp[1]:56 [ diff::return#0 ] 53.5: zp[1]:55 [ diff::bb2#0 ] 43: zp[1]:14 [ diff::return#1 diff::$4 diff::$2 ] 35.67: zp[1]:54 [ diff::bb1#0 ] Uplift Scope [print_byte] 10: zp[1]:10 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp[1]:61 [ print_byte::$0 ] 4: zp[1]:62 [ print_byte::$2 ] Uplift Scope [print_char] 14: zp[1]:11 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] Uplift Scope [] 6: zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ] Uplift Scope [print_word] 2: zp[2]:59 [ print_word::w#0 ] Uplift Scope [RADIX] Uplifting [atan2_16] best 1158649 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:25 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:27 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:15 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:17 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:47 [ atan2_16::return#2 ] zp[2]:22 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp[2]:43 [ atan2_16::x#0 ] zp[2]:45 [ atan2_16::y#0 ] Limited combination testing to 100 combinations of 144 possible. Uplifting [init_font_hex] best 1139649 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[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp[1]:65 [ init_font_hex::$0 ] zp[1]:68 [ init_font_hex::idx#3 ] zp[2]:32 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp[2]:34 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ] Limited combination testing to 100 combinations of 6912 possible. Uplifting [main] best 1137949 combination zp[2]:49 [ main::angle_w#0 ] zp[2]:51 [ main::$10 ] reg byte a [ main::$12 ] reg byte a [ main::$13 ] zp[1]:3 [ main::x#2 main::x#1 ] zp[2]:4 [ main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ] zp[2]:8 [ main::screen#2 main::screen#5 main::screen#1 ] zp[2]:6 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ] zp[2]:39 [ main::xw#0 ] zp[2]:41 [ main::yw#0 ] reg byte x [ main::ang_w#0 ] zp[1]:2 [ main::y#4 main::y#1 ] Limited combination testing to 100 combinations of 128 possible. Uplifting [diff] best 1136445 combination reg byte a [ diff::return#0 ] reg byte a [ diff::bb2#0 ] reg byte a [ diff::return#1 diff::$4 diff::$2 ] reg byte x [ diff::bb1#0 ] Limited combination testing to 100 combinations of 128 possible. Uplifting [print_byte] best 1136431 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] Uplifting [print_char] best 1136422 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] Uplifting [] best 1136422 combination zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ] Uplifting [print_word] best 1136422 combination zp[2]:59 [ print_word::w#0 ] Uplifting [RADIX] best 1136422 combination Attempting to uplift remaining variables inzp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Uplifting [init_font_hex] best 1136422 combination zp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Attempting to uplift remaining variables inzp[1]:65 [ init_font_hex::$0 ] Uplifting [init_font_hex] best 1136422 combination zp[1]:65 [ init_font_hex::$0 ] Attempting to uplift remaining variables inzp[1]:68 [ init_font_hex::idx#3 ] Uplifting [init_font_hex] best 1135822 combination reg byte y [ init_font_hex::idx#3 ] Attempting to uplift remaining variables inzp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ] Uplifting [init_font_hex] best 1135822 combination zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ] Attempting to uplift remaining variables inzp[1]:3 [ main::x#2 main::x#1 ] Uplifting [main] best 1135822 combination zp[1]:3 [ main::x#2 main::x#1 ] Attempting to uplift remaining variables inzp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ] Uplifting [init_font_hex] best 1135822 combination zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ] Attempting to uplift remaining variables inzp[1]:2 [ main::y#4 main::y#1 ] Uplifting [main] best 1135822 combination zp[1]:2 [ main::y#4 main::y#1 ] Coalescing zero page register [ zp[2]:6 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ] ] with [ zp[2]:59 [ print_word::w#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp[2]:22 [ 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 [ zp[2]:39 [ main::xw#0 ] ] with [ zp[2]:43 [ atan2_16::x#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:41 [ main::yw#0 ] ] with [ zp[2]:45 [ atan2_16::y#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:47 [ atan2_16::return#2 ] ] with [ zp[2]:49 [ main::angle_w#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:20 [ 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[2]:47 [ atan2_16::return#2 main::angle_w#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:20 [ 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[2]:51 [ main::$10 ] ] - score: 1 Coalescing zero page register [ zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ] ] with [ zp[2]:4 [ main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ] ] Coalescing zero page register [ zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] ] with [ zp[2]:6 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 print_word::w#0 ] ] Coalescing zero page register [ zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ] ] with [ zp[1]:2 [ main::y#4 main::y#1 ] ] Coalescing zero page register [ zp[2]:32 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] ] with [ zp[2]:8 [ main::screen#2 main::screen#5 main::screen#1 ] ] Coalescing zero page register [ zp[2]:34 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] ] with [ zp[2]:15 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ] Coalescing zero page register [ zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ] ] with [ zp[1]:3 [ main::x#2 main::x#1 ] ] Allocated (was zp[2]:12) zp[2]:2 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ] Allocated (was zp[2]:17) zp[2]:4 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] Allocated (was zp[2]:20) zp[2]:6 [ 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::$10 ] Allocated (was zp[2]:25) zp[2]:8 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] Allocated (was zp[2]:27) zp[2]:10 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] Allocated (was zp[2]:29) zp[2]:12 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 print_word::w#0 ] Allocated (was zp[1]:31) zp[1]:14 [ init_font_hex::c#6 init_font_hex::c#1 main::y#4 main::y#1 ] Allocated (was zp[2]:32) zp[2]:15 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 main::screen#2 main::screen#5 main::screen#1 ] Allocated (was zp[2]:34) zp[2]:17 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] Allocated (was zp[1]:36) zp[1]:19 [ init_font_hex::c1#4 init_font_hex::c1#1 main::x#2 main::x#1 ] Allocated (was zp[1]:38) zp[1]:20 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Allocated (was zp[2]:39) zp[2]:21 [ main::xw#0 atan2_16::x#0 ] Allocated (was zp[2]:41) zp[2]:23 [ main::yw#0 atan2_16::y#0 ] Allocated (was zp[1]:65) zp[1]:25 [ init_font_hex::$0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf // Upstart .pc = $801 "Basic" :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f .label D018 = $d018 // Color Ram .label COLS = $d800 .label CHARSET = $2000 .label SCREEN = $2800 .label print_char_cursor = 2 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] __b1_from___bbegin: jmp __b1 // @1 __b1: // [2] call main // [4] phi from @1 to main [phi:@1->main] main_from___b1: jsr main // [3] phi from @1 to @end [phi:@1->@end] __bend_from___b1: jmp __bend // @end __bend: // main main: { .label col00 = COLS+$c*$28+$13 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .label __10 = 6 .label xw = $15 .label yw = $17 .label angle_w = 6 .label diff_sum = $c .label screen = $f .label screen_ref = 2 .label x = $13 .label y = $e // [5] call init_font_hex // [101] phi from main to init_font_hex [phi:main->init_font_hex] init_font_hex_from_main: jsr init_font_hex // [6] phi from main to main::toD0181 [phi:main->main::toD0181] toD0181_from_main: jmp toD0181 // main::toD0181 toD0181: jmp __b6 // main::@6 __b6: // [7] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 // [8] phi from main::@6 to main::@1 [phi:main::@6->main::@1] __b1_from___b6: // [8] phi (byte*) main::screen#5 = (const byte*) SCREEN [phi:main::@6->main::@1#0] -- pbuz1=pbuc1 lda #SCREEN sta.z screen+1 // [8] phi (word) main::diff_sum#7 = (byte) 0 [phi:main::@6->main::@1#1] -- vwuz1=vbuc1 lda #<0 sta.z diff_sum lda #>0 sta.z diff_sum+1 // [8] phi (byte*) main::screen_ref#5 = (const byte*) SCREEN_REF [phi:main::@6->main::@1#2] -- pbuz1=pbuc1 lda #SCREEN_REF sta.z screen_ref+1 // [8] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@6->main::@1#3] -- vbsz1=vbsc1 lda #-$c sta.z y jmp __b1 // [8] phi from main::@3 to main::@1 [phi:main::@3->main::@1] __b1_from___b3: // [8] phi (byte*) main::screen#5 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy // [8] phi (word) main::diff_sum#7 = (word) main::diff_sum#1 [phi:main::@3->main::@1#1] -- register_copy // [8] phi (byte*) main::screen_ref#5 = (byte*) main::screen_ref#1 [phi:main::@3->main::@1#2] -- register_copy // [8] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#3] -- register_copy jmp __b1 // main::@1 __b1: // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: // [9] phi (byte*) main::screen#2 = (byte*) main::screen#5 [phi:main::@1->main::@2#0] -- register_copy // [9] phi (word) main::diff_sum#2 = (word) main::diff_sum#7 [phi:main::@1->main::@2#1] -- register_copy // [9] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#5 [phi:main::@1->main::@2#2] -- register_copy // [9] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#3] -- vbsz1=vbsc1 lda #-$13 sta.z x jmp __b2 // [9] phi from main::@8 to main::@2 [phi:main::@8->main::@2] __b2_from___b8: // [9] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@8->main::@2#0] -- register_copy // [9] phi (word) main::diff_sum#2 = (word) main::diff_sum#1 [phi:main::@8->main::@2#1] -- register_copy // [9] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#1 [phi:main::@8->main::@2#2] -- register_copy // [9] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@8->main::@2#3] -- register_copy jmp __b2 // main::@2 __b2: // [10] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda.z x ldy #0 sta.z xw+1 sty.z xw // [11] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda.z y ldy #0 sta.z yw+1 sty.z yw // [12] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 // [13] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 // [14] call atan2_16 jsr atan2_16 // [15] (word) atan2_16::return#2 ← (word) atan2_16::return#0 jmp __b7 // main::@7 __b7: // [16] (word) main::angle_w#0 ← (word) atan2_16::return#2 // [17] (word~) main::$10 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc.z __10 sta.z __10 bcc !+ inc.z __10+1 !: // [18] (byte) main::ang_w#0 ← > (word~) main::$10 -- vbuxx=_hi_vwuz1 lda.z __10+1 tax // [19] (byte) diff::bb1#0 ← (byte) main::ang_w#0 // [20] (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2) -- vbuaa=_deref_pbuz1 ldy #0 lda (screen_ref),y // [21] call diff jsr diff // [22] (byte) diff::return#0 ← (byte) diff::return#1 jmp __b8 // main::@8 __b8: // [23] (byte~) main::$12 ← (byte) diff::return#0 // [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$12 -- vwuz1=vwuz1_plus_vbuaa //*screen = (>angle_w)-angle_b; //*screen = >angle_w; clc adc.z diff_sum sta.z diff_sum bcc !+ inc.z diff_sum+1 !: // [25] (byte~) main::$13 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2) -- vbuaa=vbuxx_minus__deref_pbuz1 txa sec ldy #0 sbc (screen_ref),y // [26] *((byte*) main::screen#2) ← (byte~) main::$13 -- _deref_pbuz1=vbuaa ldy #0 sta (screen),y // [27] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: // [28] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 -- pbuz1=_inc_pbuz1 inc.z screen_ref bne !+ inc.z screen_ref+1 !: // [29] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1 inc.z x // [30] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsz1_neq_vbsc1_then_la1 lda #$15 cmp.z x bne __b2_from___b8 jmp __b3 // main::@3 __b3: // [31] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 inc.z y // [32] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 lda #$d cmp.z y bne __b1_from___b3 jmp __b4 // main::@4 __b4: // [33] (word) print_word::w#0 ← (word) main::diff_sum#1 // [34] call print_word jsr print_word jmp __b5 // main::@5 __b5: // [35] *((const byte*) main::col00) ← ++ *((const byte*) main::col00) -- _deref_pbuc1=_inc__deref_pbuc1 inc col00 jmp __b5 } // print_word // Print a word as HEX // print_word(word zeropage($c) w) print_word: { .label w = $c // [36] (byte) print_byte::b#0 ← > (word) print_word::w#0 -- vbuxx=_hi_vwuz1 lda.z w+1 tax // [37] call print_byte // [41] phi from print_word to print_byte [phi:print_word->print_byte] print_byte_from_print_word: // [41] phi (byte*) print_char_cursor#24 = (byte*) 1024 [phi:print_word->print_byte#0] -- pbuz1=pbuc1 lda #<$400 sta.z print_char_cursor lda #>$400 sta.z print_char_cursor+1 // [41] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy jsr print_byte jmp __b1 // print_word::@1 __b1: // [38] (byte) print_byte::b#1 ← < (word) print_word::w#0 -- vbuxx=_lo_vwuz1 lda.z w tax // [39] call print_byte // [41] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] print_byte_from___b1: // [41] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#19 [phi:print_word::@1->print_byte#0] -- register_copy // [41] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy jsr print_byte jmp __breturn // print_word::@return __breturn: // [40] return rts } // print_byte // Print a byte as HEX // print_byte(byte register(X) b) print_byte: { // [42] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 -- vbuaa=vbuxx_ror_4 txa lsr lsr lsr lsr // [43] (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa tay lda print_hextab,y // [44] call print_char // [49] phi from print_byte to print_char [phi:print_byte->print_char] print_char_from_print_byte: // [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#24 [phi:print_byte->print_char#0] -- register_copy // [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy jsr print_char jmp __b1 // print_byte::@1 __b1: // [45] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 lda #$f axs #0 // [46] (byte) print_char::ch#1 ← *((const byte*) print_hextab + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx lda print_hextab,x // [47] call print_char // [49] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] print_char_from___b1: // [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#19 [phi:print_byte::@1->print_char#0] -- register_copy // [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_byte::@return __breturn: // [48] return rts } // print_char // Print a single char // print_char(byte register(A) ch) print_char: { // [50] *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2 -- _deref_pbuz1=vbuaa ldy #0 sta (print_char_cursor),y // [51] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1 inc.z print_char_cursor bne !+ inc.z print_char_cursor+1 !: jmp __breturn // print_char::@return __breturn: // [52] return rts } // diff // diff(byte register(X) bb1, byte register(A) bb2) diff: { // [53] if((byte) diff::bb1#0<(byte) diff::bb2#0) goto diff::@1 -- vbuxx_lt_vbuaa_then_la1 sta.z $ff cpx.z $ff bcc __b1 jmp __b2 // diff::@2 __b2: // [54] (byte~) diff::$2 ← (byte) diff::bb1#0 - (byte) diff::bb2#0 -- vbuaa=vbuxx_minus_vbuaa sta.z $ff txa sec sbc.z $ff // [55] phi from diff::@1 diff::@2 to diff::@3 [phi:diff::@1/diff::@2->diff::@3] __b3_from___b1: __b3_from___b2: // [55] phi (byte) diff::return#1 = (byte~) diff::$4 [phi:diff::@1/diff::@2->diff::@3#0] -- register_copy jmp __b3 // diff::@3 __b3: jmp __breturn // diff::@return __breturn: // [56] return rts // diff::@1 __b1: // [57] (byte~) diff::$4 ← (byte) diff::bb2#0 - (byte) diff::bb1#0 -- vbuaa=vbuaa_minus_vbuxx stx.z $ff sec sbc.z $ff jmp __b3_from___b1 } // 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($15) x, signed word zeropage($17) y) atan2_16: { .label __2 = $11 .label __7 = 4 .label yi = $11 .label xi = 4 .label angle = 6 .label xd = $a .label yd = 8 .label return = 6 .label x = $15 .label y = $17 // [58] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b1 jmp __b2 // atan2_16::@2 __b2: // [59] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z y sta.z __2 lda #0 sbc.z y+1 sta.z __2+1 // [60] 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: // [60] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy jmp __b3 // atan2_16::@3 __b3: // [61] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b4 jmp __b5 // atan2_16::@5 __b5: // [62] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z x sta.z __7 lda #0 sbc.z x+1 sta.z __7+1 // [63] 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: // [63] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy jmp __b6 // atan2_16::@6 __b6: // [64] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: // [64] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 lda #<0 sta.z angle lda #>0 sta.z angle+1 // [64] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 ldx #0 // [64] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy // [64] 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 // atan2_16::@10 __b10: // [65] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda.z yi+1 bne __b11 lda.z yi bne __b11 // [66] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] __b12_from___b10: __b12_from___b19: // [66] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy jmp __b12 // atan2_16::@12 __b12: // [67] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z angle+1 ror.z angle // [68] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b7_from___b12 jmp __b21 // atan2_16::@21 __b21: // [69] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc.z angle sta.z angle lda #>$8000 sbc.z angle+1 sta.z angle+1 // [70] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] __b7_from___b12: __b7_from___b21: // [70] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy jmp __b7 // atan2_16::@7 __b7: // [71] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b8_from___b7 jmp __b9 // atan2_16::@9 __b9: // [72] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc.z angle sta.z angle lda #0 sbc.z angle+1 sta.z angle+1 // [73] 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: // [73] 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 // atan2_16::@8 __b8: jmp __breturn // atan2_16::@return __breturn: // [74] return rts // atan2_16::@11 __b11: // [75] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx txa tay // [76] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda.z xi sta.z xd lda.z xi+1 sta.z xd+1 // [77] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda.z yi sta.z yd lda.z yi+1 sta.z yd+1 // [78] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] __b13_from___b11: __b13_from___b14: // [78] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy // [78] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy // [78] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy jmp __b13 // atan2_16::@13 __b13: // [79] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 cpy #2 bcs __b14 jmp __b15 // atan2_16::@15 __b15: // [80] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 cpy #0 beq __b17_from___b15 jmp __b16 // atan2_16::@16 __b16: // [81] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd // [82] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd // [83] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] __b17_from___b15: __b17_from___b16: // [83] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy // [83] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy jmp __b17 // atan2_16::@17 __b17: // [84] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda.z yi+1 bpl __b18 jmp __b20 // atan2_16::@20 __b20: // [85] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z xi sec sbc.z yd sta.z xi lda.z xi+1 sbc.z yd+1 sta.z xi+1 // [86] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z yi clc adc.z xd sta.z yi lda.z yi+1 adc.z xd+1 sta.z yi+1 // [87] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // [88] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa tay sec lda.z angle sbc CORDIC_ATAN2_ANGLES_16,y sta.z angle lda.z angle+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta.z angle+1 // [89] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] __b19_from___b18: __b19_from___b20: // [89] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy // [89] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy // [89] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy jmp __b19 // atan2_16::@19 __b19: // [90] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx inx // [91] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 cpx #CORDIC_ITERATIONS_16-1+1 beq __b12_from___b19 // [64] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] __b10_from___b19: // [64] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy // [64] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy // [64] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy // [64] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp __b10 // atan2_16::@18 __b18: // [92] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z xi clc adc.z yd sta.z xi lda.z xi+1 adc.z yd+1 sta.z xi+1 // [93] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z yi sec sbc.z xd sta.z yi lda.z yi+1 sbc.z xd+1 sta.z yi+1 // [94] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // [95] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa tay clc lda.z angle adc CORDIC_ATAN2_ANGLES_16,y sta.z angle lda.z angle+1 adc CORDIC_ATAN2_ANGLES_16+1,y sta.z angle+1 jmp __b19_from___b18 // atan2_16::@14 __b14: // [96] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd // [97] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd // [98] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 dey dey jmp __b13_from___b14 // atan2_16::@4 __b4: // [99] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda.z x sta.z xi lda.z x+1 sta.z xi+1 jmp __b6_from___b4 // atan2_16::@1 __b1: // [100] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda.z y sta.z yi lda.z y+1 sta.z yi+1 jmp __b3_from___b1 } // init_font_hex // Make charset from proto chars // init_font_hex(byte* zeropage($f) charset) init_font_hex: { .label __0 = $19 .label idx = $14 .label proto_lo = $11 .label charset = $f .label c1 = $13 .label proto_hi = $c .label c = $e // [102] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] __b1_from_init_font_hex: // [102] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 lda #0 sta.z c // [102] phi (byte*) init_font_hex::proto_hi#6 = (const byte*) FONT_HEX_PROTO [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta.z proto_hi+1 // [102] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 lda #CHARSET sta.z charset+1 jmp __b1 // [102] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] __b1_from___b5: // [102] 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 // [102] 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 // [102] 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 // init_font_hex::@1 __b1: // [103] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] __b2_from___b1: // [103] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 lda #0 sta.z c1 // [103] phi (byte*) init_font_hex::proto_lo#4 = (const byte*) FONT_HEX_PROTO [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta.z proto_lo+1 // [103] 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 // [103] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] __b2_from___b4: // [103] 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 // [103] 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 // [103] 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 // init_font_hex::@2 __b2: // [104] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (charset),y // [105] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] __b3_from___b2: // [105] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 lda #1 sta.z idx // [105] 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 // [105] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] __b3_from___b3: // [105] 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 // [105] 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 // init_font_hex::@3 __b3: // [106] (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.z __0 // [107] (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 // [108] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa ora.z __0 // [109] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z idx sta (charset),y // [110] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 inc.z idx // [111] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx inx // [112] 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 // init_font_hex::@4 __b4: // [113] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy.z idx sta (charset),y // [114] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 ldy.z idx iny // [115] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 lda #0 sta (charset),y // [116] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc.z proto_lo sta.z proto_lo bcc !+ inc.z proto_lo+1 !: // [117] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z charset sta.z charset bcc !+ inc.z charset+1 !: // [118] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 inc.z c1 // [119] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z c1 bne __b2_from___b4 jmp __b5 // init_font_hex::@5 __b5: // [120] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc.z proto_hi sta.z proto_hi bcc !+ inc.z proto_hi+1 !: // [121] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 inc.z c // [122] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z c bne __b1_from___b5 jmp __breturn // init_font_hex::@return __breturn: // [123] return rts } // 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 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i0 Removing instruction ldy #0 Removing instruction ldy #0 Removing instruction lda #>0 Replacing instruction ldx #0 with TAX Replacing instruction ldy #0 with TAY Removing instruction ldy.z idx Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __bbegin with __b1 Replacing label __b2_from___b8 with __b2 Replacing label __b1_from___b3 with __b1 Replacing label __b3_from___b1 with __b3 Replacing label __b7_from___b12 with __b7 Replacing label __b8_from___b7 with __b8 Replacing label __b17_from___b15 with __b17 Replacing label __b12_from___b19 with __b12 Replacing label __b19_from___b18 with __b19 Replacing label __b13_from___b14 with __b13 Replacing label __b6_from___b4 with __b6 Replacing label __b3_from___b1 with __b3 Replacing label __b3_from___b3 with __b3 Replacing label __b2_from___b4 with __b2 Replacing label __b1_from___b5 with __b1 Removing instruction __bbegin: Removing instruction __b1_from___bbegin: Removing instruction main_from___b1: Removing instruction __bend_from___b1: Removing instruction toD0181_from_main: Removing instruction toD0181: Removing instruction __b1_from___b3: Removing instruction __b2_from___b1: Removing instruction __b2_from___b8: Removing instruction __b3_from___b1: Removing instruction __b3_from___b2: Removing instruction __breturn: Removing instruction __b3_from___b1: Removing instruction __b3_from___b2: Removing instruction __b6_from___b4: Removing instruction __b6_from___b5: Removing instruction __b10_from___b6: Removing instruction __b12_from___b10: Removing instruction __b12_from___b19: Removing instruction __b7_from___b12: Removing instruction __b7_from___b21: Removing instruction __b8_from___b7: Removing instruction __b8_from___b9: Removing instruction __breturn: Removing instruction __b13_from___b11: Removing instruction __b13_from___b14: Removing instruction __b17_from___b15: Removing instruction __b17_from___b16: Removing instruction __b19_from___b18: Removing instruction __b19_from___b20: Removing instruction __b1_from___b5: Removing instruction __b2_from___b1: Removing instruction __b2_from___b4: Removing instruction __b3_from___b3: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction __bend: Removing instruction init_font_hex_from_main: Removing instruction __b6: Removing instruction __b1_from___b6: Removing instruction __b7: Removing instruction __b8: Removing instruction __b3: Removing instruction __b4: Removing instruction print_byte_from_print_word: Removing instruction __b1: Removing instruction print_byte_from___b1: Removing instruction __breturn: Removing instruction print_char_from_print_byte: Removing instruction __b1: Removing instruction print_char_from___b1: Removing instruction __breturn: Removing instruction __breturn: Removing instruction __b2: Removing instruction __b2: Removing instruction __b5: Removing instruction __b21: Removing instruction __b9: Removing instruction __b15: Removing instruction __b16: Removing instruction __b20: Removing instruction __b10_from___b19: Removing instruction __b1_from_init_font_hex: Removing instruction __b3_from___b2: Removing instruction __b4: Removing instruction __b5: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin Replacing jump to rts with rts in jmp __b3 Succesful ASM optimization Pass5DoubleJumpElimination Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __b3 Succesful ASM optimization Pass5NextJumpElimination Removing instruction __b1: Removing instruction __b3: Succesful ASM optimization Pass5UnusedLabelElimination Fixing long branch [281] beq __b12 to bne Fixing long branch [175] bpl __b1 to bmi Fixing long branch [187] bpl __b4 to bmi FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end (const byte*) CHARSET = (byte*) 8192 (const byte*) COLS = (byte*) 55296 (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i(word)(const byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET/(byte) 4&(byte) $f (byte*) main::toD0181_screen (signed byte) main::x (signed byte) main::x#1 x zp[1]:19 151.5 (signed byte) main::x#2 x zp[1]:19 10.1 (signed word) main::xw (word) main::xw#0 xw zp[2]:21 50.5 (signed byte) main::y (signed byte) main::y#1 y zp[1]:14 16.5 (signed byte) main::y#4 y zp[1]:14 0.9565217391304348 (signed word) main::yw (word) main::yw#0 yw zp[2]:23 50.5 (void()) print_byte((byte) print_byte::b) (byte~) print_byte::$0 reg byte a 4.0 (byte~) print_byte::$2 reg byte x 4.0 (label) print_byte::@1 (label) print_byte::@return (byte) print_byte::b (byte) print_byte::b#0 reg byte x 4.0 (byte) print_byte::b#1 reg byte x 4.0 (byte) print_byte::b#2 reg byte x 2.0 (void()) print_char((byte) print_char::ch) (label) print_char::@return (byte) print_char::ch (byte) print_char::ch#0 reg byte a 4.0 (byte) print_char::ch#1 reg byte a 4.0 (byte) print_char::ch#2 reg byte a 6.0 (byte*) print_char_cursor (byte*) print_char_cursor#18 print_char_cursor zp[2]:2 4.0 (byte*) print_char_cursor#19 print_char_cursor zp[2]:2 0.6666666666666666 (byte*) print_char_cursor#24 print_char_cursor zp[2]:2 1.3333333333333333 (const byte*) print_hextab[] = (string) "0123456789abcdef"z (byte*) print_line_cursor (byte*) print_screen (void()) print_word((word) print_word::w) (label) print_word::@1 (label) print_word::@return (word) print_word::w (word) print_word::w#0 w zp[2]:12 2.0 reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] zp[2]:2 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ] reg byte a [ diff::return#1 diff::$4 diff::$2 ] zp[2]:4 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:6 [ 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::$10 ] reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:8 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:10 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:12 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 print_word::w#0 ] zp[1]:14 [ init_font_hex::c#6 init_font_hex::c#1 main::y#4 main::y#1 ] zp[2]:15 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 main::screen#2 main::screen#5 main::screen#1 ] zp[2]:17 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[1]:19 [ init_font_hex::c1#4 init_font_hex::c1#1 main::x#2 main::x#1 ] reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] zp[1]:20 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp[2]:21 [ main::xw#0 atan2_16::x#0 ] zp[2]:23 [ main::yw#0 atan2_16::y#0 ] reg byte x [ main::ang_w#0 ] reg byte x [ diff::bb1#0 ] reg byte a [ diff::bb2#0 ] reg byte a [ diff::return#0 ] reg byte a [ main::$12 ] reg byte a [ main::$13 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] zp[1]:25 [ 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: 1044307 // File Comments // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf // Upstart .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f .label D018 = $d018 // Color Ram .label COLS = $d800 .label CHARSET = $2000 .label SCREEN = $2800 .label print_char_cursor = 2 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 // [2] call main // [4] phi from @1 to main [phi:@1->main] // [3] phi from @1 to @end [phi:@1->@end] // @end // main main: { .label col00 = COLS+$c*$28+$13 .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .label __10 = 6 .label xw = $15 .label yw = $17 .label angle_w = 6 .label diff_sum = $c .label screen = $f .label screen_ref = 2 .label x = $13 .label y = $e // init_font_hex(CHARSET) // [5] call init_font_hex // [101] phi from main to init_font_hex [phi:main->init_font_hex] jsr init_font_hex // [6] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 // main::@6 // *D018 = toD018(SCREEN, CHARSET) // [7] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 // [8] phi from main::@6 to main::@1 [phi:main::@6->main::@1] // [8] phi (byte*) main::screen#5 = (const byte*) SCREEN [phi:main::@6->main::@1#0] -- pbuz1=pbuc1 lda #SCREEN sta.z screen+1 // [8] phi (word) main::diff_sum#7 = (byte) 0 [phi:main::@6->main::@1#1] -- vwuz1=vbuc1 lda #<0 sta.z diff_sum sta.z diff_sum+1 // [8] phi (byte*) main::screen_ref#5 = (const byte*) SCREEN_REF [phi:main::@6->main::@1#2] -- pbuz1=pbuc1 lda #SCREEN_REF sta.z screen_ref+1 // [8] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@6->main::@1#3] -- vbsz1=vbsc1 lda #-$c sta.z y // [8] phi from main::@3 to main::@1 [phi:main::@3->main::@1] // [8] phi (byte*) main::screen#5 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy // [8] phi (word) main::diff_sum#7 = (word) main::diff_sum#1 [phi:main::@3->main::@1#1] -- register_copy // [8] phi (byte*) main::screen_ref#5 = (byte*) main::screen_ref#1 [phi:main::@3->main::@1#2] -- register_copy // [8] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#3] -- register_copy // main::@1 __b1: // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // [9] phi (byte*) main::screen#2 = (byte*) main::screen#5 [phi:main::@1->main::@2#0] -- register_copy // [9] phi (word) main::diff_sum#2 = (word) main::diff_sum#7 [phi:main::@1->main::@2#1] -- register_copy // [9] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#5 [phi:main::@1->main::@2#2] -- register_copy // [9] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#3] -- vbsz1=vbsc1 lda #-$13 sta.z x // [9] phi from main::@8 to main::@2 [phi:main::@8->main::@2] // [9] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@8->main::@2#0] -- register_copy // [9] phi (word) main::diff_sum#2 = (word) main::diff_sum#1 [phi:main::@8->main::@2#1] -- register_copy // [9] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#1 [phi:main::@8->main::@2#2] -- register_copy // [9] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@8->main::@2#3] -- register_copy // main::@2 __b2: // (word){ (byte)x, 0 } // [10] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda.z x ldy #0 sta.z xw+1 sty.z xw // (word){ (byte)y, 0 } // [11] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda.z y sta.z yw+1 sty.z yw // atan2_16(xw, yw) // [12] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 // [13] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 // [14] call atan2_16 jsr atan2_16 // [15] (word) atan2_16::return#2 ← (word) atan2_16::return#0 // main::@7 // angle_w = atan2_16(xw, yw) // [16] (word) main::angle_w#0 ← (word) atan2_16::return#2 // angle_w+0x0080 // [17] (word~) main::$10 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc.z __10 sta.z __10 bcc !+ inc.z __10+1 !: // ang_w = >(angle_w+0x0080) // [18] (byte) main::ang_w#0 ← > (word~) main::$10 -- vbuxx=_hi_vwuz1 lda.z __10+1 tax // diff(ang_w, *screen_ref) // [19] (byte) diff::bb1#0 ← (byte) main::ang_w#0 // [20] (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2) -- vbuaa=_deref_pbuz1 ldy #0 lda (screen_ref),y // [21] call diff jsr diff // [22] (byte) diff::return#0 ← (byte) diff::return#1 // main::@8 // [23] (byte~) main::$12 ← (byte) diff::return#0 // diff_sum += diff(ang_w, *screen_ref) // [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$12 -- vwuz1=vwuz1_plus_vbuaa //*screen = (>angle_w)-angle_b; //*screen = >angle_w; clc adc.z diff_sum sta.z diff_sum bcc !+ inc.z diff_sum+1 !: // ang_w - *screen_ref // [25] (byte~) main::$13 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2) -- vbuaa=vbuxx_minus__deref_pbuz1 txa sec ldy #0 sbc (screen_ref),y // *screen = ang_w - *screen_ref // [26] *((byte*) main::screen#2) ← (byte~) main::$13 -- _deref_pbuz1=vbuaa sta (screen),y // screen++; // [27] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: // screen_ref++; // [28] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 -- pbuz1=_inc_pbuz1 inc.z screen_ref bne !+ inc.z screen_ref+1 !: // for(signed byte x: -19..20) // [29] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1 inc.z x // [30] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsz1_neq_vbsc1_then_la1 lda #$15 cmp.z x bne __b2 // main::@3 // for(signed byte y: -12..12) // [31] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1 inc.z y // [32] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 lda #$d cmp.z y bne __b1 // main::@4 // print_word(diff_sum) // [33] (word) print_word::w#0 ← (word) main::diff_sum#1 // [34] call print_word jsr print_word // main::@5 __b5: // (*col00)++; // [35] *((const byte*) main::col00) ← ++ *((const byte*) main::col00) -- _deref_pbuc1=_inc__deref_pbuc1 inc col00 jmp __b5 } // print_word // Print a word as HEX // print_word(word zeropage($c) w) print_word: { .label w = $c // print_byte(>w) // [36] (byte) print_byte::b#0 ← > (word) print_word::w#0 -- vbuxx=_hi_vwuz1 lda.z w+1 tax // [37] call print_byte // [41] phi from print_word to print_byte [phi:print_word->print_byte] // [41] phi (byte*) print_char_cursor#24 = (byte*) 1024 [phi:print_word->print_byte#0] -- pbuz1=pbuc1 lda #<$400 sta.z print_char_cursor lda #>$400 sta.z print_char_cursor+1 // [41] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy jsr print_byte // print_word::@1 // print_byte(print_byte] // [41] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#19 [phi:print_word::@1->print_byte#0] -- register_copy // [41] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy jsr print_byte // print_word::@return // } // [40] return rts } // print_byte // Print a byte as HEX // print_byte(byte register(X) b) print_byte: { // b>>4 // [42] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 -- vbuaa=vbuxx_ror_4 txa lsr lsr lsr lsr // print_char(print_hextab[b>>4]) // [43] (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa tay lda print_hextab,y // [44] call print_char // [49] phi from print_byte to print_char [phi:print_byte->print_char] // [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#24 [phi:print_byte->print_char#0] -- register_copy // [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy jsr print_char // print_byte::@1 // b&$f // [45] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 lda #$f axs #0 // print_char(print_hextab[b&$f]) // [46] (byte) print_char::ch#1 ← *((const byte*) print_hextab + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx lda print_hextab,x // [47] call print_char // [49] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] // [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#19 [phi:print_byte::@1->print_char#0] -- register_copy // [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy jsr print_char // print_byte::@return // } // [48] return rts } // print_char // Print a single char // print_char(byte register(A) ch) print_char: { // *(print_char_cursor++) = ch // [50] *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2 -- _deref_pbuz1=vbuaa ldy #0 sta (print_char_cursor),y // *(print_char_cursor++) = ch; // [51] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1 inc.z print_char_cursor bne !+ inc.z print_char_cursor+1 !: // print_char::@return // } // [52] return rts } // diff // diff(byte register(X) bb1, byte register(A) bb2) diff: { // (bb1diff::@3] // [55] phi (byte) diff::return#1 = (byte~) diff::$4 [phi:diff::@1/diff::@2->diff::@3#0] -- register_copy // diff::@3 // diff::@return // } // [56] return rts // diff::@1 __b1: // (bb1=0)?y:-y // [58] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda.z y+1 bmi !__b1+ jmp __b1 !__b1: // atan2_16::@2 // [59] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z y sta.z __2 lda #0 sbc.z y+1 sta.z __2+1 // [60] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] // [60] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy // atan2_16::@3 __b3: // (x>=0)?x:-x // [61] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda.z x+1 bmi !__b4+ jmp __b4 !__b4: // atan2_16::@5 // [62] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z x sta.z __7 lda #0 sbc.z x+1 sta.z __7+1 // [63] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] // [63] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy // atan2_16::@6 __b6: // [64] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] // [64] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 lda #<0 sta.z angle sta.z angle+1 // [64] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 tax // [64] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy // [64] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy // atan2_16::@10 __b10: // if(yi==0) // [65] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda.z yi+1 bne __b11 lda.z yi bne __b11 // [66] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] // [66] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy // atan2_16::@12 __b12: // angle /=2 // [67] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z angle+1 ror.z angle // if(x<0) // [68] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b7 // atan2_16::@21 // angle = 0x8000-angle // [69] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc.z angle sta.z angle lda #>$8000 sbc.z angle+1 sta.z angle+1 // [70] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] // [70] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy // atan2_16::@7 __b7: // if(y<0) // [71] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b8 // atan2_16::@9 // angle = -angle // [72] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc.z angle sta.z angle lda #0 sbc.z angle+1 sta.z angle+1 // [73] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] // [73] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy // atan2_16::@8 __b8: // atan2_16::@return // } // [74] return rts // atan2_16::@11 __b11: // [75] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx txa tay // [76] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda.z xi sta.z xd lda.z xi+1 sta.z xd+1 // [77] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda.z yi sta.z yd lda.z yi+1 sta.z yd+1 // [78] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] // [78] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy // [78] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy // [78] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy // atan2_16::@13 __b13: // while(shift>=2) // [79] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 cpy #2 bcs __b14 // atan2_16::@15 // if(shift) // [80] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 cpy #0 beq __b17 // atan2_16::@16 // xd >>= 1 // [81] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd // yd >>= 1 // [82] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd // [83] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] // [83] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy // [83] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy // atan2_16::@17 __b17: // if(yi>=0) // [84] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda.z yi+1 bpl __b18 // atan2_16::@20 // xi -= yd // [85] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z xi sec sbc.z yd sta.z xi lda.z xi+1 sbc.z yd+1 sta.z xi+1 // yi += xd // [86] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z yi clc adc.z xd sta.z yi lda.z yi+1 adc.z xd+1 sta.z yi+1 // angle -= CORDIC_ATAN2_ANGLES_16[i] // [87] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // [88] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa tay sec lda.z angle sbc CORDIC_ATAN2_ANGLES_16,y sta.z angle lda.z angle+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta.z angle+1 // [89] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] // [89] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy // [89] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy // [89] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy // atan2_16::@19 __b19: // for( byte i: 0..CORDIC_ITERATIONS_16-1) // [90] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx inx // [91] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 cpx #CORDIC_ITERATIONS_16-1+1 bne !__b12+ jmp __b12 !__b12: // [64] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] // [64] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy // [64] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy // [64] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy // [64] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp __b10 // atan2_16::@18 __b18: // xi += yd // [92] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z xi clc adc.z yd sta.z xi lda.z xi+1 adc.z yd+1 sta.z xi+1 // yi -= xd // [93] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z yi sec sbc.z xd sta.z yi lda.z yi+1 sbc.z xd+1 sta.z yi+1 // angle += CORDIC_ATAN2_ANGLES_16[i] // [94] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // [95] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa tay clc lda.z angle adc CORDIC_ATAN2_ANGLES_16,y sta.z angle lda.z angle+1 adc CORDIC_ATAN2_ANGLES_16+1,y sta.z angle+1 jmp __b19 // atan2_16::@14 __b14: // xd >>= 2 // [96] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd // yd >>= 2 // [97] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd // shift -=2 // [98] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 dey dey jmp __b13 // atan2_16::@4 __b4: // [99] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda.z x sta.z xi lda.z x+1 sta.z xi+1 jmp __b6 // atan2_16::@1 __b1: // [100] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda.z y sta.z yi lda.z y+1 sta.z yi+1 jmp __b3 } // init_font_hex // Make charset from proto chars // init_font_hex(byte* zeropage($f) charset) init_font_hex: { .label __0 = $19 .label idx = $14 .label proto_lo = $11 .label charset = $f .label c1 = $13 .label proto_hi = $c .label c = $e // [102] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1] // [102] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 lda #0 sta.z c // [102] phi (byte*) init_font_hex::proto_hi#6 = (const byte*) FONT_HEX_PROTO [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta.z proto_hi+1 // [102] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 lda #CHARSET sta.z charset+1 // [102] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1] // [102] 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 // [102] 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 // [102] 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 // init_font_hex::@1 __b1: // [103] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2] // [103] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 lda #0 sta.z c1 // [103] phi (byte*) init_font_hex::proto_lo#4 = (const byte*) FONT_HEX_PROTO [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 lda #FONT_HEX_PROTO sta.z proto_lo+1 // [103] 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 // [103] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2] // [103] 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 // [103] 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 // [103] 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 // init_font_hex::@2 __b2: // charset[idx++] = 0 // [104] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 tay sta (charset),y // [105] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3] // [105] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 lda #1 sta.z idx // [105] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 ldx #0 // [105] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3] // [105] 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 // [105] 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 // init_font_hex::@3 __b3: // proto_hi[i]<<4 // [106] (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.z __0 // proto_lo[i]<<1 // [107] (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 // proto_hi[i]<<4 | proto_lo[i]<<1 // [108] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa ora.z __0 // charset[idx++] = proto_hi[i]<<4 | proto_lo[i]<<1 // [109] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z idx sta (charset),y // charset[idx++] = proto_hi[i]<<4 | proto_lo[i]<<1; // [110] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 inc.z idx // for( byte i: 0..4) // [111] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx inx // [112] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #5 bne __b3 // init_font_hex::@4 // charset[idx++] = 0 // [113] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy.z idx sta (charset),y // charset[idx++] = 0; // [114] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 iny // charset[idx++] = 0 // [115] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 sta (charset),y // proto_lo += 5 // [116] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc.z proto_lo sta.z proto_lo bcc !+ inc.z proto_lo+1 !: // charset += 8 // [117] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 lda #8 clc adc.z charset sta.z charset bcc !+ inc.z charset+1 !: // for( byte c: 0..15 ) // [118] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 inc.z c1 // [119] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z c1 bne __b2 // init_font_hex::@5 // proto_hi += 5 // [120] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 lda #5 clc adc.z proto_hi sta.z proto_hi bcc !+ inc.z proto_hi+1 !: // for( byte c: 0..15 ) // [121] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 inc.z c // [122] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z c bne __b1 // init_font_hex::@return // } // [123] return rts } // 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 // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i