1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-06-03 07:29:37 +00:00
kickc/src/test/ref/cordic-atan2-clear.log
2023-04-23 11:54:47 +02:00

3747 lines
214 KiB
Plaintext

Resolved forward reference FONT_HEX_PROTO to FONT_HEX_PROTO
Resolved forward reference FONT_HEX_PROTO to FONT_HEX_PROTO
Inlined call vicSelectGfxBank::$0 = call toDd00(vicSelectGfxBank::gfx)
Inlined call main::$1 = call toD018(SCREEN, CHARSET)
Eliminating unused variable with no statement init_angle_screen::$0
Eliminating unused variable with no statement init_angle_screen::$1
Eliminating unused variable with no statement init_angle_screen::$8
Eliminating unused variable with no statement init_angle_screen::$10
CONTROL FLOW GRAPH SSA
void init_font_hex(char *charset)
init_font_hex: scope:[init_font_hex] from main
init_font_hex::charset#6 = phi( main/init_font_hex::charset#1 )
init_font_hex::proto_hi#0 = FONT_HEX_PROTO
init_font_hex::c#0 = 0
to:init_font_hex::@1
init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5
init_font_hex::c#6 = phi( init_font_hex/init_font_hex::c#0, init_font_hex::@5/init_font_hex::c#1 )
init_font_hex::proto_hi#6 = phi( init_font_hex/init_font_hex::proto_hi#0, init_font_hex::@5/init_font_hex::proto_hi#1 )
init_font_hex::charset#5 = phi( init_font_hex/init_font_hex::charset#6, init_font_hex::@5/init_font_hex::charset#7 )
init_font_hex::proto_lo#0 = FONT_HEX_PROTO
init_font_hex::c1#0 = 0
to:init_font_hex::@2
init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4
init_font_hex::c#5 = phi( init_font_hex::@1/init_font_hex::c#6, init_font_hex::@4/init_font_hex::c#3 )
init_font_hex::c1#4 = phi( init_font_hex::@1/init_font_hex::c1#0, init_font_hex::@4/init_font_hex::c1#1 )
init_font_hex::proto_lo#4 = phi( init_font_hex::@1/init_font_hex::proto_lo#0, init_font_hex::@4/init_font_hex::proto_lo#1 )
init_font_hex::proto_hi#4 = phi( init_font_hex::@1/init_font_hex::proto_hi#6, init_font_hex::@4/init_font_hex::proto_hi#5 )
init_font_hex::charset#2 = phi( init_font_hex::@1/init_font_hex::charset#5, init_font_hex::@4/init_font_hex::charset#0 )
init_font_hex::idx#0 = 0
init_font_hex::charset#2[init_font_hex::idx#0] = 0
init_font_hex::idx#1 = ++ init_font_hex::idx#0
init_font_hex::i#0 = 0
to:init_font_hex::@3
init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3
init_font_hex::c#4 = phi( init_font_hex::@2/init_font_hex::c#5, init_font_hex::@3/init_font_hex::c#4 )
init_font_hex::c1#3 = phi( init_font_hex::@2/init_font_hex::c1#4, init_font_hex::@3/init_font_hex::c1#3 )
init_font_hex::idx#5 = phi( init_font_hex::@2/init_font_hex::idx#1, init_font_hex::@3/init_font_hex::idx#2 )
init_font_hex::charset#3 = phi( init_font_hex::@2/init_font_hex::charset#2, init_font_hex::@3/init_font_hex::charset#3 )
init_font_hex::proto_lo#2 = phi( init_font_hex::@2/init_font_hex::proto_lo#4, init_font_hex::@3/init_font_hex::proto_lo#2 )
init_font_hex::i#2 = phi( init_font_hex::@2/init_font_hex::i#0, init_font_hex::@3/init_font_hex::i#1 )
init_font_hex::proto_hi#2 = phi( init_font_hex::@2/init_font_hex::proto_hi#4, init_font_hex::@3/init_font_hex::proto_hi#2 )
init_font_hex::$0 = init_font_hex::proto_hi#2[init_font_hex::i#2] << 4
init_font_hex::$1 = init_font_hex::proto_lo#2[init_font_hex::i#2] << 1
init_font_hex::$2 = init_font_hex::$0 | init_font_hex::$1
init_font_hex::charset#3[init_font_hex::idx#5] = init_font_hex::$2
init_font_hex::idx#2 = ++ init_font_hex::idx#5
init_font_hex::i#1 = init_font_hex::i#2 + rangenext(0,4)
init_font_hex::$3 = init_font_hex::i#1 != rangelast(0,4)
if(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
init_font_hex::c#3 = phi( init_font_hex::@3/init_font_hex::c#4 )
init_font_hex::proto_hi#5 = phi( init_font_hex::@3/init_font_hex::proto_hi#2 )
init_font_hex::c1#2 = phi( init_font_hex::@3/init_font_hex::c1#3 )
init_font_hex::proto_lo#3 = phi( init_font_hex::@3/init_font_hex::proto_lo#2 )
init_font_hex::idx#6 = phi( init_font_hex::@3/init_font_hex::idx#2 )
init_font_hex::charset#4 = phi( init_font_hex::@3/init_font_hex::charset#3 )
init_font_hex::charset#4[init_font_hex::idx#6] = 0
init_font_hex::idx#3 = ++ init_font_hex::idx#6
init_font_hex::charset#4[init_font_hex::idx#3] = 0
init_font_hex::idx#4 = ++ init_font_hex::idx#3
init_font_hex::proto_lo#1 = init_font_hex::proto_lo#3 + 5
init_font_hex::charset#0 = init_font_hex::charset#4 + 8
init_font_hex::c1#1 = init_font_hex::c1#2 + rangenext(0,$f)
init_font_hex::$4 = init_font_hex::c1#1 != rangelast(0,$f)
if(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
init_font_hex::charset#7 = phi( init_font_hex::@4/init_font_hex::charset#0 )
init_font_hex::c#2 = phi( init_font_hex::@4/init_font_hex::c#3 )
init_font_hex::proto_hi#3 = phi( init_font_hex::@4/init_font_hex::proto_hi#5 )
init_font_hex::proto_hi#1 = init_font_hex::proto_hi#3 + 5
init_font_hex::c#1 = init_font_hex::c#2 + rangenext(0,$f)
init_font_hex::$5 = init_font_hex::c#1 != rangelast(0,$f)
if(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
unsigned int atan2_16(int x , int y)
atan2_16: scope:[atan2_16] from init_angle_screen::@3
atan2_16::x#9 = phi( init_angle_screen::@3/atan2_16::x#0 )
atan2_16::y#1 = phi( init_angle_screen::@3/atan2_16::y#0 )
atan2_16::$0 = atan2_16::y#1 >= 0
if(atan2_16::$0) goto atan2_16::@1
to:atan2_16::@2
atan2_16::@1: scope:[atan2_16] from atan2_16
atan2_16::x#5 = phi( atan2_16/atan2_16::x#9 )
atan2_16::y#2 = phi( atan2_16/atan2_16::y#1 )
atan2_16::$3 = atan2_16::y#2
to:atan2_16::@3
atan2_16::@2: scope:[atan2_16] from atan2_16
atan2_16::x#6 = phi( atan2_16/atan2_16::x#9 )
atan2_16::y#3 = phi( atan2_16/atan2_16::y#1 )
atan2_16::$1 = - atan2_16::y#3
atan2_16::$2 = atan2_16::$1
to:atan2_16::@3
atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2
atan2_16::y#15 = phi( atan2_16::@1/atan2_16::y#2, atan2_16::@2/atan2_16::y#3 )
atan2_16::x#1 = phi( atan2_16::@1/atan2_16::x#5, atan2_16::@2/atan2_16::x#6 )
atan2_16::$4 = phi( atan2_16::@1/atan2_16::$3, atan2_16::@2/atan2_16::$2 )
atan2_16::yi#0 = atan2_16::$4
atan2_16::$5 = atan2_16::x#1 >= 0
if(atan2_16::$5) goto atan2_16::@4
to:atan2_16::@5
atan2_16::@4: scope:[atan2_16] from atan2_16::@3
atan2_16::y#12 = phi( atan2_16::@3/atan2_16::y#15 )
atan2_16::yi#12 = phi( atan2_16::@3/atan2_16::yi#0 )
atan2_16::x#2 = phi( atan2_16::@3/atan2_16::x#1 )
atan2_16::$8 = atan2_16::x#2
to:atan2_16::@6
atan2_16::@5: scope:[atan2_16] from atan2_16::@3
atan2_16::y#13 = phi( atan2_16::@3/atan2_16::y#15 )
atan2_16::yi#13 = phi( atan2_16::@3/atan2_16::yi#0 )
atan2_16::x#3 = phi( atan2_16::@3/atan2_16::x#1 )
atan2_16::$6 = - atan2_16::x#3
atan2_16::$7 = atan2_16::$6
to:atan2_16::@6
atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5
atan2_16::y#9 = phi( atan2_16::@4/atan2_16::y#12, atan2_16::@5/atan2_16::y#13 )
atan2_16::x#10 = phi( atan2_16::@4/atan2_16::x#2, atan2_16::@5/atan2_16::x#3 )
atan2_16::yi#9 = phi( atan2_16::@4/atan2_16::yi#12, atan2_16::@5/atan2_16::yi#13 )
atan2_16::$9 = phi( atan2_16::@4/atan2_16::$8, atan2_16::@5/atan2_16::$7 )
atan2_16::xi#0 = atan2_16::$9
atan2_16::angle#0 = 0
atan2_16::i#0 = 0
to:atan2_16::@10
atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6
atan2_16::y#7 = phi( atan2_16::@19/atan2_16::y#8, atan2_16::@6/atan2_16::y#9 )
atan2_16::x#7 = phi( atan2_16::@19/atan2_16::x#8, atan2_16::@6/atan2_16::x#10 )
atan2_16::angle#12 = phi( atan2_16::@19/atan2_16::angle#13, atan2_16::@6/atan2_16::angle#0 )
atan2_16::i#6 = phi( atan2_16::@19/atan2_16::i#1, atan2_16::@6/atan2_16::i#0 )
atan2_16::xi#6 = phi( atan2_16::@19/atan2_16::xi#8, atan2_16::@6/atan2_16::xi#0 )
atan2_16::yi#3 = phi( atan2_16::@19/atan2_16::yi#8, atan2_16::@6/atan2_16::yi#9 )
atan2_16::$16 = atan2_16::yi#3 == 0
atan2_16::$17 = ! atan2_16::$16
if(atan2_16::$17) goto atan2_16::@11
to:atan2_16::@12
atan2_16::@11: scope:[atan2_16] from atan2_16::@10
atan2_16::y#19 = phi( atan2_16::@10/atan2_16::y#7 )
atan2_16::x#17 = phi( atan2_16::@10/atan2_16::x#7 )
atan2_16::angle#19 = phi( atan2_16::@10/atan2_16::angle#12 )
atan2_16::i#2 = phi( atan2_16::@10/atan2_16::i#6 )
atan2_16::yi#4 = phi( atan2_16::@10/atan2_16::yi#3 )
atan2_16::xi#3 = phi( atan2_16::@10/atan2_16::xi#6 )
atan2_16::xd#0 = atan2_16::xi#3
atan2_16::yd#0 = atan2_16::yi#4
atan2_16::shift#0 = atan2_16::i#2
to:atan2_16::@13
atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19
atan2_16::y#5 = phi( atan2_16::@10/atan2_16::y#7, atan2_16::@19/atan2_16::y#8 )
atan2_16::x#4 = phi( atan2_16::@10/atan2_16::x#7, atan2_16::@19/atan2_16::x#8 )
atan2_16::angle#6 = phi( atan2_16::@10/atan2_16::angle#12, atan2_16::@19/atan2_16::angle#13 )
atan2_16::angle#1 = atan2_16::angle#6 / 2
atan2_16::$10 = atan2_16::x#4 < 0
atan2_16::$11 = ! atan2_16::$10
if(atan2_16::$11) goto atan2_16::@7
to:atan2_16::@21
atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14
atan2_16::y#18 = phi( atan2_16::@11/atan2_16::y#19, atan2_16::@14/atan2_16::y#20 )
atan2_16::x#16 = phi( atan2_16::@11/atan2_16::x#17, atan2_16::@14/atan2_16::x#18 )
atan2_16::angle#18 = phi( atan2_16::@11/atan2_16::angle#19, atan2_16::@14/atan2_16::angle#20 )
atan2_16::i#10 = phi( atan2_16::@11/atan2_16::i#2, atan2_16::@14/atan2_16::i#11 )
atan2_16::xi#11 = phi( atan2_16::@11/atan2_16::xi#3, atan2_16::@14/atan2_16::xi#12 )
atan2_16::yi#14 = phi( atan2_16::@11/atan2_16::yi#4, atan2_16::@14/atan2_16::yi#15 )
atan2_16::yd#7 = phi( atan2_16::@11/atan2_16::yd#0, atan2_16::@14/atan2_16::yd#1 )
atan2_16::xd#7 = phi( atan2_16::@11/atan2_16::xd#0, atan2_16::@14/atan2_16::xd#1 )
atan2_16::shift#2 = phi( atan2_16::@11/atan2_16::shift#0, atan2_16::@14/atan2_16::shift#1 )
atan2_16::$18 = atan2_16::shift#2 >= 2
if(atan2_16::$18) goto atan2_16::@14
to:atan2_16::@15
atan2_16::@14: scope:[atan2_16] from atan2_16::@13
atan2_16::y#20 = phi( atan2_16::@13/atan2_16::y#18 )
atan2_16::x#18 = phi( atan2_16::@13/atan2_16::x#16 )
atan2_16::angle#20 = phi( atan2_16::@13/atan2_16::angle#18 )
atan2_16::i#11 = phi( atan2_16::@13/atan2_16::i#10 )
atan2_16::xi#12 = phi( atan2_16::@13/atan2_16::xi#11 )
atan2_16::yi#15 = phi( atan2_16::@13/atan2_16::yi#14 )
atan2_16::shift#3 = phi( atan2_16::@13/atan2_16::shift#2 )
atan2_16::yd#3 = phi( atan2_16::@13/atan2_16::yd#7 )
atan2_16::xd#3 = phi( atan2_16::@13/atan2_16::xd#7 )
atan2_16::xd#1 = atan2_16::xd#3 >> 2
atan2_16::yd#1 = atan2_16::yd#3 >> 2
atan2_16::shift#1 = atan2_16::shift#3 - 2
to:atan2_16::@13
atan2_16::@15: scope:[atan2_16] from atan2_16::@13
atan2_16::y#16 = phi( atan2_16::@13/atan2_16::y#18 )
atan2_16::x#14 = phi( atan2_16::@13/atan2_16::x#16 )
atan2_16::angle#16 = phi( atan2_16::@13/atan2_16::angle#18 )
atan2_16::i#8 = phi( atan2_16::@13/atan2_16::i#10 )
atan2_16::xi#9 = phi( atan2_16::@13/atan2_16::xi#11 )
atan2_16::yd#8 = phi( atan2_16::@13/atan2_16::yd#7 )
atan2_16::xd#8 = phi( atan2_16::@13/atan2_16::xd#7 )
atan2_16::yi#10 = phi( atan2_16::@13/atan2_16::yi#14 )
atan2_16::shift#4 = phi( atan2_16::@13/atan2_16::shift#2 )
atan2_16::$24 = 0 != atan2_16::shift#4
atan2_16::$19 = ! atan2_16::$24
if(atan2_16::$19) goto atan2_16::@17
to:atan2_16::@16
atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16
atan2_16::y#14 = phi( atan2_16::@15/atan2_16::y#16, atan2_16::@16/atan2_16::y#17 )
atan2_16::x#13 = phi( atan2_16::@15/atan2_16::x#14, atan2_16::@16/atan2_16::x#15 )
atan2_16::angle#14 = phi( atan2_16::@15/atan2_16::angle#16, atan2_16::@16/atan2_16::angle#17 )
atan2_16::i#7 = phi( atan2_16::@15/atan2_16::i#8, atan2_16::@16/atan2_16::i#9 )
atan2_16::xd#9 = phi( atan2_16::@15/atan2_16::xd#8, atan2_16::@16/atan2_16::xd#2 )
atan2_16::yd#9 = phi( atan2_16::@15/atan2_16::yd#8, atan2_16::@16/atan2_16::yd#2 )
atan2_16::xi#7 = phi( atan2_16::@15/atan2_16::xi#9, atan2_16::@16/atan2_16::xi#10 )
atan2_16::yi#5 = phi( atan2_16::@15/atan2_16::yi#10, atan2_16::@16/atan2_16::yi#11 )
atan2_16::$20 = atan2_16::yi#5 >= 0
if(atan2_16::$20) goto atan2_16::@18
to:atan2_16::@20
atan2_16::@16: scope:[atan2_16] from atan2_16::@15
atan2_16::y#17 = phi( atan2_16::@15/atan2_16::y#16 )
atan2_16::x#15 = phi( atan2_16::@15/atan2_16::x#14 )
atan2_16::angle#17 = phi( atan2_16::@15/atan2_16::angle#16 )
atan2_16::i#9 = phi( atan2_16::@15/atan2_16::i#8 )
atan2_16::xi#10 = phi( atan2_16::@15/atan2_16::xi#9 )
atan2_16::yi#11 = phi( atan2_16::@15/atan2_16::yi#10 )
atan2_16::yd#4 = phi( atan2_16::@15/atan2_16::yd#8 )
atan2_16::xd#4 = phi( atan2_16::@15/atan2_16::xd#8 )
atan2_16::xd#2 = atan2_16::xd#4 >> 1
atan2_16::yd#2 = atan2_16::yd#4 >> 1
to:atan2_16::@17
atan2_16::@18: scope:[atan2_16] from atan2_16::@17
atan2_16::y#10 = phi( atan2_16::@17/atan2_16::y#14 )
atan2_16::x#11 = phi( atan2_16::@17/atan2_16::x#13 )
atan2_16::angle#7 = phi( atan2_16::@17/atan2_16::angle#14 )
atan2_16::i#3 = phi( atan2_16::@17/atan2_16::i#7 )
atan2_16::xd#5 = phi( atan2_16::@17/atan2_16::xd#9 )
atan2_16::yi#6 = phi( atan2_16::@17/atan2_16::yi#5 )
atan2_16::yd#5 = phi( atan2_16::@17/atan2_16::yd#9 )
atan2_16::xi#4 = phi( atan2_16::@17/atan2_16::xi#7 )
atan2_16::xi#1 = atan2_16::xi#4 + atan2_16::yd#5
atan2_16::yi#1 = atan2_16::yi#6 - atan2_16::xd#5
atan2_16::$22 = atan2_16::i#3 * SIZEOF_UNSIGNED_INT
atan2_16::angle#2 = atan2_16::angle#7 + CORDIC_ATAN2_ANGLES_16[atan2_16::$22]
to:atan2_16::@19
atan2_16::@20: scope:[atan2_16] from atan2_16::@17
atan2_16::y#11 = phi( atan2_16::@17/atan2_16::y#14 )
atan2_16::x#12 = phi( atan2_16::@17/atan2_16::x#13 )
atan2_16::angle#8 = phi( atan2_16::@17/atan2_16::angle#14 )
atan2_16::i#4 = phi( atan2_16::@17/atan2_16::i#7 )
atan2_16::xd#6 = phi( atan2_16::@17/atan2_16::xd#9 )
atan2_16::yi#7 = phi( atan2_16::@17/atan2_16::yi#5 )
atan2_16::yd#6 = phi( atan2_16::@17/atan2_16::yd#9 )
atan2_16::xi#5 = phi( atan2_16::@17/atan2_16::xi#7 )
atan2_16::xi#2 = atan2_16::xi#5 - atan2_16::yd#6
atan2_16::yi#2 = atan2_16::yi#7 + atan2_16::xd#6
atan2_16::$23 = atan2_16::i#4 * SIZEOF_UNSIGNED_INT
atan2_16::angle#3 = atan2_16::angle#8 - CORDIC_ATAN2_ANGLES_16[atan2_16::$23]
to:atan2_16::@19
atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20
atan2_16::y#8 = phi( atan2_16::@18/atan2_16::y#10, atan2_16::@20/atan2_16::y#11 )
atan2_16::xi#8 = phi( atan2_16::@18/atan2_16::xi#1, atan2_16::@20/atan2_16::xi#2 )
atan2_16::x#8 = phi( atan2_16::@18/atan2_16::x#11, atan2_16::@20/atan2_16::x#12 )
atan2_16::angle#13 = phi( atan2_16::@18/atan2_16::angle#2, atan2_16::@20/atan2_16::angle#3 )
atan2_16::yi#8 = phi( atan2_16::@18/atan2_16::yi#1, atan2_16::@20/atan2_16::yi#2 )
atan2_16::i#5 = phi( atan2_16::@18/atan2_16::i#3, atan2_16::@20/atan2_16::i#4 )
atan2_16::i#1 = atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16-1)
atan2_16::$21 = atan2_16::i#1 != rangelast(0,CORDIC_ITERATIONS_16-1)
if(atan2_16::$21) goto atan2_16::@10
to:atan2_16::@12
atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21
atan2_16::angle#15 = phi( atan2_16::@12/atan2_16::angle#1, atan2_16::@21/atan2_16::angle#4 )
atan2_16::y#4 = phi( atan2_16::@12/atan2_16::y#5, atan2_16::@21/atan2_16::y#6 )
atan2_16::$13 = atan2_16::y#4 < 0
atan2_16::$14 = ! atan2_16::$13
if(atan2_16::$14) goto atan2_16::@8
to:atan2_16::@9
atan2_16::@21: scope:[atan2_16] from atan2_16::@12
atan2_16::y#6 = phi( atan2_16::@12/atan2_16::y#5 )
atan2_16::angle#9 = phi( atan2_16::@12/atan2_16::angle#1 )
atan2_16::$12 = $8000 - atan2_16::angle#9
atan2_16::angle#4 = atan2_16::$12
to:atan2_16::@7
atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9
atan2_16::angle#10 = phi( atan2_16::@7/atan2_16::angle#15, atan2_16::@9/atan2_16::angle#5 )
atan2_16::return#0 = atan2_16::angle#10
to:atan2_16::@return
atan2_16::@9: scope:[atan2_16] from atan2_16::@7
atan2_16::angle#11 = phi( atan2_16::@7/atan2_16::angle#15 )
atan2_16::$15 = - atan2_16::angle#11
atan2_16::angle#5 = atan2_16::$15
to:atan2_16::@8
atan2_16::@return: scope:[atan2_16] from atan2_16::@8
atan2_16::return#3 = phi( atan2_16::@8/atan2_16::return#0 )
atan2_16::return#1 = atan2_16::return#3
return
to:@return
void main()
main: scope:[main] from __start
init_font_hex::charset#1 = CHARSET
call init_font_hex
to:main::@6
main::@6: scope:[main] from main
main::toD0181_screen#0 = SCREEN
main::toD0181_gfx#0 = CHARSET
to:main::toD0181
main::toD0181: scope:[main] from main::@6
main::toD0181_gfx#1 = phi( main::@6/main::toD0181_gfx#0 )
main::toD0181_screen#1 = phi( main::@6/main::toD0181_screen#0 )
main::toD0181_$7 = (unsigned int)main::toD0181_screen#1
main::toD0181_$0 = main::toD0181_$7 & $3fff
main::toD0181_$1 = main::toD0181_$0 * 4
main::toD0181_$2 = byte1 main::toD0181_$1
main::toD0181_$3 = byte1 (unsigned int)main::toD0181_gfx#1
main::toD0181_$4 = main::toD0181_$3 / 4
main::toD0181_$5 = main::toD0181_$4 & $f
main::toD0181_$6 = main::toD0181_$2 | main::toD0181_$5
main::toD0181_return#0 = main::toD0181_$6
to:main::toD0181_@return
main::toD0181_@return: scope:[main] from main::toD0181
main::toD0181_return#2 = phi( main::toD0181/main::toD0181_return#0 )
main::toD0181_return#1 = main::toD0181_return#2
to:main::@5
main::@5: scope:[main] from main::toD0181_@return
main::toD0181_return#3 = phi( main::toD0181_@return/main::toD0181_return#1 )
main::$1 = main::toD0181_return#3
*D018 = main::$1
init_angle_screen::screen#0 = SCREEN
call init_angle_screen
to:main::@7
main::@7: scope:[main] from main::@5
main::clear_char#0 = CHARSET
to:main::@1
main::@1: scope:[main] from main::@3 main::@4 main::@7
main::clear_char#5 = phi( main::@3/main::clear_char#2, main::@4/main::clear_char#1, main::@7/main::clear_char#0 )
if(true) goto main::@2
to:main::@return
main::@2: scope:[main] from main::@1 main::@2
main::clear_char#4 = phi( main::@1/main::clear_char#5, main::@2/main::clear_char#4 )
main::$3 = *RASTER != $ff
if(main::$3) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
main::clear_char#2 = phi( main::@2/main::clear_char#4 )
main::$4 = main::clear_char#2 < CHARSET+$800
main::$5 = ! main::$4
if(main::$5) goto main::@1
to:main::@4
main::@4: scope:[main] from main::@3
main::clear_char#3 = phi( main::@3/main::clear_char#2 )
*main::clear_char#3 = 0
main::clear_char#1 = ++ main::clear_char#3
to:main::@1
main::@return: scope:[main] from main::@1
return
to:@return
void init_angle_screen(char *screen)
init_angle_screen: scope:[init_angle_screen] from main::@5
init_angle_screen::screen#1 = phi( main::@5/init_angle_screen::screen#0 )
init_angle_screen::screen_topline#0 = init_angle_screen::screen#1 + $28*$c
init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#1 + $28*$c
init_angle_screen::y#0 = 0
to:init_angle_screen::@1
init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4
init_angle_screen::screen_bottomline#6 = phi( init_angle_screen/init_angle_screen::screen_bottomline#0, init_angle_screen::@4/init_angle_screen::screen_bottomline#1 )
init_angle_screen::screen_topline#6 = phi( init_angle_screen/init_angle_screen::screen_topline#0, init_angle_screen::@4/init_angle_screen::screen_topline#1 )
init_angle_screen::y#5 = phi( init_angle_screen/init_angle_screen::y#0, init_angle_screen::@4/init_angle_screen::y#1 )
init_angle_screen::x#0 = 0
init_angle_screen::xb#0 = $27
to:init_angle_screen::@2
init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5
init_angle_screen::xb#4 = phi( init_angle_screen::@1/init_angle_screen::xb#0, init_angle_screen::@5/init_angle_screen::xb#1 )
init_angle_screen::screen_bottomline#5 = phi( init_angle_screen::@1/init_angle_screen::screen_bottomline#6, init_angle_screen::@5/init_angle_screen::screen_bottomline#2 )
init_angle_screen::screen_topline#5 = phi( init_angle_screen::@1/init_angle_screen::screen_topline#6, init_angle_screen::@5/init_angle_screen::screen_topline#2 )
init_angle_screen::y#4 = phi( init_angle_screen::@1/init_angle_screen::y#5, init_angle_screen::@5/init_angle_screen::y#6 )
init_angle_screen::x#2 = phi( init_angle_screen::@1/init_angle_screen::x#0, init_angle_screen::@5/init_angle_screen::x#1 )
init_angle_screen::$2 = init_angle_screen::x#2 <= $13
if(init_angle_screen::$2) goto init_angle_screen::@3
to:init_angle_screen::@4
init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2
init_angle_screen::xb#3 = phi( init_angle_screen::@2/init_angle_screen::xb#4 )
init_angle_screen::screen_bottomline#4 = phi( init_angle_screen::@2/init_angle_screen::screen_bottomline#5 )
init_angle_screen::screen_topline#4 = phi( init_angle_screen::@2/init_angle_screen::screen_topline#5 )
init_angle_screen::y#2 = phi( init_angle_screen::@2/init_angle_screen::y#4 )
init_angle_screen::x#3 = phi( init_angle_screen::@2/init_angle_screen::x#2 )
init_angle_screen::$3 = init_angle_screen::x#3 * 2
init_angle_screen::$4 = $27 - init_angle_screen::$3
init_angle_screen::$5 = init_angle_screen::$4 w= 0
init_angle_screen::xw#0 = (int)init_angle_screen::$5
init_angle_screen::$6 = init_angle_screen::y#2 * 2
init_angle_screen::$7 = init_angle_screen::$6 w= 0
init_angle_screen::yw#0 = (int)init_angle_screen::$7
atan2_16::x#0 = init_angle_screen::xw#0
atan2_16::y#0 = init_angle_screen::yw#0
call atan2_16
atan2_16::return#2 = atan2_16::return#1
to:init_angle_screen::@5
init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3
init_angle_screen::y#6 = phi( init_angle_screen::@3/init_angle_screen::y#2 )
init_angle_screen::xb#2 = phi( init_angle_screen::@3/init_angle_screen::xb#3 )
init_angle_screen::screen_bottomline#2 = phi( init_angle_screen::@3/init_angle_screen::screen_bottomline#4 )
init_angle_screen::x#4 = phi( init_angle_screen::@3/init_angle_screen::x#3 )
init_angle_screen::screen_topline#2 = phi( init_angle_screen::@3/init_angle_screen::screen_topline#4 )
atan2_16::return#4 = phi( init_angle_screen::@3/atan2_16::return#2 )
init_angle_screen::angle_w#0 = atan2_16::return#4
init_angle_screen::$9 = init_angle_screen::angle_w#0 + $80
init_angle_screen::ang_w#0 = byte1 init_angle_screen::$9
init_angle_screen::$11 = $80 + init_angle_screen::ang_w#0
init_angle_screen::screen_topline#2[init_angle_screen::x#4] = init_angle_screen::$11
init_angle_screen::$12 = $80 - init_angle_screen::ang_w#0
init_angle_screen::screen_bottomline#2[init_angle_screen::x#4] = init_angle_screen::$12
init_angle_screen::$13 = - init_angle_screen::ang_w#0
init_angle_screen::screen_topline#2[init_angle_screen::xb#2] = init_angle_screen::$13
init_angle_screen::screen_bottomline#2[init_angle_screen::xb#2] = init_angle_screen::ang_w#0
init_angle_screen::x#1 = ++ init_angle_screen::x#4
init_angle_screen::xb#1 = -- init_angle_screen::xb#2
to:init_angle_screen::@2
init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2
init_angle_screen::y#3 = phi( init_angle_screen::@2/init_angle_screen::y#4 )
init_angle_screen::screen_bottomline#3 = phi( init_angle_screen::@2/init_angle_screen::screen_bottomline#5 )
init_angle_screen::screen_topline#3 = phi( init_angle_screen::@2/init_angle_screen::screen_topline#5 )
init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#3 - $28
init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#3 + $28
init_angle_screen::y#1 = init_angle_screen::y#3 + rangenext(0,$c)
init_angle_screen::$14 = init_angle_screen::y#1 != rangelast(0,$c)
if(init_angle_screen::$14) goto init_angle_screen::@1
to:init_angle_screen::@return
init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4
return
to:@return
void __start()
__start: scope:[__start] from
call main
to:__start::@1
__start::@1: scope:[__start] from __start
to:__start::@return
__start::@return: scope:[__start] from __start::@1
return
to:@return
SYMBOL TABLE SSA
__constant char * const CHARSET = (char *)$2000
__constant unsigned int CORDIC_ATAN2_ANGLES_16[CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2
}}
__constant const char CORDIC_ITERATIONS_16 = $f
__constant char * const D018 = (char *)$d018
__constant char FONT_HEX_PROTO[] = { 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 }
__constant char * const RASTER = (char *)$d012
__constant char * const SCREEN = (char *)$2800
__constant char SIZEOF_UNSIGNED_INT = 2
void __start()
unsigned int atan2_16(int x , int y)
bool atan2_16::$0
int atan2_16::$1
bool atan2_16::$10
bool atan2_16::$11
number atan2_16::$12
bool atan2_16::$13
bool atan2_16::$14
unsigned int atan2_16::$15
bool atan2_16::$16
bool atan2_16::$17
bool atan2_16::$18
bool atan2_16::$19
int atan2_16::$2
bool atan2_16::$20
bool atan2_16::$21
char atan2_16::$22
char atan2_16::$23
bool atan2_16::$24
int atan2_16::$3
int atan2_16::$4
bool atan2_16::$5
int atan2_16::$6
int atan2_16::$7
int atan2_16::$8
int atan2_16::$9
unsigned int atan2_16::angle
unsigned int atan2_16::angle#0
unsigned int atan2_16::angle#1
unsigned int atan2_16::angle#10
unsigned int atan2_16::angle#11
unsigned int atan2_16::angle#12
unsigned int atan2_16::angle#13
unsigned int atan2_16::angle#14
unsigned int atan2_16::angle#15
unsigned int atan2_16::angle#16
unsigned int atan2_16::angle#17
unsigned int atan2_16::angle#18
unsigned int atan2_16::angle#19
unsigned int atan2_16::angle#2
unsigned int atan2_16::angle#20
unsigned int atan2_16::angle#3
unsigned int atan2_16::angle#4
unsigned int atan2_16::angle#5
unsigned int atan2_16::angle#6
unsigned int atan2_16::angle#7
unsigned int atan2_16::angle#8
unsigned int atan2_16::angle#9
char atan2_16::i
char atan2_16::i#0
char atan2_16::i#1
char atan2_16::i#10
char atan2_16::i#11
char atan2_16::i#2
char atan2_16::i#3
char atan2_16::i#4
char atan2_16::i#5
char atan2_16::i#6
char atan2_16::i#7
char atan2_16::i#8
char atan2_16::i#9
unsigned int atan2_16::return
unsigned int atan2_16::return#0
unsigned int atan2_16::return#1
unsigned int atan2_16::return#2
unsigned int atan2_16::return#3
unsigned int atan2_16::return#4
char atan2_16::shift
char atan2_16::shift#0
char atan2_16::shift#1
char atan2_16::shift#2
char atan2_16::shift#3
char atan2_16::shift#4
int atan2_16::x
int atan2_16::x#0
int atan2_16::x#1
int atan2_16::x#10
int atan2_16::x#11
int atan2_16::x#12
int atan2_16::x#13
int atan2_16::x#14
int atan2_16::x#15
int atan2_16::x#16
int atan2_16::x#17
int atan2_16::x#18
int atan2_16::x#2
int atan2_16::x#3
int atan2_16::x#4
int atan2_16::x#5
int atan2_16::x#6
int atan2_16::x#7
int atan2_16::x#8
int atan2_16::x#9
int atan2_16::xd
int atan2_16::xd#0
int atan2_16::xd#1
int atan2_16::xd#2
int atan2_16::xd#3
int atan2_16::xd#4
int atan2_16::xd#5
int atan2_16::xd#6
int atan2_16::xd#7
int atan2_16::xd#8
int atan2_16::xd#9
int atan2_16::xi
int atan2_16::xi#0
int atan2_16::xi#1
int atan2_16::xi#10
int atan2_16::xi#11
int atan2_16::xi#12
int atan2_16::xi#2
int atan2_16::xi#3
int atan2_16::xi#4
int atan2_16::xi#5
int atan2_16::xi#6
int atan2_16::xi#7
int atan2_16::xi#8
int atan2_16::xi#9
int atan2_16::y
int atan2_16::y#0
int atan2_16::y#1
int atan2_16::y#10
int atan2_16::y#11
int atan2_16::y#12
int atan2_16::y#13
int atan2_16::y#14
int atan2_16::y#15
int atan2_16::y#16
int atan2_16::y#17
int atan2_16::y#18
int atan2_16::y#19
int atan2_16::y#2
int atan2_16::y#20
int atan2_16::y#3
int atan2_16::y#4
int atan2_16::y#5
int atan2_16::y#6
int atan2_16::y#7
int atan2_16::y#8
int atan2_16::y#9
int atan2_16::yd
int atan2_16::yd#0
int atan2_16::yd#1
int atan2_16::yd#2
int atan2_16::yd#3
int atan2_16::yd#4
int atan2_16::yd#5
int atan2_16::yd#6
int atan2_16::yd#7
int atan2_16::yd#8
int atan2_16::yd#9
int atan2_16::yi
int atan2_16::yi#0
int atan2_16::yi#1
int atan2_16::yi#10
int atan2_16::yi#11
int atan2_16::yi#12
int atan2_16::yi#13
int atan2_16::yi#14
int atan2_16::yi#15
int atan2_16::yi#2
int atan2_16::yi#3
int atan2_16::yi#4
int atan2_16::yi#5
int atan2_16::yi#6
int atan2_16::yi#7
int atan2_16::yi#8
int atan2_16::yi#9
void init_angle_screen(char *screen)
number init_angle_screen::$11
number init_angle_screen::$12
char init_angle_screen::$13
bool init_angle_screen::$14
bool init_angle_screen::$2
number init_angle_screen::$3
number init_angle_screen::$4
unsigned int init_angle_screen::$5
number init_angle_screen::$6
unsigned int init_angle_screen::$7
number init_angle_screen::$9
char init_angle_screen::ang_w
char init_angle_screen::ang_w#0
unsigned int init_angle_screen::angle_w
unsigned int init_angle_screen::angle_w#0
char *init_angle_screen::screen
char *init_angle_screen::screen#0
char *init_angle_screen::screen#1
char *init_angle_screen::screen_bottomline
char *init_angle_screen::screen_bottomline#0
char *init_angle_screen::screen_bottomline#1
char *init_angle_screen::screen_bottomline#2
char *init_angle_screen::screen_bottomline#3
char *init_angle_screen::screen_bottomline#4
char *init_angle_screen::screen_bottomline#5
char *init_angle_screen::screen_bottomline#6
char *init_angle_screen::screen_topline
char *init_angle_screen::screen_topline#0
char *init_angle_screen::screen_topline#1
char *init_angle_screen::screen_topline#2
char *init_angle_screen::screen_topline#3
char *init_angle_screen::screen_topline#4
char *init_angle_screen::screen_topline#5
char *init_angle_screen::screen_topline#6
char init_angle_screen::x
char init_angle_screen::x#0
char init_angle_screen::x#1
char init_angle_screen::x#2
char init_angle_screen::x#3
char init_angle_screen::x#4
char init_angle_screen::xb
char init_angle_screen::xb#0
char init_angle_screen::xb#1
char init_angle_screen::xb#2
char init_angle_screen::xb#3
char init_angle_screen::xb#4
int init_angle_screen::xw
int init_angle_screen::xw#0
char init_angle_screen::y
char init_angle_screen::y#0
char init_angle_screen::y#1
char init_angle_screen::y#2
char init_angle_screen::y#3
char init_angle_screen::y#4
char init_angle_screen::y#5
char init_angle_screen::y#6
int init_angle_screen::yw
int init_angle_screen::yw#0
void init_font_hex(char *charset)
char init_font_hex::$0
char init_font_hex::$1
char init_font_hex::$2
bool init_font_hex::$3
bool init_font_hex::$4
bool init_font_hex::$5
char init_font_hex::c
char init_font_hex::c#0
char init_font_hex::c#1
char init_font_hex::c#2
char init_font_hex::c#3
char init_font_hex::c#4
char init_font_hex::c#5
char init_font_hex::c#6
char init_font_hex::c1
char init_font_hex::c1#0
char init_font_hex::c1#1
char init_font_hex::c1#2
char init_font_hex::c1#3
char init_font_hex::c1#4
char *init_font_hex::charset
char *init_font_hex::charset#0
char *init_font_hex::charset#1
char *init_font_hex::charset#2
char *init_font_hex::charset#3
char *init_font_hex::charset#4
char *init_font_hex::charset#5
char *init_font_hex::charset#6
char *init_font_hex::charset#7
char init_font_hex::i
char init_font_hex::i#0
char init_font_hex::i#1
char init_font_hex::i#2
char init_font_hex::idx
char init_font_hex::idx#0
char init_font_hex::idx#1
char init_font_hex::idx#2
char init_font_hex::idx#3
char init_font_hex::idx#4
char init_font_hex::idx#5
char init_font_hex::idx#6
char *init_font_hex::proto_hi
char *init_font_hex::proto_hi#0
char *init_font_hex::proto_hi#1
char *init_font_hex::proto_hi#2
char *init_font_hex::proto_hi#3
char *init_font_hex::proto_hi#4
char *init_font_hex::proto_hi#5
char *init_font_hex::proto_hi#6
char *init_font_hex::proto_lo
char *init_font_hex::proto_lo#0
char *init_font_hex::proto_lo#1
char *init_font_hex::proto_lo#2
char *init_font_hex::proto_lo#3
char *init_font_hex::proto_lo#4
void main()
char main::$1
bool main::$3
bool main::$4
bool main::$5
char *main::clear_char
char *main::clear_char#0
char *main::clear_char#1
char *main::clear_char#2
char *main::clear_char#3
char *main::clear_char#4
char *main::clear_char#5
number main::toD0181_$0
number main::toD0181_$1
char main::toD0181_$2
char main::toD0181_$3
number main::toD0181_$4
number main::toD0181_$5
number main::toD0181_$6
unsigned int main::toD0181_$7
char *main::toD0181_gfx
char *main::toD0181_gfx#0
char *main::toD0181_gfx#1
char main::toD0181_return
char main::toD0181_return#0
char main::toD0181_return#1
char main::toD0181_return#2
char main::toD0181_return#3
char *main::toD0181_screen
char *main::toD0181_screen#0
char *main::toD0181_screen#1
Adding number conversion cast (unumber) 0 in init_font_hex::charset#2[init_font_hex::idx#0] = 0
Adding number conversion cast (unumber) 4 in init_font_hex::$0 = init_font_hex::proto_hi#2[init_font_hex::i#2] << 4
Adding number conversion cast (unumber) 1 in init_font_hex::$1 = init_font_hex::proto_lo#2[init_font_hex::i#2] << 1
Adding number conversion cast (unumber) 0 in init_font_hex::charset#4[init_font_hex::idx#6] = 0
Adding number conversion cast (unumber) 0 in init_font_hex::charset#4[init_font_hex::idx#3] = 0
Adding number conversion cast (unumber) 5 in init_font_hex::proto_lo#1 = init_font_hex::proto_lo#3 + 5
Adding number conversion cast (unumber) 8 in init_font_hex::charset#0 = init_font_hex::charset#4 + 8
Adding number conversion cast (unumber) 5 in init_font_hex::proto_hi#1 = init_font_hex::proto_hi#3 + 5
Adding number conversion cast (snumber) 0 in atan2_16::$0 = atan2_16::y#1 >= 0
Adding number conversion cast (snumber) 0 in atan2_16::$5 = atan2_16::x#1 >= 0
Adding number conversion cast (snumber) 0 in atan2_16::$16 = atan2_16::yi#3 == 0
Adding number conversion cast (unumber) 2 in atan2_16::angle#1 = atan2_16::angle#6 / 2
Adding number conversion cast (snumber) 0 in atan2_16::$10 = atan2_16::x#4 < 0
Adding number conversion cast (unumber) 2 in atan2_16::$18 = atan2_16::shift#2 >= 2
Adding number conversion cast (snumber) 2 in atan2_16::xd#1 = atan2_16::xd#3 >> 2
Adding number conversion cast (snumber) 2 in atan2_16::yd#1 = atan2_16::yd#3 >> 2
Adding number conversion cast (unumber) 2 in atan2_16::shift#1 = atan2_16::shift#3 - 2
Adding number conversion cast (unumber) 0 in atan2_16::$24 = 0 != atan2_16::shift#4
Adding number conversion cast (snumber) 0 in atan2_16::$20 = atan2_16::yi#5 >= 0
Adding number conversion cast (snumber) 1 in atan2_16::xd#2 = atan2_16::xd#4 >> 1
Adding number conversion cast (snumber) 1 in atan2_16::yd#2 = atan2_16::yd#4 >> 1
Adding number conversion cast (unumber) 1 in atan2_16::i#1 = atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16-1)
Adding number conversion cast (snumber) 0 in atan2_16::$13 = atan2_16::y#4 < 0
Adding number conversion cast (unumber) $8000 in atan2_16::$12 = $8000 - atan2_16::angle#9
Adding number conversion cast (unumber) atan2_16::$12 in atan2_16::$12 = (unumber)$8000 - atan2_16::angle#9
Adding number conversion cast (unumber) $3fff in main::toD0181_$0 = main::toD0181_$7 & $3fff
Adding number conversion cast (unumber) main::toD0181_$0 in main::toD0181_$0 = main::toD0181_$7 & (unumber)$3fff
Adding number conversion cast (unumber) 4 in main::toD0181_$1 = main::toD0181_$0 * 4
Adding number conversion cast (unumber) main::toD0181_$1 in main::toD0181_$1 = main::toD0181_$0 * (unumber)4
Adding number conversion cast (unumber) 4 in main::toD0181_$4 = main::toD0181_$3 / 4
Adding number conversion cast (unumber) main::toD0181_$4 in main::toD0181_$4 = main::toD0181_$3 / (unumber)4
Adding number conversion cast (unumber) $f in main::toD0181_$5 = main::toD0181_$4 & $f
Adding number conversion cast (unumber) main::toD0181_$5 in main::toD0181_$5 = main::toD0181_$4 & (unumber)$f
Adding number conversion cast (unumber) main::toD0181_$6 in main::toD0181_$6 = main::toD0181_$2 | main::toD0181_$5
Adding number conversion cast (unumber) $ff in main::$3 = *RASTER != $ff
Adding number conversion cast (unumber) $800 in main::$4 = main::clear_char#2 < CHARSET+$800
Adding number conversion cast (unumber) 0 in *main::clear_char#3 = 0
Adding number conversion cast (unumber) $28*$c in init_angle_screen::screen_topline#0 = init_angle_screen::screen#1 + $28*$c
Adding number conversion cast (unumber) $28*$c in init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#1 + $28*$c
Adding number conversion cast (unumber) $13 in init_angle_screen::$2 = init_angle_screen::x#2 <= $13
Adding number conversion cast (unumber) 2 in init_angle_screen::$3 = init_angle_screen::x#3 * 2
Adding number conversion cast (unumber) init_angle_screen::$3 in init_angle_screen::$3 = init_angle_screen::x#3 * (unumber)2
Adding number conversion cast (unumber) $27 in init_angle_screen::$4 = $27 - init_angle_screen::$3
Adding number conversion cast (unumber) init_angle_screen::$4 in init_angle_screen::$4 = (unumber)$27 - init_angle_screen::$3
Adding number conversion cast (unumber) 0 in init_angle_screen::$5 = init_angle_screen::$4 w= 0
Adding number conversion cast (unumber) 2 in init_angle_screen::$6 = init_angle_screen::y#2 * 2
Adding number conversion cast (unumber) init_angle_screen::$6 in init_angle_screen::$6 = init_angle_screen::y#2 * (unumber)2
Adding number conversion cast (unumber) 0 in init_angle_screen::$7 = init_angle_screen::$6 w= 0
Adding number conversion cast (unumber) $80 in init_angle_screen::$9 = init_angle_screen::angle_w#0 + $80
Adding number conversion cast (unumber) init_angle_screen::$9 in init_angle_screen::$9 = init_angle_screen::angle_w#0 + (unumber)$80
Adding number conversion cast (unumber) $80 in init_angle_screen::$11 = $80 + init_angle_screen::ang_w#0
Adding number conversion cast (unumber) init_angle_screen::$11 in init_angle_screen::$11 = (unumber)$80 + init_angle_screen::ang_w#0
Adding number conversion cast (unumber) $80 in init_angle_screen::$12 = $80 - init_angle_screen::ang_w#0
Adding number conversion cast (unumber) init_angle_screen::$12 in init_angle_screen::$12 = (unumber)$80 - init_angle_screen::ang_w#0
Adding number conversion cast (unumber) $28 in init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#3 - $28
Adding number conversion cast (unumber) $28 in init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#3 + $28
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast init_font_hex::charset#2[init_font_hex::idx#0] = (unumber)0
Inlining cast init_font_hex::charset#4[init_font_hex::idx#6] = (unumber)0
Inlining cast init_font_hex::charset#4[init_font_hex::idx#3] = (unumber)0
Inlining cast *main::clear_char#3 = (unumber)0
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (char *) 53266
Simplifying constant pointer cast (char *) 53272
Simplifying constant pointer cast (char *) 8192
Simplifying constant pointer cast (char *) 10240
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 integer cast $3fff
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast $f
Simplifying constant integer cast $ff
Simplifying constant integer cast $800
Simplifying constant integer cast 0
Simplifying constant integer cast $13
Simplifying constant integer cast 2
Simplifying constant integer cast $27
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast $80
Simplifying constant integer cast $80
Simplifying constant integer cast $80
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) 4
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) 5
Finalized unsigned number type (char) 8
Finalized unsigned number type (char) 5
Finalized signed number type (signed char) 0
Finalized signed number type (signed char) 0
Finalized signed number type (signed char) 0
Finalized unsigned number type (char) 2
Finalized signed number type (signed char) 0
Finalized unsigned number type (char) 2
Finalized signed number type (signed char) 2
Finalized signed number type (signed char) 2
Finalized unsigned number type (char) 2
Finalized unsigned number type (char) 0
Finalized signed number type (signed char) 0
Finalized signed number type (signed char) 1
Finalized signed number type (signed char) 1
Finalized unsigned number type (char) 1
Finalized signed number type (signed char) 0
Finalized unsigned number type (unsigned int) $8000
Finalized unsigned number type (unsigned int) $3fff
Finalized unsigned number type (char) 4
Finalized unsigned number type (char) 4
Finalized unsigned number type (char) $f
Finalized unsigned number type (char) $ff
Finalized unsigned number type (unsigned int) $800
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) $13
Finalized unsigned number type (char) 2
Finalized unsigned number type (char) $27
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) 2
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) $80
Finalized unsigned number type (char) $80
Finalized unsigned number type (char) $80
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) $28
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to unsigned int in atan2_16::$12 = $8000 - atan2_16::angle#9
Inferred type updated to unsigned int in main::toD0181_$0 = main::toD0181_$7 & $3fff
Inferred type updated to unsigned int in main::toD0181_$1 = main::toD0181_$0 * 4
Inferred type updated to char in main::toD0181_$4 = main::toD0181_$3 / 4
Inferred type updated to char in main::toD0181_$5 = main::toD0181_$4 & $f
Inferred type updated to char in main::toD0181_$6 = main::toD0181_$2 | main::toD0181_$5
Inferred type updated to char in init_angle_screen::$3 = init_angle_screen::x#3 * 2
Inferred type updated to char in init_angle_screen::$4 = $27 - init_angle_screen::$3
Inferred type updated to char in init_angle_screen::$6 = init_angle_screen::y#2 * 2
Inferred type updated to unsigned int in init_angle_screen::$9 = init_angle_screen::angle_w#0 + $80
Inferred type updated to char in init_angle_screen::$11 = $80 + init_angle_screen::ang_w#0
Inferred type updated to char in init_angle_screen::$12 = $80 - init_angle_screen::ang_w#0
Inversing boolean not [59] atan2_16::$17 = atan2_16::yi#3 != 0 from [58] atan2_16::$16 = atan2_16::yi#3 == 0
Inversing boolean not [68] atan2_16::$11 = atan2_16::x#4 >= 0 from [67] atan2_16::$10 = atan2_16::x#4 < 0
Inversing boolean not [79] atan2_16::$19 = 0 == atan2_16::shift#4 from [78] atan2_16::$24 = 0 != atan2_16::shift#4
Inversing boolean not [103] atan2_16::$14 = atan2_16::y#4 >= 0 from [102] atan2_16::$13 = atan2_16::y#4 < 0
Inversing boolean not [145] main::$5 = main::clear_char#2 >= CHARSET+$800 from [144] main::$4 = main::clear_char#2 < CHARSET+$800
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 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 main::clear_char#2 = main::clear_char#4 main::clear_char#3
Alias init_angle_screen::x#2 = init_angle_screen::x#3 init_angle_screen::x#4
Alias init_angle_screen::y#2 = init_angle_screen::y#4 init_angle_screen::y#6 init_angle_screen::y#3
Alias init_angle_screen::screen_topline#2 = init_angle_screen::screen_topline#4 init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#3
Alias init_angle_screen::screen_bottomline#2 = init_angle_screen::screen_bottomline#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#3
Alias init_angle_screen::xb#2 = init_angle_screen::xb#3 init_angle_screen::xb#4
Alias atan2_16::return#2 = atan2_16::return#4
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 init_font_hex::charset#6 init_font_hex::charset#1
Identical Phi Values init_font_hex::proto_hi#2 init_font_hex::proto_hi#4
Identical Phi Values init_font_hex::proto_lo#2 init_font_hex::proto_lo#4
Identical Phi Values init_font_hex::charset#3 init_font_hex::charset#2
Identical Phi Values init_font_hex::c1#2 init_font_hex::c1#4
Identical Phi Values init_font_hex::c#2 init_font_hex::c#5
Identical Phi Values atan2_16::y#1 atan2_16::y#0
Identical Phi Values atan2_16::x#1 atan2_16::x#0
Identical Phi Values atan2_16::yi#10 atan2_16::yi#3
Identical Phi Values atan2_16::xi#10 atan2_16::xi#3
Identical Phi Values atan2_16::i#10 atan2_16::i#2
Identical Phi Values atan2_16::angle#14 atan2_16::angle#12
Identical Phi Values atan2_16::x#11 atan2_16::x#17
Identical Phi Values atan2_16::y#10 atan2_16::y#19
Identical Phi Values main::clear_char#2 main::clear_char#5
Identical Phi Values init_angle_screen::screen#1 init_angle_screen::screen#0
Identical Phi Values init_angle_screen::y#2 init_angle_screen::y#5
Identical Phi Values init_angle_screen::screen_topline#2 init_angle_screen::screen_topline#6
Identical Phi Values init_angle_screen::screen_bottomline#2 init_angle_screen::screen_bottomline#6
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values init_font_hex::proto_hi#4 init_font_hex::proto_hi#6
Identical Phi Values init_font_hex::c#5 init_font_hex::c#6
Identical Phi Values atan2_16::x#17 atan2_16::x#0
Identical Phi Values atan2_16::y#19 atan2_16::y#0
Identical Phi Values atan2_16::x#4 atan2_16::x#17
Identical Phi Values atan2_16::y#4 atan2_16::y#19
Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [153] init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0 + (unsigned int)$28*$c
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition init_font_hex::$3 [19] if(init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3
Simple Condition init_font_hex::$4 [28] if(init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2
Simple Condition init_font_hex::$5 [32] if(init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1
Simple Condition atan2_16::$0 [36] if(atan2_16::y#0>=0) goto atan2_16::@1
Simple Condition atan2_16::$5 [40] if(atan2_16::x#0>=0) goto atan2_16::@4
Simple Condition atan2_16::$17 [47] if(atan2_16::yi#3!=0) goto atan2_16::@11
Simple Condition atan2_16::$11 [51] if(atan2_16::x#0>=0) goto atan2_16::@7
Simple Condition atan2_16::$18 [54] if(atan2_16::shift#2>=2) goto atan2_16::@14
Simple Condition atan2_16::$19 [59] if(0==atan2_16::shift#2) goto atan2_16::@17
Simple Condition atan2_16::$20 [62] if(atan2_16::yi#3>=0) goto atan2_16::@18
Simple Condition atan2_16::$21 [76] if(atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@10
Simple Condition atan2_16::$14 [79] if(atan2_16::y#0>=0) goto atan2_16::@8
Simple Condition main::$3 [104] if(*RASTER!=$ff) goto main::@2
Simple Condition main::$5 [106] if(main::clear_char#5>=CHARSET+$800) goto main::@1
Simple Condition init_angle_screen::$2 [119] if(init_angle_screen::x#2<=$13) goto init_angle_screen::@3
Simple Condition init_angle_screen::$14 [147] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [76] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@12
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant init_font_hex::proto_hi#0 = FONT_HEX_PROTO
Constant init_font_hex::c#0 = 0
Constant init_font_hex::proto_lo#0 = FONT_HEX_PROTO
Constant init_font_hex::c1#0 = 0
Constant init_font_hex::idx#0 = 0
Constant init_font_hex::i#0 = 0
Constant atan2_16::angle#0 = 0
Constant atan2_16::i#0 = 0
Constant init_font_hex::charset#1 = CHARSET
Constant main::toD0181_screen#0 = SCREEN
Constant main::toD0181_gfx#0 = CHARSET
Constant init_angle_screen::screen#0 = SCREEN
Constant main::clear_char#0 = CHARSET
Constant init_angle_screen::y#0 = 0
Constant init_angle_screen::x#0 = 0
Constant init_angle_screen::xb#0 = $27
Successful SSA optimization Pass2ConstantIdentification
Constant main::toD0181_$7 = (unsigned int)main::toD0181_screen#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (unsigned int)main::toD0181_gfx#0 in [92] main::toD0181_$3 = byte1 (unsigned int)main::toD0181_gfx#0
Successful SSA optimization Pass2ConstantValues
if() condition always true - replacing block destination [101] if(true) goto main::@2
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 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 $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 $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 CORDIC_ITERATIONS_16-1+1
Resolved ranged next value [145] init_angle_screen::y#1 = ++ init_angle_screen::y#5 to ++
Resolved ranged comparison value [147] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to $d
Rewriting conditional comparison [119] if(init_angle_screen::x#2<=$13) goto init_angle_screen::@3
Simplifying expression containing zero init_font_hex::charset#2 in [8] init_font_hex::charset#2[init_font_hex::idx#0] = 0
Successful SSA optimization PassNSimplifyExpressionWithZero
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Eliminating unused variable init_font_hex::idx#4 and assignment [15] init_font_hex::idx#4 = ++ init_font_hex::idx#3
Successful SSA optimization PassNEliminateUnusedVars
Removing unused procedure __start
Removing unused procedure block __start
Removing unused procedure block __start::@1
Removing unused procedure block __start::@return
Successful SSA optimization PassNEliminateEmptyStart
Adding number conversion cast (unumber) 5 in [11] if(init_font_hex::i#1!=5) goto init_font_hex::@3
Adding number conversion cast (unumber) $10 in [18] if(init_font_hex::c1#1!=$10) goto init_font_hex::@2
Adding number conversion cast (unumber) $10 in [21] if(init_font_hex::c#1!=$10) goto init_font_hex::@1
Adding number conversion cast (unumber) CORDIC_ITERATIONS_16-1+1 in [54] if(atan2_16::i#1==CORDIC_ITERATIONS_16-1+1) goto atan2_16::@12
Adding number conversion cast (unumber) 1 in [54] if(atan2_16::i#1==(unumber)CORDIC_ITERATIONS_16-1+1) goto atan2_16::@12
Adding number conversion cast (unumber) $13+1 in [80] if(init_angle_screen::x#2<$13+1) goto init_angle_screen::@3
Adding number conversion cast (unumber) 1 in [80] if(init_angle_screen::x#2<(unumber)$13+1) goto init_angle_screen::@3
Adding number conversion cast (unumber) $d in [107] if(init_angle_screen::y#1!=$d) goto init_angle_screen::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast 5
Simplifying constant integer cast $10
Simplifying constant integer cast $10
Simplifying constant integer cast CORDIC_ITERATIONS_16-1+(unumber)1
Simplifying constant integer cast 1
Simplifying constant integer cast $13+(unumber)1
Simplifying constant integer cast 1
Simplifying constant integer cast $d
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (char) 5
Finalized unsigned number type (char) $10
Finalized unsigned number type (char) $10
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) $d
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias init_angle_screen::screen_bottomline#0 = init_angle_screen::screen_topline#0
Successful SSA optimization Pass2AliasElimination
Constant right-side identified [3] init_font_hex::idx#1 = ++ init_font_hex::idx#0
Constant right-side identified [62] main::toD0181_$0 = main::toD0181_$7 & $3fff
Constant right-side identified [65] main::toD0181_$3 = byte1 (unsigned int)main::toD0181_gfx#0
Constant right-side identified [76] init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0 + (unsigned int)$28*$c
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant init_font_hex::idx#1 = ++init_font_hex::idx#0
Constant main::toD0181_$0 = main::toD0181_$7&$3fff
Constant main::toD0181_$3 = byte1 (unsigned int)main::toD0181_gfx#0
Constant init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0+(unsigned int)$28*$c
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [61] main::toD0181_$1 = main::toD0181_$0 * 4
Constant right-side identified [63] main::toD0181_$4 = main::toD0181_$3 / 4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant main::toD0181_$1 = main::toD0181_$0*4
Constant main::toD0181_$4 = main::toD0181_$3/4
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [61] main::toD0181_$2 = byte1 main::toD0181_$1
Constant right-side identified [62] main::toD0181_$5 = main::toD0181_$4 & $f
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant main::toD0181_$2 = byte1 main::toD0181_$1
Constant main::toD0181_$5 = main::toD0181_$4&$f
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [61] main::toD0181_return#0 = main::toD0181_$2 | main::toD0181_$5
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant main::toD0181_return#0 = main::toD0181_$2|main::toD0181_$5
Successful SSA optimization Pass2ConstantIdentification
Inlining Noop Cast [74] init_angle_screen::xw#0 = (int)init_angle_screen::$5 keeping init_angle_screen::xw#0
Inlining Noop Cast [77] init_angle_screen::yw#0 = (int)init_angle_screen::$7 keeping init_angle_screen::yw#0
Successful SSA optimization Pass2NopCastInlining
Rewriting division to use shift [31] atan2_16::angle#1 = atan2_16::angle#6 / 2
Rewriting multiplication to use shift [45] atan2_16::$22 = atan2_16::i#2 * SIZEOF_UNSIGNED_INT
Rewriting multiplication to use shift [49] atan2_16::$23 = atan2_16::i#2 * SIZEOF_UNSIGNED_INT
Rewriting multiplication to use shift [71] init_angle_screen::$3 = init_angle_screen::x#2 * 2
Rewriting multiplication to use shift [75] init_angle_screen::$6 = init_angle_screen::y#5 * 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings init_font_hex::proto_hi#0
Inlining constant with var siblings init_font_hex::c#0
Inlining constant with var siblings init_font_hex::proto_lo#0
Inlining constant with var siblings init_font_hex::c1#0
Inlining constant with var siblings init_font_hex::idx#0
Inlining constant with var siblings init_font_hex::i#0
Inlining constant with var siblings init_font_hex::charset#1
Inlining constant with var siblings init_font_hex::idx#1
Inlining constant with var siblings atan2_16::angle#0
Inlining constant with var siblings atan2_16::i#0
Inlining constant with var siblings main::clear_char#0
Inlining constant with var siblings init_angle_screen::y#0
Inlining constant with var siblings init_angle_screen::x#0
Inlining constant with var siblings init_angle_screen::xb#0
Inlining constant with var siblings init_angle_screen::screen_bottomline#0
Constant inlined main::toD0181_screen#0 = SCREEN
Constant inlined main::toD0181_gfx#0 = CHARSET
Constant inlined main::clear_char#0 = CHARSET
Constant inlined init_font_hex::proto_hi#0 = FONT_HEX_PROTO
Constant inlined init_angle_screen::y#0 = 0
Constant inlined init_angle_screen::x#0 = 0
Constant inlined atan2_16::angle#0 = 0
Constant inlined init_angle_screen::screen_bottomline#0 = SCREEN+(unsigned int)$28*$c
Constant inlined init_font_hex::charset#1 = CHARSET
Constant inlined init_angle_screen::screen#0 = SCREEN
Constant inlined init_font_hex::c1#0 = 0
Constant inlined main::toD0181_$7 = (unsigned int)SCREEN
Constant inlined init_angle_screen::xb#0 = $27
Constant inlined main::toD0181_$2 = byte1 (unsigned int)SCREEN&$3fff*4
Constant inlined atan2_16::i#0 = 0
Constant inlined main::toD0181_$1 = (unsigned int)SCREEN&$3fff*4
Constant inlined main::toD0181_$0 = (unsigned int)SCREEN&$3fff
Constant inlined init_font_hex::i#0 = 0
Constant inlined main::toD0181_$5 = byte1 (unsigned int)CHARSET/4&$f
Constant inlined main::toD0181_$4 = byte1 (unsigned int)CHARSET/4
Constant inlined main::toD0181_$3 = byte1 (unsigned int)CHARSET
Constant inlined init_font_hex::idx#1 = ++0
Constant inlined init_font_hex::idx#0 = 0
Constant inlined init_font_hex::proto_lo#0 = FONT_HEX_PROTO
Constant inlined init_font_hex::c#0 = 0
Successful SSA optimization Pass2ConstantInlining
Simplifying constant integer increment ++0
Successful SSA optimization Pass2ConstantSimplification
Eliminating unused constant SIZEOF_UNSIGNED_INT
Successful SSA optimization PassNEliminateUnusedVars
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) $c
Successful SSA optimization PassNFinalizeNumberTypeConversions
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::@8(between main::@3 and main::@1)
Added new block during phi lifting init_angle_screen::@6(between init_angle_screen::@4 and init_angle_screen::@1)
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@6
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::toD0181_@return
Adding NOP phi() at start of main::@7
Adding NOP phi() at start of init_font_hex
Adding NOP phi() at start of init_angle_screen
CALL GRAPH
Calls in [main] to init_font_hex:1 init_angle_screen:6
Calls in [init_angle_screen] to atan2_16:66
Created 31 initial phi equivalence classes
Coalesced [13] main::clear_char#7 = main::clear_char#1
Coalesced (already) [14] main::clear_char#6 = main::clear_char#5
Coalesced [17] init_font_hex::charset#9 = init_font_hex::charset#5
Coalesced [39] init_font_hex::charset#8 = init_font_hex::charset#0
Coalesced [40] init_font_hex::proto_hi#7 = init_font_hex::proto_hi#1
Coalesced [41] init_font_hex::c#7 = init_font_hex::c#1
Coalesced (already) [42] init_font_hex::charset#10 = init_font_hex::charset#0
Coalesced [43] init_font_hex::proto_lo#5 = init_font_hex::proto_lo#1
Coalesced [44] init_font_hex::c1#5 = init_font_hex::c1#1
Coalesced [45] init_font_hex::i#3 = init_font_hex::i#1
Coalesced [46] init_font_hex::idx#7 = init_font_hex::idx#2
Coalesced [56] init_angle_screen::y#7 = init_angle_screen::y#1
Coalesced [57] init_angle_screen::screen_topline#7 = init_angle_screen::screen_topline#1
Coalesced [58] init_angle_screen::screen_bottomline#7 = init_angle_screen::screen_bottomline#1
Coalesced [80] init_angle_screen::x#5 = init_angle_screen::x#1
Coalesced [81] init_angle_screen::xb#5 = init_angle_screen::xb#1
Coalesced [84] atan2_16::yi#17 = atan2_16::$2
Coalesced [88] atan2_16::xi#14 = atan2_16::$7
Coalesced [90] atan2_16::yi#19 = atan2_16::yi#0
Coalesced [91] atan2_16::xi#16 = atan2_16::xi#0
Coalesced [94] atan2_16::angle#22 = atan2_16::angle#12
Coalesced [99] atan2_16::angle#27 = atan2_16::angle#4
Coalesced [103] atan2_16::return#6 = atan2_16::angle#5
Coalesced [106] atan2_16::return#5 = atan2_16::angle#11
Coalesced [107] atan2_16::angle#26 = atan2_16::angle#1
Not coalescing [108] atan2_16::shift#5 = atan2_16::i#2
Not coalescing [109] atan2_16::xd#10 = atan2_16::xi#3
Not coalescing [110] atan2_16::yd#10 = atan2_16::yi#3
Coalesced [116] atan2_16::yd#13 = atan2_16::yd#2
Coalesced [117] atan2_16::xd#13 = atan2_16::xd#2
Coalesced [124] atan2_16::yi#21 = atan2_16::yi#2
Coalesced [125] atan2_16::angle#25 = atan2_16::angle#3
Coalesced [126] atan2_16::xi#18 = atan2_16::xi#2
Coalesced [130] atan2_16::yi#18 = atan2_16::yi#8
Coalesced [131] atan2_16::xi#15 = atan2_16::xi#8
Coalesced [132] atan2_16::i#12 = atan2_16::i#1
Coalesced [133] atan2_16::angle#21 = atan2_16::angle#13
Coalesced (already) [134] atan2_16::angle#23 = atan2_16::angle#13
Coalesced [139] atan2_16::yi#20 = atan2_16::yi#1
Coalesced [140] atan2_16::angle#24 = atan2_16::angle#2
Coalesced [141] atan2_16::xi#17 = atan2_16::xi#1
Coalesced [142] atan2_16::yd#12 = atan2_16::yd#3
Coalesced [143] atan2_16::xd#12 = atan2_16::xd#3
Coalesced [147] atan2_16::shift#6 = atan2_16::shift#1
Coalesced [148] atan2_16::xd#11 = atan2_16::xd#1
Coalesced [149] atan2_16::yd#11 = atan2_16::yd#1
Not coalescing [150] atan2_16::xi#13 = atan2_16::x#0
Not coalescing [151] atan2_16::yi#16 = atan2_16::y#0
Coalesced down to 23 phi equivalence classes
Culled Empty Block label main::@6
Culled Empty Block label main::toD0181_@return
Culled Empty Block label main::@7
Culled Empty Block label main::@8
Culled Empty Block label init_font_hex::@6
Culled Empty Block label init_font_hex::@7
Culled Empty Block label init_font_hex::@8
Culled Empty Block label init_angle_screen::@6
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
Adding NOP phi() at start of main
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of init_font_hex
Adding NOP phi() at start of init_angle_screen
FINAL CONTROL FLOW GRAPH
void main()
main: scope:[main] from
[0] phi()
[1] call init_font_hex
to:main::toD0181
main::toD0181: scope:[main] from main
[2] phi()
to:main::@5
main::@5: scope:[main] from main::toD0181
[3] *D018 = main::toD0181_return#0
[4] call init_angle_screen
to:main::@1
main::@1: scope:[main] from main::@3 main::@4 main::@5
[5] main::clear_char#5 = phi( main::@3/main::clear_char#5, main::@4/main::clear_char#1, main::@5/CHARSET )
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
[6] if(*RASTER!=$ff) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
[7] if(main::clear_char#5>=CHARSET+$800) goto main::@1
to:main::@4
main::@4: scope:[main] from main::@3
[8] *main::clear_char#5 = 0
[9] main::clear_char#1 = ++ main::clear_char#5
to:main::@1
void init_font_hex(char *charset)
init_font_hex: scope:[init_font_hex] from main
[10] phi()
to:init_font_hex::@1
init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5
[11] init_font_hex::c#6 = phi( init_font_hex/0, init_font_hex::@5/init_font_hex::c#1 )
[11] init_font_hex::proto_hi#6 = phi( init_font_hex/FONT_HEX_PROTO, init_font_hex::@5/init_font_hex::proto_hi#1 )
[11] init_font_hex::charset#5 = phi( init_font_hex/CHARSET, init_font_hex::@5/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
[12] init_font_hex::c1#4 = phi( init_font_hex::@1/0, init_font_hex::@4/init_font_hex::c1#1 )
[12] init_font_hex::proto_lo#4 = phi( init_font_hex::@1/FONT_HEX_PROTO, init_font_hex::@4/init_font_hex::proto_lo#1 )
[12] init_font_hex::charset#2 = phi( init_font_hex::@1/init_font_hex::charset#5, init_font_hex::@4/init_font_hex::charset#0 )
[13] *init_font_hex::charset#2 = 0
to:init_font_hex::@3
init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3
[14] init_font_hex::idx#5 = phi( init_font_hex::@2/1, init_font_hex::@3/init_font_hex::idx#2 )
[14] init_font_hex::i#2 = phi( init_font_hex::@2/0, init_font_hex::@3/init_font_hex::i#1 )
[15] init_font_hex::$0 = init_font_hex::proto_hi#6[init_font_hex::i#2] << 4
[16] init_font_hex::$1 = init_font_hex::proto_lo#4[init_font_hex::i#2] << 1
[17] init_font_hex::$2 = init_font_hex::$0 | init_font_hex::$1
[18] init_font_hex::charset#2[init_font_hex::idx#5] = init_font_hex::$2
[19] init_font_hex::idx#2 = ++ init_font_hex::idx#5
[20] init_font_hex::i#1 = ++ init_font_hex::i#2
[21] if(init_font_hex::i#1!=5) goto init_font_hex::@3
to:init_font_hex::@4
init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3
[22] init_font_hex::charset#2[init_font_hex::idx#2] = 0
[23] init_font_hex::idx#3 = ++ init_font_hex::idx#2
[24] init_font_hex::charset#2[init_font_hex::idx#3] = 0
[25] init_font_hex::proto_lo#1 = init_font_hex::proto_lo#4 + 5
[26] init_font_hex::charset#0 = init_font_hex::charset#2 + 8
[27] init_font_hex::c1#1 = ++ init_font_hex::c1#4
[28] if(init_font_hex::c1#1!=$10) goto init_font_hex::@2
to:init_font_hex::@5
init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4
[29] init_font_hex::proto_hi#1 = init_font_hex::proto_hi#6 + 5
[30] init_font_hex::c#1 = ++ init_font_hex::c#6
[31] if(init_font_hex::c#1!=$10) goto init_font_hex::@1
to:init_font_hex::@return
init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5
[32] return
to:@return
void init_angle_screen(char *screen)
init_angle_screen: scope:[init_angle_screen] from main::@5
[33] phi()
to:init_angle_screen::@1
init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4
[34] init_angle_screen::screen_bottomline#6 = phi( init_angle_screen/SCREEN+(unsigned int)$28*$c, init_angle_screen::@4/init_angle_screen::screen_bottomline#1 )
[34] init_angle_screen::screen_topline#6 = phi( init_angle_screen/SCREEN+(unsigned int)$28*$c, init_angle_screen::@4/init_angle_screen::screen_topline#1 )
[34] init_angle_screen::y#5 = phi( init_angle_screen/0, init_angle_screen::@4/init_angle_screen::y#1 )
to:init_angle_screen::@2
init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5
[35] init_angle_screen::xb#2 = phi( init_angle_screen::@1/$27, init_angle_screen::@5/init_angle_screen::xb#1 )
[35] init_angle_screen::x#2 = phi( init_angle_screen::@1/0, init_angle_screen::@5/init_angle_screen::x#1 )
[36] if(init_angle_screen::x#2<$13+1) goto init_angle_screen::@3
to:init_angle_screen::@4
init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2
[37] init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#6 - $28
[38] init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#6 + $28
[39] init_angle_screen::y#1 = ++ init_angle_screen::y#5
[40] if(init_angle_screen::y#1!=$d) goto init_angle_screen::@1
to:init_angle_screen::@return
init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4
[41] return
to:@return
init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2
[42] init_angle_screen::$3 = init_angle_screen::x#2 << 1
[43] init_angle_screen::$4 = $27 - init_angle_screen::$3
[44] init_angle_screen::xw#0 = init_angle_screen::$4 w= 0
[45] init_angle_screen::$6 = init_angle_screen::y#5 << 1
[46] init_angle_screen::yw#0 = init_angle_screen::$6 w= 0
[47] atan2_16::x#0 = (int)init_angle_screen::xw#0
[48] atan2_16::y#0 = (int)init_angle_screen::yw#0
[49] call atan2_16
[50] atan2_16::return#2 = atan2_16::return#0
to:init_angle_screen::@5
init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3
[51] init_angle_screen::angle_w#0 = atan2_16::return#2
[52] init_angle_screen::$9 = init_angle_screen::angle_w#0 + $80
[53] init_angle_screen::ang_w#0 = byte1 init_angle_screen::$9
[54] init_angle_screen::$11 = $80 + init_angle_screen::ang_w#0
[55] init_angle_screen::screen_topline#6[init_angle_screen::x#2] = init_angle_screen::$11
[56] init_angle_screen::$12 = $80 - init_angle_screen::ang_w#0
[57] init_angle_screen::screen_bottomline#6[init_angle_screen::x#2] = init_angle_screen::$12
[58] init_angle_screen::$13 = - init_angle_screen::ang_w#0
[59] init_angle_screen::screen_topline#6[init_angle_screen::xb#2] = init_angle_screen::$13
[60] init_angle_screen::screen_bottomline#6[init_angle_screen::xb#2] = init_angle_screen::ang_w#0
[61] init_angle_screen::x#1 = ++ init_angle_screen::x#2
[62] init_angle_screen::xb#1 = -- init_angle_screen::xb#2
to:init_angle_screen::@2
unsigned int atan2_16(int x , int y)
atan2_16: scope:[atan2_16] from init_angle_screen::@3
[63] if(atan2_16::y#0>=0) goto atan2_16::@1
to:atan2_16::@2
atan2_16::@2: scope:[atan2_16] from atan2_16
[64] atan2_16::$2 = - atan2_16::y#0
to:atan2_16::@3
atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2
[65] atan2_16::yi#0 = phi( atan2_16::@1/atan2_16::yi#16, atan2_16::@2/atan2_16::$2 )
[66] if(atan2_16::x#0>=0) goto atan2_16::@4
to:atan2_16::@5
atan2_16::@5: scope:[atan2_16] from atan2_16::@3
[67] atan2_16::$7 = - atan2_16::x#0
to:atan2_16::@6
atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5
[68] atan2_16::xi#0 = phi( atan2_16::@4/atan2_16::xi#13, atan2_16::@5/atan2_16::$7 )
to:atan2_16::@10
atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6
[69] atan2_16::angle#12 = phi( atan2_16::@19/atan2_16::angle#13, atan2_16::@6/0 )
[69] atan2_16::i#2 = phi( atan2_16::@19/atan2_16::i#1, atan2_16::@6/0 )
[69] atan2_16::xi#3 = phi( atan2_16::@19/atan2_16::xi#8, atan2_16::@6/atan2_16::xi#0 )
[69] atan2_16::yi#3 = phi( atan2_16::@19/atan2_16::yi#8, atan2_16::@6/atan2_16::yi#0 )
[70] if(atan2_16::yi#3!=0) goto atan2_16::@11
to:atan2_16::@12
atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19
[71] atan2_16::angle#6 = phi( atan2_16::@10/atan2_16::angle#12, atan2_16::@19/atan2_16::angle#13 )
[72] atan2_16::angle#1 = atan2_16::angle#6 >> 1
[73] if(atan2_16::x#0>=0) goto atan2_16::@7
to:atan2_16::@21
atan2_16::@21: scope:[atan2_16] from atan2_16::@12
[74] atan2_16::angle#4 = $8000 - atan2_16::angle#1
to:atan2_16::@7
atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21
[75] atan2_16::angle#11 = phi( atan2_16::@12/atan2_16::angle#1, atan2_16::@21/atan2_16::angle#4 )
[76] if(atan2_16::y#0>=0) goto atan2_16::@8
to:atan2_16::@9
atan2_16::@9: scope:[atan2_16] from atan2_16::@7
[77] atan2_16::angle#5 = - atan2_16::angle#11
to:atan2_16::@8
atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9
[78] atan2_16::return#0 = phi( atan2_16::@7/atan2_16::angle#11, atan2_16::@9/atan2_16::angle#5 )
to:atan2_16::@return
atan2_16::@return: scope:[atan2_16] from atan2_16::@8
[79] return
to:@return
atan2_16::@11: scope:[atan2_16] from atan2_16::@10
[80] atan2_16::shift#5 = atan2_16::i#2
[81] atan2_16::xd#10 = atan2_16::xi#3
[82] atan2_16::yd#10 = atan2_16::yi#3
to:atan2_16::@13
atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14
[83] atan2_16::yd#3 = phi( atan2_16::@11/atan2_16::yd#10, atan2_16::@14/atan2_16::yd#1 )
[83] atan2_16::xd#3 = phi( atan2_16::@11/atan2_16::xd#10, atan2_16::@14/atan2_16::xd#1 )
[83] atan2_16::shift#2 = phi( atan2_16::@11/atan2_16::shift#5, atan2_16::@14/atan2_16::shift#1 )
[84] if(atan2_16::shift#2>=2) goto atan2_16::@14
to:atan2_16::@15
atan2_16::@15: scope:[atan2_16] from atan2_16::@13
[85] if(0==atan2_16::shift#2) goto atan2_16::@17
to:atan2_16::@16
atan2_16::@16: scope:[atan2_16] from atan2_16::@15
[86] atan2_16::xd#2 = atan2_16::xd#3 >> 1
[87] atan2_16::yd#2 = atan2_16::yd#3 >> 1
to:atan2_16::@17
atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16
[88] atan2_16::xd#5 = phi( atan2_16::@15/atan2_16::xd#3, atan2_16::@16/atan2_16::xd#2 )
[88] atan2_16::yd#5 = phi( atan2_16::@15/atan2_16::yd#3, atan2_16::@16/atan2_16::yd#2 )
[89] if(atan2_16::yi#3>=0) goto atan2_16::@18
to:atan2_16::@20
atan2_16::@20: scope:[atan2_16] from atan2_16::@17
[90] atan2_16::xi#2 = atan2_16::xi#3 - atan2_16::yd#5
[91] atan2_16::yi#2 = atan2_16::yi#3 + atan2_16::xd#5
[92] atan2_16::$23 = atan2_16::i#2 << 1
[93] atan2_16::angle#3 = atan2_16::angle#12 - CORDIC_ATAN2_ANGLES_16[atan2_16::$23]
to:atan2_16::@19
atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20
[94] atan2_16::xi#8 = phi( atan2_16::@18/atan2_16::xi#1, atan2_16::@20/atan2_16::xi#2 )
[94] atan2_16::angle#13 = phi( atan2_16::@18/atan2_16::angle#2, atan2_16::@20/atan2_16::angle#3 )
[94] atan2_16::yi#8 = phi( atan2_16::@18/atan2_16::yi#1, atan2_16::@20/atan2_16::yi#2 )
[95] atan2_16::i#1 = ++ atan2_16::i#2
[96] if(atan2_16::i#1==CORDIC_ITERATIONS_16-1+1) goto atan2_16::@12
to:atan2_16::@10
atan2_16::@18: scope:[atan2_16] from atan2_16::@17
[97] atan2_16::xi#1 = atan2_16::xi#3 + atan2_16::yd#5
[98] atan2_16::yi#1 = atan2_16::yi#3 - atan2_16::xd#5
[99] atan2_16::$22 = atan2_16::i#2 << 1
[100] atan2_16::angle#2 = atan2_16::angle#12 + CORDIC_ATAN2_ANGLES_16[atan2_16::$22]
to:atan2_16::@19
atan2_16::@14: scope:[atan2_16] from atan2_16::@13
[101] atan2_16::xd#1 = atan2_16::xd#3 >> 2
[102] atan2_16::yd#1 = atan2_16::yd#3 >> 2
[103] atan2_16::shift#1 = atan2_16::shift#2 - 2
to:atan2_16::@13
atan2_16::@4: scope:[atan2_16] from atan2_16::@3
[104] atan2_16::xi#13 = atan2_16::x#0
to:atan2_16::@6
atan2_16::@1: scope:[atan2_16] from atan2_16
[105] atan2_16::yi#16 = atan2_16::y#0
to:atan2_16::@3
VARIABLE REGISTER WEIGHTS
unsigned int atan2_16(int x , int y)
int atan2_16::$2 // 20002.0
char atan2_16::$22 // 2.0000002E7
char atan2_16::$23 // 2.0000002E7
int atan2_16::$7 // 20002.0
unsigned int atan2_16::angle
unsigned int atan2_16::angle#1 // 15001.5
unsigned int atan2_16::angle#11 // 20002.0
unsigned int atan2_16::angle#12 // 1904762.0952380951
unsigned int atan2_16::angle#13 // 1.3333334666666666E7
unsigned int atan2_16::angle#2 // 2.0000002E7
unsigned int atan2_16::angle#3 // 2.0000002E7
unsigned int atan2_16::angle#4 // 20002.0
unsigned int atan2_16::angle#5 // 20002.0
unsigned int atan2_16::angle#6 // 2.0010003E7
char atan2_16::i
char atan2_16::i#1 // 1.50000015E7
char atan2_16::i#2 // 2083333.5416666665
unsigned int atan2_16::return
unsigned int atan2_16::return#0 // 7001.0
unsigned int atan2_16::return#2 // 2002.0
char atan2_16::shift
char atan2_16::shift#1 // 2.00000002E8
char atan2_16::shift#2 // 8.000000125E7
char atan2_16::shift#5 // 6666667.333333333
int atan2_16::x
int atan2_16::x#0 // 1079.078947368421
int atan2_16::xd
int atan2_16::xd#1 // 6.6666667333333336E7
int atan2_16::xd#10 // 1.0000001E7
int atan2_16::xd#2 // 1.0000001E7
int atan2_16::xd#3 // 7.666666833333333E7
int atan2_16::xd#5 // 1.0000001E7
int atan2_16::xi
int atan2_16::xi#0 // 30003.0
int atan2_16::xi#1 // 5000000.5
int atan2_16::xi#13 // 20002.0
int atan2_16::xi#2 // 5000000.5
int atan2_16::xi#3 // 2667333.6666666665
int atan2_16::xi#8 // 1.0000001E7
int atan2_16::y
int atan2_16::y#0 // 1025.125
int atan2_16::yd
int atan2_16::yd#1 // 1.00000001E8
int atan2_16::yd#10 // 2.0000002E7
int atan2_16::yd#2 // 2.0000002E7
int atan2_16::yd#3 // 4.6000001E7
int atan2_16::yd#5 // 2.0000002E7
int atan2_16::yi
int atan2_16::yi#0 // 6000.6
int atan2_16::yi#1 // 6666667.333333333
int atan2_16::yi#16 // 20002.0
int atan2_16::yi#2 // 6666667.333333333
int atan2_16::yi#3 // 3530000.4117647056
int atan2_16::yi#8 // 1.0000001E7
void init_angle_screen(char *screen)
char init_angle_screen::$11 // 2002.0
char init_angle_screen::$12 // 2002.0
char init_angle_screen::$13 // 2002.0
char init_angle_screen::$3 // 2002.0
char init_angle_screen::$4 // 2002.0
char init_angle_screen::$6 // 2002.0
unsigned int init_angle_screen::$9 // 2002.0
char init_angle_screen::ang_w
char init_angle_screen::ang_w#0 // 715.0
unsigned int init_angle_screen::angle_w
unsigned int init_angle_screen::angle_w#0 // 2002.0
char *init_angle_screen::screen
char *init_angle_screen::screen_bottomline
char *init_angle_screen::screen_bottomline#1 // 67.33333333333333
char *init_angle_screen::screen_bottomline#6 // 88.16
char *init_angle_screen::screen_topline
char *init_angle_screen::screen_topline#1 // 50.5
char *init_angle_screen::screen_topline#6 // 91.83333333333334
char init_angle_screen::x
char init_angle_screen::x#1 // 1001.0
char init_angle_screen::x#2 // 286.0
char init_angle_screen::xb
char init_angle_screen::xb#1 // 2002.0
char init_angle_screen::xb#2 // 182.0
int init_angle_screen::xw
unsigned int init_angle_screen::xw#0 // 333.6666666666667
char init_angle_screen::y
char init_angle_screen::y#1 // 151.5
char init_angle_screen::y#5 // 46.26923076923077
int init_angle_screen::yw
unsigned int init_angle_screen::yw#0 // 500.5
void init_font_hex(char *charset)
char init_font_hex::$0 // 10001.0
char init_font_hex::$1 // 20002.0
char init_font_hex::$2 // 20002.0
char init_font_hex::c
char init_font_hex::c#1 // 151.5
char init_font_hex::c#6 // 10.631578947368421
char init_font_hex::c1
char init_font_hex::c1#1 // 1501.5
char init_font_hex::c1#4 // 133.46666666666667
char *init_font_hex::charset
char *init_font_hex::charset#0 // 350.5
char *init_font_hex::charset#2 // 1079.0714285714287
char *init_font_hex::charset#5 // 202.0
char init_font_hex::i
char init_font_hex::i#1 // 15001.5
char init_font_hex::i#2 // 6667.333333333333
char init_font_hex::idx
char init_font_hex::idx#2 // 5501.0
char init_font_hex::idx#3 // 2002.0
char init_font_hex::idx#5 // 6000.6
char *init_font_hex::proto_hi
char *init_font_hex::proto_hi#1 // 67.33333333333333
char *init_font_hex::proto_hi#6 // 566.8333333333333
char *init_font_hex::proto_lo
char *init_font_hex::proto_lo#1 // 500.5
char *init_font_hex::proto_lo#4 // 923.3076923076923
void main()
char *main::clear_char
char *main::clear_char#1 // 22.0
char *main::clear_char#5 // 84.0
char *main::toD0181_gfx
char main::toD0181_return
char *main::toD0181_screen
Initial phi equivalence classes
[ main::clear_char#5 main::clear_char#1 ]
[ 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 ]
[ init_angle_screen::y#5 init_angle_screen::y#1 ]
[ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ]
[ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ]
[ init_angle_screen::x#2 init_angle_screen::x#1 ]
[ init_angle_screen::xb#2 init_angle_screen::xb#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 ]
[ 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 ]
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 ]
Added variable init_angle_screen::$3 to live range equivalence class [ init_angle_screen::$3 ]
Added variable init_angle_screen::$4 to live range equivalence class [ init_angle_screen::$4 ]
Added variable init_angle_screen::xw#0 to live range equivalence class [ init_angle_screen::xw#0 ]
Added variable init_angle_screen::$6 to live range equivalence class [ init_angle_screen::$6 ]
Added variable init_angle_screen::yw#0 to live range equivalence class [ init_angle_screen::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 init_angle_screen::angle_w#0 to live range equivalence class [ init_angle_screen::angle_w#0 ]
Added variable init_angle_screen::$9 to live range equivalence class [ init_angle_screen::$9 ]
Added variable init_angle_screen::ang_w#0 to live range equivalence class [ init_angle_screen::ang_w#0 ]
Added variable init_angle_screen::$11 to live range equivalence class [ init_angle_screen::$11 ]
Added variable init_angle_screen::$12 to live range equivalence class [ init_angle_screen::$12 ]
Added variable init_angle_screen::$13 to live range equivalence class [ init_angle_screen::$13 ]
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 ]
Complete equivalence classes
[ main::clear_char#5 main::clear_char#1 ]
[ 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 ]
[ init_angle_screen::y#5 init_angle_screen::y#1 ]
[ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ]
[ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ]
[ init_angle_screen::x#2 init_angle_screen::x#1 ]
[ init_angle_screen::xb#2 init_angle_screen::xb#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 ]
[ 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::$0 ]
[ init_font_hex::$1 ]
[ init_font_hex::$2 ]
[ init_font_hex::idx#3 ]
[ init_angle_screen::$3 ]
[ init_angle_screen::$4 ]
[ init_angle_screen::xw#0 ]
[ init_angle_screen::$6 ]
[ init_angle_screen::yw#0 ]
[ atan2_16::x#0 ]
[ atan2_16::y#0 ]
[ atan2_16::return#2 ]
[ init_angle_screen::angle_w#0 ]
[ init_angle_screen::$9 ]
[ init_angle_screen::ang_w#0 ]
[ init_angle_screen::$11 ]
[ init_angle_screen::$12 ]
[ init_angle_screen::$13 ]
[ atan2_16::$23 ]
[ atan2_16::$22 ]
Allocated zp[1]:2 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Allocated zp[2]:3 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated zp[2]:5 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated zp[2]:7 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
Allocated zp[2]:9 [ 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]:11 [ 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]:13 [ atan2_16::$23 ]
Allocated zp[1]:14 [ atan2_16::$22 ]
Allocated zp[1]:15 [ atan2_16::i#2 atan2_16::i#1 ]
Allocated zp[2]:16 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
Allocated zp[1]:18 [ init_font_hex::i#2 init_font_hex::i#1 ]
Allocated zp[1]:19 [ init_font_hex::$1 ]
Allocated zp[1]:20 [ init_font_hex::$2 ]
Allocated zp[1]:21 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Allocated zp[1]:22 [ init_font_hex::$0 ]
Allocated zp[1]:23 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Allocated zp[1]:24 [ init_font_hex::idx#3 ]
Allocated zp[1]:25 [ init_angle_screen::$3 ]
Allocated zp[1]:26 [ init_angle_screen::$4 ]
Allocated zp[1]:27 [ init_angle_screen::$6 ]
Allocated zp[2]:28 [ atan2_16::return#2 ]
Allocated zp[2]:30 [ init_angle_screen::angle_w#0 ]
Allocated zp[2]:32 [ init_angle_screen::$9 ]
Allocated zp[1]:34 [ init_angle_screen::$11 ]
Allocated zp[1]:35 [ init_angle_screen::$12 ]
Allocated zp[1]:36 [ init_angle_screen::$13 ]
Allocated zp[1]:37 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Allocated zp[2]:38 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
Allocated zp[2]:40 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
Allocated zp[1]:42 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Allocated zp[2]:43 [ atan2_16::x#0 ]
Allocated zp[2]:45 [ atan2_16::y#0 ]
Allocated zp[1]:47 [ init_angle_screen::ang_w#0 ]
Allocated zp[2]:48 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
Allocated zp[2]:50 [ init_angle_screen::yw#0 ]
Allocated zp[2]:52 [ init_angle_screen::xw#0 ]
Allocated zp[1]:54 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Allocated zp[1]:55 [ init_font_hex::c#6 init_font_hex::c#1 ]
Allocated zp[2]:56 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ]
Allocated zp[2]:58 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ]
Allocated zp[2]:60 [ main::clear_char#5 main::clear_char#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [3] *D018 = main::toD0181_return#0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [6] if(*RASTER!=$ff) goto main::@2 [ main::clear_char#5 ] ( [ main::clear_char#5 ] { } ) always clobbers reg byte a
Statement [7] if(main::clear_char#5>=CHARSET+$800) goto main::@1 [ main::clear_char#5 ] ( [ main::clear_char#5 ] { } ) always clobbers reg byte a
Statement [8] *main::clear_char#5 = 0 [ main::clear_char#5 ] ( [ main::clear_char#5 ] { } ) always clobbers reg byte a reg byte y
Statement [13] *init_font_hex::charset#2 = 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: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 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp[1]:55 [ init_font_hex::c#6 init_font_hex::c#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:55 [ init_font_hex::c#6 init_font_hex::c#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:37 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:37 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Statement [15] init_font_hex::$0 = init_font_hex::proto_hi#6[init_font_hex::i#2] << 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 ] ( init_font_hex: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 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:18 [ init_font_hex::i#2 init_font_hex::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:21 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Statement [16] init_font_hex::$1 = init_font_hex::proto_lo#4[init_font_hex::i#2] << 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 ] ( init_font_hex: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 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:22 [ init_font_hex::$0 ]
Statement [22] init_font_hex::charset#2[init_font_hex::idx#2] = 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 ] ( init_font_hex: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::idx#2 ] { } ) always clobbers reg byte a
Statement [24] init_font_hex::charset#2[init_font_hex::idx#3] = 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: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 ] { } ) always clobbers reg byte a
Statement [25] init_font_hex::proto_lo#1 = init_font_hex::proto_lo#4 + 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 ] ( init_font_hex:1 [ 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 [26] init_font_hex::charset#0 = init_font_hex::charset#2 + 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 ] ( init_font_hex:1 [ 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 [29] init_font_hex::proto_hi#1 = init_font_hex::proto_hi#6 + 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( init_font_hex:1 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] { } ) always clobbers reg byte a
Statement [37] init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#6 - $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:54 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Statement [38] init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#6 + $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] { } ) always clobbers reg byte a
Statement [42] init_angle_screen::$3 = init_angle_screen::x#2 << 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] { { 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]:42 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:23 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Statement [43] init_angle_screen::$4 = $27 - init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [45] init_angle_screen::$6 = init_angle_screen::y#5 << 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [47] atan2_16::x#0 = (int)init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [48] atan2_16::y#0 = (int)init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [50] atan2_16::return#2 = atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [51] init_angle_screen::angle_w#0 = atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] { } ) always clobbers reg byte a
Statement [52] init_angle_screen::$9 = init_angle_screen::angle_w#0 + $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$9 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$9 ] { } ) always clobbers reg byte a
Statement [56] init_angle_screen::$12 = $80 - init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:47 [ init_angle_screen::ang_w#0 ]
Statement [58] init_angle_screen::$13 = - init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] { } ) always clobbers reg byte a
Statement [60] init_angle_screen::screen_bottomline#6[init_angle_screen::xb#2] = init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] { } ) always clobbers reg byte a
Statement [63] if(atan2_16::y#0>=0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [64] atan2_16::$2 = - atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [66] if(atan2_16::x#0>=0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [67] atan2_16::$7 = - atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [70] if(atan2_16::yi#3!=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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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]:15 [ atan2_16::i#2 atan2_16::i#1 ]
Statement [72] atan2_16::angle#1 = atan2_16::angle#6 >> 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [73] if(atan2_16::x#0>=0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [74] atan2_16::angle#4 = $8000 - atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [76] if(atan2_16::y#0>=0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [77] atan2_16::angle#5 = - atan2_16::angle#11 [ atan2_16::angle#5 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [81] atan2_16::xd#10 = 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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]:2 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Statement [82] atan2_16::yd#10 = 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [86] atan2_16::xd#2 = atan2_16::xd#3 >> 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [87] atan2_16::yd#2 = atan2_16::yd#3 >> 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [89] if(atan2_16::yi#3>=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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [90] atan2_16::xi#2 = atan2_16::xi#3 - 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [91] atan2_16::yi#2 = atan2_16::yi#3 + 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [92] atan2_16::$23 = atan2_16::i#2 << 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [93] atan2_16::angle#3 = atan2_16::angle#12 - CORDIC_ATAN2_ANGLES_16[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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [97] atan2_16::xi#1 = atan2_16::xi#3 + 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [98] atan2_16::yi#1 = atan2_16::yi#3 - 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [99] atan2_16::$22 = atan2_16::i#2 << 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [100] atan2_16::angle#2 = atan2_16::angle#12 + CORDIC_ATAN2_ANGLES_16[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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [101] atan2_16::xd#1 = atan2_16::xd#3 >> 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [102] atan2_16::yd#1 = atan2_16::yd#3 >> 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [104] atan2_16::xi#13 = atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [105] atan2_16::yi#16 = atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [3] *D018 = main::toD0181_return#0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [6] if(*RASTER!=$ff) goto main::@2 [ main::clear_char#5 ] ( [ main::clear_char#5 ] { } ) always clobbers reg byte a
Statement [7] if(main::clear_char#5>=CHARSET+$800) goto main::@1 [ main::clear_char#5 ] ( [ main::clear_char#5 ] { } ) always clobbers reg byte a
Statement [8] *main::clear_char#5 = 0 [ main::clear_char#5 ] ( [ main::clear_char#5 ] { } ) always clobbers reg byte a reg byte y
Statement [13] *init_font_hex::charset#2 = 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: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 ] { } ) always clobbers reg byte a reg byte y
Statement [15] init_font_hex::$0 = init_font_hex::proto_hi#6[init_font_hex::i#2] << 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 ] ( init_font_hex: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 ] { } ) always clobbers reg byte a
Statement [16] init_font_hex::$1 = init_font_hex::proto_lo#4[init_font_hex::i#2] << 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 ] ( init_font_hex: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 ] { } ) always clobbers reg byte a
Statement [22] init_font_hex::charset#2[init_font_hex::idx#2] = 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 ] ( init_font_hex: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::idx#2 ] { } ) always clobbers reg byte a
Statement [24] init_font_hex::charset#2[init_font_hex::idx#3] = 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: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 ] { } ) always clobbers reg byte a
Statement [25] init_font_hex::proto_lo#1 = init_font_hex::proto_lo#4 + 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 ] ( init_font_hex:1 [ 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 [26] init_font_hex::charset#0 = init_font_hex::charset#2 + 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 ] ( init_font_hex:1 [ 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 [29] init_font_hex::proto_hi#1 = init_font_hex::proto_hi#6 + 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( init_font_hex:1 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] { } ) always clobbers reg byte a
Statement [37] init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#6 - $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] { } ) always clobbers reg byte a
Statement [38] init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#6 + $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] { } ) always clobbers reg byte a
Statement [42] init_angle_screen::$3 = init_angle_screen::x#2 << 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [43] init_angle_screen::$4 = $27 - init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [45] init_angle_screen::$6 = init_angle_screen::y#5 << 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [47] atan2_16::x#0 = (int)init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [48] atan2_16::y#0 = (int)init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [50] atan2_16::return#2 = atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [51] init_angle_screen::angle_w#0 = atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] { } ) always clobbers reg byte a
Statement [52] init_angle_screen::$9 = init_angle_screen::angle_w#0 + $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$9 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$9 ] { } ) always clobbers reg byte a
Statement [54] init_angle_screen::$11 = $80 + init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$11 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$11 ] { } ) always clobbers reg byte a
Statement [56] init_angle_screen::$12 = $80 - init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] { } ) always clobbers reg byte a
Statement [58] init_angle_screen::$13 = - init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] { } ) always clobbers reg byte a
Statement [60] init_angle_screen::screen_bottomline#6[init_angle_screen::xb#2] = init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( init_angle_screen:4 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] { } ) always clobbers reg byte a
Statement [63] if(atan2_16::y#0>=0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [64] atan2_16::$2 = - atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [66] if(atan2_16::x#0>=0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [67] atan2_16::$7 = - atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [70] if(atan2_16::yi#3!=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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [72] atan2_16::angle#1 = atan2_16::angle#6 >> 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [73] if(atan2_16::x#0>=0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [74] atan2_16::angle#4 = $8000 - atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [76] if(atan2_16::y#0>=0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [77] atan2_16::angle#5 = - atan2_16::angle#11 [ atan2_16::angle#5 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [81] atan2_16::xd#10 = 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [82] atan2_16::yd#10 = 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [86] atan2_16::xd#2 = atan2_16::xd#3 >> 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [87] atan2_16::yd#2 = atan2_16::yd#3 >> 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [89] if(atan2_16::yi#3>=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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [90] atan2_16::xi#2 = atan2_16::xi#3 - 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [91] atan2_16::yi#2 = atan2_16::yi#3 + 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [92] atan2_16::$23 = atan2_16::i#2 << 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [93] atan2_16::angle#3 = atan2_16::angle#12 - CORDIC_ATAN2_ANGLES_16[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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [97] atan2_16::xi#1 = atan2_16::xi#3 + 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [98] atan2_16::yi#1 = atan2_16::yi#3 - 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [99] atan2_16::$22 = atan2_16::i#2 << 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [100] atan2_16::angle#2 = atan2_16::angle#12 + CORDIC_ATAN2_ANGLES_16[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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [101] atan2_16::xd#1 = atan2_16::xd#3 >> 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [102] atan2_16::yd#1 = atan2_16::yd#3 >> 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 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [104] atan2_16::xi#13 = atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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 [105] atan2_16::yi#16 = atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( init_angle_screen:4::atan2_16:49 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#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
Potential registers zp[2]:60 [ main::clear_char#5 main::clear_char#1 ] : zp[2]:60 ,
Potential registers zp[2]:48 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] : zp[2]:48 ,
Potential registers zp[1]:55 [ init_font_hex::c#6 init_font_hex::c#1 ] : zp[1]:55 , reg byte x ,
Potential registers zp[2]:38 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] : zp[2]:38 ,
Potential registers zp[2]:40 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] : zp[2]:40 ,
Potential registers zp[1]:37 [ init_font_hex::c1#4 init_font_hex::c1#1 ] : zp[1]:37 , reg byte x ,
Potential registers zp[1]:18 [ init_font_hex::i#2 init_font_hex::i#1 ] : zp[1]:18 , reg byte x , reg byte y ,
Potential registers zp[1]:21 [ init_font_hex::idx#5 init_font_hex::idx#2 ] : zp[1]:21 , reg byte x , reg byte y ,
Potential registers zp[1]:54 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp[1]:54 , reg byte x , reg byte y ,
Potential registers zp[2]:58 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] : zp[2]:58 ,
Potential registers zp[2]:56 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] : zp[2]:56 ,
Potential registers zp[1]:42 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp[1]:42 , reg byte x , reg byte y ,
Potential registers zp[1]:23 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp[1]:23 , reg byte x , reg byte y ,
Potential registers zp[2]:9 [ 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]:9 ,
Potential registers zp[2]:11 [ 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]:11 ,
Potential registers zp[1]:15 [ atan2_16::i#2 atan2_16::i#1 ] : zp[1]:15 , reg byte x , reg byte y ,
Potential registers zp[2]:7 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp[2]:7 ,
Potential registers zp[2]:16 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] : zp[2]:16 ,
Potential registers zp[1]:2 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[2]:3 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp[2]:3 ,
Potential registers zp[2]:5 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp[2]:5 ,
Potential registers zp[1]:22 [ init_font_hex::$0 ] : zp[1]:22 , reg byte x , reg byte y ,
Potential registers zp[1]:19 [ init_font_hex::$1 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:20 [ init_font_hex::$2 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:24 [ init_font_hex::idx#3 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:25 [ init_angle_screen::$3 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:26 [ init_angle_screen::$4 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:52 [ init_angle_screen::xw#0 ] : zp[2]:52 ,
Potential registers zp[1]:27 [ init_angle_screen::$6 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:50 [ init_angle_screen::yw#0 ] : zp[2]:50 ,
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]:28 [ atan2_16::return#2 ] : zp[2]:28 ,
Potential registers zp[2]:30 [ init_angle_screen::angle_w#0 ] : zp[2]:30 ,
Potential registers zp[2]:32 [ init_angle_screen::$9 ] : zp[2]:32 ,
Potential registers zp[1]:47 [ init_angle_screen::ang_w#0 ] : zp[1]:47 , reg byte x , reg byte y ,
Potential registers zp[1]:34 [ init_angle_screen::$11 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:35 [ init_angle_screen::$12 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:36 [ init_angle_screen::$13 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:13 [ atan2_16::$23 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:14 [ atan2_16::$22 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [atan2_16] 286,666,670.58: zp[1]:2 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 206,000,008: zp[2]:3 [ 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]:5 [ 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]:7 [ 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]:9 [ 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]:11 [ 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]:13 [ atan2_16::$23 ] 20,000,002: zp[1]:14 [ atan2_16::$22 ] 17,083,335.04: zp[1]:15 [ atan2_16::i#2 atan2_16::i#1 ] 82,008.5: zp[2]:16 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] 2,002: zp[2]:28 [ 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] 21,668.83: zp[1]:18 [ init_font_hex::i#2 init_font_hex::i#1 ] 20,002: zp[1]:19 [ init_font_hex::$1 ] 20,002: zp[1]:20 [ init_font_hex::$2 ] 11,501.6: zp[1]:21 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 10,001: zp[1]:22 [ init_font_hex::$0 ] 2,002: zp[1]:24 [ init_font_hex::idx#3 ] 1,634.97: zp[1]:37 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 1,631.57: zp[2]:38 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 1,423.81: zp[2]:40 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 634.17: zp[2]:48 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 162.13: zp[1]:55 [ init_font_hex::c#6 init_font_hex::c#1 ]
Uplift Scope [init_angle_screen] 2,184: zp[1]:23 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 2,002: zp[1]:25 [ init_angle_screen::$3 ] 2,002: zp[1]:26 [ init_angle_screen::$4 ] 2,002: zp[1]:27 [ init_angle_screen::$6 ] 2,002: zp[2]:30 [ init_angle_screen::angle_w#0 ] 2,002: zp[2]:32 [ init_angle_screen::$9 ] 2,002: zp[1]:34 [ init_angle_screen::$11 ] 2,002: zp[1]:35 [ init_angle_screen::$12 ] 2,002: zp[1]:36 [ init_angle_screen::$13 ] 1,287: zp[1]:42 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 715: zp[1]:47 [ init_angle_screen::ang_w#0 ] 500.5: zp[2]:50 [ init_angle_screen::yw#0 ] 333.67: zp[2]:52 [ init_angle_screen::xw#0 ] 197.77: zp[1]:54 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 155.49: zp[2]:56 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] 142.33: zp[2]:58 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ]
Uplift Scope [main] 106: zp[2]:60 [ main::clear_char#5 main::clear_char#1 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
Uplift Scope []
Uplifting [atan2_16] best 1172159 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:3 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:5 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:7 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:9 [ 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]:11 [ 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]:16 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:28 [ 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 1153159 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]:21 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp[1]:22 [ init_font_hex::$0 ] zp[1]:24 [ init_font_hex::idx#3 ] zp[1]:37 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp[2]:38 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp[2]:40 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp[2]:48 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp[1]:55 [ init_font_hex::c#6 init_font_hex::c#1 ]
Limited combination testing to 100 combinations of 6912 possible.
Uplifting [init_angle_screen] best 1151559 combination zp[1]:23 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$6 ] zp[2]:30 [ init_angle_screen::angle_w#0 ] zp[2]:32 [ init_angle_screen::$9 ] zp[1]:34 [ init_angle_screen::$11 ] zp[1]:35 [ init_angle_screen::$12 ] zp[1]:36 [ init_angle_screen::$13 ] zp[1]:42 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:47 [ init_angle_screen::ang_w#0 ] zp[2]:50 [ init_angle_screen::yw#0 ] zp[2]:52 [ init_angle_screen::xw#0 ] zp[1]:54 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:56 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] zp[2]:58 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ]
Limited combination testing to 100 combinations of 331776 possible.
Uplifting [main] best 1151559 combination zp[2]:60 [ main::clear_char#5 main::clear_char#1 ]
Uplifting [MOS6526_CIA] best 1151559 combination
Uplifting [MOS6569_VICII] best 1151559 combination
Uplifting [MOS6581_SID] best 1151559 combination
Uplifting [] best 1151559 combination
Attempting to uplift remaining variables inzp[1]:21 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Uplifting [init_font_hex] best 1151559 combination zp[1]:21 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Attempting to uplift remaining variables inzp[1]:22 [ init_font_hex::$0 ]
Uplifting [init_font_hex] best 1151559 combination zp[1]:22 [ init_font_hex::$0 ]
Attempting to uplift remaining variables inzp[1]:23 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Uplifting [init_angle_screen] best 1151559 combination zp[1]:23 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Attempting to uplift remaining variables inzp[1]:24 [ init_font_hex::idx#3 ]
Uplifting [init_font_hex] best 1150959 combination reg byte y [ init_font_hex::idx#3 ]
Attempting to uplift remaining variables inzp[1]:34 [ init_angle_screen::$11 ]
Uplifting [init_angle_screen] best 1150559 combination reg byte a [ init_angle_screen::$11 ]
Attempting to uplift remaining variables inzp[1]:35 [ init_angle_screen::$12 ]
Uplifting [init_angle_screen] best 1149959 combination reg byte a [ init_angle_screen::$12 ]
Attempting to uplift remaining variables inzp[1]:36 [ init_angle_screen::$13 ]
Uplifting [init_angle_screen] best 1149359 combination reg byte a [ init_angle_screen::$13 ]
Attempting to uplift remaining variables inzp[1]:37 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Uplifting [init_font_hex] best 1149359 combination zp[1]:37 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Attempting to uplift remaining variables inzp[1]:42 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Uplifting [init_angle_screen] best 1149359 combination zp[1]:42 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Attempting to uplift remaining variables inzp[1]:47 [ init_angle_screen::ang_w#0 ]
Uplifting [init_angle_screen] best 1149359 combination zp[1]:47 [ init_angle_screen::ang_w#0 ]
Attempting to uplift remaining variables inzp[1]:54 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Uplifting [init_angle_screen] best 1149359 combination zp[1]:54 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Attempting to uplift remaining variables inzp[1]:55 [ init_font_hex::c#6 init_font_hex::c#1 ]
Uplifting [init_font_hex] best 1149359 combination zp[1]:55 [ init_font_hex::c#6 init_font_hex::c#1 ]
Coalescing zero page register [ zp[2]:7 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp[2]:16 [ 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]:52 [ init_angle_screen::xw#0 ] ] with [ zp[2]:43 [ atan2_16::x#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:50 [ init_angle_screen::yw#0 ] ] with [ zp[2]:45 [ atan2_16::y#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:28 [ atan2_16::return#2 ] ] with [ zp[2]:30 [ init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:7 [ 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]:28 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:7 [ 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 init_angle_screen::angle_w#0 ] ] with [ zp[2]:32 [ init_angle_screen::$9 ] ] - score: 1
Coalescing zero page register [ zp[1]:54 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] with [ zp[1]:55 [ init_font_hex::c#6 init_font_hex::c#1 ] ]
Coalescing zero page register [ zp[2]:58 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] ] with [ zp[2]:48 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] ]
Coalescing zero page register [ zp[2]:56 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] ] with [ zp[2]:38 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] ]
Coalescing zero page register [ zp[1]:42 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] with [ zp[1]:37 [ init_font_hex::c1#4 init_font_hex::c1#1 ] ]
Coalescing zero page register [ zp[1]:23 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] with [ zp[1]:21 [ init_font_hex::idx#5 init_font_hex::idx#2 ] ]
Coalescing zero page register [ zp[2]:9 [ 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 ] ] with [ zp[2]:40 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] ]
Coalescing zero page register [ zp[1]:47 [ init_angle_screen::ang_w#0 ] ] with [ zp[1]:22 [ init_font_hex::$0 ] ]
Allocated (was zp[2]:3) zp[2]:2 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated (was zp[2]:5) zp[2]:4 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated (was zp[2]:7) zp[2]:6 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$9 ]
Allocated (was zp[2]:9) zp[2]:8 [ 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 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
Allocated (was zp[2]:11) zp[2]:10 [ 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[1]:23) zp[1]:12 [ init_angle_screen::xb#2 init_angle_screen::xb#1 init_font_hex::idx#5 init_font_hex::idx#2 ]
Allocated (was zp[1]:47) zp[1]:13 [ init_angle_screen::ang_w#0 init_font_hex::$0 ]
Allocated (was zp[1]:42) zp[1]:14 [ init_angle_screen::x#2 init_angle_screen::x#1 init_font_hex::c1#4 init_font_hex::c1#1 ]
Allocated (was zp[2]:56) zp[2]:15 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
Allocated (was zp[2]:50) zp[2]:17 [ init_angle_screen::yw#0 atan2_16::y#0 ]
Allocated (was zp[2]:52) zp[2]:19 [ init_angle_screen::xw#0 atan2_16::x#0 ]
Allocated (was zp[2]:58) zp[2]:21 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
Allocated (was zp[1]:54) zp[1]:23 [ init_angle_screen::y#5 init_angle_screen::y#1 init_font_hex::c#6 init_font_hex::c#1 ]
Allocated (was zp[2]:60) zp[2]:24 [ main::clear_char#5 main::clear_char#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
// Find atan2(x, y) using the CORDIC method
// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf
// Creates a font where each char contains the number of the char (00-ff)
// Upstart
// Commodore 64 PRG executable file
.file [name="cordic-atan2-clear.prg", type="prg", segments="Program"]
.segmentdef Program [segments="Basic, Code, Data"]
.segmentdef Basic [start=$0801]
.segmentdef Code [start=$80d]
.segmentdef Data [startAfter="Code"]
.segment Basic
:BasicUpstart(main)
// Global Constants & labels
// The number of iterations performed during 16-bit CORDIC atan2 calculation
.const CORDIC_ITERATIONS_16 = $f
/// $D012 RASTER Raster counter
.label RASTER = $d012
/// $D018 VIC-II base addresses
// @see #VICII_MEMORY
.label D018 = $d018
.label CHARSET = $2000
.label SCREEN = $2800
.segment Code
// main
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
// Clear the screen by modifying the charset
.label clear_char = $18
// [1] call init_font_hex
// [10] phi from main to init_font_hex [phi:main->init_font_hex]
init_font_hex_from_main:
jsr init_font_hex
// [2] phi from main to main::toD0181 [phi:main->main::toD0181]
toD0181_from_main:
jmp toD0181
// main::toD0181
toD0181:
jmp __b5
// main::@5
__b5:
// [3] *D018 = main::toD0181_return#0 -- _deref_pbuc1=vbuc2
lda #toD0181_return
sta D018
// [4] call init_angle_screen
// [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen]
init_angle_screen_from___b5:
jsr init_angle_screen
// [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
__b1_from___b5:
// [5] phi main::clear_char#5 = CHARSET [phi:main::@5->main::@1#0] -- pbuz1=pbuc1
lda #<CHARSET
sta.z clear_char
lda #>CHARSET
sta.z clear_char+1
jmp __b1
// [5] phi from main::@3 main::@4 to main::@1 [phi:main::@3/main::@4->main::@1]
__b1_from___b3:
__b1_from___b4:
// [5] phi main::clear_char#5 = main::clear_char#5 [phi:main::@3/main::@4->main::@1#0] -- register_copy
jmp __b1
// main::@1
__b1:
jmp __b2
// main::@2
__b2:
// [6] if(*RASTER!=$ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1
lda #$ff
cmp RASTER
bne __b2
jmp __b3
// main::@3
__b3:
// [7] if(main::clear_char#5>=CHARSET+$800) goto main::@1 -- pbuz1_ge_pbuc1_then_la1
lda.z clear_char+1
cmp #>CHARSET+$800
bcc !+
bne __b1_from___b3
lda.z clear_char
cmp #<CHARSET+$800
bcs __b1_from___b3
!:
jmp __b4
// main::@4
__b4:
// [8] *main::clear_char#5 = 0 -- _deref_pbuz1=vbuc1
lda #0
ldy #0
sta (clear_char),y
// [9] main::clear_char#1 = ++ main::clear_char#5 -- pbuz1=_inc_pbuz1
inc.z clear_char
bne !+
inc.z clear_char+1
!:
jmp __b1_from___b4
}
// init_font_hex
// Make charset from proto chars
// void init_font_hex(__zp($f) char *charset)
init_font_hex: {
.label __0 = $d
.label idx = $c
.label proto_lo = 8
.label charset = $f
.label c1 = $e
.label proto_hi = $15
.label c = $17
// [11] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1]
__b1_from_init_font_hex:
// [11] phi init_font_hex::c#6 = 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1
lda #0
sta.z c
// [11] phi init_font_hex::proto_hi#6 = 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
// [11] phi init_font_hex::charset#5 = 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
// [11] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1]
__b1_from___b5:
// [11] phi init_font_hex::c#6 = init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy
// [11] phi init_font_hex::proto_hi#6 = init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy
// [11] phi init_font_hex::charset#5 = init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy
jmp __b1
// init_font_hex::@1
__b1:
// [12] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2]
__b2_from___b1:
// [12] phi init_font_hex::c1#4 = 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1
lda #0
sta.z c1
// [12] phi init_font_hex::proto_lo#4 = 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
// [12] phi init_font_hex::charset#2 = init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy
jmp __b2
// [12] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2]
__b2_from___b4:
// [12] phi init_font_hex::c1#4 = init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy
// [12] phi init_font_hex::proto_lo#4 = init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy
// [12] phi init_font_hex::charset#2 = init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy
jmp __b2
// init_font_hex::@2
__b2:
// [13] *init_font_hex::charset#2 = 0 -- _deref_pbuz1=vbuc1
lda #0
ldy #0
sta (charset),y
// [14] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3]
__b3_from___b2:
// [14] phi init_font_hex::idx#5 = 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1
lda #1
sta.z idx
// [14] phi init_font_hex::i#2 = 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1
ldx #0
jmp __b3
// [14] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3]
__b3_from___b3:
// [14] phi init_font_hex::idx#5 = init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy
// [14] phi init_font_hex::i#2 = init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy
jmp __b3
// init_font_hex::@3
__b3:
// [15] init_font_hex::$0 = init_font_hex::proto_hi#6[init_font_hex::i#2] << 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4
txa
tay
lda (proto_hi),y
asl
asl
asl
asl
sta.z __0
// [16] init_font_hex::$1 = init_font_hex::proto_lo#4[init_font_hex::i#2] << 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1
txa
tay
lda (proto_lo),y
asl
// [17] init_font_hex::$2 = init_font_hex::$0 | init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa
ora.z __0
// [18] init_font_hex::charset#2[init_font_hex::idx#5] = init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z idx
sta (charset),y
// [19] init_font_hex::idx#2 = ++ init_font_hex::idx#5 -- vbuz1=_inc_vbuz1
inc.z idx
// [20] init_font_hex::i#1 = ++ init_font_hex::i#2 -- vbuxx=_inc_vbuxx
inx
// [21] if(init_font_hex::i#1!=5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1
cpx #5
bne __b3_from___b3
jmp __b4
// init_font_hex::@4
__b4:
// [22] init_font_hex::charset#2[init_font_hex::idx#2] = 0 -- pbuz1_derefidx_vbuz2=vbuc1
lda #0
ldy.z idx
sta (charset),y
// [23] init_font_hex::idx#3 = ++ init_font_hex::idx#2 -- vbuyy=_inc_vbuz1
ldy.z idx
iny
// [24] init_font_hex::charset#2[init_font_hex::idx#3] = 0 -- pbuz1_derefidx_vbuyy=vbuc1
lda #0
sta (charset),y
// [25] init_font_hex::proto_lo#1 = init_font_hex::proto_lo#4 + 5 -- pbuz1=pbuz1_plus_vbuc1
lda #5
clc
adc.z proto_lo
sta.z proto_lo
bcc !+
inc.z proto_lo+1
!:
// [26] init_font_hex::charset#0 = init_font_hex::charset#2 + 8 -- pbuz1=pbuz1_plus_vbuc1
lda #8
clc
adc.z charset
sta.z charset
bcc !+
inc.z charset+1
!:
// [27] init_font_hex::c1#1 = ++ init_font_hex::c1#4 -- vbuz1=_inc_vbuz1
inc.z c1
// [28] if(init_font_hex::c1#1!=$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:
// [29] init_font_hex::proto_hi#1 = init_font_hex::proto_hi#6 + 5 -- pbuz1=pbuz1_plus_vbuc1
lda #5
clc
adc.z proto_hi
sta.z proto_hi
bcc !+
inc.z proto_hi+1
!:
// [30] init_font_hex::c#1 = ++ init_font_hex::c#6 -- vbuz1=_inc_vbuz1
inc.z c
// [31] if(init_font_hex::c#1!=$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:
// [32] return
rts
}
// init_angle_screen
// Populates 1000 bytes (a screen) with values representing the angle to the center.
// Utilizes symmetry around the center
// void init_angle_screen(char *screen)
init_angle_screen: {
.label __9 = 6
.label xw = $13
.label yw = $11
.label angle_w = 6
.label ang_w = $d
.label x = $e
.label xb = $c
.label screen_topline = $15
.label screen_bottomline = $f
.label y = $17
// [34] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
__b1_from_init_angle_screen:
// [34] phi init_angle_screen::screen_bottomline#6 = SCREEN+(unsigned int)$28*$c [phi:init_angle_screen->init_angle_screen::@1#0] -- pbuz1=pbuc1
lda #<SCREEN+$28*$c
sta.z screen_bottomline
lda #>SCREEN+$28*$c
sta.z screen_bottomline+1
// [34] phi init_angle_screen::screen_topline#6 = SCREEN+(unsigned int)$28*$c [phi:init_angle_screen->init_angle_screen::@1#1] -- pbuz1=pbuc1
lda #<SCREEN+$28*$c
sta.z screen_topline
lda #>SCREEN+$28*$c
sta.z screen_topline+1
// [34] phi init_angle_screen::y#5 = 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1
lda #0
sta.z y
jmp __b1
// [34] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
__b1_from___b4:
// [34] phi init_angle_screen::screen_bottomline#6 = init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy
// [34] phi init_angle_screen::screen_topline#6 = init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy
// [34] phi init_angle_screen::y#5 = init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy
jmp __b1
// init_angle_screen::@1
__b1:
// [35] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
__b2_from___b1:
// [35] phi init_angle_screen::xb#2 = $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1
lda #$27
sta.z xb
// [35] phi init_angle_screen::x#2 = 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1
lda #0
sta.z x
jmp __b2
// init_angle_screen::@2
__b2:
// [36] if(init_angle_screen::x#2<$13+1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1
lda.z x
cmp #$13+1
bcc __b3
jmp __b4
// init_angle_screen::@4
__b4:
// [37] init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#6 - $28 -- pbuz1=pbuz1_minus_vbuc1
sec
lda.z screen_topline
sbc #$28
sta.z screen_topline
lda.z screen_topline+1
sbc #0
sta.z screen_topline+1
// [38] init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#6 + $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z screen_bottomline
sta.z screen_bottomline
bcc !+
inc.z screen_bottomline+1
!:
// [39] init_angle_screen::y#1 = ++ init_angle_screen::y#5 -- vbuz1=_inc_vbuz1
inc.z y
// [40] if(init_angle_screen::y#1!=$d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$d
cmp.z y
bne __b1_from___b4
jmp __breturn
// init_angle_screen::@return
__breturn:
// [41] return
rts
// init_angle_screen::@3
__b3:
// [42] init_angle_screen::$3 = init_angle_screen::x#2 << 1 -- vbuaa=vbuz1_rol_1
lda.z x
asl
// [43] init_angle_screen::$4 = $27 - init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa
eor #$ff
sec
adc #$27
// [44] init_angle_screen::xw#0 = init_angle_screen::$4 w= 0 -- vwuz1=vbuaa_word_vbuc1
ldy #0
sta.z xw+1
sty.z xw
// [45] init_angle_screen::$6 = init_angle_screen::y#5 << 1 -- vbuaa=vbuz1_rol_1
lda.z y
asl
// [46] init_angle_screen::yw#0 = init_angle_screen::$6 w= 0 -- vwuz1=vbuaa_word_vbuc1
ldy #0
sta.z yw+1
sty.z yw
// [47] atan2_16::x#0 = (int)init_angle_screen::xw#0
// [48] atan2_16::y#0 = (int)init_angle_screen::yw#0
// [49] call atan2_16
jsr atan2_16
// [50] atan2_16::return#2 = atan2_16::return#0
jmp __b5
// init_angle_screen::@5
__b5:
// [51] init_angle_screen::angle_w#0 = atan2_16::return#2
// [52] init_angle_screen::$9 = init_angle_screen::angle_w#0 + $80 -- vwuz1=vwuz1_plus_vbuc1
lda #$80
clc
adc.z __9
sta.z __9
bcc !+
inc.z __9+1
!:
// [53] init_angle_screen::ang_w#0 = byte1 init_angle_screen::$9 -- vbuz1=_byte1_vwuz2
lda.z __9+1
sta.z ang_w
// [54] init_angle_screen::$11 = $80 + init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1
lda #$80
clc
adc.z ang_w
// [55] init_angle_screen::screen_topline#6[init_angle_screen::x#2] = init_angle_screen::$11 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z x
sta (screen_topline),y
// [56] init_angle_screen::$12 = $80 - init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1
lda #$80
sec
sbc.z ang_w
// [57] init_angle_screen::screen_bottomline#6[init_angle_screen::x#2] = init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z x
sta (screen_bottomline),y
// [58] init_angle_screen::$13 = - init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1
lda.z ang_w
eor #$ff
clc
adc #1
// [59] init_angle_screen::screen_topline#6[init_angle_screen::xb#2] = init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z xb
sta (screen_topline),y
// [60] init_angle_screen::screen_bottomline#6[init_angle_screen::xb#2] = init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3
lda.z ang_w
ldy.z xb
sta (screen_bottomline),y
// [61] init_angle_screen::x#1 = ++ init_angle_screen::x#2 -- vbuz1=_inc_vbuz1
inc.z x
// [62] init_angle_screen::xb#1 = -- init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1
dec.z xb
// [35] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
__b2_from___b5:
// [35] phi init_angle_screen::xb#2 = init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy
// [35] phi init_angle_screen::x#2 = init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy
jmp __b2
}
// 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)
// __zp(6) unsigned int atan2_16(__zp($13) int x, __zp($11) int y)
atan2_16: {
.label __2 = 8
.label __7 = $a
.label yi = 8
.label xi = $a
.label angle = 6
.label xd = 4
.label yd = 2
.label return = 6
.label x = $13
.label y = $11
// [63] if(atan2_16::y#0>=0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1
lda.z y+1
bpl __b1
jmp __b2
// atan2_16::@2
__b2:
// [64] atan2_16::$2 = - 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
// [65] 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:
// [65] phi atan2_16::yi#0 = atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy
jmp __b3
// atan2_16::@3
__b3:
// [66] if(atan2_16::x#0>=0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1
lda.z x+1
bpl __b4
jmp __b5
// atan2_16::@5
__b5:
// [67] atan2_16::$7 = - 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
// [68] 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:
// [68] phi atan2_16::xi#0 = atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy
jmp __b6
// atan2_16::@6
__b6:
// [69] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
__b10_from___b6:
// [69] phi atan2_16::angle#12 = 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1
lda #<0
sta.z angle
lda #>0
sta.z angle+1
// [69] phi atan2_16::i#2 = 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1
ldx #0
// [69] phi atan2_16::xi#3 = atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
// [69] phi atan2_16::yi#3 = atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy
jmp __b10
// atan2_16::@10
__b10:
// [70] if(atan2_16::yi#3!=0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1
lda.z yi+1
ora.z yi
bne __b11
// [71] 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:
// [71] phi atan2_16::angle#6 = atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy
jmp __b12
// atan2_16::@12
__b12:
// [72] atan2_16::angle#1 = atan2_16::angle#6 >> 1 -- vwuz1=vwuz1_ror_1
lsr.z angle+1
ror.z angle
// [73] if(atan2_16::x#0>=0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1
lda.z x+1
bpl __b7_from___b12
jmp __b21
// atan2_16::@21
__b21:
// [74] atan2_16::angle#4 = $8000 - atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
lda #<$8000
sec
sbc.z angle
sta.z angle
lda #>$8000
sbc.z angle+1
sta.z angle+1
// [75] 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:
// [75] phi atan2_16::angle#11 = atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy
jmp __b7
// atan2_16::@7
__b7:
// [76] if(atan2_16::y#0>=0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1
lda.z y+1
bpl __b8_from___b7
jmp __b9
// atan2_16::@9
__b9:
// [77] atan2_16::angle#5 = - 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
// [78] 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:
// [78] phi atan2_16::return#0 = 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:
// [79] return
rts
// atan2_16::@11
__b11:
// [80] atan2_16::shift#5 = atan2_16::i#2 -- vbuyy=vbuxx
txa
tay
// [81] atan2_16::xd#10 = atan2_16::xi#3 -- vwsz1=vwsz2
lda.z xi
sta.z xd
lda.z xi+1
sta.z xd+1
// [82] atan2_16::yd#10 = atan2_16::yi#3 -- vwsz1=vwsz2
lda.z yi
sta.z yd
lda.z yi+1
sta.z yd+1
// [83] 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:
// [83] phi atan2_16::yd#3 = atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy
// [83] phi atan2_16::xd#3 = atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy
// [83] phi atan2_16::shift#2 = atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy
jmp __b13
// atan2_16::@13
__b13:
// [84] if(atan2_16::shift#2>=2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1
cpy #2
bcs __b14
jmp __b15
// atan2_16::@15
__b15:
// [85] if(0==atan2_16::shift#2) goto atan2_16::@17 -- 0_eq_vbuyy_then_la1
cpy #0
beq __b17_from___b15
jmp __b16
// atan2_16::@16
__b16:
// [86] atan2_16::xd#2 = atan2_16::xd#3 >> 1 -- vwsz1=vwsz1_ror_1
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
// [87] atan2_16::yd#2 = atan2_16::yd#3 >> 1 -- vwsz1=vwsz1_ror_1
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
// [88] 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:
// [88] phi atan2_16::xd#5 = atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy
// [88] phi atan2_16::yd#5 = atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy
jmp __b17
// atan2_16::@17
__b17:
// [89] if(atan2_16::yi#3>=0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1
lda.z yi+1
bpl __b18
jmp __b20
// atan2_16::@20
__b20:
// [90] atan2_16::xi#2 = atan2_16::xi#3 - 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
// [91] atan2_16::yi#2 = atan2_16::yi#3 + atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2
clc
lda.z yi
adc.z xd
sta.z yi
lda.z yi+1
adc.z xd+1
sta.z yi+1
// [92] atan2_16::$23 = atan2_16::i#2 << 1 -- vbuaa=vbuxx_rol_1
txa
asl
// [93] atan2_16::angle#3 = atan2_16::angle#12 - CORDIC_ATAN2_ANGLES_16[atan2_16::$23] -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa
tay
lda.z angle
sec
sbc CORDIC_ATAN2_ANGLES_16,y
sta.z angle
lda.z angle+1
sbc CORDIC_ATAN2_ANGLES_16+1,y
sta.z angle+1
// [94] 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:
// [94] phi atan2_16::xi#8 = atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy
// [94] phi atan2_16::angle#13 = atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
// [94] phi atan2_16::yi#8 = atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy
jmp __b19
// atan2_16::@19
__b19:
// [95] atan2_16::i#1 = ++ atan2_16::i#2 -- vbuxx=_inc_vbuxx
inx
// [96] if(atan2_16::i#1==CORDIC_ITERATIONS_16-1+1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1
cpx #CORDIC_ITERATIONS_16-1+1
beq __b12_from___b19
// [69] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
__b10_from___b19:
// [69] phi atan2_16::angle#12 = atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
// [69] phi atan2_16::i#2 = atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
// [69] phi atan2_16::xi#3 = atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
// [69] phi atan2_16::yi#3 = atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy
jmp __b10
// atan2_16::@18
__b18:
// [97] atan2_16::xi#1 = atan2_16::xi#3 + atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2
clc
lda.z xi
adc.z yd
sta.z xi
lda.z xi+1
adc.z yd+1
sta.z xi+1
// [98] atan2_16::yi#1 = atan2_16::yi#3 - 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
// [99] atan2_16::$22 = atan2_16::i#2 << 1 -- vbuaa=vbuxx_rol_1
txa
asl
// [100] atan2_16::angle#2 = atan2_16::angle#12 + CORDIC_ATAN2_ANGLES_16[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:
// [101] atan2_16::xd#1 = atan2_16::xd#3 >> 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
// [102] atan2_16::yd#1 = atan2_16::yd#3 >> 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
// [103] atan2_16::shift#1 = atan2_16::shift#2 - 2 -- vbuyy=vbuyy_minus_2
dey
dey
jmp __b13_from___b14
// atan2_16::@4
__b4:
// [104] atan2_16::xi#13 = 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:
// [105] atan2_16::yi#16 = atan2_16::y#0 -- vwsz1=vwsz2
lda.z y
sta.z yi
lda.z y+1
sta.z yi+1
jmp __b3_from___b1
}
// File Data
.segment 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
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp toD0181
Removing instruction jmp __b5
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b4
Removing instruction jmp __breturn
Removing instruction jmp __b5
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
Succesful ASM optimization Pass5NextJumpElimination
Replacing instruction ldy #0 with TAY
Replacing instruction ldy #0 with TAY
Removing instruction ldy.z idx
Removing instruction lda #0
Removing instruction ldy #0
Removing instruction ldy.z x
Removing instruction ldy.z xb
Removing instruction lda #>0
Replacing instruction ldx #0 with TAX
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label __b1 with __b2
Replacing label __b1_from___b3 with __b2
Replacing label __b1_from___b3 with __b2
Replacing label __b1_from___b4 with __b2
Replacing label __b3_from___b3 with __b3
Replacing label __b2_from___b4 with __b2
Replacing label __b1_from___b5 with __b1
Replacing label __b1_from___b4 with __b1
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
Removing instruction toD0181_from_main:
Removing instruction toD0181:
Removing instruction __b1_from___b3:
Removing instruction __b1_from___b4:
Removing instruction __b1:
Removing instruction __b1_from___b5:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b4:
Removing instruction __b3_from___b3:
Removing instruction __b1_from___b4:
Removing instruction __b2_from___b1:
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:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction init_font_hex_from_main:
Removing instruction __b5:
Removing instruction init_angle_screen_from___b5:
Removing instruction __b1_from___b5:
Removing instruction __b3:
Removing instruction __b4:
Removing instruction __b1_from_init_font_hex:
Removing instruction __b3_from___b2:
Removing instruction __b4:
Removing instruction __b5:
Removing instruction __breturn:
Removing instruction __b1_from_init_angle_screen:
Removing instruction __b4:
Removing instruction __breturn:
Removing instruction __b5:
Removing instruction __b2_from___b5:
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:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing instruction jmp __b2
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b1
Succesful ASM optimization Pass5NextJumpElimination
Fixing long branch [361] beq __b12 to bne
Fixing long branch [256] bpl __b1 to bmi
Fixing long branch [268] bpl __b4 to bmi
FINAL SYMBOL TABLE
__constant char * const CHARSET = (char *) 8192
__constant unsigned int CORDIC_ATAN2_ANGLES_16[CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2
}}
__constant const char CORDIC_ITERATIONS_16 = $f
__constant char * const D018 = (char *) 53272
__constant char FONT_HEX_PROTO[] = { 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 }
__constant char * const RASTER = (char *) 53266
__constant char * const SCREEN = (char *) 10240
unsigned int atan2_16(int x , int y)
int atan2_16::$2 // zp[2]:8 20002.0
char atan2_16::$22 // reg byte a 2.0000002E7
char atan2_16::$23 // reg byte a 2.0000002E7
int atan2_16::$7 // zp[2]:10 20002.0
unsigned int atan2_16::angle
unsigned int atan2_16::angle#1 // angle zp[2]:6 15001.5
unsigned int atan2_16::angle#11 // angle zp[2]:6 20002.0
unsigned int atan2_16::angle#12 // angle zp[2]:6 1904762.0952380951
unsigned int atan2_16::angle#13 // angle zp[2]:6 1.3333334666666666E7
unsigned int atan2_16::angle#2 // angle zp[2]:6 2.0000002E7
unsigned int atan2_16::angle#3 // angle zp[2]:6 2.0000002E7
unsigned int atan2_16::angle#4 // angle zp[2]:6 20002.0
unsigned int atan2_16::angle#5 // angle zp[2]:6 20002.0
unsigned int atan2_16::angle#6 // angle zp[2]:6 2.0010003E7
char atan2_16::i
char atan2_16::i#1 // reg byte x 1.50000015E7
char atan2_16::i#2 // reg byte x 2083333.5416666665
unsigned int atan2_16::return
unsigned int atan2_16::return#0 // return zp[2]:6 7001.0
unsigned int atan2_16::return#2 // return zp[2]:6 2002.0
char atan2_16::shift
char atan2_16::shift#1 // reg byte y 2.00000002E8
char atan2_16::shift#2 // reg byte y 8.000000125E7
char atan2_16::shift#5 // reg byte y 6666667.333333333
int atan2_16::x
int atan2_16::x#0 // x zp[2]:19 1079.078947368421
int atan2_16::xd
int atan2_16::xd#1 // xd zp[2]:4 6.6666667333333336E7
int atan2_16::xd#10 // xd zp[2]:4 1.0000001E7
int atan2_16::xd#2 // xd zp[2]:4 1.0000001E7
int atan2_16::xd#3 // xd zp[2]:4 7.666666833333333E7
int atan2_16::xd#5 // xd zp[2]:4 1.0000001E7
int atan2_16::xi
int atan2_16::xi#0 // xi zp[2]:10 30003.0
int atan2_16::xi#1 // xi zp[2]:10 5000000.5
int atan2_16::xi#13 // xi zp[2]:10 20002.0
int atan2_16::xi#2 // xi zp[2]:10 5000000.5
int atan2_16::xi#3 // xi zp[2]:10 2667333.6666666665
int atan2_16::xi#8 // xi zp[2]:10 1.0000001E7
int atan2_16::y
int atan2_16::y#0 // y zp[2]:17 1025.125
int atan2_16::yd
int atan2_16::yd#1 // yd zp[2]:2 1.00000001E8
int atan2_16::yd#10 // yd zp[2]:2 2.0000002E7
int atan2_16::yd#2 // yd zp[2]:2 2.0000002E7
int atan2_16::yd#3 // yd zp[2]:2 4.6000001E7
int atan2_16::yd#5 // yd zp[2]:2 2.0000002E7
int atan2_16::yi
int atan2_16::yi#0 // yi zp[2]:8 6000.6
int atan2_16::yi#1 // yi zp[2]:8 6666667.333333333
int atan2_16::yi#16 // yi zp[2]:8 20002.0
int atan2_16::yi#2 // yi zp[2]:8 6666667.333333333
int atan2_16::yi#3 // yi zp[2]:8 3530000.4117647056
int atan2_16::yi#8 // yi zp[2]:8 1.0000001E7
void init_angle_screen(char *screen)
char init_angle_screen::$11 // reg byte a 2002.0
char init_angle_screen::$12 // reg byte a 2002.0
char init_angle_screen::$13 // reg byte a 2002.0
char init_angle_screen::$3 // reg byte a 2002.0
char init_angle_screen::$4 // reg byte a 2002.0
char init_angle_screen::$6 // reg byte a 2002.0
unsigned int init_angle_screen::$9 // zp[2]:6 2002.0
char init_angle_screen::ang_w
char init_angle_screen::ang_w#0 // ang_w zp[1]:13 715.0
unsigned int init_angle_screen::angle_w
unsigned int init_angle_screen::angle_w#0 // angle_w zp[2]:6 2002.0
char *init_angle_screen::screen
char *init_angle_screen::screen_bottomline
char *init_angle_screen::screen_bottomline#1 // screen_bottomline zp[2]:15 67.33333333333333
char *init_angle_screen::screen_bottomline#6 // screen_bottomline zp[2]:15 88.16
char *init_angle_screen::screen_topline
char *init_angle_screen::screen_topline#1 // screen_topline zp[2]:21 50.5
char *init_angle_screen::screen_topline#6 // screen_topline zp[2]:21 91.83333333333334
char init_angle_screen::x
char init_angle_screen::x#1 // x zp[1]:14 1001.0
char init_angle_screen::x#2 // x zp[1]:14 286.0
char init_angle_screen::xb
char init_angle_screen::xb#1 // xb zp[1]:12 2002.0
char init_angle_screen::xb#2 // xb zp[1]:12 182.0
int init_angle_screen::xw
unsigned int init_angle_screen::xw#0 // xw zp[2]:19 333.6666666666667
char init_angle_screen::y
char init_angle_screen::y#1 // y zp[1]:23 151.5
char init_angle_screen::y#5 // y zp[1]:23 46.26923076923077
int init_angle_screen::yw
unsigned int init_angle_screen::yw#0 // yw zp[2]:17 500.5
void init_font_hex(char *charset)
char init_font_hex::$0 // zp[1]:13 10001.0
char init_font_hex::$1 // reg byte a 20002.0
char init_font_hex::$2 // reg byte a 20002.0
char init_font_hex::c
char init_font_hex::c#1 // c zp[1]:23 151.5
char init_font_hex::c#6 // c zp[1]:23 10.631578947368421
char init_font_hex::c1
char init_font_hex::c1#1 // c1 zp[1]:14 1501.5
char init_font_hex::c1#4 // c1 zp[1]:14 133.46666666666667
char *init_font_hex::charset
char *init_font_hex::charset#0 // charset zp[2]:15 350.5
char *init_font_hex::charset#2 // charset zp[2]:15 1079.0714285714287
char *init_font_hex::charset#5 // charset zp[2]:15 202.0
char init_font_hex::i
char init_font_hex::i#1 // reg byte x 15001.5
char init_font_hex::i#2 // reg byte x 6667.333333333333
char init_font_hex::idx
char init_font_hex::idx#2 // idx zp[1]:12 5501.0
char init_font_hex::idx#3 // reg byte y 2002.0
char init_font_hex::idx#5 // idx zp[1]:12 6000.6
char *init_font_hex::proto_hi
char *init_font_hex::proto_hi#1 // proto_hi zp[2]:21 67.33333333333333
char *init_font_hex::proto_hi#6 // proto_hi zp[2]:21 566.8333333333333
char *init_font_hex::proto_lo
char *init_font_hex::proto_lo#1 // proto_lo zp[2]:8 500.5
char *init_font_hex::proto_lo#4 // proto_lo zp[2]:8 923.3076923076923
void main()
char *main::clear_char
char *main::clear_char#1 // clear_char zp[2]:24 22.0
char *main::clear_char#5 // clear_char zp[2]:24 84.0
char *main::toD0181_gfx
char main::toD0181_return
__constant char main::toD0181_return#0 = byte1 (unsigned int)SCREEN&$3fff*4|byte1 (unsigned int)CHARSET/4&$f // toD0181_return
char *main::toD0181_screen
zp[2]:24 [ main::clear_char#5 main::clear_char#1 ]
reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ]
zp[1]:23 [ init_angle_screen::y#5 init_angle_screen::y#1 init_font_hex::c#6 init_font_hex::c#1 ]
zp[2]:21 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
zp[2]:15 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
zp[1]:14 [ init_angle_screen::x#2 init_angle_screen::x#1 init_font_hex::c1#4 init_font_hex::c1#1 ]
zp[1]:12 [ init_angle_screen::xb#2 init_angle_screen::xb#1 init_font_hex::idx#5 init_font_hex::idx#2 ]
zp[2]:8 [ 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 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
zp[2]:10 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
reg byte x [ atan2_16::i#2 atan2_16::i#1 ]
zp[2]:6 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$9 ]
reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
zp[2]:2 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
zp[2]:4 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
reg byte a [ init_font_hex::$1 ]
reg byte a [ init_font_hex::$2 ]
reg byte y [ init_font_hex::idx#3 ]
reg byte a [ init_angle_screen::$3 ]
reg byte a [ init_angle_screen::$4 ]
zp[2]:19 [ init_angle_screen::xw#0 atan2_16::x#0 ]
reg byte a [ init_angle_screen::$6 ]
zp[2]:17 [ init_angle_screen::yw#0 atan2_16::y#0 ]
zp[1]:13 [ init_angle_screen::ang_w#0 init_font_hex::$0 ]
reg byte a [ init_angle_screen::$11 ]
reg byte a [ init_angle_screen::$12 ]
reg byte a [ init_angle_screen::$13 ]
reg byte a [ atan2_16::$23 ]
reg byte a [ atan2_16::$22 ]
FINAL ASSEMBLER
Score: 1054209
// File Comments
// Find atan2(x, y) using the CORDIC method
// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf
// Creates a font where each char contains the number of the char (00-ff)
// Upstart
// Commodore 64 PRG executable file
.file [name="cordic-atan2-clear.prg", type="prg", segments="Program"]
.segmentdef Program [segments="Basic, Code, Data"]
.segmentdef Basic [start=$0801]
.segmentdef Code [start=$80d]
.segmentdef Data [startAfter="Code"]
.segment Basic
:BasicUpstart(main)
// Global Constants & labels
// The number of iterations performed during 16-bit CORDIC atan2 calculation
.const CORDIC_ITERATIONS_16 = $f
/// $D012 RASTER Raster counter
.label RASTER = $d012
/// $D018 VIC-II base addresses
// @see #VICII_MEMORY
.label D018 = $d018
.label CHARSET = $2000
.label SCREEN = $2800
.segment Code
// main
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
// Clear the screen by modifying the charset
.label clear_char = $18
// init_font_hex(CHARSET)
// [1] call init_font_hex
// [10] phi from main to init_font_hex [phi:main->init_font_hex]
jsr init_font_hex
// [2] phi from main to main::toD0181 [phi:main->main::toD0181]
// main::toD0181
// main::@5
// *D018 = toD018(SCREEN, CHARSET)
// [3] *D018 = main::toD0181_return#0 -- _deref_pbuc1=vbuc2
lda #toD0181_return
sta D018
// init_angle_screen(SCREEN)
// [4] call init_angle_screen
// [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen]
jsr init_angle_screen
// [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
// [5] phi main::clear_char#5 = CHARSET [phi:main::@5->main::@1#0] -- pbuz1=pbuc1
lda #<CHARSET
sta.z clear_char
lda #>CHARSET
sta.z clear_char+1
// [5] phi from main::@3 main::@4 to main::@1 [phi:main::@3/main::@4->main::@1]
// [5] phi main::clear_char#5 = main::clear_char#5 [phi:main::@3/main::@4->main::@1#0] -- register_copy
// main::@1
// main::@2
__b2:
// while(*RASTER!=0xff)
// [6] if(*RASTER!=$ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1
lda #$ff
cmp RASTER
bne __b2
// main::@3
// if(clear_char<CHARSET+0x0800)
// [7] if(main::clear_char#5>=CHARSET+$800) goto main::@1 -- pbuz1_ge_pbuc1_then_la1
lda.z clear_char+1
cmp #>CHARSET+$800
bcc !+
bne __b2
lda.z clear_char
cmp #<CHARSET+$800
bcs __b2
!:
// main::@4
// *clear_char++ = 0
// [8] *main::clear_char#5 = 0 -- _deref_pbuz1=vbuc1
lda #0
tay
sta (clear_char),y
// *clear_char++ = 0;
// [9] main::clear_char#1 = ++ main::clear_char#5 -- pbuz1=_inc_pbuz1
inc.z clear_char
bne !+
inc.z clear_char+1
!:
jmp __b2
}
// init_font_hex
// Make charset from proto chars
// void init_font_hex(__zp($f) char *charset)
init_font_hex: {
.label __0 = $d
.label idx = $c
.label proto_lo = 8
.label charset = $f
.label c1 = $e
.label proto_hi = $15
.label c = $17
// [11] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1]
// [11] phi init_font_hex::c#6 = 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1
lda #0
sta.z c
// [11] phi init_font_hex::proto_hi#6 = 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
// [11] phi init_font_hex::charset#5 = CHARSET [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1
lda #<CHARSET
sta.z charset
lda #>CHARSET
sta.z charset+1
// [11] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1]
// [11] phi init_font_hex::c#6 = init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy
// [11] phi init_font_hex::proto_hi#6 = init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy
// [11] phi init_font_hex::charset#5 = init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy
// init_font_hex::@1
__b1:
// [12] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2]
// [12] phi init_font_hex::c1#4 = 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1
lda #0
sta.z c1
// [12] phi init_font_hex::proto_lo#4 = 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
// [12] phi init_font_hex::charset#2 = init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy
// [12] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2]
// [12] phi init_font_hex::c1#4 = init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy
// [12] phi init_font_hex::proto_lo#4 = init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy
// [12] phi init_font_hex::charset#2 = 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
// [13] *init_font_hex::charset#2 = 0 -- _deref_pbuz1=vbuc1
lda #0
tay
sta (charset),y
// [14] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3]
// [14] phi init_font_hex::idx#5 = 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1
lda #1
sta.z idx
// [14] phi init_font_hex::i#2 = 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1
ldx #0
// [14] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3]
// [14] phi init_font_hex::idx#5 = init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy
// [14] phi init_font_hex::i#2 = 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
// [15] init_font_hex::$0 = init_font_hex::proto_hi#6[init_font_hex::i#2] << 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4
txa
tay
lda (proto_hi),y
asl
asl
asl
asl
sta.z __0
// proto_lo[i]<<1
// [16] init_font_hex::$1 = init_font_hex::proto_lo#4[init_font_hex::i#2] << 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1
txa
tay
lda (proto_lo),y
asl
// proto_hi[i]<<4 | proto_lo[i]<<1
// [17] init_font_hex::$2 = init_font_hex::$0 | init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa
ora.z __0
// charset[idx++] = proto_hi[i]<<4 | proto_lo[i]<<1
// [18] init_font_hex::charset#2[init_font_hex::idx#5] = init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z idx
sta (charset),y
// charset[idx++] = proto_hi[i]<<4 | proto_lo[i]<<1;
// [19] init_font_hex::idx#2 = ++ init_font_hex::idx#5 -- vbuz1=_inc_vbuz1
inc.z idx
// for( byte i: 0..4)
// [20] init_font_hex::i#1 = ++ init_font_hex::i#2 -- vbuxx=_inc_vbuxx
inx
// [21] if(init_font_hex::i#1!=5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1
cpx #5
bne __b3
// init_font_hex::@4
// charset[idx++] = 0
// [22] init_font_hex::charset#2[init_font_hex::idx#2] = 0 -- pbuz1_derefidx_vbuz2=vbuc1
lda #0
ldy.z idx
sta (charset),y
// charset[idx++] = 0;
// [23] init_font_hex::idx#3 = ++ init_font_hex::idx#2 -- vbuyy=_inc_vbuz1
iny
// charset[idx++] = 0
// [24] init_font_hex::charset#2[init_font_hex::idx#3] = 0 -- pbuz1_derefidx_vbuyy=vbuc1
sta (charset),y
// proto_lo += 5
// [25] init_font_hex::proto_lo#1 = init_font_hex::proto_lo#4 + 5 -- pbuz1=pbuz1_plus_vbuc1
lda #5
clc
adc.z proto_lo
sta.z proto_lo
bcc !+
inc.z proto_lo+1
!:
// charset += 8
// [26] init_font_hex::charset#0 = init_font_hex::charset#2 + 8 -- pbuz1=pbuz1_plus_vbuc1
lda #8
clc
adc.z charset
sta.z charset
bcc !+
inc.z charset+1
!:
// for( byte c: 0..15 )
// [27] init_font_hex::c1#1 = ++ init_font_hex::c1#4 -- vbuz1=_inc_vbuz1
inc.z c1
// [28] if(init_font_hex::c1#1!=$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
// [29] init_font_hex::proto_hi#1 = init_font_hex::proto_hi#6 + 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 )
// [30] init_font_hex::c#1 = ++ init_font_hex::c#6 -- vbuz1=_inc_vbuz1
inc.z c
// [31] if(init_font_hex::c#1!=$10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$10
cmp.z c
bne __b1
// init_font_hex::@return
// }
// [32] return
rts
}
// init_angle_screen
// Populates 1000 bytes (a screen) with values representing the angle to the center.
// Utilizes symmetry around the center
// void init_angle_screen(char *screen)
init_angle_screen: {
.label __9 = 6
.label xw = $13
.label yw = $11
.label angle_w = 6
.label ang_w = $d
.label x = $e
.label xb = $c
.label screen_topline = $15
.label screen_bottomline = $f
.label y = $17
// [34] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
// [34] phi init_angle_screen::screen_bottomline#6 = SCREEN+(unsigned int)$28*$c [phi:init_angle_screen->init_angle_screen::@1#0] -- pbuz1=pbuc1
lda #<SCREEN+$28*$c
sta.z screen_bottomline
lda #>SCREEN+$28*$c
sta.z screen_bottomline+1
// [34] phi init_angle_screen::screen_topline#6 = SCREEN+(unsigned int)$28*$c [phi:init_angle_screen->init_angle_screen::@1#1] -- pbuz1=pbuc1
lda #<SCREEN+$28*$c
sta.z screen_topline
lda #>SCREEN+$28*$c
sta.z screen_topline+1
// [34] phi init_angle_screen::y#5 = 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1
lda #0
sta.z y
// [34] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
// [34] phi init_angle_screen::screen_bottomline#6 = init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy
// [34] phi init_angle_screen::screen_topline#6 = init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy
// [34] phi init_angle_screen::y#5 = init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy
// init_angle_screen::@1
__b1:
// [35] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
// [35] phi init_angle_screen::xb#2 = $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1
lda #$27
sta.z xb
// [35] phi init_angle_screen::x#2 = 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1
lda #0
sta.z x
// init_angle_screen::@2
__b2:
// for( byte x=0,xb=39; x<=19; x++, xb--)
// [36] if(init_angle_screen::x#2<$13+1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1
lda.z x
cmp #$13+1
bcc __b3
// init_angle_screen::@4
// screen_topline -= 40
// [37] init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#6 - $28 -- pbuz1=pbuz1_minus_vbuc1
sec
lda.z screen_topline
sbc #$28
sta.z screen_topline
lda.z screen_topline+1
sbc #0
sta.z screen_topline+1
// screen_bottomline += 40
// [38] init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#6 + $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z screen_bottomline
sta.z screen_bottomline
bcc !+
inc.z screen_bottomline+1
!:
// for(byte y: 0..12)
// [39] init_angle_screen::y#1 = ++ init_angle_screen::y#5 -- vbuz1=_inc_vbuz1
inc.z y
// [40] if(init_angle_screen::y#1!=$d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$d
cmp.z y
bne __b1
// init_angle_screen::@return
// }
// [41] return
rts
// init_angle_screen::@3
__b3:
// x*2
// [42] init_angle_screen::$3 = init_angle_screen::x#2 << 1 -- vbuaa=vbuz1_rol_1
lda.z x
asl
// 39-x*2
// [43] init_angle_screen::$4 = $27 - init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa
eor #$ff
sec
adc #$27
// MAKEWORD( 39-x*2, 0 )
// [44] init_angle_screen::xw#0 = init_angle_screen::$4 w= 0 -- vwuz1=vbuaa_word_vbuc1
ldy #0
sta.z xw+1
sty.z xw
// y*2
// [45] init_angle_screen::$6 = init_angle_screen::y#5 << 1 -- vbuaa=vbuz1_rol_1
lda.z y
asl
// MAKEWORD( y*2, 0 )
// [46] init_angle_screen::yw#0 = init_angle_screen::$6 w= 0 -- vwuz1=vbuaa_word_vbuc1
sta.z yw+1
sty.z yw
// word angle_w = atan2_16(xw, yw)
// [47] atan2_16::x#0 = (int)init_angle_screen::xw#0
// [48] atan2_16::y#0 = (int)init_angle_screen::yw#0
// [49] call atan2_16
jsr atan2_16
// [50] atan2_16::return#2 = atan2_16::return#0
// init_angle_screen::@5
// [51] init_angle_screen::angle_w#0 = atan2_16::return#2
// angle_w+0x0080
// [52] init_angle_screen::$9 = init_angle_screen::angle_w#0 + $80 -- vwuz1=vwuz1_plus_vbuc1
lda #$80
clc
adc.z __9
sta.z __9
bcc !+
inc.z __9+1
!:
// byte ang_w = BYTE1(angle_w+0x0080)
// [53] init_angle_screen::ang_w#0 = byte1 init_angle_screen::$9 -- vbuz1=_byte1_vwuz2
lda.z __9+1
sta.z ang_w
// 0x80+ang_w
// [54] init_angle_screen::$11 = $80 + init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1
lda #$80
clc
adc.z ang_w
// screen_topline[x] = 0x80+ang_w
// [55] init_angle_screen::screen_topline#6[init_angle_screen::x#2] = init_angle_screen::$11 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z x
sta (screen_topline),y
// 0x80-ang_w
// [56] init_angle_screen::$12 = $80 - init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1
lda #$80
sec
sbc.z ang_w
// screen_bottomline[x] = 0x80-ang_w
// [57] init_angle_screen::screen_bottomline#6[init_angle_screen::x#2] = init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuaa
sta (screen_bottomline),y
// -ang_w
// [58] init_angle_screen::$13 = - init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1
lda.z ang_w
eor #$ff
clc
adc #1
// screen_topline[xb] = -ang_w
// [59] init_angle_screen::screen_topline#6[init_angle_screen::xb#2] = init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z xb
sta (screen_topline),y
// screen_bottomline[xb] = ang_w
// [60] init_angle_screen::screen_bottomline#6[init_angle_screen::xb#2] = init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3
lda.z ang_w
sta (screen_bottomline),y
// for( byte x=0,xb=39; x<=19; x++, xb--)
// [61] init_angle_screen::x#1 = ++ init_angle_screen::x#2 -- vbuz1=_inc_vbuz1
inc.z x
// [62] init_angle_screen::xb#1 = -- init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1
dec.z xb
// [35] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
// [35] phi init_angle_screen::xb#2 = init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy
// [35] phi init_angle_screen::x#2 = init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy
jmp __b2
}
// 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)
// __zp(6) unsigned int atan2_16(__zp($13) int x, __zp($11) int y)
atan2_16: {
.label __2 = 8
.label __7 = $a
.label yi = 8
.label xi = $a
.label angle = 6
.label xd = 4
.label yd = 2
.label return = 6
.label x = $13
.label y = $11
// (y>=0)?y:-y
// [63] if(atan2_16::y#0>=0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1
lda.z y+1
bmi !__b1+
jmp __b1
!__b1:
// atan2_16::@2
// [64] atan2_16::$2 = - 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
// [65] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
// [65] phi atan2_16::yi#0 = 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
// [66] if(atan2_16::x#0>=0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1
lda.z x+1
bmi !__b4+
jmp __b4
!__b4:
// atan2_16::@5
// [67] atan2_16::$7 = - 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
// [68] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
// [68] phi atan2_16::xi#0 = atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy
// atan2_16::@6
__b6:
// [69] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
// [69] phi atan2_16::angle#12 = 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1
lda #<0
sta.z angle
sta.z angle+1
// [69] phi atan2_16::i#2 = 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1
tax
// [69] phi atan2_16::xi#3 = atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
// [69] phi atan2_16::yi#3 = atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy
// atan2_16::@10
__b10:
// if(yi==0)
// [70] if(atan2_16::yi#3!=0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1
lda.z yi+1
ora.z yi
bne __b11
// [71] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
// [71] phi atan2_16::angle#6 = atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy
// atan2_16::@12
__b12:
// angle /=2
// [72] atan2_16::angle#1 = atan2_16::angle#6 >> 1 -- vwuz1=vwuz1_ror_1
lsr.z angle+1
ror.z angle
// if(x<0)
// [73] if(atan2_16::x#0>=0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1
lda.z x+1
bpl __b7
// atan2_16::@21
// angle = 0x8000-angle
// [74] atan2_16::angle#4 = $8000 - atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
lda #<$8000
sec
sbc.z angle
sta.z angle
lda #>$8000
sbc.z angle+1
sta.z angle+1
// [75] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
// [75] phi atan2_16::angle#11 = atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy
// atan2_16::@7
__b7:
// if(y<0)
// [76] if(atan2_16::y#0>=0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1
lda.z y+1
bpl __b8
// atan2_16::@9
// angle = -angle
// [77] atan2_16::angle#5 = - 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
// [78] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
// [78] phi atan2_16::return#0 = atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy
// atan2_16::@8
__b8:
// atan2_16::@return
// }
// [79] return
rts
// atan2_16::@11
__b11:
// [80] atan2_16::shift#5 = atan2_16::i#2 -- vbuyy=vbuxx
txa
tay
// [81] atan2_16::xd#10 = atan2_16::xi#3 -- vwsz1=vwsz2
lda.z xi
sta.z xd
lda.z xi+1
sta.z xd+1
// [82] atan2_16::yd#10 = atan2_16::yi#3 -- vwsz1=vwsz2
lda.z yi
sta.z yd
lda.z yi+1
sta.z yd+1
// [83] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
// [83] phi atan2_16::yd#3 = atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy
// [83] phi atan2_16::xd#3 = atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy
// [83] phi atan2_16::shift#2 = atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy
// atan2_16::@13
__b13:
// while(shift>=2)
// [84] if(atan2_16::shift#2>=2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1
cpy #2
bcs __b14
// atan2_16::@15
// if(shift)
// [85] if(0==atan2_16::shift#2) goto atan2_16::@17 -- 0_eq_vbuyy_then_la1
cpy #0
beq __b17
// atan2_16::@16
// xd >>= 1
// [86] atan2_16::xd#2 = atan2_16::xd#3 >> 1 -- vwsz1=vwsz1_ror_1
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
// yd >>= 1
// [87] atan2_16::yd#2 = atan2_16::yd#3 >> 1 -- vwsz1=vwsz1_ror_1
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
// [88] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
// [88] phi atan2_16::xd#5 = atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy
// [88] phi atan2_16::yd#5 = atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy
// atan2_16::@17
__b17:
// if(yi>=0)
// [89] if(atan2_16::yi#3>=0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1
lda.z yi+1
bpl __b18
// atan2_16::@20
// xi -= yd
// [90] atan2_16::xi#2 = atan2_16::xi#3 - 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
// [91] atan2_16::yi#2 = atan2_16::yi#3 + atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2
clc
lda.z yi
adc.z xd
sta.z yi
lda.z yi+1
adc.z xd+1
sta.z yi+1
// angle -= CORDIC_ATAN2_ANGLES_16[i]
// [92] atan2_16::$23 = atan2_16::i#2 << 1 -- vbuaa=vbuxx_rol_1
txa
asl
// [93] atan2_16::angle#3 = atan2_16::angle#12 - CORDIC_ATAN2_ANGLES_16[atan2_16::$23] -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa
tay
lda.z angle
sec
sbc CORDIC_ATAN2_ANGLES_16,y
sta.z angle
lda.z angle+1
sbc CORDIC_ATAN2_ANGLES_16+1,y
sta.z angle+1
// [94] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
// [94] phi atan2_16::xi#8 = atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy
// [94] phi atan2_16::angle#13 = atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
// [94] phi atan2_16::yi#8 = 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)
// [95] atan2_16::i#1 = ++ atan2_16::i#2 -- vbuxx=_inc_vbuxx
inx
// [96] if(atan2_16::i#1==CORDIC_ITERATIONS_16-1+1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1
cpx #CORDIC_ITERATIONS_16-1+1
bne !__b12+
jmp __b12
!__b12:
// [69] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
// [69] phi atan2_16::angle#12 = atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
// [69] phi atan2_16::i#2 = atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
// [69] phi atan2_16::xi#3 = atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
// [69] phi atan2_16::yi#3 = atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy
jmp __b10
// atan2_16::@18
__b18:
// xi += yd
// [97] atan2_16::xi#1 = atan2_16::xi#3 + atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2
clc
lda.z xi
adc.z yd
sta.z xi
lda.z xi+1
adc.z yd+1
sta.z xi+1
// yi -= xd
// [98] atan2_16::yi#1 = atan2_16::yi#3 - 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]
// [99] atan2_16::$22 = atan2_16::i#2 << 1 -- vbuaa=vbuxx_rol_1
txa
asl
// [100] atan2_16::angle#2 = atan2_16::angle#12 + CORDIC_ATAN2_ANGLES_16[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
// [101] atan2_16::xd#1 = atan2_16::xd#3 >> 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
// [102] atan2_16::yd#1 = atan2_16::yd#3 >> 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
// [103] atan2_16::shift#1 = atan2_16::shift#2 - 2 -- vbuyy=vbuyy_minus_2
dey
dey
jmp __b13
// atan2_16::@4
__b4:
// (x>=0)?x:-x
// [104] atan2_16::xi#13 = 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
// [105] atan2_16::yi#16 = atan2_16::y#0 -- vwsz1=vwsz2
lda.z y
sta.z yi
lda.z y+1
sta.z yi+1
jmp __b3
}
// File Data
.segment 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