1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-29 03:56:15 +00:00
kickc/src/test/ref/cordic-atan2-16-ref.log

5514 lines
288 KiB
Plaintext

Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO
Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@1
(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 ← (byte) 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 ← (word) 0
(byte) atan2_16::i#0 ← (byte) 0
to:atan2_16::@10
atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6
(signed word) atan2_16::y#7 ← phi( atan2_16::@19/(signed word) atan2_16::y#8 atan2_16::@6/(signed word) atan2_16::y#9 )
(signed word) atan2_16::x#7 ← phi( atan2_16::@19/(signed word) atan2_16::x#8 atan2_16::@6/(signed word) atan2_16::x#10 )
(word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) atan2_16::angle#0 )
(byte) atan2_16::i#6 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) atan2_16::i#0 )
(signed word) atan2_16::xi#6 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 )
(signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(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::@11
to:atan2_16::@12
atan2_16::@11: scope:[atan2_16] from atan2_16::@10
(signed word) atan2_16::y#19 ← phi( atan2_16::@10/(signed word) atan2_16::y#7 )
(signed word) atan2_16::x#17 ← phi( atan2_16::@10/(signed word) atan2_16::x#7 )
(word) atan2_16::angle#19 ← phi( atan2_16::@10/(word) atan2_16::angle#12 )
(byte) atan2_16::i#2 ← phi( atan2_16::@10/(byte) atan2_16::i#6 )
(signed word) atan2_16::yi#4 ← phi( atan2_16::@10/(signed word) atan2_16::yi#3 )
(signed word) atan2_16::xi#3 ← phi( atan2_16::@10/(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::@13
atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19
(signed word) atan2_16::y#5 ← phi( atan2_16::@10/(signed word) atan2_16::y#7 atan2_16::@19/(signed word) atan2_16::y#8 )
(signed word) atan2_16::x#4 ← phi( atan2_16::@10/(signed word) atan2_16::x#7 atan2_16::@19/(signed word) atan2_16::x#8 )
(word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
(word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2
(bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0
(bool~) atan2_16::$11 ← ! (bool~) atan2_16::$10
if((bool~) atan2_16::$11) goto atan2_16::@7
to:atan2_16::@21
atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14
(signed word) atan2_16::y#18 ← phi( atan2_16::@11/(signed word) atan2_16::y#19 atan2_16::@14/(signed word) atan2_16::y#20 )
(signed word) atan2_16::x#16 ← phi( atan2_16::@11/(signed word) atan2_16::x#17 atan2_16::@14/(signed word) atan2_16::x#18 )
(word) atan2_16::angle#18 ← phi( atan2_16::@11/(word) atan2_16::angle#19 atan2_16::@14/(word) atan2_16::angle#20 )
(byte) atan2_16::i#10 ← phi( atan2_16::@11/(byte) atan2_16::i#2 atan2_16::@14/(byte) atan2_16::i#11 )
(signed word) atan2_16::xi#11 ← phi( atan2_16::@11/(signed word) atan2_16::xi#3 atan2_16::@14/(signed word) atan2_16::xi#12 )
(signed word) atan2_16::yi#14 ← phi( atan2_16::@11/(signed word) atan2_16::yi#4 atan2_16::@14/(signed word) atan2_16::yi#15 )
(signed word) atan2_16::yd#7 ← phi( atan2_16::@11/(signed word) atan2_16::yd#0 atan2_16::@14/(signed word) atan2_16::yd#1 )
(signed word) atan2_16::xd#7 ← phi( atan2_16::@11/(signed word) atan2_16::xd#0 atan2_16::@14/(signed word) atan2_16::xd#1 )
(byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#0 atan2_16::@14/(byte) atan2_16::shift#1 )
(bool~) atan2_16::$18 ← (byte) atan2_16::shift#2 >= (number) 2
if((bool~) atan2_16::$18) goto atan2_16::@14
to:atan2_16::@15
atan2_16::@14: scope:[atan2_16] from atan2_16::@13
(signed word) atan2_16::y#20 ← phi( atan2_16::@13/(signed word) atan2_16::y#18 )
(signed word) atan2_16::x#18 ← phi( atan2_16::@13/(signed word) atan2_16::x#16 )
(word) atan2_16::angle#20 ← phi( atan2_16::@13/(word) atan2_16::angle#18 )
(byte) atan2_16::i#11 ← phi( atan2_16::@13/(byte) atan2_16::i#10 )
(signed word) atan2_16::xi#12 ← phi( atan2_16::@13/(signed word) atan2_16::xi#11 )
(signed word) atan2_16::yi#15 ← phi( atan2_16::@13/(signed word) atan2_16::yi#14 )
(byte) atan2_16::shift#3 ← phi( atan2_16::@13/(byte) atan2_16::shift#2 )
(signed word) atan2_16::yd#3 ← phi( atan2_16::@13/(signed word) atan2_16::yd#7 )
(signed word) atan2_16::xd#3 ← phi( atan2_16::@13/(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::@13
atan2_16::@15: scope:[atan2_16] from atan2_16::@13
(signed word) atan2_16::y#16 ← phi( atan2_16::@13/(signed word) atan2_16::y#18 )
(signed word) atan2_16::x#14 ← phi( atan2_16::@13/(signed word) atan2_16::x#16 )
(word) atan2_16::angle#16 ← phi( atan2_16::@13/(word) atan2_16::angle#18 )
(byte) atan2_16::i#8 ← phi( atan2_16::@13/(byte) atan2_16::i#10 )
(signed word) atan2_16::xi#9 ← phi( atan2_16::@13/(signed word) atan2_16::xi#11 )
(signed word) atan2_16::yd#8 ← phi( atan2_16::@13/(signed word) atan2_16::yd#7 )
(signed word) atan2_16::xd#8 ← phi( atan2_16::@13/(signed word) atan2_16::xd#7 )
(signed word) atan2_16::yi#10 ← phi( atan2_16::@13/(signed word) atan2_16::yi#14 )
(byte) atan2_16::shift#4 ← phi( atan2_16::@13/(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::@17
to:atan2_16::@16
atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16
(signed word) atan2_16::y#14 ← phi( atan2_16::@15/(signed word) atan2_16::y#16 atan2_16::@16/(signed word) atan2_16::y#17 )
(signed word) atan2_16::x#13 ← phi( atan2_16::@15/(signed word) atan2_16::x#14 atan2_16::@16/(signed word) atan2_16::x#15 )
(word) atan2_16::angle#14 ← phi( atan2_16::@15/(word) atan2_16::angle#16 atan2_16::@16/(word) atan2_16::angle#17 )
(byte) atan2_16::i#7 ← phi( atan2_16::@15/(byte) atan2_16::i#8 atan2_16::@16/(byte) atan2_16::i#9 )
(signed word) atan2_16::xd#9 ← phi( atan2_16::@15/(signed word) atan2_16::xd#8 atan2_16::@16/(signed word) atan2_16::xd#2 )
(signed word) atan2_16::yd#9 ← phi( atan2_16::@15/(signed word) atan2_16::yd#8 atan2_16::@16/(signed word) atan2_16::yd#2 )
(signed word) atan2_16::xi#7 ← phi( atan2_16::@15/(signed word) atan2_16::xi#9 atan2_16::@16/(signed word) atan2_16::xi#10 )
(signed word) atan2_16::yi#5 ← phi( atan2_16::@15/(signed word) atan2_16::yi#10 atan2_16::@16/(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::@18
to:atan2_16::@20
atan2_16::@16: scope:[atan2_16] from atan2_16::@15
(signed word) atan2_16::y#17 ← phi( atan2_16::@15/(signed word) atan2_16::y#16 )
(signed word) atan2_16::x#15 ← phi( atan2_16::@15/(signed word) atan2_16::x#14 )
(word) atan2_16::angle#17 ← phi( atan2_16::@15/(word) atan2_16::angle#16 )
(byte) atan2_16::i#9 ← phi( atan2_16::@15/(byte) atan2_16::i#8 )
(signed word) atan2_16::xi#10 ← phi( atan2_16::@15/(signed word) atan2_16::xi#9 )
(signed word) atan2_16::yi#11 ← phi( atan2_16::@15/(signed word) atan2_16::yi#10 )
(signed word) atan2_16::yd#4 ← phi( atan2_16::@15/(signed word) atan2_16::yd#8 )
(signed word) atan2_16::xd#4 ← phi( atan2_16::@15/(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::@17
atan2_16::@18: scope:[atan2_16] from atan2_16::@17
(signed word) atan2_16::y#10 ← phi( atan2_16::@17/(signed word) atan2_16::y#14 )
(signed word) atan2_16::x#11 ← phi( atan2_16::@17/(signed word) atan2_16::x#13 )
(word) atan2_16::angle#7 ← phi( atan2_16::@17/(word) atan2_16::angle#14 )
(byte) atan2_16::i#3 ← phi( atan2_16::@17/(byte) atan2_16::i#7 )
(signed word) atan2_16::xd#5 ← phi( atan2_16::@17/(signed word) atan2_16::xd#9 )
(signed word) atan2_16::yi#6 ← phi( atan2_16::@17/(signed word) atan2_16::yi#5 )
(signed word) atan2_16::yd#5 ← phi( atan2_16::@17/(signed word) atan2_16::yd#9 )
(signed word) atan2_16::xi#4 ← phi( atan2_16::@17/(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::@19
atan2_16::@20: scope:[atan2_16] from atan2_16::@17
(signed word) atan2_16::y#11 ← phi( atan2_16::@17/(signed word) atan2_16::y#14 )
(signed word) atan2_16::x#12 ← phi( atan2_16::@17/(signed word) atan2_16::x#13 )
(word) atan2_16::angle#8 ← phi( atan2_16::@17/(word) atan2_16::angle#14 )
(byte) atan2_16::i#4 ← phi( atan2_16::@17/(byte) atan2_16::i#7 )
(signed word) atan2_16::xd#6 ← phi( atan2_16::@17/(signed word) atan2_16::xd#9 )
(signed word) atan2_16::yi#7 ← phi( atan2_16::@17/(signed word) atan2_16::yi#5 )
(signed word) atan2_16::yd#6 ← phi( atan2_16::@17/(signed word) atan2_16::yd#9 )
(signed word) atan2_16::xi#5 ← phi( atan2_16::@17/(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::@19
atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20
(signed word) atan2_16::y#8 ← phi( atan2_16::@18/(signed word) atan2_16::y#10 atan2_16::@20/(signed word) atan2_16::y#11 )
(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 )
(signed word) atan2_16::x#8 ← phi( atan2_16::@18/(signed word) atan2_16::x#11 atan2_16::@20/(signed word) atan2_16::x#12 )
(word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
(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 )
(byte) atan2_16::i#5 ← phi( atan2_16::@18/(byte) atan2_16::i#3 atan2_16::@20/(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::@10
to:atan2_16::@12
atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21
(word) atan2_16::angle#15 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
(signed word) atan2_16::y#4 ← phi( atan2_16::@12/(signed word) atan2_16::y#5 atan2_16::@21/(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::@9
atan2_16::@21: scope:[atan2_16] from atan2_16::@12
(signed word) atan2_16::y#6 ← phi( atan2_16::@12/(signed word) atan2_16::y#5 )
(word) atan2_16::angle#9 ← phi( atan2_16::@12/(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::@7 atan2_16::@9
(word) atan2_16::angle#10 ← phi( atan2_16::@7/(word) atan2_16::angle#15 atan2_16::@9/(word) atan2_16::angle#5 )
(word) atan2_16::return#0 ← (word) atan2_16::angle#10
to:atan2_16::@return
atan2_16::@9: 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
@1: 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:@2
(void()) print_uint((word) print_uint::w)
print_uint: scope:[print_uint] from main::@4
(byte*) print_char_cursor#23 ← phi( main::@4/(byte*) print_char_cursor#25 )
(word) print_uint::w#1 ← phi( main::@4/(word) print_uint::w#0 )
(byte~) print_uint::$0 ← > (word) print_uint::w#1
(byte) print_uchar::b#0 ← (byte~) print_uint::$0
call print_uchar
to:print_uint::@1
print_uint::@1: scope:[print_uint] from print_uint
(word) print_uint::w#2 ← phi( print_uint/(word) print_uint::w#1 )
(byte*) print_char_cursor#12 ← phi( print_uint/(byte*) print_char_cursor#6 )
(byte*) print_char_cursor#1 ← (byte*) print_char_cursor#12
(byte~) print_uint::$2 ← < (word) print_uint::w#2
(byte) print_uchar::b#1 ← (byte~) print_uint::$2
call print_uchar
to:print_uint::@2
print_uint::@2: scope:[print_uint] from print_uint::@1
(byte*) print_char_cursor#13 ← phi( print_uint::@1/(byte*) print_char_cursor#6 )
(byte*) print_char_cursor#2 ← (byte*) print_char_cursor#13
to:print_uint::@return
print_uint::@return: scope:[print_uint] from print_uint::@2
(byte*) print_char_cursor#14 ← phi( print_uint::@2/(byte*) print_char_cursor#2 )
(byte*) print_char_cursor#3 ← (byte*) print_char_cursor#14
return
to:@return
(void()) print_uchar((byte) print_uchar::b)
print_uchar: scope:[print_uchar] from print_uint print_uint::@1
(byte*) print_char_cursor#24 ← phi( print_uint/(byte*) print_char_cursor#23 print_uint::@1/(byte*) print_char_cursor#1 )
(byte) print_uchar::b#2 ← phi( print_uint/(byte) print_uchar::b#0 print_uint::@1/(byte) print_uchar::b#1 )
(byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (number) 4
(byte) print_char::ch#0 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$0)
call print_char
to:print_uchar::@1
print_uchar::@1: scope:[print_uchar] from print_uchar
(byte) print_uchar::b#3 ← phi( print_uchar/(byte) print_uchar::b#2 )
(byte*) print_char_cursor#15 ← phi( print_uchar/(byte*) print_char_cursor#8 )
(byte*) print_char_cursor#4 ← (byte*) print_char_cursor#15
(number~) print_uchar::$2 ← (byte) print_uchar::b#3 & (number) $f
(byte) print_char::ch#1 ← *((const to_nomodify byte*) print_hextab + (number~) print_uchar::$2)
call print_char
to:print_uchar::@2
print_uchar::@2: scope:[print_uchar] from print_uchar::@1
(byte*) print_char_cursor#16 ← phi( print_uchar::@1/(byte*) print_char_cursor#8 )
(byte*) print_char_cursor#5 ← (byte*) print_char_cursor#16
to:print_uchar::@return
print_uchar::@return: scope:[print_uchar] from print_uchar::@2
(byte*) print_char_cursor#17 ← phi( print_uchar::@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_uchar print_uchar::@1
(byte*) print_char_cursor#18 ← phi( print_uchar/(byte*) print_char_cursor#24 print_uchar::@1/(byte*) print_char_cursor#4 )
(byte) print_char::ch#2 ← phi( print_uchar/(byte) print_char::ch#0 print_uchar::@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 @2
(byte*) print_char_cursor#38 ← phi( @2/(byte*) print_char_cursor#27 )
(byte*) init_font_hex::charset#1 ← (const nomodify byte*) CHARSET
call init_font_hex
to:main::@8
main::@8: scope:[main] from main
(byte*) print_char_cursor#37 ← phi( main/(byte*) print_char_cursor#38 )
(byte*) main::toD0181_screen#0 ← (const nomodify byte*) SCREEN
(byte*) main::toD0181_gfx#0 ← (const nomodify byte*) CHARSET
to:main::toD0181
main::toD0181: scope:[main] from main::@8
(byte*) print_char_cursor#36 ← phi( main::@8/(byte*) print_char_cursor#37 )
(byte*) main::toD0181_gfx#1 ← phi( main::@8/(byte*) main::toD0181_gfx#0 )
(byte*) main::toD0181_screen#1 ← phi( main::@8/(byte*) main::toD0181_screen#0 )
(word~) main::toD0181_$7 ← (word)(byte*) main::toD0181_screen#1
(number~) main::toD0181_$0 ← (word~) main::toD0181_$7 & (number) $3fff
(number~) main::toD0181_$1 ← (number~) main::toD0181_$0 * (number) 4
(number~) main::toD0181_$2 ← > (number~) main::toD0181_$1
(byte~) main::toD0181_$3 ← > (word)(byte*) main::toD0181_gfx#1
(number~) main::toD0181_$4 ← (byte~) main::toD0181_$3 / (number) 4
(number~) main::toD0181_$5 ← (number~) main::toD0181_$4 & (number) $f
(number~) main::toD0181_$6 ← (number~) main::toD0181_$2 | (number~) main::toD0181_$5
(byte) main::toD0181_return#0 ← (number~) main::toD0181_$6
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::@7
main::@7: 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 nomodify byte*) D018) ← (byte~) main::$1
(byte*) main::screen#0 ← (const nomodify byte*) SCREEN
(byte*) main::screen_ref#0 ← (const to_nomodify byte*) SCREEN_REF
(word) main::diff_sum#0 ← (word) 0
(signed byte) main::y#0 ← (signed byte) -$c
to:main::@1
main::@1: scope:[main] from main::@3 main::@7
(byte*) print_char_cursor#33 ← phi( main::@3/(byte*) print_char_cursor#28 main::@7/(byte*) print_char_cursor#34 )
(byte*) main::screen#5 ← phi( main::@3/(byte*) main::screen#6 main::@7/(byte*) main::screen#0 )
(word) main::diff_sum#7 ← phi( main::@3/(word) main::diff_sum#5 main::@7/(word) main::diff_sum#0 )
(byte*) main::screen_ref#5 ← phi( main::@3/(byte*) main::screen_ref#6 main::@7/(byte*) main::screen_ref#0 )
(signed byte) main::y#4 ← phi( main::@3/(signed byte) main::y#1 main::@7/(signed byte) main::y#0 )
(signed byte) main::x#0 ← (signed byte) -$13
to:main::@2
main::@2: scope:[main] from main::@1 main::@10
(byte*) print_char_cursor#32 ← phi( main::@1/(byte*) print_char_cursor#33 main::@10/(byte*) print_char_cursor#30 )
(byte*) main::screen#4 ← phi( main::@1/(byte*) main::screen#5 main::@10/(byte*) main::screen#1 )
(word) main::diff_sum#6 ← phi( main::@1/(word) main::diff_sum#7 main::@10/(word) main::diff_sum#1 )
(byte*) main::screen_ref#4 ← phi( main::@1/(byte*) main::screen_ref#5 main::@10/(byte*) main::screen_ref#1 )
(signed byte) main::y#2 ← phi( main::@1/(signed byte) main::y#4 main::@10/(signed byte) main::y#5 )
(signed byte) main::x#2 ← phi( main::@1/(signed byte) main::x#0 main::@10/(signed byte) main::x#1 )
(signed word) main::xw#0 ← (signed word)(word){ (byte)(signed byte) main::x#2, (number) 0 }
(signed word) main::yw#0 ← (signed word)(word){ (byte)(signed byte) main::y#2, (number) 0 }
(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::@9
main::@9: 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::$3 ← (word) atan2_16::return#4
(word) main::angle_w#0 ← (word~) main::$3
(number~) main::$4 ← (word) main::angle_w#0 + (number) $80
(number~) main::$5 ← > (number~) main::$4
(byte) main::ang_w#0 ← (number~) main::$5
(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::@10
main::@10: scope:[main] from main::@9
(byte*) print_char_cursor#30 ← phi( main::@9/(byte*) print_char_cursor#31 )
(signed byte) main::y#5 ← phi( main::@9/(signed byte) main::y#6 )
(signed byte) main::x#3 ← phi( main::@9/(signed byte) main::x#4 )
(byte*) main::screen#2 ← phi( main::@9/(byte*) main::screen#3 )
(byte*) main::screen_ref#3 ← phi( main::@9/(byte*) main::screen_ref#2 )
(byte) main::ang_w#1 ← phi( main::@9/(byte) main::ang_w#0 )
(word) main::diff_sum#2 ← phi( main::@9/(word) main::diff_sum#4 )
(byte) diff::return#3 ← phi( main::@9/(byte) diff::return#0 )
(byte~) main::$6 ← (byte) diff::return#3
(word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$6
(byte~) main::$7 ← (byte) main::ang_w#1 - *((byte*) main::screen_ref#3)
*((byte*) main::screen#2) ← (byte~) main::$7
(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::$8 ← (signed byte) main::x#1 != rangelast(-$13,$14)
if((bool~) main::$8) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@10
(byte*) main::screen#6 ← phi( main::@10/(byte*) main::screen#1 )
(byte*) main::screen_ref#6 ← phi( main::@10/(byte*) main::screen_ref#1 )
(byte*) print_char_cursor#28 ← phi( main::@10/(byte*) print_char_cursor#30 )
(word) main::diff_sum#5 ← phi( main::@10/(word) main::diff_sum#1 )
(signed byte) main::y#3 ← phi( main::@10/(signed byte) main::y#5 )
(signed byte) main::y#1 ← (signed byte) main::y#3 + rangenext(-$c,$c)
(bool~) main::$9 ← (signed byte) main::y#1 != rangelast(-$c,$c)
if((bool~) main::$9) 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_uint::w#0 ← (word) main::diff_sum#3
call print_uint
to:main::@11
main::@11: 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::@11 main::@6
(byte*) print_char_cursor#26 ← phi( main::@11/(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::@9
(byte) diff::bb2#1 ← phi( main::@9/(byte) diff::bb2#0 )
(byte) diff::bb1#1 ← phi( main::@9/(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
@2: scope:[] from @1
(byte*) print_char_cursor#27 ← phi( @1/(byte*) print_char_cursor#0 )
call main
to:@3
@3: scope:[] from @2
(byte*) print_char_cursor#22 ← phi( @2/(byte*) print_char_cursor#10 )
(byte*) print_char_cursor#11 ← (byte*) print_char_cursor#22
to:@end
@end: scope:[] from @3
SYMBOL TABLE SSA
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(const nomodify byte*) CHARSET = (byte*)(number) $2000
(const nomodify byte*) COLS = (byte*)(number) $d800
(const word*) CORDIC_ATAN2_ANGLES_16[(const nomodify byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2
}}
(const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f
(const nomodify byte*) D018 = (byte*)(number) $d018
(const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 }
(byte) MOS6526_CIA::INTERRUPT
(byte) MOS6526_CIA::PORT_A
(byte) MOS6526_CIA::PORT_A_DDR
(byte) MOS6526_CIA::PORT_B
(byte) MOS6526_CIA::PORT_B_DDR
(byte) MOS6526_CIA::SERIAL_DATA
(word) MOS6526_CIA::TIMER_A
(byte) MOS6526_CIA::TIMER_A_CONTROL
(word) MOS6526_CIA::TIMER_B
(byte) MOS6526_CIA::TIMER_B_CONTROL
(byte) MOS6526_CIA::TOD_10THS
(byte) MOS6526_CIA::TOD_HOURS
(byte) MOS6526_CIA::TOD_MIN
(byte) MOS6526_CIA::TOD_SEC
(byte) MOS6569_VICII::BG_COLOR
(byte) MOS6569_VICII::BG_COLOR1
(byte) MOS6569_VICII::BG_COLOR2
(byte) MOS6569_VICII::BG_COLOR3
(byte) MOS6569_VICII::BORDER_COLOR
(byte) MOS6569_VICII::CONTROL1
(byte) MOS6569_VICII::CONTROL2
(byte) MOS6569_VICII::IRQ_ENABLE
(byte) MOS6569_VICII::IRQ_STATUS
(byte) MOS6569_VICII::LIGHTPEN_X
(byte) MOS6569_VICII::LIGHTPEN_Y
(byte) MOS6569_VICII::MEMORY
(byte) MOS6569_VICII::RASTER
(byte) MOS6569_VICII::SPRITE0_COLOR
(byte) MOS6569_VICII::SPRITE0_X
(byte) MOS6569_VICII::SPRITE0_Y
(byte) MOS6569_VICII::SPRITE1_COLOR
(byte) MOS6569_VICII::SPRITE1_X
(byte) MOS6569_VICII::SPRITE1_Y
(byte) MOS6569_VICII::SPRITE2_COLOR
(byte) MOS6569_VICII::SPRITE2_X
(byte) MOS6569_VICII::SPRITE2_Y
(byte) MOS6569_VICII::SPRITE3_COLOR
(byte) MOS6569_VICII::SPRITE3_X
(byte) MOS6569_VICII::SPRITE3_Y
(byte) MOS6569_VICII::SPRITE4_COLOR
(byte) MOS6569_VICII::SPRITE4_X
(byte) MOS6569_VICII::SPRITE4_Y
(byte) MOS6569_VICII::SPRITE5_COLOR
(byte) MOS6569_VICII::SPRITE5_X
(byte) MOS6569_VICII::SPRITE5_Y
(byte) MOS6569_VICII::SPRITE6_COLOR
(byte) MOS6569_VICII::SPRITE6_X
(byte) MOS6569_VICII::SPRITE6_Y
(byte) MOS6569_VICII::SPRITE7_COLOR
(byte) MOS6569_VICII::SPRITE7_X
(byte) MOS6569_VICII::SPRITE7_Y
(byte) MOS6569_VICII::SPRITES_BG_COLLISION
(byte) MOS6569_VICII::SPRITES_COLLISION
(byte) MOS6569_VICII::SPRITES_ENABLE
(byte) MOS6569_VICII::SPRITES_EXPAND_X
(byte) MOS6569_VICII::SPRITES_EXPAND_Y
(byte) MOS6569_VICII::SPRITES_MC
(byte) MOS6569_VICII::SPRITES_MCOLOR1
(byte) MOS6569_VICII::SPRITES_MCOLOR2
(byte) MOS6569_VICII::SPRITES_PRIORITY
(byte) MOS6569_VICII::SPRITES_XMSB
(byte) MOS6581_SID::CH1_ATTACK_DECAY
(byte) MOS6581_SID::CH1_CONTROL
(word) MOS6581_SID::CH1_FREQ
(word) MOS6581_SID::CH1_PULSE_WIDTH
(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE
(byte) MOS6581_SID::CH2_ATTACK_DECAY
(byte) MOS6581_SID::CH2_CONTROL
(word) MOS6581_SID::CH2_FREQ
(word) MOS6581_SID::CH2_PULSE_WIDTH
(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE
(byte) MOS6581_SID::CH3_ATTACK_DECAY
(byte) MOS6581_SID::CH3_CONTROL
(byte) MOS6581_SID::CH3_ENV
(word) MOS6581_SID::CH3_FREQ
(byte) MOS6581_SID::CH3_OSC
(word) MOS6581_SID::CH3_PULSE_WIDTH
(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE
(byte) MOS6581_SID::FILTER_CUTOFF_HIGH
(byte) MOS6581_SID::FILTER_CUTOFF_LOW
(byte) MOS6581_SID::FILTER_SETUP
(byte) MOS6581_SID::POT_X
(byte) MOS6581_SID::POT_Y
(byte) MOS6581_SID::VOLUME_FILTER_MODE
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(const nomodify byte*) SCREEN = (byte*)(number) $2800
(const to_nomodify byte*) SCREEN_REF[(number) $3e8] = kickasm {{ .for(var y=-12;y<=12;y++)
.for(var x=-19;x<=20;x++)
.byte round(256*atan2(y, x)/PI/2)
}}
(const byte) SIZEOF_WORD = (byte) 2
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(bool~) atan2_16::$0
(signed word~) atan2_16::$1
(bool~) atan2_16::$10
(bool~) atan2_16::$11
(number~) atan2_16::$12
(bool~) atan2_16::$13
(bool~) atan2_16::$14
(word~) atan2_16::$15
(bool~) atan2_16::$16
(bool~) atan2_16::$17
(bool~) atan2_16::$18
(bool~) atan2_16::$19
(signed word~) atan2_16::$2
(bool~) atan2_16::$20
(bool~) atan2_16::$21
(byte~) atan2_16::$22
(byte~) atan2_16::$23
(bool~) atan2_16::$24
(signed word~) atan2_16::$3
(signed word~) atan2_16::$4
(bool~) atan2_16::$5
(signed word~) atan2_16::$6
(signed word~) atan2_16::$7
(signed word~) atan2_16::$8
(signed word~) atan2_16::$9
(label) atan2_16::@1
(label) atan2_16::@10
(label) atan2_16::@11
(label) atan2_16::@12
(label) atan2_16::@13
(label) atan2_16::@14
(label) atan2_16::@15
(label) atan2_16::@16
(label) atan2_16::@17
(label) atan2_16::@18
(label) atan2_16::@19
(label) atan2_16::@2
(label) atan2_16::@20
(label) atan2_16::@21
(label) atan2_16::@3
(label) atan2_16::@4
(label) atan2_16::@5
(label) atan2_16::@6
(label) atan2_16::@7
(label) atan2_16::@8
(label) atan2_16::@9
(label) atan2_16::@return
(word) atan2_16::angle
(word) atan2_16::angle#0
(word) atan2_16::angle#1
(word) atan2_16::angle#10
(word) atan2_16::angle#11
(word) atan2_16::angle#12
(word) atan2_16::angle#13
(word) atan2_16::angle#14
(word) atan2_16::angle#15
(word) atan2_16::angle#16
(word) atan2_16::angle#17
(word) atan2_16::angle#18
(word) atan2_16::angle#19
(word) atan2_16::angle#2
(word) atan2_16::angle#20
(word) atan2_16::angle#3
(word) atan2_16::angle#4
(word) atan2_16::angle#5
(word) atan2_16::angle#6
(word) atan2_16::angle#7
(word) atan2_16::angle#8
(word) atan2_16::angle#9
(byte) atan2_16::i
(byte) atan2_16::i#0
(byte) atan2_16::i#1
(byte) atan2_16::i#10
(byte) atan2_16::i#11
(byte) atan2_16::i#2
(byte) atan2_16::i#3
(byte) atan2_16::i#4
(byte) atan2_16::i#5
(byte) atan2_16::i#6
(byte) atan2_16::i#7
(byte) atan2_16::i#8
(byte) atan2_16::i#9
(word) atan2_16::return
(word) atan2_16::return#0
(word) atan2_16::return#1
(word) atan2_16::return#2
(word) atan2_16::return#3
(word) atan2_16::return#4
(byte) atan2_16::shift
(byte) atan2_16::shift#0
(byte) atan2_16::shift#1
(byte) atan2_16::shift#2
(byte) atan2_16::shift#3
(byte) atan2_16::shift#4
(signed word) atan2_16::x
(signed word) atan2_16::x#0
(signed word) atan2_16::x#1
(signed word) atan2_16::x#10
(signed word) atan2_16::x#11
(signed word) atan2_16::x#12
(signed word) atan2_16::x#13
(signed word) atan2_16::x#14
(signed word) atan2_16::x#15
(signed word) atan2_16::x#16
(signed word) atan2_16::x#17
(signed word) atan2_16::x#18
(signed word) atan2_16::x#2
(signed word) atan2_16::x#3
(signed word) atan2_16::x#4
(signed word) atan2_16::x#5
(signed word) atan2_16::x#6
(signed word) atan2_16::x#7
(signed word) atan2_16::x#8
(signed word) atan2_16::x#9
(signed word) atan2_16::xd
(signed word) atan2_16::xd#0
(signed word) atan2_16::xd#1
(signed word) atan2_16::xd#2
(signed word) atan2_16::xd#3
(signed word) atan2_16::xd#4
(signed word) atan2_16::xd#5
(signed word) atan2_16::xd#6
(signed word) atan2_16::xd#7
(signed word) atan2_16::xd#8
(signed word) atan2_16::xd#9
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0
(signed word) atan2_16::xi#1
(signed word) atan2_16::xi#10
(signed word) atan2_16::xi#11
(signed word) atan2_16::xi#12
(signed word) atan2_16::xi#2
(signed word) atan2_16::xi#3
(signed word) atan2_16::xi#4
(signed word) atan2_16::xi#5
(signed word) atan2_16::xi#6
(signed word) atan2_16::xi#7
(signed word) atan2_16::xi#8
(signed word) atan2_16::xi#9
(signed word) atan2_16::y
(signed word) atan2_16::y#0
(signed word) atan2_16::y#1
(signed word) atan2_16::y#10
(signed word) atan2_16::y#11
(signed word) atan2_16::y#12
(signed word) atan2_16::y#13
(signed word) atan2_16::y#14
(signed word) atan2_16::y#15
(signed word) atan2_16::y#16
(signed word) atan2_16::y#17
(signed word) atan2_16::y#18
(signed word) atan2_16::y#19
(signed word) atan2_16::y#2
(signed word) atan2_16::y#20
(signed word) atan2_16::y#3
(signed word) atan2_16::y#4
(signed word) atan2_16::y#5
(signed word) atan2_16::y#6
(signed word) atan2_16::y#7
(signed word) atan2_16::y#8
(signed word) atan2_16::y#9
(signed word) atan2_16::yd
(signed word) atan2_16::yd#0
(signed word) atan2_16::yd#1
(signed word) atan2_16::yd#2
(signed word) atan2_16::yd#3
(signed word) atan2_16::yd#4
(signed word) atan2_16::yd#5
(signed word) atan2_16::yd#6
(signed word) atan2_16::yd#7
(signed word) atan2_16::yd#8
(signed word) atan2_16::yd#9
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0
(signed word) atan2_16::yi#1
(signed word) atan2_16::yi#10
(signed word) atan2_16::yi#11
(signed word) atan2_16::yi#12
(signed word) atan2_16::yi#13
(signed word) atan2_16::yi#14
(signed word) atan2_16::yi#15
(signed word) atan2_16::yi#2
(signed word) atan2_16::yi#3
(signed word) atan2_16::yi#4
(signed word) atan2_16::yi#5
(signed word) atan2_16::yi#6
(signed word) atan2_16::yi#7
(signed word) atan2_16::yi#8
(signed word) atan2_16::yi#9
(byte()) diff((byte) diff::bb1 , (byte) diff::bb2)
(bool~) diff::$0
(byte~) diff::$1
(byte~) diff::$2
(byte~) diff::$3
(byte~) diff::$4
(byte~) diff::$5
(label) diff::@1
(label) diff::@2
(label) diff::@3
(label) diff::@return
(byte) diff::bb1
(byte) diff::bb1#0
(byte) diff::bb1#1
(byte) diff::bb1#2
(byte) diff::bb1#3
(byte) diff::bb2
(byte) diff::bb2#0
(byte) diff::bb2#1
(byte) diff::bb2#2
(byte) diff::bb2#3
(byte) diff::return
(byte) diff::return#0
(byte) diff::return#1
(byte) diff::return#2
(byte) diff::return#3
(byte) diff::return#4
(void()) init_font_hex((byte*) init_font_hex::charset)
(byte~) init_font_hex::$0
(byte~) init_font_hex::$1
(byte~) init_font_hex::$2
(bool~) init_font_hex::$3
(bool~) init_font_hex::$4
(bool~) init_font_hex::$5
(label) init_font_hex::@1
(label) init_font_hex::@2
(label) init_font_hex::@3
(label) init_font_hex::@4
(label) init_font_hex::@5
(label) init_font_hex::@return
(byte) init_font_hex::c
(byte) init_font_hex::c#0
(byte) init_font_hex::c#1
(byte) init_font_hex::c#2
(byte) init_font_hex::c#3
(byte) init_font_hex::c#4
(byte) init_font_hex::c#5
(byte) init_font_hex::c#6
(byte) init_font_hex::c1
(byte) init_font_hex::c1#0
(byte) init_font_hex::c1#1
(byte) init_font_hex::c1#2
(byte) init_font_hex::c1#3
(byte) init_font_hex::c1#4
(byte*) init_font_hex::charset
(byte*) init_font_hex::charset#0
(byte*) init_font_hex::charset#1
(byte*) init_font_hex::charset#2
(byte*) init_font_hex::charset#3
(byte*) init_font_hex::charset#4
(byte*) init_font_hex::charset#5
(byte*) init_font_hex::charset#6
(byte*) init_font_hex::charset#7
(byte) init_font_hex::i
(byte) init_font_hex::i#0
(byte) init_font_hex::i#1
(byte) init_font_hex::i#2
(byte) init_font_hex::idx
(byte) init_font_hex::idx#0
(byte) init_font_hex::idx#1
(byte) init_font_hex::idx#2
(byte) init_font_hex::idx#3
(byte) init_font_hex::idx#4
(byte) init_font_hex::idx#5
(byte) init_font_hex::idx#6
(byte*) init_font_hex::proto_hi
(byte*) init_font_hex::proto_hi#0
(byte*) init_font_hex::proto_hi#1
(byte*) init_font_hex::proto_hi#2
(byte*) init_font_hex::proto_hi#3
(byte*) init_font_hex::proto_hi#4
(byte*) init_font_hex::proto_hi#5
(byte*) init_font_hex::proto_hi#6
(byte*) init_font_hex::proto_lo
(byte*) init_font_hex::proto_lo#0
(byte*) init_font_hex::proto_lo#1
(byte*) init_font_hex::proto_lo#2
(byte*) init_font_hex::proto_lo#3
(byte*) init_font_hex::proto_lo#4
(void()) main()
(byte~) main::$1
(word~) main::$3
(number~) main::$4
(number~) main::$5
(byte~) main::$6
(byte~) main::$7
(bool~) main::$8
(bool~) main::$9
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
(byte) main::ang_w
(byte) main::ang_w#0
(byte) main::ang_w#1
(word) main::angle_w
(word) main::angle_w#0
(const byte*) main::col00 = (const nomodify byte*) COLS+(number) $c*(number) $28+(number) $13
(word) main::diff_sum
(word) main::diff_sum#0
(word) main::diff_sum#1
(word) main::diff_sum#2
(word) main::diff_sum#3
(word) main::diff_sum#4
(word) main::diff_sum#5
(word) main::diff_sum#6
(word) main::diff_sum#7
(byte*) main::screen
(byte*) main::screen#0
(byte*) main::screen#1
(byte*) main::screen#2
(byte*) main::screen#3
(byte*) main::screen#4
(byte*) main::screen#5
(byte*) main::screen#6
(byte*) main::screen_ref
(byte*) main::screen_ref#0
(byte*) main::screen_ref#1
(byte*) main::screen_ref#2
(byte*) main::screen_ref#3
(byte*) main::screen_ref#4
(byte*) main::screen_ref#5
(byte*) main::screen_ref#6
(label) main::toD0181
(number~) main::toD0181_$0
(number~) main::toD0181_$1
(number~) main::toD0181_$2
(byte~) main::toD0181_$3
(number~) main::toD0181_$4
(number~) main::toD0181_$5
(number~) main::toD0181_$6
(word~) main::toD0181_$7
(label) main::toD0181_@return
(byte*) main::toD0181_gfx
(byte*) main::toD0181_gfx#0
(byte*) main::toD0181_gfx#1
(byte) main::toD0181_return
(byte) main::toD0181_return#0
(byte) main::toD0181_return#1
(byte) main::toD0181_return#2
(byte) main::toD0181_return#3
(byte*) main::toD0181_screen
(byte*) main::toD0181_screen#0
(byte*) main::toD0181_screen#1
(signed byte) main::x
(signed byte) main::x#0
(signed byte) main::x#1
(signed byte) main::x#2
(signed byte) main::x#3
(signed byte) main::x#4
(signed word) main::xw
(signed word) main::xw#0
(signed byte) main::y
(signed byte) main::y#0
(signed byte) main::y#1
(signed byte) main::y#2
(signed byte) main::y#3
(signed byte) main::y#4
(signed byte) main::y#5
(signed byte) main::y#6
(signed word) main::yw
(signed word) main::yw#0
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
(byte) print_char::ch#0
(byte) print_char::ch#1
(byte) print_char::ch#2
(byte*) print_char_cursor
(byte*) print_char_cursor#0
(byte*) print_char_cursor#1
(byte*) print_char_cursor#10
(byte*) print_char_cursor#11
(byte*) print_char_cursor#12
(byte*) print_char_cursor#13
(byte*) print_char_cursor#14
(byte*) print_char_cursor#15
(byte*) print_char_cursor#16
(byte*) print_char_cursor#17
(byte*) print_char_cursor#18
(byte*) print_char_cursor#19
(byte*) print_char_cursor#2
(byte*) print_char_cursor#20
(byte*) print_char_cursor#21
(byte*) print_char_cursor#22
(byte*) print_char_cursor#23
(byte*) print_char_cursor#24
(byte*) print_char_cursor#25
(byte*) print_char_cursor#26
(byte*) print_char_cursor#27
(byte*) print_char_cursor#28
(byte*) print_char_cursor#29
(byte*) print_char_cursor#3
(byte*) print_char_cursor#30
(byte*) print_char_cursor#31
(byte*) print_char_cursor#32
(byte*) print_char_cursor#33
(byte*) print_char_cursor#34
(byte*) print_char_cursor#35
(byte*) print_char_cursor#36
(byte*) print_char_cursor#37
(byte*) print_char_cursor#38
(byte*) print_char_cursor#4
(byte*) print_char_cursor#5
(byte*) print_char_cursor#6
(byte*) print_char_cursor#7
(byte*) print_char_cursor#8
(byte*) print_char_cursor#9
(const to_nomodify byte*) print_hextab[] = (byte*) "0123456789abcdef"z
(byte*) print_line_cursor
(byte*) print_line_cursor#0
(byte*) print_screen
(byte*) print_screen#0
(void()) print_uchar((byte) print_uchar::b)
(byte~) print_uchar::$0
(number~) print_uchar::$2
(label) print_uchar::@1
(label) print_uchar::@2
(label) print_uchar::@return
(byte) print_uchar::b
(byte) print_uchar::b#0
(byte) print_uchar::b#1
(byte) print_uchar::b#2
(byte) print_uchar::b#3
(void()) print_uint((word) print_uint::w)
(byte~) print_uint::$0
(byte~) print_uint::$2
(label) print_uint::@1
(label) print_uint::@2
(label) print_uint::@return
(word) print_uint::w
(word) print_uint::w#0
(word) print_uint::w#1
(word) print_uint::w#2
Fixing inline constructor with main::$11 ← (byte)(byte)main::x#2 w= (byte)0
Fixing inline constructor with main::$12 ← (byte)(byte)main::y#2 w= (byte)0
Successful SSA optimization Pass2FixInlineConstructors
Adding number conversion cast (unumber) $13 in
Adding number conversion cast (unumber) $c*$28 in
Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0
Adding number conversion cast (unumber) 4 in (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#2 + (byte) init_font_hex::i#2) << (number) 4
Adding number conversion cast (unumber) 1 in (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#2 + (byte) init_font_hex::i#2) << (number) 1
Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (number) 0
Adding number conversion cast (unumber) 5 in (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#3 + (number) 5
Adding number conversion cast (unumber) 8 in (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#4 + (number) 8
Adding number conversion cast (unumber) 5 in (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#3 + (number) 5
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 >= (number) 0
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0
Adding number conversion cast (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_uchar::$0 ← (byte) print_uchar::b#2 >> (number) 4
Adding number conversion cast (unumber) $f in (number~) print_uchar::$2 ← (byte) print_uchar::b#3 & (number) $f
Adding number conversion cast (unumber) print_uchar::$2 in (number~) print_uchar::$2 ← (byte) print_uchar::b#3 & (unumber)(number) $f
Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$0 ← (word~) main::toD0181_$7 & (number) $3fff
Adding number conversion cast (unumber) main::toD0181_$0 in (number~) main::toD0181_$0 ← (word~) main::toD0181_$7 & (unumber)(number) $3fff
Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$1 ← (unumber~) main::toD0181_$0 * (number) 4
Adding number conversion cast (unumber) main::toD0181_$1 in (number~) main::toD0181_$1 ← (unumber~) main::toD0181_$0 * (unumber)(number) 4
Adding number conversion cast (unumber) main::toD0181_$2 in (number~) main::toD0181_$2 ← > (unumber~) main::toD0181_$1
Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$4 ← (byte~) main::toD0181_$3 / (number) 4
Adding number conversion cast (unumber) main::toD0181_$4 in (number~) main::toD0181_$4 ← (byte~) main::toD0181_$3 / (unumber)(number) 4
Adding number conversion cast (unumber) $f in (number~) main::toD0181_$5 ← (unumber~) main::toD0181_$4 & (number) $f
Adding number conversion cast (unumber) main::toD0181_$5 in (number~) main::toD0181_$5 ← (unumber~) main::toD0181_$4 & (unumber)(number) $f
Adding number conversion cast (unumber) main::toD0181_$6 in (number~) main::toD0181_$6 ← (unumber~) main::toD0181_$2 | (unumber~) main::toD0181_$5
Adding number conversion cast (unumber) $80 in (number~) main::$4 ← (word) main::angle_w#0 + (number) $80
Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← (word) main::angle_w#0 + (unumber)(number) $80
Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← > (unumber~) main::$4
Successful SSA optimization PassNAddNumberTypeConversions
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
Successful SSA optimization Pass2InlineCast
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 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 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 (byte)(signed byte) main::x#2
Simplifying constant integer cast 0
Simplifying constant integer cast (byte)(signed byte) main::y#2
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) 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 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) $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_uchar::$2 ← (byte) print_uchar::b#3 & (byte) $f
Inferred type updated to word in (unumber~) main::toD0181_$0 ← (word~) main::toD0181_$7 & (word) $3fff
Inferred type updated to word in (unumber~) main::toD0181_$1 ← (word~) main::toD0181_$0 * (byte) 4
Inferred type updated to byte in (unumber~) main::toD0181_$2 ← > (word~) main::toD0181_$1
Inferred type updated to byte in (unumber~) main::toD0181_$4 ← (byte~) main::toD0181_$3 / (byte) 4
Inferred type updated to byte in (unumber~) main::toD0181_$5 ← (byte~) main::toD0181_$4 & (byte) $f
Inferred type updated to byte in (unumber~) main::toD0181_$6 ← (byte~) main::toD0181_$2 | (byte~) main::toD0181_$5
Inferred type updated to word in (unumber~) main::$4 ← (word) main::angle_w#0 + (byte) $80
Inferred type updated to byte in (unumber~) main::$5 ← > (word~) main::$4
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 init_font_hex::charset#3 = init_font_hex::charset#4
Alias init_font_hex::idx#2 = init_font_hex::idx#6
Alias init_font_hex::proto_lo#2 = init_font_hex::proto_lo#3
Alias init_font_hex::c1#2 = init_font_hex::c1#3
Alias init_font_hex::proto_hi#2 = init_font_hex::proto_hi#5 init_font_hex::proto_hi#3
Alias init_font_hex::c#2 = init_font_hex::c#3 init_font_hex::c#4
Alias init_font_hex::charset#0 = init_font_hex::charset#7
Alias atan2_16::y#1 = atan2_16::y#2 atan2_16::$3 atan2_16::y#3
Alias atan2_16::x#5 = atan2_16::x#9 atan2_16::x#6
Alias atan2_16::$2 = atan2_16::$1
Alias atan2_16::yi#0 = atan2_16::$4 atan2_16::yi#12 atan2_16::yi#13
Alias atan2_16::x#1 = atan2_16::x#2 atan2_16::$8 atan2_16::x#3
Alias atan2_16::y#12 = atan2_16::y#15 atan2_16::y#13
Alias atan2_16::$7 = atan2_16::$6
Alias atan2_16::xi#0 = atan2_16::$9
Alias atan2_16::xi#3 = atan2_16::xi#6 atan2_16::xd#0
Alias atan2_16::yi#3 = atan2_16::yi#4 atan2_16::yd#0
Alias atan2_16::i#2 = atan2_16::i#6 atan2_16::shift#0
Alias atan2_16::angle#12 = atan2_16::angle#19
Alias atan2_16::x#17 = atan2_16::x#7
Alias atan2_16::y#19 = atan2_16::y#7
Alias atan2_16::xd#3 = atan2_16::xd#7 atan2_16::xd#8 atan2_16::xd#4
Alias atan2_16::yd#3 = atan2_16::yd#7 atan2_16::yd#8 atan2_16::yd#4
Alias atan2_16::shift#2 = atan2_16::shift#3 atan2_16::shift#4
Alias atan2_16::yi#10 = atan2_16::yi#15 atan2_16::yi#14 atan2_16::yi#11
Alias atan2_16::xi#10 = atan2_16::xi#12 atan2_16::xi#11 atan2_16::xi#9
Alias atan2_16::i#10 = atan2_16::i#11 atan2_16::i#8 atan2_16::i#9
Alias atan2_16::angle#16 = atan2_16::angle#20 atan2_16::angle#18 atan2_16::angle#17
Alias atan2_16::x#14 = atan2_16::x#18 atan2_16::x#16 atan2_16::x#15
Alias atan2_16::y#16 = atan2_16::y#20 atan2_16::y#18 atan2_16::y#17
Alias atan2_16::xi#4 = atan2_16::xi#7 atan2_16::xi#5
Alias atan2_16::yd#5 = atan2_16::yd#9 atan2_16::yd#6
Alias atan2_16::yi#5 = atan2_16::yi#6 atan2_16::yi#7
Alias atan2_16::xd#5 = atan2_16::xd#9 atan2_16::xd#6
Alias atan2_16::i#3 = atan2_16::i#7 atan2_16::i#4
Alias atan2_16::angle#14 = atan2_16::angle#7 atan2_16::angle#8
Alias atan2_16::x#11 = atan2_16::x#13 atan2_16::x#12
Alias atan2_16::y#10 = atan2_16::y#14 atan2_16::y#11
Alias atan2_16::angle#1 = atan2_16::angle#9
Alias atan2_16::y#5 = atan2_16::y#6
Alias atan2_16::angle#4 = atan2_16::$12
Alias atan2_16::return#0 = atan2_16::angle#10 atan2_16::return#3 atan2_16::return#1
Alias atan2_16::angle#11 = atan2_16::angle#15
Alias atan2_16::angle#5 = atan2_16::$15
Alias print_char_cursor#0 = print_line_cursor#0 print_screen#0 print_char_cursor#27
Alias print_uchar::b#0 = print_uint::$0
Alias print_uint::w#1 = print_uint::w#2
Alias print_char_cursor#1 = print_char_cursor#12
Alias print_uchar::b#1 = print_uint::$2
Alias print_char_cursor#13 = print_char_cursor#2 print_char_cursor#14 print_char_cursor#3
Alias print_uchar::b#2 = print_uchar::b#3
Alias print_char_cursor#15 = print_char_cursor#4
Alias print_char_cursor#16 = print_char_cursor#5 print_char_cursor#17 print_char_cursor#6
Alias print_char_cursor#19 = print_char_cursor#7 print_char_cursor#8
Alias print_char_cursor#34 = print_char_cursor#37 print_char_cursor#38 print_char_cursor#36 print_char_cursor#35
Alias main::toD0181_screen#0 = main::toD0181_screen#1
Alias main::toD0181_gfx#0 = main::toD0181_gfx#1
Alias main::toD0181_return#0 = main::toD0181_$6 main::toD0181_return#2 main::toD0181_return#1 main::toD0181_return#3 main::$1
Alias atan2_16::return#2 = atan2_16::return#4
Alias main::screen_ref#2 = main::screen_ref#4 main::screen_ref#3
Alias main::diff_sum#2 = main::diff_sum#4 main::diff_sum#6
Alias main::screen#2 = main::screen#3 main::screen#4
Alias main::x#2 = main::x#4 main::x#3
Alias main::y#2 = main::y#6 main::y#5 main::y#3
Alias print_char_cursor#25 = print_char_cursor#31 print_char_cursor#32 print_char_cursor#30 print_char_cursor#28
Alias main::angle_w#0 = main::$3
Alias main::ang_w#0 = main::$5 main::ang_w#1
Alias diff::return#0 = diff::return#3
Alias main::diff_sum#1 = main::diff_sum#5 main::diff_sum#3
Alias main::screen_ref#1 = main::screen_ref#6
Alias main::screen#1 = main::screen#6
Alias print_char_cursor#20 = print_char_cursor#9
Alias print_char_cursor#10 = print_char_cursor#29 print_char_cursor#26 print_char_cursor#21
Alias diff::bb2#1 = diff::bb2#2 diff::bb2#3
Alias diff::bb1#1 = diff::bb1#2 diff::bb1#3
Alias diff::$4 = diff::$3
Alias diff::$2 = diff::$1
Alias diff::return#1 = diff::$5 diff::return#4 diff::return#2
Alias print_char_cursor#11 = print_char_cursor#22
Successful SSA optimization Pass2AliasElimination
Alias atan2_16::x#1 = atan2_16::x#5 atan2_16::x#10
Alias atan2_16::y#1 = atan2_16::y#12 atan2_16::y#9
Alias atan2_16::yi#0 = atan2_16::yi#9
Alias atan2_16::yi#10 = atan2_16::yi#5
Alias atan2_16::xi#10 = atan2_16::xi#4
Alias atan2_16::i#10 = atan2_16::i#3 atan2_16::i#5
Alias atan2_16::angle#14 = atan2_16::angle#16
Alias atan2_16::x#11 = atan2_16::x#14 atan2_16::x#8
Alias atan2_16::y#10 = atan2_16::y#16 atan2_16::y#8
Alias atan2_16::y#4 = 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_uint::w#1 (word) print_uint::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 [28] if((byte) init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2
Simple Condition (bool~) init_font_hex::$5 [32] if((byte) init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1
Simple Condition (bool~) atan2_16::$0 [36] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
Simple Condition (bool~) atan2_16::$5 [40] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
Simple Condition (bool~) atan2_16::$17 [47] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11
Simple Condition (bool~) atan2_16::$11 [51] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
Simple Condition (bool~) atan2_16::$18 [54] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14
Simple Condition (bool~) atan2_16::$19 [59] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17
Simple Condition (bool~) atan2_16::$20 [62] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18
Simple Condition (bool~) atan2_16::$21 [76] if((byte) atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@10
Simple Condition (bool~) atan2_16::$14 [79] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
Simple Condition (bool~) main::$8 [151] if((signed byte) main::x#1!=rangelast(-$13,$14)) goto main::@2
Simple Condition (bool~) main::$9 [154] if((signed byte) main::y#1!=rangelast(-$c,$c)) goto main::@1
Simple Condition (bool~) diff::$0 [164] if((byte) diff::bb1#0<(byte) diff::bb2#0) goto diff::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [76] if((byte) atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@12
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_$7 = (word)main::toD0181_screen#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (word)main::toD0181_gfx#0 in [116] (byte~) main::toD0181_$3 ← > (word)(const byte*) main::toD0181_gfx#0
Successful SSA optimization Pass2ConstantValues
if() condition always true - replacing block destination [159] 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 [26] init_font_hex::c1#1 ← ++ init_font_hex::c1#4 to ++
Resolved ranged comparison value [28] if(init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 to (number) $10
Resolved ranged next value [30] init_font_hex::c#1 ← ++ init_font_hex::c#6 to ++
Resolved ranged comparison value [32] if(init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 to (number) $10
Resolved ranged next value [74] atan2_16::i#1 ← ++ atan2_16::i#2 to ++
Resolved ranged comparison value [76] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@12 to (const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1
Resolved ranged next value [149] main::x#1 ← ++ main::x#2 to ++
Resolved ranged comparison value [151] if(main::x#1!=rangelast(-$13,$14)) goto main::@2 to (number) $15
Resolved ranged next value [152] main::y#1 ← ++ main::y#4 to ++
Resolved ranged comparison value [154] 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 nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1) goto atan2_16::@12
Adding number conversion cast (unumber) 1 in if((byte) atan2_16::i#1==(unumber)(const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1) goto atan2_16::@12
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 nomodify 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_$0 ← (const word) main::toD0181_$7 & (word) $3fff
Constant right-side identified [82] (byte~) main::toD0181_$3 ← > (word)(const byte*) main::toD0181_gfx#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) init_font_hex::idx#1 = ++init_font_hex::idx#0
Constant (const word) main::toD0181_$0 = main::toD0181_$7&$3fff
Constant (const byte) main::toD0181_$3 = >(word)main::toD0181_gfx#0
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [78] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 * (byte) 4
Constant right-side identified [80] (byte~) main::toD0181_$4 ← (const byte) main::toD0181_$3 / (byte) 4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word) main::toD0181_$1 = main::toD0181_$0*4
Constant (const byte) main::toD0181_$4 = main::toD0181_$3/4
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [78] (byte~) main::toD0181_$2 ← > (const word) main::toD0181_$1
Constant right-side identified [79] (byte~) main::toD0181_$5 ← (const byte) main::toD0181_$4 & (byte) $f
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::toD0181_$2 = >main::toD0181_$1
Constant (const byte) main::toD0181_$5 = main::toD0181_$4&$f
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [78] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$2 | (const byte) main::toD0181_$5
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::toD0181_return#0 = main::toD0181_$2|main::toD0181_$5
Successful SSA optimization Pass2ConstantIdentification
Inlining Noop Cast [82] (signed word) main::xw#0 ← (signed word)(word~) main::$11 keeping main::xw#0
Inlining Noop Cast [84] (signed word) main::yw#0 ← (signed word)(word~) main::$12 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 nomodify byte*) SCREEN
Constant inlined main::toD0181_screen#0 = (const nomodify byte*) SCREEN
Constant inlined main::toD0181_gfx#0 = (const nomodify byte*) CHARSET
Constant inlined main::diff_sum#0 = (word) 0
Constant inlined init_font_hex::proto_hi#0 = (const byte*) FONT_HEX_PROTO
Constant inlined atan2_16::angle#0 = (word) 0
Constant inlined init_font_hex::charset#1 = (const nomodify byte*) CHARSET
Constant inlined init_font_hex::c1#0 = (byte) 0
Constant inlined main::toD0181_$7 = (word)(const nomodify byte*) SCREEN
Constant inlined main::screen_ref#0 = (const to_nomodify byte*) SCREEN_REF
Constant inlined main::toD0181_$2 = >(word)(const nomodify byte*) SCREEN&(word) $3fff*(byte) 4
Constant inlined atan2_16::i#0 = (byte) 0
Constant inlined main::toD0181_$1 = (word)(const nomodify byte*) SCREEN&(word) $3fff*(byte) 4
Constant inlined main::toD0181_$0 = (word)(const nomodify byte*) SCREEN&(word) $3fff
Constant inlined main::x#0 = (signed byte) -$13
Constant inlined main::y#0 = (signed byte) -$c
Constant inlined init_font_hex::i#0 = (byte) 0
Constant inlined main::toD0181_$5 = >(word)(const nomodify byte*) CHARSET/(byte) 4&(byte) $f
Constant inlined main::toD0181_$4 = >(word)(const nomodify byte*) CHARSET/(byte) 4
Constant inlined main::toD0181_$3 = >(word)(const nomodify byte*) CHARSET
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::@6(between init_font_hex::@5 and init_font_hex::@1)
Added new block during phi lifting init_font_hex::@7(between init_font_hex::@4 and init_font_hex::@2)
Added new block during phi lifting init_font_hex::@8(between init_font_hex::@3 and init_font_hex::@3)
Added new block during phi lifting atan2_16::@22(between atan2_16::@19 and atan2_16::@10)
Added new block during phi lifting atan2_16::@23(between atan2_16::@10 and atan2_16::@12)
Added new block during phi lifting atan2_16::@24(between atan2_16::@19 and atan2_16::@12)
Added new block during phi lifting atan2_16::@25(between atan2_16::@15 and atan2_16::@17)
Added new block during phi lifting atan2_16::@26(between atan2_16::@12 and atan2_16::@7)
Added new block during phi lifting atan2_16::@27(between atan2_16::@7 and atan2_16::@8)
Added new block during phi lifting main::@12(between main::@3 and main::@1)
Added new block during phi lifting main::@13(between main::@10 and main::@2)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@8
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::toD0181_@return
Adding NOP phi() at start of main::@11
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of print_uint::@2
Adding NOP phi() at start of print_uchar::@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_uint:41
Calls in [print_uint] to print_uchar:55 print_uchar:59
Calls in [print_uchar] 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_uchar::b#4 ← print_uchar::b#0
Coalesced [57] print_uchar::b#5 ← print_uchar::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#6 ← atan2_16::angle#5
Coalesced [110] atan2_16::return#5 ← 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) @1
Culled Empty Block (label) @3
Culled Empty Block (label) main::@8
Culled Empty Block (label) main::toD0181_@return
Culled Empty Block (label) main::@11
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@12
Culled Empty Block (label) main::@13
Culled Empty Block (label) print_uint::@2
Culled Empty Block (label) print_uchar::@2
Culled Empty Block (label) atan2_16::@23
Culled Empty Block (label) atan2_16::@27
Culled Empty Block (label) atan2_16::@26
Culled Empty Block (label) atan2_16::@22
Culled Empty Block (label) atan2_16::@24
Culled Empty Block (label) atan2_16::@25
Culled Empty Block (label) init_font_hex::@6
Culled Empty Block (label) init_font_hex::@7
Culled Empty Block (label) init_font_hex::@8
Renumbering block @2 to @1
Renumbering block main::@6 to main::@5
Renumbering block main::@7 to main::@6
Renumbering block main::@9 to main::@7
Renumbering block main::@10 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 nomodify 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::@3/(byte*) main::screen#1 main::@6/(const nomodify byte*) SCREEN )
[8] (word) main::diff_sum#7 ← phi( main::@3/(word) main::diff_sum#1 main::@6/(word) 0 )
[8] (byte*) main::screen_ref#5 ← phi( main::@3/(byte*) main::screen_ref#1 main::@6/(const to_nomodify byte*) SCREEN_REF )
[8] (signed byte) main::y#4 ← phi( main::@3/(signed byte) main::y#1 main::@6/(signed byte) -$c )
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::$4 ← (word) main::angle_w#0 + (byte) $80
[18] (byte) main::ang_w#0 ← > (word~) main::$4
[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::$6 ← (byte) diff::return#0
[24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$6
[25] (byte~) main::$7 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2)
[26] *((byte*) main::screen#2) ← (byte~) main::$7
[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_uint::w#0 ← (word) main::diff_sum#1
[34] call print_uint
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_uint((word) print_uint::w)
print_uint: scope:[print_uint] from main::@4
[36] (byte) print_uchar::b#0 ← > (word) print_uint::w#0
[37] call print_uchar
to:print_uint::@1
print_uint::@1: scope:[print_uint] from print_uint
[38] (byte) print_uchar::b#1 ← < (word) print_uint::w#0
[39] call print_uchar
to:print_uint::@return
print_uint::@return: scope:[print_uint] from print_uint::@1
[40] return
to:@return
(void()) print_uchar((byte) print_uchar::b)
print_uchar: scope:[print_uchar] from print_uint print_uint::@1
[41] (byte*) print_char_cursor#24 ← phi( print_uint/(byte*) 1024 print_uint::@1/(byte*) print_char_cursor#19 )
[41] (byte) print_uchar::b#2 ← phi( print_uint/(byte) print_uchar::b#0 print_uint::@1/(byte) print_uchar::b#1 )
[42] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4
[43] (byte) print_char::ch#0 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$0)
[44] call print_char
to:print_uchar::@1
print_uchar::@1: scope:[print_uchar] from print_uchar
[45] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f
[46] (byte) print_char::ch#1 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$2)
[47] call print_char
to:print_uchar::@return
print_uchar::@return: scope:[print_uchar] from print_uchar::@1
[48] return
to:@return
(void()) print_char((byte) print_char::ch)
print_char: scope:[print_char] from print_uchar print_uchar::@1
[49] (byte*) print_char_cursor#18 ← phi( print_uchar/(byte*) print_char_cursor#24 print_uchar::@1/(byte*) print_char_cursor#19 )
[49] (byte) print_char::ch#2 ← phi( print_uchar/(byte) print_char::ch#0 print_uchar::@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/(word) 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::@7/(word) atan2_16::angle#11 atan2_16::@9/(word) atan2_16::angle#5 )
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 nomodify 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 nomodify 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
(byte) MOS6526_CIA::INTERRUPT
(byte) MOS6526_CIA::PORT_A
(byte) MOS6526_CIA::PORT_A_DDR
(byte) MOS6526_CIA::PORT_B
(byte) MOS6526_CIA::PORT_B_DDR
(byte) MOS6526_CIA::SERIAL_DATA
(word) MOS6526_CIA::TIMER_A
(byte) MOS6526_CIA::TIMER_A_CONTROL
(word) MOS6526_CIA::TIMER_B
(byte) MOS6526_CIA::TIMER_B_CONTROL
(byte) MOS6526_CIA::TOD_10THS
(byte) MOS6526_CIA::TOD_HOURS
(byte) MOS6526_CIA::TOD_MIN
(byte) MOS6526_CIA::TOD_SEC
(byte) MOS6569_VICII::BG_COLOR
(byte) MOS6569_VICII::BG_COLOR1
(byte) MOS6569_VICII::BG_COLOR2
(byte) MOS6569_VICII::BG_COLOR3
(byte) MOS6569_VICII::BORDER_COLOR
(byte) MOS6569_VICII::CONTROL1
(byte) MOS6569_VICII::CONTROL2
(byte) MOS6569_VICII::IRQ_ENABLE
(byte) MOS6569_VICII::IRQ_STATUS
(byte) MOS6569_VICII::LIGHTPEN_X
(byte) MOS6569_VICII::LIGHTPEN_Y
(byte) MOS6569_VICII::MEMORY
(byte) MOS6569_VICII::RASTER
(byte) MOS6569_VICII::SPRITE0_COLOR
(byte) MOS6569_VICII::SPRITE0_X
(byte) MOS6569_VICII::SPRITE0_Y
(byte) MOS6569_VICII::SPRITE1_COLOR
(byte) MOS6569_VICII::SPRITE1_X
(byte) MOS6569_VICII::SPRITE1_Y
(byte) MOS6569_VICII::SPRITE2_COLOR
(byte) MOS6569_VICII::SPRITE2_X
(byte) MOS6569_VICII::SPRITE2_Y
(byte) MOS6569_VICII::SPRITE3_COLOR
(byte) MOS6569_VICII::SPRITE3_X
(byte) MOS6569_VICII::SPRITE3_Y
(byte) MOS6569_VICII::SPRITE4_COLOR
(byte) MOS6569_VICII::SPRITE4_X
(byte) MOS6569_VICII::SPRITE4_Y
(byte) MOS6569_VICII::SPRITE5_COLOR
(byte) MOS6569_VICII::SPRITE5_X
(byte) MOS6569_VICII::SPRITE5_Y
(byte) MOS6569_VICII::SPRITE6_COLOR
(byte) MOS6569_VICII::SPRITE6_X
(byte) MOS6569_VICII::SPRITE6_Y
(byte) MOS6569_VICII::SPRITE7_COLOR
(byte) MOS6569_VICII::SPRITE7_X
(byte) MOS6569_VICII::SPRITE7_Y
(byte) MOS6569_VICII::SPRITES_BG_COLLISION
(byte) MOS6569_VICII::SPRITES_COLLISION
(byte) MOS6569_VICII::SPRITES_ENABLE
(byte) MOS6569_VICII::SPRITES_EXPAND_X
(byte) MOS6569_VICII::SPRITES_EXPAND_Y
(byte) MOS6569_VICII::SPRITES_MC
(byte) MOS6569_VICII::SPRITES_MCOLOR1
(byte) MOS6569_VICII::SPRITES_MCOLOR2
(byte) MOS6569_VICII::SPRITES_PRIORITY
(byte) MOS6569_VICII::SPRITES_XMSB
(byte) MOS6581_SID::CH1_ATTACK_DECAY
(byte) MOS6581_SID::CH1_CONTROL
(word) MOS6581_SID::CH1_FREQ
(word) MOS6581_SID::CH1_PULSE_WIDTH
(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE
(byte) MOS6581_SID::CH2_ATTACK_DECAY
(byte) MOS6581_SID::CH2_CONTROL
(word) MOS6581_SID::CH2_FREQ
(word) MOS6581_SID::CH2_PULSE_WIDTH
(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE
(byte) MOS6581_SID::CH3_ATTACK_DECAY
(byte) MOS6581_SID::CH3_CONTROL
(byte) MOS6581_SID::CH3_ENV
(word) MOS6581_SID::CH3_FREQ
(byte) MOS6581_SID::CH3_OSC
(word) MOS6581_SID::CH3_PULSE_WIDTH
(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE
(byte) MOS6581_SID::FILTER_CUTOFF_HIGH
(byte) MOS6581_SID::FILTER_CUTOFF_LOW
(byte) MOS6581_SID::FILTER_SETUP
(byte) MOS6581_SID::POT_X
(byte) MOS6581_SID::POT_Y
(byte) MOS6581_SID::VOLUME_FILTER_MODE
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(signed word~) atan2_16::$2 20002.0
(byte~) atan2_16::$22 2.0000002E7
(byte~) atan2_16::$23 2.0000002E7
(signed word~) atan2_16::$7 20002.0
(word) atan2_16::angle
(word) atan2_16::angle#1 15001.5
(word) atan2_16::angle#11 20002.0
(word) atan2_16::angle#12 1904762.0952380951
(word) atan2_16::angle#13 1.3333334666666666E7
(word) atan2_16::angle#2 2.0000002E7
(word) atan2_16::angle#3 2.0000002E7
(word) atan2_16::angle#4 20002.0
(word) atan2_16::angle#5 20002.0
(word) atan2_16::angle#6 2.0010003E7
(byte) atan2_16::i
(byte) atan2_16::i#1 1.50000015E7
(byte) atan2_16::i#2 2083333.5416666665
(word) atan2_16::return
(word) atan2_16::return#0 7001.0
(word) atan2_16::return#2 2002.0
(byte) atan2_16::shift
(byte) atan2_16::shift#1 2.00000002E8
(byte) atan2_16::shift#2 8.000000125E7
(byte) atan2_16::shift#5 6666667.333333333
(signed word) atan2_16::x
(signed word) atan2_16::x#0 1079.078947368421
(signed word) atan2_16::xd
(signed word) atan2_16::xd#1 6.6666667333333336E7
(signed word) atan2_16::xd#10 1.0000001E7
(signed word) atan2_16::xd#2 1.0000001E7
(signed word) atan2_16::xd#3 7.666666833333333E7
(signed word) atan2_16::xd#5 1.0000001E7
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0 30003.0
(signed word) atan2_16::xi#1 5000000.5
(signed word) atan2_16::xi#13 20002.0
(signed word) atan2_16::xi#2 5000000.5
(signed word) atan2_16::xi#3 2667333.6666666665
(signed word) atan2_16::xi#8 1.0000001E7
(signed word) atan2_16::y
(signed word) atan2_16::y#0 1025.125
(signed word) atan2_16::yd
(signed word) atan2_16::yd#1 1.00000001E8
(signed word) atan2_16::yd#10 2.0000002E7
(signed word) atan2_16::yd#2 2.0000002E7
(signed word) atan2_16::yd#3 4.6000001E7
(signed word) atan2_16::yd#5 2.0000002E7
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0 6000.6
(signed word) atan2_16::yi#1 6666667.333333333
(signed word) atan2_16::yi#16 20002.0
(signed word) atan2_16::yi#2 6666667.333333333
(signed word) atan2_16::yi#3 3530000.4117647056
(signed word) atan2_16::yi#8 1.0000001E7
(byte()) diff((byte) diff::bb1 , (byte) diff::bb2)
(byte~) diff::$2 20002.0
(byte~) diff::$4 20002.0
(byte) diff::bb1
(byte) diff::bb1#0 10334.666666666666
(byte) diff::bb2
(byte) diff::bb2#0 15502.0
(byte) diff::return
(byte) diff::return#0 2002.0
(byte) diff::return#1 7001.0
(void()) init_font_hex((byte*) init_font_hex::charset)
(byte~) init_font_hex::$0 100001.0
(byte~) init_font_hex::$1 200002.0
(byte~) init_font_hex::$2 200002.0
(byte) init_font_hex::c
(byte) init_font_hex::c#1 1501.5
(byte) init_font_hex::c#6 105.36842105263158
(byte) init_font_hex::c1
(byte) init_font_hex::c1#1 15001.5
(byte) init_font_hex::c1#4 1333.4666666666667
(byte*) init_font_hex::charset
(byte*) init_font_hex::charset#0 3500.5
(byte*) init_font_hex::charset#2 10786.214285714286
(byte*) init_font_hex::charset#5 2002.0
(byte) init_font_hex::i
(byte) init_font_hex::i#1 150001.5
(byte) init_font_hex::i#2 66667.33333333333
(byte) init_font_hex::idx
(byte) init_font_hex::idx#2 55001.0
(byte) init_font_hex::idx#3 20002.0
(byte) init_font_hex::idx#5 60000.600000000006
(byte*) init_font_hex::proto_hi
(byte*) init_font_hex::proto_hi#1 667.3333333333334
(byte*) init_font_hex::proto_hi#6 5666.833333333334
(byte*) init_font_hex::proto_lo
(byte*) init_font_hex::proto_lo#1 5000.5
(byte*) init_font_hex::proto_lo#4 9230.999999999998
(void()) main()
(word~) main::$4 2002.0
(byte~) main::$6 2002.0
(byte~) main::$7 2002.0
(byte) main::ang_w
(byte) main::ang_w#0 429.0
(word) main::angle_w
(word) main::angle_w#0 2002.0
(word) main::diff_sum
(word) main::diff_sum#1 234.8888888888889
(word) main::diff_sum#2 140.2
(word) main::diff_sum#7 202.0
(byte*) main::screen
(byte*) main::screen#1 350.5
(byte*) main::screen#2 172.44444444444446
(byte*) main::screen#5 202.0
(byte*) main::screen_ref
(byte*) main::screen_ref#1 420.59999999999997
(byte*) main::screen_ref#2 216.05263157894734
(byte*) main::screen_ref#5 202.0
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(byte*) main::toD0181_screen
(signed byte) main::x
(signed byte) main::x#1 1501.5
(signed byte) main::x#2 100.1
(signed word) main::xw
(word) main::xw#0 500.5
(signed byte) main::y
(signed byte) main::y#1 151.5
(signed byte) main::y#4 8.782608695652174
(signed word) main::yw
(word) main::yw#0 500.5
(void()) print_char((byte) print_char::ch)
(byte) print_char::ch
(byte) print_char::ch#0 2002.0
(byte) print_char::ch#1 2002.0
(byte) print_char::ch#2 12003.0
(byte*) print_char_cursor
(byte*) print_char_cursor#18 11002.0
(byte*) print_char_cursor#19 1233.6666666666665
(byte*) print_char_cursor#24 367.33333333333337
(byte*) print_line_cursor
(byte*) print_screen
(void()) print_uchar((byte) print_uchar::b)
(byte~) print_uchar::$0 2002.0
(byte~) print_uchar::$2 2002.0
(byte) print_uchar::b
(byte) print_uchar::b#0 202.0
(byte) print_uchar::b#1 202.0
(byte) print_uchar::b#2 551.0
(void()) print_uint((word) print_uint::w)
(word) print_uint::w
(word) print_uint::w#0 71.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_uchar::b#2 print_uchar::b#0 print_uchar::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#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
[ 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::$4 to live range equivalence class [ main::$4 ]
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::$6 to live range equivalence class [ main::$6 ]
Added variable main::$7 to live range equivalence class [ main::$7 ]
Added variable print_uint::w#0 to live range equivalence class [ print_uint::w#0 ]
Added variable print_uchar::$0 to live range equivalence class [ print_uchar::$0 ]
Added variable print_uchar::$2 to live range equivalence class [ print_uchar::$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_uchar::b#2 print_uchar::b#0 print_uchar::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#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
[ 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::$4 ]
[ main::ang_w#0 ]
[ diff::bb1#0 ]
[ diff::bb2#0 ]
[ diff::return#0 ]
[ main::$6 ]
[ main::$7 ]
[ print_uint::w#0 ]
[ print_uchar::$0 ]
[ print_uchar::$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_uchar::b#2 print_uchar::b#0 print_uchar::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#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
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::$4 ]
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::$6 ]
Allocated zp[1]:58 [ main::$7 ]
Allocated zp[2]:59 [ print_uint::w#0 ]
Allocated zp[1]:61 [ print_uchar::$0 ]
Allocated zp[1]:62 [ print_uchar::$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(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 = $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: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
.label col00 = COLS+$c*$28+$13
.label __4 = $33
.label __6 = $39
.label __7 = $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 nomodify 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 nomodify byte*) SCREEN [phi:main::@6->main::@1#0] -- pbuz1=pbuc1
lda #<SCREEN
sta.z screen
lda #>SCREEN
sta.z screen+1
// [8] phi (word) main::diff_sum#7 = (word) 0 [phi:main::@6->main::@1#1] -- vwuz1=vwuc1
lda #<0
sta.z diff_sum
lda #>0
sta.z diff_sum+1
// [8] phi (byte*) main::screen_ref#5 = (const to_nomodify byte*) SCREEN_REF [phi:main::@6->main::@1#2] -- pbuz1=pbuc1
lda #<SCREEN_REF
sta.z screen_ref
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::$4 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1
lda #$80
clc
adc.z angle_w
sta.z __4
lda #0
adc.z angle_w+1
sta.z __4+1
// [18] (byte) main::ang_w#0 ← > (word~) main::$4 -- vbuz1=_hi_vwuz2
lda.z __4+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::$6 ← (byte) diff::return#0 -- vbuz1=vbuz2
lda.z diff.return
sta.z __6
// [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$6 -- vwuz1=vwuz1_plus_vbuz2
//*screen = (>angle_w)-angle_b;
//*screen = >angle_w;
lda.z __6
clc
adc.z diff_sum
sta.z diff_sum
bcc !+
inc.z diff_sum+1
!:
// [25] (byte~) main::$7 ← (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 __7
// [26] *((byte*) main::screen#2) ← (byte~) main::$7 -- _deref_pbuz1=vbuz2
lda.z __7
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_uint::w#0 ← (word) main::diff_sum#1 -- vwuz1=vwuz2
lda.z diff_sum
sta.z print_uint.w
lda.z diff_sum+1
sta.z print_uint.w+1
// [34] call print_uint
jsr print_uint
jmp __b5
// main::@5
__b5:
// [35] *((const byte*) main::col00) ← ++ *((const byte*) main::col00) -- _deref_pbuc1=_inc__deref_pbuc1
inc col00
jmp __b5
}
// print_uint
// Print a unsigned int as HEX
// print_uint(word zp($3b) w)
print_uint: {
.label w = $3b
// [36] (byte) print_uchar::b#0 ← > (word) print_uint::w#0 -- vbuz1=_hi_vwuz2
lda.z w+1
sta.z print_uchar.b
// [37] call print_uchar
// [41] phi from print_uint to print_uchar [phi:print_uint->print_uchar]
print_uchar_from_print_uint:
// [41] phi (byte*) print_char_cursor#24 = (byte*) 1024 [phi:print_uint->print_uchar#0] -- pbuz1=pbuc1
lda #<$400
sta.z print_char_cursor
lda #>$400
sta.z print_char_cursor+1
// [41] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy
jsr print_uchar
jmp __b1
// print_uint::@1
__b1:
// [38] (byte) print_uchar::b#1 ← < (word) print_uint::w#0 -- vbuz1=_lo_vwuz2
lda.z w
sta.z print_uchar.b
// [39] call print_uchar
// [41] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar]
print_uchar_from___b1:
// [41] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#19 [phi:print_uint::@1->print_uchar#0] -- register_copy
// [41] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy
jsr print_uchar
jmp __breturn
// print_uint::@return
__breturn:
// [40] return
rts
}
// print_uchar
// Print a char as HEX
// print_uchar(byte zp($a) b)
print_uchar: {
.label __0 = $3d
.label __2 = $3e
.label b = $a
// [42] (byte~) print_uchar::$0 ← (byte) print_uchar::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 to_nomodify byte*) print_hextab + (byte~) print_uchar::$0) -- vbuz1=pbuc1_derefidx_vbuz2
ldy.z __0
lda print_hextab,y
sta.z print_char.ch
// [44] call print_char
// Table of hexadecimal digits
// [49] phi from print_uchar to print_char [phi:print_uchar->print_char]
print_char_from_print_uchar:
// [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#24 [phi:print_uchar->print_char#0] -- register_copy
// [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy
jsr print_char
jmp __b1
// print_uchar::@1
__b1:
// [45] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f -- vbuz1=vbuz2_band_vbuc1
lda #$f
and.z b
sta.z __2
// [46] (byte) print_char::ch#1 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$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_uchar::@1 to print_char [phi:print_uchar::@1->print_char]
print_char_from___b1:
// [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#19 [phi:print_uchar::@1->print_char#0] -- register_copy
// [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy
jsr print_char
jmp __breturn
// print_uchar::@return
__breturn:
// [48] return
rts
}
// print_char
// Print a single char
// print_char(byte zp($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 zp($36) bb1, byte zp($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 zp($2b) x, signed word zp($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 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1
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 nomodify 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* zp($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
lda #>FONT_HEX_PROTO
sta.z proto_hi+1
// [102] phi (byte*) init_font_hex::charset#5 = (const nomodify byte*) CHARSET [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1
lda #<CHARSET
sta.z charset
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
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<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2
print_hextab: .text "0123456789abcdef"
SCREEN_REF:
.for(var y=-12;y<=12;y++)
.for(var x=-19;x<=20;x++)
.byte round(256*atan2(y, x)/PI/2)
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [7] *((const nomodify 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::y#4 main::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::x#2 main::x#1 ]
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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::y#4 main::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::x#2 main::x#1 ]
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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = 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 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) always clobbers reg byte a
Statement [17] (word~) main::$4 ← (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::$4 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::$4 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) 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 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) 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::$6 [ 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::$7 ← (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::$7 ] ( main:2 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::$7 ] { } ) always clobbers reg byte a reg byte y
Statement [26] *((byte*) main::screen#2) ← (byte~) main::$7 [ 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_uint::w#0 ← (word) main::diff_sum#1 [ print_uint::w#0 ] ( main:2 [ print_uint::w#0 ] { { print_uint::w#0 = main::diff_sum#1 } } ) always clobbers reg byte a
Statement [42] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4 [ print_uchar::b#2 print_char_cursor#24 print_uchar::$0 ] ( main:2::print_uint:34::print_uchar:37 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#24 print_uchar::$0 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#24 } } main:2::print_uint:34::print_uchar:39 [ print_uchar::b#2 print_char_cursor#24 print_uchar::$0 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#0 = print_char::ch#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:10 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
Statement [45] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f [ print_char_cursor#19 print_uchar::$2 ] ( main:2::print_uint:34::print_uchar:37 [ print_uint::w#0 print_char_cursor#19 print_uchar::$2 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#19 } } main:2::print_uint:34::print_uchar:39 [ print_char_cursor#19 print_uchar::$2 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#1 = print_char::ch#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_uint:34::print_uchar:37::print_char:44 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#24 } } main:2::print_uint:34::print_uchar:39::print_char:44 [ print_uchar::b#2 print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#0 = print_char::ch#2 } } main:2::print_uint:34::print_uchar:37::print_char:47 [ print_uint::w#0 print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#19 } } main:2::print_uint:34::print_uchar:39::print_char:47 [ print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#1 = print_char::ch#2 } } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:10 [ print_uchar::b#2 print_uchar::b#0 print_uchar::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 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) 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 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#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 ] { { atan2_16::return#0 = atan2_16::return#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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#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 ] { { atan2_16::return#0 = atan2_16::return#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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 nomodify 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = 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 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) always clobbers reg byte a
Statement [17] (word~) main::$4 ← (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::$4 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::$4 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) 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 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) always clobbers reg byte a reg byte y
Statement [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$6 [ 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::$7 ← (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::$7 ] ( main:2 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::$7 ] { } ) always clobbers reg byte a reg byte y
Statement [26] *((byte*) main::screen#2) ← (byte~) main::$7 [ 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_uint::w#0 ← (word) main::diff_sum#1 [ print_uint::w#0 ] ( main:2 [ print_uint::w#0 ] { { print_uint::w#0 = main::diff_sum#1 } } ) always clobbers reg byte a
Statement [42] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4 [ print_uchar::b#2 print_char_cursor#24 print_uchar::$0 ] ( main:2::print_uint:34::print_uchar:37 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#24 print_uchar::$0 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#24 } } main:2::print_uint:34::print_uchar:39 [ print_uchar::b#2 print_char_cursor#24 print_uchar::$0 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#0 = print_char::ch#2 } } ) always clobbers reg byte a
Statement [45] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f [ print_char_cursor#19 print_uchar::$2 ] ( main:2::print_uint:34::print_uchar:37 [ print_uint::w#0 print_char_cursor#19 print_uchar::$2 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#19 } } main:2::print_uint:34::print_uchar:39 [ print_char_cursor#19 print_uchar::$2 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#1 = print_char::ch#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_uint:34::print_uchar:37::print_char:44 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#24 } } main:2::print_uint:34::print_uchar:39::print_char:44 [ print_uchar::b#2 print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#0 = print_char::ch#2 } } main:2::print_uint:34::print_uchar:37::print_char:47 [ print_uint::w#0 print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#19 } } main:2::print_uint:34::print_uchar:39::print_char:47 [ print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#1 = print_char::ch#2 } } ) 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 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) 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 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#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 ] { { atan2_16::return#0 = atan2_16::return#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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#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 ] { { atan2_16::return#0 = atan2_16::return#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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) 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_uchar::b#2 print_uchar::b#0 print_uchar::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#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] : 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::$4 ] : 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::$6 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:58 [ main::$7 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:59 [ print_uint::w#0 ] : zp[2]:59 ,
Potential registers zp[1]:61 [ print_uchar::$0 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:62 [ print_uchar::$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] 286,666,670.58: zp[1]:24 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 206,000,008: zp[2]:25 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 173,333,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 ] 75,248,103.76: zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 26,909,340.68: 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 ] 22,737,342.67: 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 ] 20,000,002: zp[1]:63 [ atan2_16::$23 ] 20,000,002: zp[1]:64 [ atan2_16::$22 ] 17,083,335.04: zp[1]:19 [ atan2_16::i#2 atan2_16::i#1 ] 82,008.5: zp[2]:22 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] 2,002: zp[2]:47 [ atan2_16::return#2 ] 1,079.08: zp[2]:43 [ atan2_16::x#0 ] 1,025.12: zp[2]:45 [ atan2_16::y#0 ]
Uplift Scope [init_font_hex] 216,668.83: zp[1]:37 [ init_font_hex::i#2 init_font_hex::i#1 ] 200,002: zp[1]:66 [ init_font_hex::$1 ] 200,002: zp[1]:67 [ init_font_hex::$2 ] 115,001.6: zp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 100,001: zp[1]:65 [ init_font_hex::$0 ] 20,002: zp[1]:68 [ init_font_hex::idx#3 ] 16,334.97: zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 16,288.71: zp[2]:32 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 14,231.5: zp[2]:34 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 6,334.17: zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 1,606.87: zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ]
Uplift Scope [diff] 47,005: zp[1]:14 [ diff::return#1 diff::$4 diff::$2 ] 15,502: zp[1]:55 [ diff::bb2#0 ] 10,334.67: zp[1]:54 [ diff::bb1#0 ] 2,002: zp[1]:56 [ diff::return#0 ]
Uplift Scope [print_char] 16,007: zp[1]:11 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
Uplift Scope [main] 2,002: zp[2]:49 [ main::angle_w#0 ] 2,002: zp[2]:51 [ main::$4 ] 2,002: zp[1]:57 [ main::$6 ] 2,002: zp[1]:58 [ main::$7 ] 1,601.6: zp[1]:3 [ main::x#2 main::x#1 ] 838.65: zp[2]:4 [ main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ] 724.94: zp[2]:8 [ main::screen#2 main::screen#5 main::screen#1 ] 577.09: zp[2]:6 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ] 500.5: zp[2]:39 [ main::xw#0 ] 500.5: zp[2]:41 [ main::yw#0 ] 429: zp[1]:53 [ main::ang_w#0 ] 160.28: zp[1]:2 [ main::y#4 main::y#1 ]
Uplift Scope [] 12,603: zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ]
Uplift Scope [print_uchar] 2,002: zp[1]:61 [ print_uchar::$0 ] 2,002: zp[1]:62 [ print_uchar::$2 ] 955: zp[1]:10 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
Uplift Scope [print_uint] 71: zp[2]:59 [ print_uint::w#0 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
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]:22 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:47 [ atan2_16::return#2 ] 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[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp[2]:32 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 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 [diff] best 1138145 combination reg byte a [ diff::return#1 diff::$4 diff::$2 ] reg byte a [ diff::bb2#0 ] reg byte x [ diff::bb1#0 ] reg byte a [ diff::return#0 ]
Limited combination testing to 100 combinations of 128 possible.
Uplifting [print_char] best 1138136 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
Uplifting [main] best 1136236 combination zp[2]:49 [ main::angle_w#0 ] zp[2]:51 [ main::$4 ] reg byte a [ main::$6 ] reg byte a [ main::$7 ] 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 [] best 1136236 combination zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ]
Uplifting [print_uchar] best 1136218 combination reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] reg byte x [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
Uplifting [print_uint] best 1136218 combination zp[2]:59 [ print_uint::w#0 ]
Uplifting [MOS6526_CIA] best 1136218 combination
Uplifting [MOS6569_VICII] best 1136218 combination
Uplifting [MOS6581_SID] best 1136218 combination
Uplifting [RADIX] best 1136218 combination
Attempting to uplift remaining variables inzp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Uplifting [init_font_hex] best 1136218 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 1136218 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 1135618 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 1135618 combination zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Attempting to uplift remaining variables inzp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ]
Uplifting [init_font_hex] best 1135618 combination zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ]
Attempting to uplift remaining variables inzp[1]:3 [ main::x#2 main::x#1 ]
Uplifting [main] best 1135618 combination zp[1]:3 [ main::x#2 main::x#1 ]
Attempting to uplift remaining variables inzp[1]:2 [ main::y#4 main::y#1 ]
Uplifting [main] best 1135618 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_uint::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#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] ] - 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#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] ] 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#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 ] ] with [ zp[2]:51 [ main::$4 ] ] - 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]: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[2]:32 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] ] with [ 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 ] ]
Coalescing zero page register [ zp[2]:34 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] ] with [ zp[2]:25 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ]
Allocated (was zp[2]:6) zp[2]:4 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 print_uint::w#0 ]
Allocated (was zp[2]:8) zp[2]:6 [ main::screen#2 main::screen#5 main::screen#1 ]
Allocated (was zp[2]:12) zp[2]:8 [ 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]:20) zp[2]:10 [ 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#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 main::$4 ]
Allocated (was zp[2]:27) zp[2]:12 [ 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]:14 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#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]:31) zp[1]:16 [ init_font_hex::c#6 init_font_hex::c#1 ]
Allocated (was zp[2]:32) zp[2]:17 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 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]:34) zp[2]:19 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated (was zp[1]:36) zp[1]:21 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Allocated (was zp[1]:38) zp[1]:22 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Allocated (was zp[2]:39) zp[2]:23 [ main::xw#0 atan2_16::x#0 ]
Allocated (was zp[2]:41) zp[2]:25 [ main::yw#0 atan2_16::y#0 ]
Allocated (was zp[1]:65) zp[1]:27 [ 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(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 = 8
// @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: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
.label col00 = COLS+$c*$28+$13
.label __4 = $a
.label xw = $17
.label yw = $19
.label angle_w = $a
.label diff_sum = 4
.label screen = 6
.label screen_ref = 8
.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 nomodify 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 nomodify byte*) SCREEN [phi:main::@6->main::@1#0] -- pbuz1=pbuc1
lda #<SCREEN
sta.z screen
lda #>SCREEN
sta.z screen+1
// [8] phi (word) main::diff_sum#7 = (word) 0 [phi:main::@6->main::@1#1] -- vwuz1=vwuc1
lda #<0
sta.z diff_sum
lda #>0
sta.z diff_sum+1
// [8] phi (byte*) main::screen_ref#5 = (const to_nomodify byte*) SCREEN_REF [phi:main::@6->main::@1#2] -- pbuz1=pbuc1
lda #<SCREEN_REF
sta.z screen_ref
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::$4 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1
lda #$80
clc
adc.z __4
sta.z __4
bcc !+
inc.z __4+1
!:
// [18] (byte) main::ang_w#0 ← > (word~) main::$4 -- vbuxx=_hi_vwuz1
ldx.z __4+1
// [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::$6 ← (byte) diff::return#0
// [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$6 -- 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::$7 ← (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::$7 -- _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_uint::w#0 ← (word) main::diff_sum#1
// [34] call print_uint
jsr print_uint
jmp __b5
// main::@5
__b5:
// [35] *((const byte*) main::col00) ← ++ *((const byte*) main::col00) -- _deref_pbuc1=_inc__deref_pbuc1
inc col00
jmp __b5
}
// print_uint
// Print a unsigned int as HEX
// print_uint(word zp(4) w)
print_uint: {
.label w = 4
// [36] (byte) print_uchar::b#0 ← > (word) print_uint::w#0 -- vbuxx=_hi_vwuz1
ldx.z w+1
// [37] call print_uchar
// [41] phi from print_uint to print_uchar [phi:print_uint->print_uchar]
print_uchar_from_print_uint:
// [41] phi (byte*) print_char_cursor#24 = (byte*) 1024 [phi:print_uint->print_uchar#0] -- pbuz1=pbuc1
lda #<$400
sta.z print_char_cursor
lda #>$400
sta.z print_char_cursor+1
// [41] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy
jsr print_uchar
jmp __b1
// print_uint::@1
__b1:
// [38] (byte) print_uchar::b#1 ← < (word) print_uint::w#0 -- vbuxx=_lo_vwuz1
ldx.z w
// [39] call print_uchar
// [41] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar]
print_uchar_from___b1:
// [41] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#19 [phi:print_uint::@1->print_uchar#0] -- register_copy
// [41] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy
jsr print_uchar
jmp __breturn
// print_uint::@return
__breturn:
// [40] return
rts
}
// print_uchar
// Print a char as HEX
// print_uchar(byte register(X) b)
print_uchar: {
// [42] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4 -- vbuaa=vbuxx_ror_4
txa
lsr
lsr
lsr
lsr
// [43] (byte) print_char::ch#0 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$0) -- vbuaa=pbuc1_derefidx_vbuaa
tay
lda print_hextab,y
// [44] call print_char
// Table of hexadecimal digits
// [49] phi from print_uchar to print_char [phi:print_uchar->print_char]
print_char_from_print_uchar:
// [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#24 [phi:print_uchar->print_char#0] -- register_copy
// [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy
jsr print_char
jmp __b1
// print_uchar::@1
__b1:
// [45] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f -- vbuxx=vbuxx_band_vbuc1
lda #$f
axs #0
// [46] (byte) print_char::ch#1 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$2) -- vbuaa=pbuc1_derefidx_vbuxx
lda print_hextab,x
// [47] call print_char
// [49] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char]
print_char_from___b1:
// [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#19 [phi:print_uchar::@1->print_char#0] -- register_copy
// [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy
jsr print_char
jmp __breturn
// print_uchar::@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 zp($17) x, signed word zp($19) y)
atan2_16: {
.label __2 = $e
.label __7 = $11
.label yi = $e
.label xi = $11
.label angle = $a
.label xd = $c
.label yd = $13
.label return = $a
.label x = $17
.label y = $19
// [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 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1
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 nomodify 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* zp($11) charset)
init_font_hex: {
.label __0 = $1b
.label idx = $16
.label proto_lo = $13
.label charset = $11
.label c1 = $15
.label proto_hi = $e
.label c = $10
// [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
lda #>FONT_HEX_PROTO
sta.z proto_hi+1
// [102] phi (byte*) init_font_hex::charset#5 = (const nomodify byte*) CHARSET [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1
lda #<CHARSET
sta.z charset
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
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; i<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2
print_hextab: .text "0123456789abcdef"
SCREEN_REF:
.for(var y=-12;y<=12;y++)
.for(var x=-19;x<=20;x++)
.byte round(256*atan2(y, x)/PI/2)
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp __b1
Removing instruction jmp __bend
Removing instruction jmp toD0181
Removing instruction jmp __b6
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b7
Removing instruction jmp __b8
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __breturn
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b5
Removing instruction jmp __b6
Removing instruction jmp __b10
Removing instruction jmp __b12
Removing instruction jmp __b21
Removing instruction jmp __b7
Removing instruction jmp __b9
Removing instruction jmp __b8
Removing instruction jmp __breturn
Removing instruction jmp __b13
Removing instruction jmp __b15
Removing instruction jmp __b16
Removing instruction jmp __b17
Removing instruction jmp __b20
Removing instruction jmp __b19
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #>0
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 __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 __b1_from___bbegin:
Removing instruction __b1:
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 __bbegin:
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_uchar_from_print_uint:
Removing instruction __b1:
Removing instruction print_uchar_from___b1:
Removing instruction __breturn:
Removing instruction print_char_from_print_uchar:
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
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 __b3:
Succesful ASM optimization Pass5UnusedLabelElimination
Fixing long branch [279] beq __b12 to bne
Fixing long branch [173] bpl __b1 to bmi
Fixing long branch [185] bpl __b4 to bmi
FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(const nomodify byte*) CHARSET = (byte*) 8192
(const nomodify byte*) COLS = (byte*) 55296
(const word*) CORDIC_ATAN2_ANGLES_16[(const nomodify byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2
}}
(const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f
(const nomodify byte*) D018 = (byte*) 53272
(const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 }
(byte) MOS6526_CIA::INTERRUPT
(byte) MOS6526_CIA::PORT_A
(byte) MOS6526_CIA::PORT_A_DDR
(byte) MOS6526_CIA::PORT_B
(byte) MOS6526_CIA::PORT_B_DDR
(byte) MOS6526_CIA::SERIAL_DATA
(word) MOS6526_CIA::TIMER_A
(byte) MOS6526_CIA::TIMER_A_CONTROL
(word) MOS6526_CIA::TIMER_B
(byte) MOS6526_CIA::TIMER_B_CONTROL
(byte) MOS6526_CIA::TOD_10THS
(byte) MOS6526_CIA::TOD_HOURS
(byte) MOS6526_CIA::TOD_MIN
(byte) MOS6526_CIA::TOD_SEC
(byte) MOS6569_VICII::BG_COLOR
(byte) MOS6569_VICII::BG_COLOR1
(byte) MOS6569_VICII::BG_COLOR2
(byte) MOS6569_VICII::BG_COLOR3
(byte) MOS6569_VICII::BORDER_COLOR
(byte) MOS6569_VICII::CONTROL1
(byte) MOS6569_VICII::CONTROL2
(byte) MOS6569_VICII::IRQ_ENABLE
(byte) MOS6569_VICII::IRQ_STATUS
(byte) MOS6569_VICII::LIGHTPEN_X
(byte) MOS6569_VICII::LIGHTPEN_Y
(byte) MOS6569_VICII::MEMORY
(byte) MOS6569_VICII::RASTER
(byte) MOS6569_VICII::SPRITE0_COLOR
(byte) MOS6569_VICII::SPRITE0_X
(byte) MOS6569_VICII::SPRITE0_Y
(byte) MOS6569_VICII::SPRITE1_COLOR
(byte) MOS6569_VICII::SPRITE1_X
(byte) MOS6569_VICII::SPRITE1_Y
(byte) MOS6569_VICII::SPRITE2_COLOR
(byte) MOS6569_VICII::SPRITE2_X
(byte) MOS6569_VICII::SPRITE2_Y
(byte) MOS6569_VICII::SPRITE3_COLOR
(byte) MOS6569_VICII::SPRITE3_X
(byte) MOS6569_VICII::SPRITE3_Y
(byte) MOS6569_VICII::SPRITE4_COLOR
(byte) MOS6569_VICII::SPRITE4_X
(byte) MOS6569_VICII::SPRITE4_Y
(byte) MOS6569_VICII::SPRITE5_COLOR
(byte) MOS6569_VICII::SPRITE5_X
(byte) MOS6569_VICII::SPRITE5_Y
(byte) MOS6569_VICII::SPRITE6_COLOR
(byte) MOS6569_VICII::SPRITE6_X
(byte) MOS6569_VICII::SPRITE6_Y
(byte) MOS6569_VICII::SPRITE7_COLOR
(byte) MOS6569_VICII::SPRITE7_X
(byte) MOS6569_VICII::SPRITE7_Y
(byte) MOS6569_VICII::SPRITES_BG_COLLISION
(byte) MOS6569_VICII::SPRITES_COLLISION
(byte) MOS6569_VICII::SPRITES_ENABLE
(byte) MOS6569_VICII::SPRITES_EXPAND_X
(byte) MOS6569_VICII::SPRITES_EXPAND_Y
(byte) MOS6569_VICII::SPRITES_MC
(byte) MOS6569_VICII::SPRITES_MCOLOR1
(byte) MOS6569_VICII::SPRITES_MCOLOR2
(byte) MOS6569_VICII::SPRITES_PRIORITY
(byte) MOS6569_VICII::SPRITES_XMSB
(byte) MOS6581_SID::CH1_ATTACK_DECAY
(byte) MOS6581_SID::CH1_CONTROL
(word) MOS6581_SID::CH1_FREQ
(word) MOS6581_SID::CH1_PULSE_WIDTH
(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE
(byte) MOS6581_SID::CH2_ATTACK_DECAY
(byte) MOS6581_SID::CH2_CONTROL
(word) MOS6581_SID::CH2_FREQ
(word) MOS6581_SID::CH2_PULSE_WIDTH
(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE
(byte) MOS6581_SID::CH3_ATTACK_DECAY
(byte) MOS6581_SID::CH3_CONTROL
(byte) MOS6581_SID::CH3_ENV
(word) MOS6581_SID::CH3_FREQ
(byte) MOS6581_SID::CH3_OSC
(word) MOS6581_SID::CH3_PULSE_WIDTH
(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE
(byte) MOS6581_SID::FILTER_CUTOFF_HIGH
(byte) MOS6581_SID::FILTER_CUTOFF_LOW
(byte) MOS6581_SID::FILTER_SETUP
(byte) MOS6581_SID::POT_X
(byte) MOS6581_SID::POT_Y
(byte) MOS6581_SID::VOLUME_FILTER_MODE
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(const nomodify byte*) SCREEN = (byte*) 10240
(const to_nomodify byte*) SCREEN_REF[(number) $3e8] = kickasm {{ .for(var y=-12;y<=12;y++)
.for(var x=-19;x<=20;x++)
.byte round(256*atan2(y, x)/PI/2)
}}
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(signed word~) atan2_16::$2 zp[2]:14 20002.0
(byte~) atan2_16::$22 reg byte a 2.0000002E7
(byte~) atan2_16::$23 reg byte a 2.0000002E7
(signed word~) atan2_16::$7 zp[2]:17 20002.0
(label) atan2_16::@1
(label) atan2_16::@10
(label) atan2_16::@11
(label) atan2_16::@12
(label) atan2_16::@13
(label) atan2_16::@14
(label) atan2_16::@15
(label) atan2_16::@16
(label) atan2_16::@17
(label) atan2_16::@18
(label) atan2_16::@19
(label) atan2_16::@2
(label) atan2_16::@20
(label) atan2_16::@21
(label) atan2_16::@3
(label) atan2_16::@4
(label) atan2_16::@5
(label) atan2_16::@6
(label) atan2_16::@7
(label) atan2_16::@8
(label) atan2_16::@9
(label) atan2_16::@return
(word) atan2_16::angle
(word) atan2_16::angle#1 angle zp[2]:10 15001.5
(word) atan2_16::angle#11 angle zp[2]:10 20002.0
(word) atan2_16::angle#12 angle zp[2]:10 1904762.0952380951
(word) atan2_16::angle#13 angle zp[2]:10 1.3333334666666666E7
(word) atan2_16::angle#2 angle zp[2]:10 2.0000002E7
(word) atan2_16::angle#3 angle zp[2]:10 2.0000002E7
(word) atan2_16::angle#4 angle zp[2]:10 20002.0
(word) atan2_16::angle#5 angle zp[2]:10 20002.0
(word) atan2_16::angle#6 angle zp[2]:10 2.0010003E7
(byte) atan2_16::i
(byte) atan2_16::i#1 reg byte x 1.50000015E7
(byte) atan2_16::i#2 reg byte x 2083333.5416666665
(word) atan2_16::return
(word) atan2_16::return#0 return zp[2]:10 7001.0
(word) atan2_16::return#2 return zp[2]:10 2002.0
(byte) atan2_16::shift
(byte) atan2_16::shift#1 reg byte y 2.00000002E8
(byte) atan2_16::shift#2 reg byte y 8.000000125E7
(byte) atan2_16::shift#5 reg byte y 6666667.333333333
(signed word) atan2_16::x
(signed word) atan2_16::x#0 x zp[2]:23 1079.078947368421
(signed word) atan2_16::xd
(signed word) atan2_16::xd#1 xd zp[2]:12 6.6666667333333336E7
(signed word) atan2_16::xd#10 xd zp[2]:12 1.0000001E7
(signed word) atan2_16::xd#2 xd zp[2]:12 1.0000001E7
(signed word) atan2_16::xd#3 xd zp[2]:12 7.666666833333333E7
(signed word) atan2_16::xd#5 xd zp[2]:12 1.0000001E7
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0 xi zp[2]:17 30003.0
(signed word) atan2_16::xi#1 xi zp[2]:17 5000000.5
(signed word) atan2_16::xi#13 xi zp[2]:17 20002.0
(signed word) atan2_16::xi#2 xi zp[2]:17 5000000.5
(signed word) atan2_16::xi#3 xi zp[2]:17 2667333.6666666665
(signed word) atan2_16::xi#8 xi zp[2]:17 1.0000001E7
(signed word) atan2_16::y
(signed word) atan2_16::y#0 y zp[2]:25 1025.125
(signed word) atan2_16::yd
(signed word) atan2_16::yd#1 yd zp[2]:19 1.00000001E8
(signed word) atan2_16::yd#10 yd zp[2]:19 2.0000002E7
(signed word) atan2_16::yd#2 yd zp[2]:19 2.0000002E7
(signed word) atan2_16::yd#3 yd zp[2]:19 4.6000001E7
(signed word) atan2_16::yd#5 yd zp[2]:19 2.0000002E7
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0 yi zp[2]:14 6000.6
(signed word) atan2_16::yi#1 yi zp[2]:14 6666667.333333333
(signed word) atan2_16::yi#16 yi zp[2]:14 20002.0
(signed word) atan2_16::yi#2 yi zp[2]:14 6666667.333333333
(signed word) atan2_16::yi#3 yi zp[2]:14 3530000.4117647056
(signed word) atan2_16::yi#8 yi zp[2]:14 1.0000001E7
(byte()) diff((byte) diff::bb1 , (byte) diff::bb2)
(byte~) diff::$2 reg byte a 20002.0
(byte~) diff::$4 reg byte a 20002.0
(label) diff::@1
(label) diff::@2
(label) diff::@3
(label) diff::@return
(byte) diff::bb1
(byte) diff::bb1#0 reg byte x 10334.666666666666
(byte) diff::bb2
(byte) diff::bb2#0 reg byte a 15502.0
(byte) diff::return
(byte) diff::return#0 reg byte a 2002.0
(byte) diff::return#1 reg byte a 7001.0
(void()) init_font_hex((byte*) init_font_hex::charset)
(byte~) init_font_hex::$0 zp[1]:27 100001.0
(byte~) init_font_hex::$1 reg byte a 200002.0
(byte~) init_font_hex::$2 reg byte a 200002.0
(label) init_font_hex::@1
(label) init_font_hex::@2
(label) init_font_hex::@3
(label) init_font_hex::@4
(label) init_font_hex::@5
(label) init_font_hex::@return
(byte) init_font_hex::c
(byte) init_font_hex::c#1 c zp[1]:16 1501.5
(byte) init_font_hex::c#6 c zp[1]:16 105.36842105263158
(byte) init_font_hex::c1
(byte) init_font_hex::c1#1 c1 zp[1]:21 15001.5
(byte) init_font_hex::c1#4 c1 zp[1]:21 1333.4666666666667
(byte*) init_font_hex::charset
(byte*) init_font_hex::charset#0 charset zp[2]:17 3500.5
(byte*) init_font_hex::charset#2 charset zp[2]:17 10786.214285714286
(byte*) init_font_hex::charset#5 charset zp[2]:17 2002.0
(byte) init_font_hex::i
(byte) init_font_hex::i#1 reg byte x 150001.5
(byte) init_font_hex::i#2 reg byte x 66667.33333333333
(byte) init_font_hex::idx
(byte) init_font_hex::idx#2 idx zp[1]:22 55001.0
(byte) init_font_hex::idx#3 reg byte y 20002.0
(byte) init_font_hex::idx#5 idx zp[1]:22 60000.600000000006
(byte*) init_font_hex::proto_hi
(byte*) init_font_hex::proto_hi#1 proto_hi zp[2]:14 667.3333333333334
(byte*) init_font_hex::proto_hi#6 proto_hi zp[2]:14 5666.833333333334
(byte*) init_font_hex::proto_lo
(byte*) init_font_hex::proto_lo#1 proto_lo zp[2]:19 5000.5
(byte*) init_font_hex::proto_lo#4 proto_lo zp[2]:19 9230.999999999998
(void()) main()
(word~) main::$4 zp[2]:10 2002.0
(byte~) main::$6 reg byte a 2002.0
(byte~) main::$7 reg byte a 2002.0
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(byte) main::ang_w
(byte) main::ang_w#0 reg byte x 429.0
(word) main::angle_w
(word) main::angle_w#0 angle_w zp[2]:10 2002.0
(const byte*) main::col00 = (const nomodify byte*) COLS+(word)(number) $c*(number) $28+(byte) $13
(word) main::diff_sum
(word) main::diff_sum#1 diff_sum zp[2]:4 234.8888888888889
(word) main::diff_sum#2 diff_sum zp[2]:4 140.2
(word) main::diff_sum#7 diff_sum zp[2]:4 202.0
(byte*) main::screen
(byte*) main::screen#1 screen zp[2]:6 350.5
(byte*) main::screen#2 screen zp[2]:6 172.44444444444446
(byte*) main::screen#5 screen zp[2]:6 202.0
(byte*) main::screen_ref
(byte*) main::screen_ref#1 screen_ref zp[2]:8 420.59999999999997
(byte*) main::screen_ref#2 screen_ref zp[2]:8 216.05263157894734
(byte*) main::screen_ref#5 screen_ref zp[2]:8 202.0
(label) main::toD0181
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const nomodify byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const nomodify byte*) CHARSET/(byte) 4&(byte) $f
(byte*) main::toD0181_screen
(signed byte) main::x
(signed byte) main::x#1 x zp[1]:3 1501.5
(signed byte) main::x#2 x zp[1]:3 100.1
(signed word) main::xw
(word) main::xw#0 xw zp[2]:23 500.5
(signed byte) main::y
(signed byte) main::y#1 y zp[1]:2 151.5
(signed byte) main::y#4 y zp[1]:2 8.782608695652174
(signed word) main::yw
(word) main::yw#0 yw zp[2]:25 500.5
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
(byte) print_char::ch#0 reg byte a 2002.0
(byte) print_char::ch#1 reg byte a 2002.0
(byte) print_char::ch#2 reg byte a 12003.0
(byte*) print_char_cursor
(byte*) print_char_cursor#18 print_char_cursor zp[2]:8 11002.0
(byte*) print_char_cursor#19 print_char_cursor zp[2]:8 1233.6666666666665
(byte*) print_char_cursor#24 print_char_cursor zp[2]:8 367.33333333333337
(const to_nomodify byte*) print_hextab[] = (byte*) "0123456789abcdef"z
(byte*) print_line_cursor
(byte*) print_screen
(void()) print_uchar((byte) print_uchar::b)
(byte~) print_uchar::$0 reg byte a 2002.0
(byte~) print_uchar::$2 reg byte x 2002.0
(label) print_uchar::@1
(label) print_uchar::@return
(byte) print_uchar::b
(byte) print_uchar::b#0 reg byte x 202.0
(byte) print_uchar::b#1 reg byte x 202.0
(byte) print_uchar::b#2 reg byte x 551.0
(void()) print_uint((word) print_uint::w)
(label) print_uint::@1
(label) print_uint::@return
(word) print_uint::w
(word) print_uint::w#0 w zp[2]:4 71.0
zp[1]:2 [ main::y#4 main::y#1 ]
zp[1]:3 [ main::x#2 main::x#1 ]
zp[2]:4 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 print_uint::w#0 ]
zp[2]:6 [ main::screen#2 main::screen#5 main::screen#1 ]
reg byte x [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
zp[2]:8 [ 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 ]
reg byte x [ atan2_16::i#2 atan2_16::i#1 ]
zp[2]:10 [ 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#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 main::$4 ]
reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
zp[2]:12 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
zp[2]:14 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#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]:16 [ init_font_hex::c#6 init_font_hex::c#1 ]
zp[2]:17 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 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]:19 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
zp[1]:21 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ]
zp[1]:22 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
zp[2]:23 [ main::xw#0 atan2_16::x#0 ]
zp[2]:25 [ 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::$6 ]
reg byte a [ main::$7 ]
reg byte a [ print_uchar::$0 ]
reg byte x [ print_uchar::$2 ]
reg byte a [ atan2_16::$23 ]
reg byte a [ atan2_16::$22 ]
zp[1]:27 [ 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: 1044103
// 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 = 8
// @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: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
.label col00 = COLS+$c*$28+$13
.label __4 = $a
.label xw = $17
.label yw = $19
.label angle_w = $a
.label diff_sum = 4
.label screen = 6
.label screen_ref = 8
.label x = 3
.label y = 2
// 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 nomodify 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 nomodify byte*) SCREEN [phi:main::@6->main::@1#0] -- pbuz1=pbuc1
lda #<SCREEN
sta.z screen
lda #>SCREEN
sta.z screen+1
// [8] phi (word) main::diff_sum#7 = (word) 0 [phi:main::@6->main::@1#1] -- vwuz1=vwuc1
lda #<0
sta.z diff_sum
sta.z diff_sum+1
// [8] phi (byte*) main::screen_ref#5 = (const to_nomodify byte*) SCREEN_REF [phi:main::@6->main::@1#2] -- pbuz1=pbuc1
lda #<SCREEN_REF
sta.z screen_ref
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:
// xw = (signed word)(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
// yw = (signed word)(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::$4 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1
lda #$80
clc
adc.z __4
sta.z __4
bcc !+
inc.z __4+1
!:
// ang_w = >(angle_w+0x0080)
// [18] (byte) main::ang_w#0 ← > (word~) main::$4 -- vbuxx=_hi_vwuz1
ldx.z __4+1
// 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::$6 ← (byte) diff::return#0
// diff_sum += diff(ang_w, *screen_ref)
// [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$6 -- 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::$7 ← (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::$7 -- _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_uint(diff_sum)
// [33] (word) print_uint::w#0 ← (word) main::diff_sum#1
// [34] call print_uint
jsr print_uint
// main::@5
__b5:
// (*col00)++;
// [35] *((const byte*) main::col00) ← ++ *((const byte*) main::col00) -- _deref_pbuc1=_inc__deref_pbuc1
inc col00
jmp __b5
}
// print_uint
// Print a unsigned int as HEX
// print_uint(word zp(4) w)
print_uint: {
.label w = 4
// print_uchar(>w)
// [36] (byte) print_uchar::b#0 ← > (word) print_uint::w#0 -- vbuxx=_hi_vwuz1
ldx.z w+1
// [37] call print_uchar
// [41] phi from print_uint to print_uchar [phi:print_uint->print_uchar]
// [41] phi (byte*) print_char_cursor#24 = (byte*) 1024 [phi:print_uint->print_uchar#0] -- pbuz1=pbuc1
lda #<$400
sta.z print_char_cursor
lda #>$400
sta.z print_char_cursor+1
// [41] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy
jsr print_uchar
// print_uint::@1
// print_uchar(<w)
// [38] (byte) print_uchar::b#1 ← < (word) print_uint::w#0 -- vbuxx=_lo_vwuz1
ldx.z w
// [39] call print_uchar
// [41] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar]
// [41] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#19 [phi:print_uint::@1->print_uchar#0] -- register_copy
// [41] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy
jsr print_uchar
// print_uint::@return
// }
// [40] return
rts
}
// print_uchar
// Print a char as HEX
// print_uchar(byte register(X) b)
print_uchar: {
// b>>4
// [42] (byte~) print_uchar::$0 ← (byte) print_uchar::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 to_nomodify byte*) print_hextab + (byte~) print_uchar::$0) -- vbuaa=pbuc1_derefidx_vbuaa
tay
lda print_hextab,y
// [44] call print_char
// Table of hexadecimal digits
// [49] phi from print_uchar to print_char [phi:print_uchar->print_char]
// [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#24 [phi:print_uchar->print_char#0] -- register_copy
// [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy
jsr print_char
// print_uchar::@1
// b&$f
// [45] (byte~) print_uchar::$2 ← (byte) print_uchar::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 to_nomodify byte*) print_hextab + (byte~) print_uchar::$2) -- vbuaa=pbuc1_derefidx_vbuxx
lda print_hextab,x
// [47] call print_char
// [49] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char]
// [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#19 [phi:print_uchar::@1->print_char#0] -- register_copy
// [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy
jsr print_char
// print_uchar::@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: {
// (bb1<bb2)?(bb2-bb1):bb1-bb2
// [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
// diff::@2
// [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]
// [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<bb2)?(bb2-bb1):bb1-bb2
// [57] (byte~) diff::$4 ← (byte) diff::bb2#0 - (byte) diff::bb1#0 -- vbuaa=vbuaa_minus_vbuxx
stx.z $ff
sec
sbc.z $ff
rts
}
// 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 zp($17) x, signed word zp($19) y)
atan2_16: {
.label __2 = $e
.label __7 = $11
.label yi = $e
.label xi = $11
.label angle = $a
.label xd = $c
.label yd = $13
.label return = $a
.label x = $17
.label y = $19
// (y>=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 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1
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( char 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 nomodify 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:
// (x>=0)?x:-x
// [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:
// (y>=0)?y:-y
// [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* zp($11) charset)
init_font_hex: {
.label __0 = $1b
.label idx = $16
.label proto_lo = $13
.label charset = $11
.label c1 = $15
.label proto_hi = $e
.label c = $10
// [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
lda #>FONT_HEX_PROTO
sta.z proto_hi+1
// [102] phi (byte*) init_font_hex::charset#5 = (const nomodify byte*) CHARSET [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1
lda #<CHARSET
sta.z charset
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
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<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2
print_hextab: .text "0123456789abcdef"
SCREEN_REF:
.for(var y=-12;y<=12;y++)
.for(var x=-19;x<=20;x++)
.byte round(256*atan2(y, x)/PI/2)