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


