mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-09-29 03:56:15 +00:00
4888 lines
294 KiB
Plaintext
4888 lines
294 KiB
Plaintext
Resolved forward reference FONT_HEX_PROTO to FONT_HEX_PROTO
|
|
Resolved forward reference FONT_HEX_PROTO to FONT_HEX_PROTO
|
|
Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx
|
|
Inlined call main::$1 = call toD018 SCREEN CHARSET
|
|
Inlined call main::$7 = call toD018 main::BASE_SCREEN main::BASE_CHARSET
|
|
Inlined call call __init
|
|
|
|
CONTROL FLOW GRAPH SSA
|
|
|
|
void init_font_hex(byte* init_font_hex::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
|
|
|
|
word atan2_16(signed word atan2_16::x , signed word atan2_16::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_WORD
|
|
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_WORD
|
|
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
|
|
|
|
dword clock()
|
|
clock: scope:[clock] from main::@5
|
|
clock::$0 = $ffffffff - *CIA2_TIMER_AB
|
|
clock::return#0 = clock::$0
|
|
to:clock::@return
|
|
clock::@return: scope:[clock] from clock
|
|
clock::return#3 = phi( clock/clock::return#0 )
|
|
clock::return#1 = clock::return#3
|
|
return
|
|
to:@return
|
|
|
|
void clock_start()
|
|
clock_start: scope:[clock_start] from main::@1
|
|
*((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = CIA_TIMER_CONTROL_STOP|CIA_TIMER_CONTROL_CONTINUOUS|CIA_TIMER_CONTROL_A_COUNT_CYCLES
|
|
*((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_STOP|CIA_TIMER_CONTROL_CONTINUOUS|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
|
|
*CIA2_TIMER_AB = $ffffffff
|
|
*((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
|
|
*((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS|CIA_TIMER_CONTROL_A_COUNT_CYCLES
|
|
to:clock_start::@return
|
|
clock_start::@return: scope:[clock_start] from clock_start
|
|
return
|
|
to:@return
|
|
|
|
void print_uint_at(word print_uint_at::w , byte* print_uint_at::at)
|
|
print_uint_at: scope:[print_uint_at] from print_ulong_at print_ulong_at::@1
|
|
print_uint_at::at#2 = phi( print_ulong_at/print_uint_at::at#0, print_ulong_at::@1/print_uint_at::at#1 )
|
|
print_uint_at::w#2 = phi( print_ulong_at/print_uint_at::w#0, print_ulong_at::@1/print_uint_at::w#1 )
|
|
print_uint_at::$0 = > print_uint_at::w#2
|
|
print_uchar_at::b#0 = print_uint_at::$0
|
|
print_uchar_at::at#0 = print_uint_at::at#2
|
|
call print_uchar_at
|
|
to:print_uint_at::@1
|
|
print_uint_at::@1: scope:[print_uint_at] from print_uint_at
|
|
print_uint_at::at#3 = phi( print_uint_at/print_uint_at::at#2 )
|
|
print_uint_at::w#3 = phi( print_uint_at/print_uint_at::w#2 )
|
|
print_uint_at::$2 = < print_uint_at::w#3
|
|
print_uint_at::$3 = print_uint_at::at#3 + 2
|
|
print_uchar_at::b#1 = print_uint_at::$2
|
|
print_uchar_at::at#1 = print_uint_at::$3
|
|
call print_uchar_at
|
|
to:print_uint_at::@2
|
|
print_uint_at::@2: scope:[print_uint_at] from print_uint_at::@1
|
|
to:print_uint_at::@return
|
|
print_uint_at::@return: scope:[print_uint_at] from print_uint_at::@2
|
|
return
|
|
to:@return
|
|
|
|
void print_ulong_at(dword print_ulong_at::dw , byte* print_ulong_at::at)
|
|
print_ulong_at: scope:[print_ulong_at] from main::@6
|
|
print_ulong_at::at#1 = phi( main::@6/print_ulong_at::at#0 )
|
|
print_ulong_at::dw#1 = phi( main::@6/print_ulong_at::dw#0 )
|
|
print_ulong_at::$0 = > print_ulong_at::dw#1
|
|
print_uint_at::w#0 = print_ulong_at::$0
|
|
print_uint_at::at#0 = print_ulong_at::at#1
|
|
call print_uint_at
|
|
to:print_ulong_at::@1
|
|
print_ulong_at::@1: scope:[print_ulong_at] from print_ulong_at
|
|
print_ulong_at::at#2 = phi( print_ulong_at/print_ulong_at::at#1 )
|
|
print_ulong_at::dw#2 = phi( print_ulong_at/print_ulong_at::dw#1 )
|
|
print_ulong_at::$2 = < print_ulong_at::dw#2
|
|
print_ulong_at::$3 = print_ulong_at::at#2 + 4
|
|
print_uint_at::w#1 = print_ulong_at::$2
|
|
print_uint_at::at#1 = print_ulong_at::$3
|
|
call print_uint_at
|
|
to:print_ulong_at::@2
|
|
print_ulong_at::@2: scope:[print_ulong_at] from print_ulong_at::@1
|
|
to:print_ulong_at::@return
|
|
print_ulong_at::@return: scope:[print_ulong_at] from print_ulong_at::@2
|
|
return
|
|
to:@return
|
|
|
|
void print_uchar_at(byte print_uchar_at::b , byte* print_uchar_at::at)
|
|
print_uchar_at: scope:[print_uchar_at] from print_uint_at print_uint_at::@1
|
|
print_uchar_at::at#2 = phi( print_uint_at/print_uchar_at::at#0, print_uint_at::@1/print_uchar_at::at#1 )
|
|
print_uchar_at::b#2 = phi( print_uint_at/print_uchar_at::b#0, print_uint_at::@1/print_uchar_at::b#1 )
|
|
print_uchar_at::$0 = print_uchar_at::b#2 >> 4
|
|
print_char_at::ch#0 = print_hextab[print_uchar_at::$0]
|
|
print_char_at::at#0 = print_uchar_at::at#2
|
|
call print_char_at
|
|
to:print_uchar_at::@1
|
|
print_uchar_at::@1: scope:[print_uchar_at] from print_uchar_at
|
|
print_uchar_at::at#3 = phi( print_uchar_at/print_uchar_at::at#2 )
|
|
print_uchar_at::b#3 = phi( print_uchar_at/print_uchar_at::b#2 )
|
|
print_uchar_at::$2 = print_uchar_at::b#3 & $f
|
|
print_uchar_at::$3 = print_uchar_at::at#3 + 1
|
|
print_char_at::ch#1 = print_hextab[print_uchar_at::$2]
|
|
print_char_at::at#1 = print_uchar_at::$3
|
|
call print_char_at
|
|
to:print_uchar_at::@2
|
|
print_uchar_at::@2: scope:[print_uchar_at] from print_uchar_at::@1
|
|
to:print_uchar_at::@return
|
|
print_uchar_at::@return: scope:[print_uchar_at] from print_uchar_at::@2
|
|
return
|
|
to:@return
|
|
|
|
void print_char_at(byte print_char_at::ch , byte* print_char_at::at)
|
|
print_char_at: scope:[print_char_at] from print_uchar_at print_uchar_at::@1
|
|
print_char_at::at#2 = phi( print_uchar_at/print_char_at::at#0, print_uchar_at::@1/print_char_at::at#1 )
|
|
print_char_at::ch#2 = phi( print_uchar_at/print_char_at::ch#0, print_uchar_at::@1/print_char_at::ch#1 )
|
|
*print_char_at::at#2 = print_char_at::ch#2
|
|
to:print_char_at::@return
|
|
print_char_at::@return: scope:[print_char_at] from print_char_at
|
|
return
|
|
to:@return
|
|
|
|
void main()
|
|
main: scope:[main] from __start::@1
|
|
init_font_hex::charset#1 = CHARSET
|
|
call init_font_hex
|
|
to:main::@3
|
|
main::@3: scope:[main] from main
|
|
main::toD0181_screen#0 = SCREEN
|
|
main::toD0181_gfx#0 = CHARSET
|
|
to:main::toD0181
|
|
main::toD0181: scope:[main] from main::@3
|
|
main::toD0181_gfx#1 = phi( main::@3/main::toD0181_gfx#0 )
|
|
main::toD0181_screen#1 = phi( main::@3/main::toD0181_screen#0 )
|
|
main::toD0181_$7 = (word)main::toD0181_screen#1
|
|
main::toD0181_$0 = main::toD0181_$7 & $3fff
|
|
main::toD0181_$1 = main::toD0181_$0 * 4
|
|
main::toD0181_$2 = > main::toD0181_$1
|
|
main::toD0181_$3 = > (word)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::@1
|
|
main::@1: 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
|
|
call clock_start
|
|
to:main::@4
|
|
main::@4: scope:[main] from main::@1
|
|
init_angle_screen::screen#0 = SCREEN
|
|
call init_angle_screen
|
|
to:main::@5
|
|
main::@5: scope:[main] from main::@4
|
|
call clock
|
|
clock::return#2 = clock::return#1
|
|
to:main::@6
|
|
main::@6: scope:[main] from main::@5
|
|
clock::return#4 = phi( main::@5/clock::return#2 )
|
|
main::$4 = clock::return#4
|
|
main::$5 = main::$4 - CLOCKS_PER_INIT
|
|
main::cyclecount#0 = main::$5
|
|
print_ulong_at::dw#0 = main::cyclecount#0
|
|
print_ulong_at::at#0 = main::BASE_SCREEN
|
|
call print_ulong_at
|
|
to:main::@7
|
|
main::@7: scope:[main] from main::@6
|
|
main::toD0182_screen#0 = main::BASE_SCREEN
|
|
main::toD0182_gfx#0 = main::BASE_CHARSET
|
|
to:main::toD0182
|
|
main::toD0182: scope:[main] from main::@7
|
|
main::toD0182_gfx#1 = phi( main::@7/main::toD0182_gfx#0 )
|
|
main::toD0182_screen#1 = phi( main::@7/main::toD0182_screen#0 )
|
|
main::toD0182_$7 = (word)main::toD0182_screen#1
|
|
main::toD0182_$0 = main::toD0182_$7 & $3fff
|
|
main::toD0182_$1 = main::toD0182_$0 * 4
|
|
main::toD0182_$2 = > main::toD0182_$1
|
|
main::toD0182_$3 = > (word)main::toD0182_gfx#1
|
|
main::toD0182_$4 = main::toD0182_$3 / 4
|
|
main::toD0182_$5 = main::toD0182_$4 & $f
|
|
main::toD0182_$6 = main::toD0182_$2 | main::toD0182_$5
|
|
main::toD0182_return#0 = main::toD0182_$6
|
|
to:main::toD0182_@return
|
|
main::toD0182_@return: scope:[main] from main::toD0182
|
|
main::toD0182_return#2 = phi( main::toD0182/main::toD0182_return#0 )
|
|
main::toD0182_return#1 = main::toD0182_return#2
|
|
to:main::@2
|
|
main::@2: scope:[main] from main::toD0182_@return
|
|
main::toD0182_return#3 = phi( main::toD0182_@return/main::toD0182_return#1 )
|
|
main::$7 = main::toD0182_return#3
|
|
*D018 = main::$7
|
|
to:main::@return
|
|
main::@return: scope:[main] from main::@2
|
|
return
|
|
to:@return
|
|
|
|
void init_angle_screen(byte* init_angle_screen::screen)
|
|
init_angle_screen: scope:[init_angle_screen] from main::@4
|
|
init_angle_screen::screen#1 = phi( main::@4/init_angle_screen::screen#0 )
|
|
init_angle_screen::$0 = init_angle_screen::screen#1 + $28*$c
|
|
init_angle_screen::screen_topline#0 = init_angle_screen::$0
|
|
init_angle_screen::$1 = init_angle_screen::screen#1 + $28*$c
|
|
init_angle_screen::screen_bottomline#0 = init_angle_screen::$1
|
|
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::screen_topline#4 = phi( init_angle_screen::@2/init_angle_screen::screen_topline#5 )
|
|
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::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::xw#0 = (signed word)(word){ init_angle_screen::$4, 0 }
|
|
init_angle_screen::$5 = init_angle_screen::y#2 * 2
|
|
init_angle_screen::yw#0 = (signed word)(word){ init_angle_screen::$5, 0 }
|
|
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::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 )
|
|
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 )
|
|
atan2_16::return#4 = phi( init_angle_screen::@3/atan2_16::return#2 )
|
|
init_angle_screen::$6 = atan2_16::return#4
|
|
init_angle_screen::angle_w#0 = init_angle_screen::$6
|
|
init_angle_screen::$7 = init_angle_screen::angle_w#0 + $80
|
|
init_angle_screen::$8 = > init_angle_screen::$7
|
|
init_angle_screen::ang_w#0 = init_angle_screen::$8
|
|
init_angle_screen::screen_bottomline#2[init_angle_screen::xb#2] = init_angle_screen::ang_w#0
|
|
init_angle_screen::$9 = - init_angle_screen::ang_w#0
|
|
init_angle_screen::screen_topline#2[init_angle_screen::xb#2] = init_angle_screen::$9
|
|
init_angle_screen::$10 = $80 + init_angle_screen::ang_w#0
|
|
init_angle_screen::screen_topline#2[init_angle_screen::x#4] = init_angle_screen::$10
|
|
init_angle_screen::$11 = $80 - init_angle_screen::ang_w#0
|
|
init_angle_screen::screen_bottomline#2[init_angle_screen::x#4] = init_angle_screen::$11
|
|
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::$12 = init_angle_screen::y#1 != rangelast(0,$c)
|
|
if(init_angle_screen::$12) 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
|
|
to:__start::__init1
|
|
__start::__init1: scope:[__start] from __start
|
|
to:__start::@1
|
|
__start::@1: scope:[__start] from __start::__init1
|
|
call main
|
|
to:__start::@2
|
|
__start::@2: scope:[__start] from __start::@1
|
|
to:__start::@return
|
|
__start::@return: scope:[__start] from __start::@2
|
|
return
|
|
to:@return
|
|
|
|
SYMBOL TABLE SSA
|
|
const nomodify byte* CHARSET = (byte*)$2000
|
|
const nomodify struct MOS6526_CIA* CIA2 = (struct MOS6526_CIA*)$dd00
|
|
const nomodify dword* CIA2_TIMER_AB = (dword*)$dd04
|
|
const nomodify byte CIA_TIMER_CONTROL_A_COUNT_CYCLES = 0
|
|
const nomodify byte CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40
|
|
const nomodify byte CIA_TIMER_CONTROL_CONTINUOUS = 0
|
|
const nomodify byte CIA_TIMER_CONTROL_START = 1
|
|
const nomodify byte CIA_TIMER_CONTROL_STOP = 0
|
|
const nomodify dword CLOCKS_PER_INIT = $12
|
|
const word* 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
|
|
}}
|
|
const nomodify byte CORDIC_ITERATIONS_16 = $f
|
|
const nomodify byte* D018 = (byte*)$d018
|
|
const byte* 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 }
|
|
const byte OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e
|
|
const byte OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f
|
|
const byte RADIX::BINARY = 2
|
|
const byte RADIX::DECIMAL = $a
|
|
const byte RADIX::HEXADECIMAL = $10
|
|
const byte RADIX::OCTAL = 8
|
|
const nomodify byte* SCREEN = (byte*)$2800
|
|
const byte SIZEOF_WORD = 2
|
|
void __start()
|
|
word atan2_16(signed word atan2_16::x , signed word atan2_16::y)
|
|
bool~ atan2_16::$0
|
|
signed word~ atan2_16::$1
|
|
bool~ atan2_16::$10
|
|
bool~ atan2_16::$11
|
|
number~ atan2_16::$12
|
|
bool~ atan2_16::$13
|
|
bool~ atan2_16::$14
|
|
word~ atan2_16::$15
|
|
bool~ atan2_16::$16
|
|
bool~ atan2_16::$17
|
|
bool~ atan2_16::$18
|
|
bool~ atan2_16::$19
|
|
signed word~ atan2_16::$2
|
|
bool~ atan2_16::$20
|
|
bool~ atan2_16::$21
|
|
byte~ atan2_16::$22
|
|
byte~ atan2_16::$23
|
|
bool~ atan2_16::$24
|
|
signed word~ atan2_16::$3
|
|
signed word~ atan2_16::$4
|
|
bool~ atan2_16::$5
|
|
signed word~ atan2_16::$6
|
|
signed word~ atan2_16::$7
|
|
signed word~ atan2_16::$8
|
|
signed word~ atan2_16::$9
|
|
word atan2_16::angle
|
|
word atan2_16::angle#0
|
|
word atan2_16::angle#1
|
|
word atan2_16::angle#10
|
|
word atan2_16::angle#11
|
|
word atan2_16::angle#12
|
|
word atan2_16::angle#13
|
|
word atan2_16::angle#14
|
|
word atan2_16::angle#15
|
|
word atan2_16::angle#16
|
|
word atan2_16::angle#17
|
|
word atan2_16::angle#18
|
|
word atan2_16::angle#19
|
|
word atan2_16::angle#2
|
|
word atan2_16::angle#20
|
|
word atan2_16::angle#3
|
|
word atan2_16::angle#4
|
|
word atan2_16::angle#5
|
|
word atan2_16::angle#6
|
|
word atan2_16::angle#7
|
|
word atan2_16::angle#8
|
|
word atan2_16::angle#9
|
|
byte atan2_16::i
|
|
byte atan2_16::i#0
|
|
byte atan2_16::i#1
|
|
byte atan2_16::i#10
|
|
byte atan2_16::i#11
|
|
byte atan2_16::i#2
|
|
byte atan2_16::i#3
|
|
byte atan2_16::i#4
|
|
byte atan2_16::i#5
|
|
byte atan2_16::i#6
|
|
byte atan2_16::i#7
|
|
byte atan2_16::i#8
|
|
byte atan2_16::i#9
|
|
word atan2_16::return
|
|
word atan2_16::return#0
|
|
word atan2_16::return#1
|
|
word atan2_16::return#2
|
|
word atan2_16::return#3
|
|
word atan2_16::return#4
|
|
byte atan2_16::shift
|
|
byte atan2_16::shift#0
|
|
byte atan2_16::shift#1
|
|
byte atan2_16::shift#2
|
|
byte atan2_16::shift#3
|
|
byte atan2_16::shift#4
|
|
signed word atan2_16::x
|
|
signed word atan2_16::x#0
|
|
signed word atan2_16::x#1
|
|
signed word atan2_16::x#10
|
|
signed word atan2_16::x#11
|
|
signed word atan2_16::x#12
|
|
signed word atan2_16::x#13
|
|
signed word atan2_16::x#14
|
|
signed word atan2_16::x#15
|
|
signed word atan2_16::x#16
|
|
signed word atan2_16::x#17
|
|
signed word atan2_16::x#18
|
|
signed word atan2_16::x#2
|
|
signed word atan2_16::x#3
|
|
signed word atan2_16::x#4
|
|
signed word atan2_16::x#5
|
|
signed word atan2_16::x#6
|
|
signed word atan2_16::x#7
|
|
signed word atan2_16::x#8
|
|
signed word atan2_16::x#9
|
|
signed word atan2_16::xd
|
|
signed word atan2_16::xd#0
|
|
signed word atan2_16::xd#1
|
|
signed word atan2_16::xd#2
|
|
signed word atan2_16::xd#3
|
|
signed word atan2_16::xd#4
|
|
signed word atan2_16::xd#5
|
|
signed word atan2_16::xd#6
|
|
signed word atan2_16::xd#7
|
|
signed word atan2_16::xd#8
|
|
signed word atan2_16::xd#9
|
|
signed word atan2_16::xi
|
|
signed word atan2_16::xi#0
|
|
signed word atan2_16::xi#1
|
|
signed word atan2_16::xi#10
|
|
signed word atan2_16::xi#11
|
|
signed word atan2_16::xi#12
|
|
signed word atan2_16::xi#2
|
|
signed word atan2_16::xi#3
|
|
signed word atan2_16::xi#4
|
|
signed word atan2_16::xi#5
|
|
signed word atan2_16::xi#6
|
|
signed word atan2_16::xi#7
|
|
signed word atan2_16::xi#8
|
|
signed word atan2_16::xi#9
|
|
signed word atan2_16::y
|
|
signed word atan2_16::y#0
|
|
signed word atan2_16::y#1
|
|
signed word atan2_16::y#10
|
|
signed word atan2_16::y#11
|
|
signed word atan2_16::y#12
|
|
signed word atan2_16::y#13
|
|
signed word atan2_16::y#14
|
|
signed word atan2_16::y#15
|
|
signed word atan2_16::y#16
|
|
signed word atan2_16::y#17
|
|
signed word atan2_16::y#18
|
|
signed word atan2_16::y#19
|
|
signed word atan2_16::y#2
|
|
signed word atan2_16::y#20
|
|
signed word atan2_16::y#3
|
|
signed word atan2_16::y#4
|
|
signed word atan2_16::y#5
|
|
signed word atan2_16::y#6
|
|
signed word atan2_16::y#7
|
|
signed word atan2_16::y#8
|
|
signed word atan2_16::y#9
|
|
signed word atan2_16::yd
|
|
signed word atan2_16::yd#0
|
|
signed word atan2_16::yd#1
|
|
signed word atan2_16::yd#2
|
|
signed word atan2_16::yd#3
|
|
signed word atan2_16::yd#4
|
|
signed word atan2_16::yd#5
|
|
signed word atan2_16::yd#6
|
|
signed word atan2_16::yd#7
|
|
signed word atan2_16::yd#8
|
|
signed word atan2_16::yd#9
|
|
signed word atan2_16::yi
|
|
signed word atan2_16::yi#0
|
|
signed word atan2_16::yi#1
|
|
signed word atan2_16::yi#10
|
|
signed word atan2_16::yi#11
|
|
signed word atan2_16::yi#12
|
|
signed word atan2_16::yi#13
|
|
signed word atan2_16::yi#14
|
|
signed word atan2_16::yi#15
|
|
signed word atan2_16::yi#2
|
|
signed word atan2_16::yi#3
|
|
signed word atan2_16::yi#4
|
|
signed word atan2_16::yi#5
|
|
signed word atan2_16::yi#6
|
|
signed word atan2_16::yi#7
|
|
signed word atan2_16::yi#8
|
|
signed word atan2_16::yi#9
|
|
dword clock()
|
|
number~ clock::$0
|
|
dword clock::return
|
|
dword clock::return#0
|
|
dword clock::return#1
|
|
dword clock::return#2
|
|
dword clock::return#3
|
|
dword clock::return#4
|
|
void clock_start()
|
|
void init_angle_screen(byte* init_angle_screen::screen)
|
|
byte*~ init_angle_screen::$0
|
|
byte*~ init_angle_screen::$1
|
|
number~ init_angle_screen::$10
|
|
number~ init_angle_screen::$11
|
|
bool~ init_angle_screen::$12
|
|
bool~ init_angle_screen::$2
|
|
number~ init_angle_screen::$3
|
|
number~ init_angle_screen::$4
|
|
number~ init_angle_screen::$5
|
|
word~ init_angle_screen::$6
|
|
number~ init_angle_screen::$7
|
|
number~ init_angle_screen::$8
|
|
byte~ init_angle_screen::$9
|
|
byte init_angle_screen::ang_w
|
|
byte init_angle_screen::ang_w#0
|
|
word init_angle_screen::angle_w
|
|
word init_angle_screen::angle_w#0
|
|
byte* init_angle_screen::screen
|
|
byte* init_angle_screen::screen#0
|
|
byte* init_angle_screen::screen#1
|
|
byte* init_angle_screen::screen_bottomline
|
|
byte* init_angle_screen::screen_bottomline#0
|
|
byte* init_angle_screen::screen_bottomline#1
|
|
byte* init_angle_screen::screen_bottomline#2
|
|
byte* init_angle_screen::screen_bottomline#3
|
|
byte* init_angle_screen::screen_bottomline#4
|
|
byte* init_angle_screen::screen_bottomline#5
|
|
byte* init_angle_screen::screen_bottomline#6
|
|
byte* init_angle_screen::screen_topline
|
|
byte* init_angle_screen::screen_topline#0
|
|
byte* init_angle_screen::screen_topline#1
|
|
byte* init_angle_screen::screen_topline#2
|
|
byte* init_angle_screen::screen_topline#3
|
|
byte* init_angle_screen::screen_topline#4
|
|
byte* init_angle_screen::screen_topline#5
|
|
byte* init_angle_screen::screen_topline#6
|
|
byte init_angle_screen::x
|
|
byte init_angle_screen::x#0
|
|
byte init_angle_screen::x#1
|
|
byte init_angle_screen::x#2
|
|
byte init_angle_screen::x#3
|
|
byte init_angle_screen::x#4
|
|
byte init_angle_screen::xb
|
|
byte init_angle_screen::xb#0
|
|
byte init_angle_screen::xb#1
|
|
byte init_angle_screen::xb#2
|
|
byte init_angle_screen::xb#3
|
|
byte init_angle_screen::xb#4
|
|
signed word init_angle_screen::xw
|
|
signed word init_angle_screen::xw#0
|
|
byte init_angle_screen::y
|
|
byte init_angle_screen::y#0
|
|
byte init_angle_screen::y#1
|
|
byte init_angle_screen::y#2
|
|
byte init_angle_screen::y#3
|
|
byte init_angle_screen::y#4
|
|
byte init_angle_screen::y#5
|
|
byte init_angle_screen::y#6
|
|
signed word init_angle_screen::yw
|
|
signed word init_angle_screen::yw#0
|
|
void init_font_hex(byte* init_font_hex::charset)
|
|
byte~ init_font_hex::$0
|
|
byte~ init_font_hex::$1
|
|
byte~ init_font_hex::$2
|
|
bool~ init_font_hex::$3
|
|
bool~ init_font_hex::$4
|
|
bool~ init_font_hex::$5
|
|
byte init_font_hex::c
|
|
byte init_font_hex::c#0
|
|
byte init_font_hex::c#1
|
|
byte init_font_hex::c#2
|
|
byte init_font_hex::c#3
|
|
byte init_font_hex::c#4
|
|
byte init_font_hex::c#5
|
|
byte init_font_hex::c#6
|
|
byte init_font_hex::c1
|
|
byte init_font_hex::c1#0
|
|
byte init_font_hex::c1#1
|
|
byte init_font_hex::c1#2
|
|
byte init_font_hex::c1#3
|
|
byte init_font_hex::c1#4
|
|
byte* init_font_hex::charset
|
|
byte* init_font_hex::charset#0
|
|
byte* init_font_hex::charset#1
|
|
byte* init_font_hex::charset#2
|
|
byte* init_font_hex::charset#3
|
|
byte* init_font_hex::charset#4
|
|
byte* init_font_hex::charset#5
|
|
byte* init_font_hex::charset#6
|
|
byte* init_font_hex::charset#7
|
|
byte init_font_hex::i
|
|
byte init_font_hex::i#0
|
|
byte init_font_hex::i#1
|
|
byte init_font_hex::i#2
|
|
byte init_font_hex::idx
|
|
byte init_font_hex::idx#0
|
|
byte init_font_hex::idx#1
|
|
byte init_font_hex::idx#2
|
|
byte init_font_hex::idx#3
|
|
byte init_font_hex::idx#4
|
|
byte init_font_hex::idx#5
|
|
byte init_font_hex::idx#6
|
|
byte* init_font_hex::proto_hi
|
|
byte* init_font_hex::proto_hi#0
|
|
byte* init_font_hex::proto_hi#1
|
|
byte* init_font_hex::proto_hi#2
|
|
byte* init_font_hex::proto_hi#3
|
|
byte* init_font_hex::proto_hi#4
|
|
byte* init_font_hex::proto_hi#5
|
|
byte* init_font_hex::proto_hi#6
|
|
byte* init_font_hex::proto_lo
|
|
byte* init_font_hex::proto_lo#0
|
|
byte* init_font_hex::proto_lo#1
|
|
byte* init_font_hex::proto_lo#2
|
|
byte* init_font_hex::proto_lo#3
|
|
byte* init_font_hex::proto_lo#4
|
|
void main()
|
|
byte~ main::$1
|
|
dword~ main::$4
|
|
dword~ main::$5
|
|
byte~ main::$7
|
|
const byte* main::BASE_CHARSET = (byte*)$1000
|
|
const byte* main::BASE_SCREEN = (byte*)$400
|
|
dword main::cyclecount
|
|
dword main::cyclecount#0
|
|
number~ main::toD0181_$0
|
|
number~ main::toD0181_$1
|
|
number~ main::toD0181_$2
|
|
byte~ main::toD0181_$3
|
|
number~ main::toD0181_$4
|
|
number~ main::toD0181_$5
|
|
number~ main::toD0181_$6
|
|
word~ main::toD0181_$7
|
|
byte* main::toD0181_gfx
|
|
byte* main::toD0181_gfx#0
|
|
byte* main::toD0181_gfx#1
|
|
byte main::toD0181_return
|
|
byte main::toD0181_return#0
|
|
byte main::toD0181_return#1
|
|
byte main::toD0181_return#2
|
|
byte main::toD0181_return#3
|
|
byte* main::toD0181_screen
|
|
byte* main::toD0181_screen#0
|
|
byte* main::toD0181_screen#1
|
|
number~ main::toD0182_$0
|
|
number~ main::toD0182_$1
|
|
number~ main::toD0182_$2
|
|
byte~ main::toD0182_$3
|
|
number~ main::toD0182_$4
|
|
number~ main::toD0182_$5
|
|
number~ main::toD0182_$6
|
|
word~ main::toD0182_$7
|
|
byte* main::toD0182_gfx
|
|
byte* main::toD0182_gfx#0
|
|
byte* main::toD0182_gfx#1
|
|
byte main::toD0182_return
|
|
byte main::toD0182_return#0
|
|
byte main::toD0182_return#1
|
|
byte main::toD0182_return#2
|
|
byte main::toD0182_return#3
|
|
byte* main::toD0182_screen
|
|
byte* main::toD0182_screen#0
|
|
byte* main::toD0182_screen#1
|
|
void print_char_at(byte print_char_at::ch , byte* print_char_at::at)
|
|
byte* print_char_at::at
|
|
byte* print_char_at::at#0
|
|
byte* print_char_at::at#1
|
|
byte* print_char_at::at#2
|
|
byte print_char_at::ch
|
|
byte print_char_at::ch#0
|
|
byte print_char_at::ch#1
|
|
byte print_char_at::ch#2
|
|
const to_nomodify byte* print_hextab[] = "0123456789abcdef"z
|
|
void print_uchar_at(byte print_uchar_at::b , byte* print_uchar_at::at)
|
|
byte~ print_uchar_at::$0
|
|
number~ print_uchar_at::$2
|
|
byte*~ print_uchar_at::$3
|
|
byte* print_uchar_at::at
|
|
byte* print_uchar_at::at#0
|
|
byte* print_uchar_at::at#1
|
|
byte* print_uchar_at::at#2
|
|
byte* print_uchar_at::at#3
|
|
byte print_uchar_at::b
|
|
byte print_uchar_at::b#0
|
|
byte print_uchar_at::b#1
|
|
byte print_uchar_at::b#2
|
|
byte print_uchar_at::b#3
|
|
void print_uint_at(word print_uint_at::w , byte* print_uint_at::at)
|
|
byte~ print_uint_at::$0
|
|
byte~ print_uint_at::$2
|
|
byte*~ print_uint_at::$3
|
|
byte* print_uint_at::at
|
|
byte* print_uint_at::at#0
|
|
byte* print_uint_at::at#1
|
|
byte* print_uint_at::at#2
|
|
byte* print_uint_at::at#3
|
|
word print_uint_at::w
|
|
word print_uint_at::w#0
|
|
word print_uint_at::w#1
|
|
word print_uint_at::w#2
|
|
word print_uint_at::w#3
|
|
void print_ulong_at(dword print_ulong_at::dw , byte* print_ulong_at::at)
|
|
word~ print_ulong_at::$0
|
|
word~ print_ulong_at::$2
|
|
byte*~ print_ulong_at::$3
|
|
byte* print_ulong_at::at
|
|
byte* print_ulong_at::at#0
|
|
byte* print_ulong_at::at#1
|
|
byte* print_ulong_at::at#2
|
|
dword print_ulong_at::dw
|
|
dword print_ulong_at::dw#0
|
|
dword print_ulong_at::dw#1
|
|
dword print_ulong_at::dw#2
|
|
|
|
Fixing inline constructor with init_angle_screen::$13 = (byte)init_angle_screen::$4 w= (byte)0
|
|
Fixing inline constructor with init_angle_screen::$14 = (byte)init_angle_screen::$5 w= (byte)0
|
|
Successful SSA optimization Pass2FixInlineConstructors
|
|
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) $ffffffff in clock::$0 = $ffffffff - *CIA2_TIMER_AB
|
|
Adding number conversion cast (unumber) clock::$0 in clock::$0 = (unumber)$ffffffff - *CIA2_TIMER_AB
|
|
Adding number conversion cast (unumber) $ffffffff in *CIA2_TIMER_AB = $ffffffff
|
|
Adding number conversion cast (unumber) 2 in print_uint_at::$3 = print_uint_at::at#3 + 2
|
|
Adding number conversion cast (unumber) 4 in print_ulong_at::$3 = print_ulong_at::at#2 + 4
|
|
Adding number conversion cast (unumber) 4 in print_uchar_at::$0 = print_uchar_at::b#2 >> 4
|
|
Adding number conversion cast (unumber) $f in print_uchar_at::$2 = print_uchar_at::b#3 & $f
|
|
Adding number conversion cast (unumber) print_uchar_at::$2 in print_uchar_at::$2 = print_uchar_at::b#3 & (unumber)$f
|
|
Adding number conversion cast (unumber) 1 in print_uchar_at::$3 = print_uchar_at::at#3 + 1
|
|
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) main::toD0181_$2 in main::toD0181_$2 = > main::toD0181_$1
|
|
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) $3fff in main::toD0182_$0 = main::toD0182_$7 & $3fff
|
|
Adding number conversion cast (unumber) main::toD0182_$0 in main::toD0182_$0 = main::toD0182_$7 & (unumber)$3fff
|
|
Adding number conversion cast (unumber) 4 in main::toD0182_$1 = main::toD0182_$0 * 4
|
|
Adding number conversion cast (unumber) main::toD0182_$1 in main::toD0182_$1 = main::toD0182_$0 * (unumber)4
|
|
Adding number conversion cast (unumber) main::toD0182_$2 in main::toD0182_$2 = > main::toD0182_$1
|
|
Adding number conversion cast (unumber) 4 in main::toD0182_$4 = main::toD0182_$3 / 4
|
|
Adding number conversion cast (unumber) main::toD0182_$4 in main::toD0182_$4 = main::toD0182_$3 / (unumber)4
|
|
Adding number conversion cast (unumber) $f in main::toD0182_$5 = main::toD0182_$4 & $f
|
|
Adding number conversion cast (unumber) main::toD0182_$5 in main::toD0182_$5 = main::toD0182_$4 & (unumber)$f
|
|
Adding number conversion cast (unumber) main::toD0182_$6 in main::toD0182_$6 = main::toD0182_$2 | main::toD0182_$5
|
|
Adding number conversion cast (unumber) $28*$c in init_angle_screen::$0 = init_angle_screen::screen#1 + $28*$c
|
|
Adding number conversion cast (unumber) $28*$c in init_angle_screen::$1 = 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) 2 in init_angle_screen::$5 = init_angle_screen::y#2 * 2
|
|
Adding number conversion cast (unumber) init_angle_screen::$5 in init_angle_screen::$5 = init_angle_screen::y#2 * (unumber)2
|
|
Adding number conversion cast (unumber) $80 in init_angle_screen::$7 = init_angle_screen::angle_w#0 + $80
|
|
Adding number conversion cast (unumber) init_angle_screen::$7 in init_angle_screen::$7 = init_angle_screen::angle_w#0 + (unumber)$80
|
|
Adding number conversion cast (unumber) init_angle_screen::$8 in init_angle_screen::$8 = > init_angle_screen::$7
|
|
Adding number conversion cast (unumber) $80 in init_angle_screen::$10 = $80 + init_angle_screen::ang_w#0
|
|
Adding number conversion cast (unumber) init_angle_screen::$10 in init_angle_screen::$10 = (unumber)$80 + init_angle_screen::ang_w#0
|
|
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) $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 *CIA2_TIMER_AB = (unumber)$ffffffff
|
|
Successful SSA optimization Pass2InlineCast
|
|
Simplifying constant pointer cast (byte*) 53272
|
|
Simplifying constant pointer cast (struct MOS6526_CIA*) 56576
|
|
Simplifying constant pointer cast (dword*) 56580
|
|
Simplifying constant pointer cast (byte*) 8192
|
|
Simplifying constant pointer cast (byte*) 10240
|
|
Simplifying constant pointer cast (byte*) 1024
|
|
Simplifying constant pointer cast (byte*) 4096
|
|
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 $ffffffff
|
|
Simplifying constant integer cast $ffffffff
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast $f
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast $3fff
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast $f
|
|
Simplifying constant integer cast $3fff
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast $f
|
|
Simplifying constant integer cast $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 (byte) 0
|
|
Finalized unsigned number type (byte) 4
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 5
|
|
Finalized unsigned number type (byte) 8
|
|
Finalized unsigned number type (byte) 5
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized signed number type (signed byte) 2
|
|
Finalized signed number type (signed byte) 2
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized signed number type (signed byte) 1
|
|
Finalized signed number type (signed byte) 1
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized unsigned number type (word) $8000
|
|
Finalized unsigned number type (dword) $ffffffff
|
|
Finalized unsigned number type (dword) $ffffffff
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) 4
|
|
Finalized unsigned number type (byte) 4
|
|
Finalized unsigned number type (byte) $f
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (word) $3fff
|
|
Finalized unsigned number type (byte) 4
|
|
Finalized unsigned number type (byte) 4
|
|
Finalized unsigned number type (byte) $f
|
|
Finalized unsigned number type (word) $3fff
|
|
Finalized unsigned number type (byte) 4
|
|
Finalized unsigned number type (byte) 4
|
|
Finalized unsigned number type (byte) $f
|
|
Finalized unsigned number type (byte) $13
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) $27
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) $80
|
|
Finalized unsigned number type (byte) $80
|
|
Finalized unsigned number type (byte) $80
|
|
Finalized unsigned number type (byte) $28
|
|
Finalized unsigned number type (byte) $28
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Inferred type updated to word in atan2_16::$12 = $8000 - atan2_16::angle#9
|
|
Inferred type updated to dword in clock::$0 = $ffffffff - *CIA2_TIMER_AB
|
|
Inferred type updated to byte in print_uchar_at::$2 = print_uchar_at::b#3 & $f
|
|
Inferred type updated to word in main::toD0181_$0 = main::toD0181_$7 & $3fff
|
|
Inferred type updated to word in main::toD0181_$1 = main::toD0181_$0 * 4
|
|
Inferred type updated to byte in main::toD0181_$2 = > main::toD0181_$1
|
|
Inferred type updated to byte in main::toD0181_$4 = main::toD0181_$3 / 4
|
|
Inferred type updated to byte in main::toD0181_$5 = main::toD0181_$4 & $f
|
|
Inferred type updated to byte in main::toD0181_$6 = main::toD0181_$2 | main::toD0181_$5
|
|
Inferred type updated to word in main::toD0182_$0 = main::toD0182_$7 & $3fff
|
|
Inferred type updated to word in main::toD0182_$1 = main::toD0182_$0 * 4
|
|
Inferred type updated to byte in main::toD0182_$2 = > main::toD0182_$1
|
|
Inferred type updated to byte in main::toD0182_$4 = main::toD0182_$3 / 4
|
|
Inferred type updated to byte in main::toD0182_$5 = main::toD0182_$4 & $f
|
|
Inferred type updated to byte in main::toD0182_$6 = main::toD0182_$2 | main::toD0182_$5
|
|
Inferred type updated to byte in init_angle_screen::$3 = init_angle_screen::x#3 * 2
|
|
Inferred type updated to byte in init_angle_screen::$4 = $27 - init_angle_screen::$3
|
|
Inferred type updated to byte in init_angle_screen::$5 = init_angle_screen::y#2 * 2
|
|
Inferred type updated to word in init_angle_screen::$7 = init_angle_screen::angle_w#0 + $80
|
|
Inferred type updated to byte in init_angle_screen::$8 = > init_angle_screen::$7
|
|
Inferred type updated to byte in init_angle_screen::$10 = $80 + init_angle_screen::ang_w#0
|
|
Inferred type updated to byte in init_angle_screen::$11 = $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
|
|
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 clock::return#0 = clock::$0 clock::return#3 clock::return#1
|
|
Alias print_uchar_at::b#0 = print_uint_at::$0
|
|
Alias print_uint_at::w#2 = print_uint_at::w#3
|
|
Alias print_uint_at::at#2 = print_uint_at::at#3
|
|
Alias print_uchar_at::b#1 = print_uint_at::$2
|
|
Alias print_uchar_at::at#1 = print_uint_at::$3
|
|
Alias print_uint_at::w#0 = print_ulong_at::$0
|
|
Alias print_ulong_at::dw#1 = print_ulong_at::dw#2
|
|
Alias print_ulong_at::at#1 = print_ulong_at::at#2
|
|
Alias print_uint_at::w#1 = print_ulong_at::$2
|
|
Alias print_uint_at::at#1 = print_ulong_at::$3
|
|
Alias print_uchar_at::b#2 = print_uchar_at::b#3
|
|
Alias print_uchar_at::at#2 = print_uchar_at::at#3
|
|
Alias print_char_at::at#1 = print_uchar_at::$3
|
|
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 clock::return#2 = clock::return#4
|
|
Alias main::cyclecount#0 = main::$5
|
|
Alias main::toD0182_screen#0 = main::toD0182_screen#1
|
|
Alias main::toD0182_gfx#0 = main::toD0182_gfx#1
|
|
Alias main::toD0182_return#0 = main::toD0182_$6 main::toD0182_return#2 main::toD0182_return#1 main::toD0182_return#3 main::$7
|
|
Alias init_angle_screen::screen_topline#0 = init_angle_screen::$0
|
|
Alias init_angle_screen::screen_bottomline#0 = init_angle_screen::$1
|
|
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_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 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 atan2_16::return#2 = atan2_16::return#4
|
|
Alias init_angle_screen::angle_w#0 = init_angle_screen::$6
|
|
Alias init_angle_screen::ang_w#0 = init_angle_screen::$8
|
|
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 print_ulong_at::dw#1 print_ulong_at::dw#0
|
|
Identical Phi Values print_ulong_at::at#1 print_ulong_at::at#0
|
|
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 [218] init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0 + (word)$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 init_angle_screen::$2 [165] if(init_angle_screen::x#2<=$13) goto init_angle_screen::@3
|
|
Simple Condition init_angle_screen::$12 [193] 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 print_ulong_at::at#0 = main::BASE_SCREEN
|
|
Constant main::toD0182_screen#0 = main::BASE_SCREEN
|
|
Constant main::toD0182_gfx#0 = main::BASE_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 print_uint_at::at#0 = print_ulong_at::at#0
|
|
Constant main::toD0181_$7 = (word)main::toD0181_screen#0
|
|
Constant main::toD0182_$7 = (word)main::toD0182_screen#0
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant value identified (word)main::toD0181_gfx#0 in [129] main::toD0181_$3 = > (word)main::toD0181_gfx#0
|
|
Constant value identified (word)main::toD0182_gfx#0 in [150] main::toD0182_$3 = > (word)main::toD0182_gfx#0
|
|
Successful SSA optimization Pass2ConstantValues
|
|
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 [191] init_angle_screen::y#1 = ++ init_angle_screen::y#5 to ++
|
|
Resolved ranged comparison value [193] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to $d
|
|
Rewriting conditional comparison [165] if(init_angle_screen::x#2<=$13) goto init_angle_screen::@3
|
|
Simplifying constant evaluating to zero CIA_TIMER_CONTROL_STOP|CIA_TIMER_CONTROL_CONTINUOUS|CIA_TIMER_CONTROL_A_COUNT_CYCLES in [86] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = CIA_TIMER_CONTROL_STOP|CIA_TIMER_CONTROL_CONTINUOUS|CIA_TIMER_CONTROL_A_COUNT_CYCLES
|
|
Simplifying constant evaluating to zero CIA_TIMER_CONTROL_STOP|CIA_TIMER_CONTROL_CONTINUOUS in [87] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_STOP|CIA_TIMER_CONTROL_CONTINUOUS|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
|
|
Successful SSA optimization PassNSimplifyConstantZero
|
|
Simplifying expression containing zero init_font_hex::charset#2 in [8] init_font_hex::charset#2[init_font_hex::idx#0] = 0
|
|
Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A in [87] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = 0|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
|
|
Simplifying expression containing zero CIA_TIMER_CONTROL_START in [89] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
|
|
Simplifying expression containing zero CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS in [90] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS|CIA_TIMER_CONTROL_A_COUNT_CYCLES
|
|
Successful SSA optimization PassNSimplifyExpressionWithZero
|
|
Simplifying expression containing zero CIA_TIMER_CONTROL_START in [90] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS
|
|
Successful SSA optimization PassNSimplifyExpressionWithZero
|
|
Eliminating unused variable init_font_hex::idx#4 and assignment [15] init_font_hex::idx#4 = ++ init_font_hex::idx#3
|
|
Eliminating unused constant CIA_TIMER_CONTROL_STOP
|
|
Eliminating unused constant CIA_TIMER_CONTROL_CONTINUOUS
|
|
Eliminating unused constant CIA_TIMER_CONTROL_A_COUNT_CYCLES
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Removing unused procedure __start
|
|
Removing unused procedure block __start
|
|
Removing unused procedure block __start::__init1
|
|
Removing unused procedure block __start::@1
|
|
Removing unused procedure block __start::@2
|
|
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 [126] if(init_angle_screen::x#2<$13+1) goto init_angle_screen::@3
|
|
Adding number conversion cast (unumber) 1 in [126] if(init_angle_screen::x#2<(unumber)$13+1) goto init_angle_screen::@3
|
|
Adding number conversion cast (unumber) $d in [153] 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 init_angle_screen::$4
|
|
Simplifying constant integer cast init_angle_screen::$5
|
|
Simplifying constant integer cast $d
|
|
Successful SSA optimization PassNCastSimplification
|
|
Finalized unsigned number type (byte) 5
|
|
Finalized unsigned number type (byte) $10
|
|
Finalized unsigned number type (byte) $10
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) $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 [80] print_uint_at::at#1 = print_ulong_at::at#0 + 4
|
|
Constant right-side identified [97] main::toD0181_$0 = main::toD0181_$7 & $3fff
|
|
Constant right-side identified [100] main::toD0181_$3 = > (word)main::toD0181_gfx#0
|
|
Constant right-side identified [113] main::toD0182_$0 = main::toD0182_$7 & $3fff
|
|
Constant right-side identified [116] main::toD0182_$3 = > (word)main::toD0182_gfx#0
|
|
Constant right-side identified [122] init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0 + (word)$28*$c
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant init_font_hex::idx#1 = ++init_font_hex::idx#0
|
|
Constant print_uint_at::at#1 = print_ulong_at::at#0+4
|
|
Constant main::toD0181_$0 = main::toD0181_$7&$3fff
|
|
Constant main::toD0181_$3 = >(word)main::toD0181_gfx#0
|
|
Constant main::toD0182_$0 = main::toD0182_$7&$3fff
|
|
Constant main::toD0182_$3 = >(word)main::toD0182_gfx#0
|
|
Constant init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0+(word)$28*$c
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant right-side identified [95] main::toD0181_$1 = main::toD0181_$0 * 4
|
|
Constant right-side identified [97] main::toD0181_$4 = main::toD0181_$3 / 4
|
|
Constant right-side identified [109] main::toD0182_$1 = main::toD0182_$0 * 4
|
|
Constant right-side identified [111] main::toD0182_$4 = main::toD0182_$3 / 4
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant main::toD0181_$1 = main::toD0181_$0*4
|
|
Constant main::toD0181_$4 = main::toD0181_$3/4
|
|
Constant main::toD0182_$1 = main::toD0182_$0*4
|
|
Constant main::toD0182_$4 = main::toD0182_$3/4
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant right-side identified [95] main::toD0181_$2 = > main::toD0181_$1
|
|
Constant right-side identified [96] main::toD0181_$5 = main::toD0181_$4 & $f
|
|
Constant right-side identified [107] main::toD0182_$2 = > main::toD0182_$1
|
|
Constant right-side identified [108] main::toD0182_$5 = main::toD0182_$4 & $f
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant main::toD0181_$2 = >main::toD0181_$1
|
|
Constant main::toD0181_$5 = main::toD0181_$4&$f
|
|
Constant main::toD0182_$2 = >main::toD0182_$1
|
|
Constant main::toD0182_$5 = main::toD0182_$4&$f
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant right-side identified [95] main::toD0181_return#0 = main::toD0181_$2 | main::toD0181_$5
|
|
Constant right-side identified [105] main::toD0182_return#0 = main::toD0182_$2 | main::toD0182_$5
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant main::toD0181_return#0 = main::toD0181_$2|main::toD0181_$5
|
|
Constant main::toD0182_return#0 = main::toD0182_$2|main::toD0182_$5
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Inlining Noop Cast [112] init_angle_screen::xw#0 = (signed word)init_angle_screen::$13 keeping init_angle_screen::xw#0
|
|
Inlining Noop Cast [115] init_angle_screen::yw#0 = (signed word)init_angle_screen::$14 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_WORD
|
|
Rewriting multiplication to use shift [49] atan2_16::$23 = atan2_16::i#2 * SIZEOF_WORD
|
|
Rewriting multiplication to use shift [109] init_angle_screen::$3 = init_angle_screen::x#2 * 2
|
|
Rewriting multiplication to use shift [113] init_angle_screen::$5 = 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 print_uint_at::at#0
|
|
Inlining constant with var siblings print_uint_at::at#1
|
|
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 print_uint_at::at#1 = main::BASE_SCREEN+4
|
|
Constant inlined print_uint_at::at#0 = main::BASE_SCREEN
|
|
Constant inlined init_font_hex::proto_hi#0 = FONT_HEX_PROTO
|
|
Constant inlined main::toD0182_$4 = >(word)main::BASE_CHARSET/4
|
|
Constant inlined init_angle_screen::y#0 = 0
|
|
Constant inlined main::toD0182_$5 = >(word)main::BASE_CHARSET/4&$f
|
|
Constant inlined init_angle_screen::x#0 = 0
|
|
Constant inlined main::toD0182_$7 = (word)main::BASE_SCREEN
|
|
Constant inlined main::toD0182_$0 = (word)main::BASE_SCREEN&$3fff
|
|
Constant inlined atan2_16::angle#0 = 0
|
|
Constant inlined main::toD0182_$1 = (word)main::BASE_SCREEN&$3fff*4
|
|
Constant inlined init_angle_screen::screen_bottomline#0 = SCREEN+(word)$28*$c
|
|
Constant inlined main::toD0182_$2 = >(word)main::BASE_SCREEN&$3fff*4
|
|
Constant inlined main::toD0182_$3 = >(word)main::BASE_CHARSET
|
|
Constant inlined init_font_hex::charset#1 = CHARSET
|
|
Constant inlined print_ulong_at::at#0 = main::BASE_SCREEN
|
|
Constant inlined init_angle_screen::screen#0 = SCREEN
|
|
Constant inlined init_font_hex::c1#0 = 0
|
|
Constant inlined main::toD0181_$7 = (word)SCREEN
|
|
Constant inlined main::toD0182_gfx#0 = main::BASE_CHARSET
|
|
Constant inlined init_angle_screen::xb#0 = $27
|
|
Constant inlined main::toD0181_$2 = >(word)SCREEN&$3fff*4
|
|
Constant inlined atan2_16::i#0 = 0
|
|
Constant inlined main::toD0181_$1 = (word)SCREEN&$3fff*4
|
|
Constant inlined main::toD0181_$0 = (word)SCREEN&$3fff
|
|
Constant inlined init_font_hex::i#0 = 0
|
|
Constant inlined main::toD0181_$5 = >(word)CHARSET/4&$f
|
|
Constant inlined main::toD0181_$4 = >(word)CHARSET/4
|
|
Constant inlined main::toD0181_$3 = >(word)CHARSET
|
|
Constant inlined init_font_hex::idx#1 = ++0
|
|
Constant inlined init_font_hex::idx#0 = 0
|
|
Constant inlined main::toD0182_screen#0 = main::BASE_SCREEN
|
|
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_WORD
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) 8
|
|
Finalized unsigned number type (byte) $a
|
|
Finalized unsigned number type (byte) $10
|
|
Finalized unsigned number type (byte) $28
|
|
Finalized unsigned number type (byte) $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 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::@3
|
|
Adding NOP phi() at start of main::toD0181
|
|
Adding NOP phi() at start of main::toD0181_@return
|
|
Adding NOP phi() at start of main::@4
|
|
Adding NOP phi() at start of main::@5
|
|
Adding NOP phi() at start of main::@7
|
|
Adding NOP phi() at start of main::toD0182
|
|
Adding NOP phi() at start of main::toD0182_@return
|
|
Adding NOP phi() at start of init_font_hex
|
|
Adding NOP phi() at start of init_angle_screen
|
|
Adding NOP phi() at start of print_ulong_at::@2
|
|
Adding NOP phi() at start of print_uint_at::@2
|
|
Adding NOP phi() at start of print_uchar_at::@2
|
|
CALL GRAPH
|
|
Calls in [main] to init_font_hex:1 clock_start:6 init_angle_screen:8 clock:10 print_ulong_at:15
|
|
Calls in [init_angle_screen] to atan2_16:78
|
|
Calls in [print_ulong_at] to print_uint_at:98 print_uint_at:101
|
|
Calls in [print_uint_at] to print_uchar_at:179 print_uchar_at:184
|
|
Calls in [print_uchar_at] to print_char_at:193 print_char_at:199
|
|
|
|
Created 36 initial phi equivalence classes
|
|
Coalesced [23] init_font_hex::charset#9 = init_font_hex::charset#5
|
|
Coalesced [45] init_font_hex::charset#8 = init_font_hex::charset#0
|
|
Coalesced [46] init_font_hex::proto_hi#7 = init_font_hex::proto_hi#1
|
|
Coalesced [47] init_font_hex::c#7 = init_font_hex::c#1
|
|
Coalesced (already) [48] init_font_hex::charset#10 = init_font_hex::charset#0
|
|
Coalesced [49] init_font_hex::proto_lo#5 = init_font_hex::proto_lo#1
|
|
Coalesced [50] init_font_hex::c1#5 = init_font_hex::c1#1
|
|
Coalesced [51] init_font_hex::i#3 = init_font_hex::i#1
|
|
Coalesced [52] init_font_hex::idx#7 = init_font_hex::idx#2
|
|
Coalesced [68] init_angle_screen::y#7 = init_angle_screen::y#1
|
|
Coalesced [69] init_angle_screen::screen_topline#7 = init_angle_screen::screen_topline#1
|
|
Coalesced [70] init_angle_screen::screen_bottomline#7 = init_angle_screen::screen_bottomline#1
|
|
Coalesced [92] init_angle_screen::x#5 = init_angle_screen::x#1
|
|
Coalesced [93] init_angle_screen::xb#5 = init_angle_screen::xb#1
|
|
Coalesced [97] print_uint_at::w#4 = print_uint_at::w#0
|
|
Coalesced [100] print_uint_at::w#5 = print_uint_at::w#1
|
|
Coalesced [106] atan2_16::yi#17 = atan2_16::$2
|
|
Coalesced [110] atan2_16::xi#14 = atan2_16::$7
|
|
Coalesced [112] atan2_16::yi#19 = atan2_16::yi#0
|
|
Coalesced [113] atan2_16::xi#16 = atan2_16::xi#0
|
|
Coalesced [116] atan2_16::angle#22 = atan2_16::angle#12
|
|
Coalesced [121] atan2_16::angle#27 = atan2_16::angle#4
|
|
Coalesced [125] atan2_16::return#6 = atan2_16::angle#5
|
|
Coalesced [128] atan2_16::return#5 = atan2_16::angle#11
|
|
Coalesced [129] atan2_16::angle#26 = atan2_16::angle#1
|
|
Not coalescing [130] atan2_16::shift#5 = atan2_16::i#2
|
|
Not coalescing [131] atan2_16::xd#10 = atan2_16::xi#3
|
|
Not coalescing [132] atan2_16::yd#10 = atan2_16::yi#3
|
|
Coalesced [138] atan2_16::yd#13 = atan2_16::yd#2
|
|
Coalesced [139] atan2_16::xd#13 = atan2_16::xd#2
|
|
Coalesced [146] atan2_16::yi#21 = atan2_16::yi#2
|
|
Coalesced [147] atan2_16::angle#25 = atan2_16::angle#3
|
|
Coalesced [148] atan2_16::xi#18 = atan2_16::xi#2
|
|
Coalesced [152] atan2_16::yi#18 = atan2_16::yi#8
|
|
Coalesced [153] atan2_16::xi#15 = atan2_16::xi#8
|
|
Coalesced [154] atan2_16::i#12 = atan2_16::i#1
|
|
Coalesced [155] atan2_16::angle#21 = atan2_16::angle#13
|
|
Coalesced (already) [156] atan2_16::angle#23 = atan2_16::angle#13
|
|
Coalesced [161] atan2_16::yi#20 = atan2_16::yi#1
|
|
Coalesced [162] atan2_16::angle#24 = atan2_16::angle#2
|
|
Coalesced [163] atan2_16::xi#17 = atan2_16::xi#1
|
|
Coalesced [164] atan2_16::yd#12 = atan2_16::yd#3
|
|
Coalesced [165] atan2_16::xd#12 = atan2_16::xd#3
|
|
Coalesced [169] atan2_16::shift#6 = atan2_16::shift#1
|
|
Coalesced [170] atan2_16::xd#11 = atan2_16::xd#1
|
|
Coalesced [171] atan2_16::yd#11 = atan2_16::yd#1
|
|
Not coalescing [172] atan2_16::xi#13 = atan2_16::x#0
|
|
Not coalescing [173] atan2_16::yi#16 = atan2_16::y#0
|
|
Coalesced [177] print_uchar_at::b#4 = print_uchar_at::b#0
|
|
Coalesced [178] print_uchar_at::at#4 = print_uchar_at::at#0
|
|
Coalesced [182] print_uchar_at::b#5 = print_uchar_at::b#1
|
|
Coalesced [183] print_uchar_at::at#5 = print_uchar_at::at#1
|
|
Coalesced [191] print_char_at::ch#3 = print_char_at::ch#0
|
|
Coalesced [192] print_char_at::at#3 = print_char_at::at#0
|
|
Coalesced [197] print_char_at::ch#4 = print_char_at::ch#1
|
|
Coalesced [198] print_char_at::at#4 = print_char_at::at#1
|
|
Coalesced down to 28 phi equivalence classes
|
|
Culled Empty Block label main::@3
|
|
Culled Empty Block label main::toD0181_@return
|
|
Culled Empty Block label main::@7
|
|
Culled Empty Block label main::toD0182_@return
|
|
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 print_ulong_at::@2
|
|
Culled Empty Block label atan2_16::@23
|
|
Culled Empty Block label atan2_16::@27
|
|
Culled Empty Block label atan2_16::@26
|
|
Culled Empty Block label atan2_16::@22
|
|
Culled Empty Block label atan2_16::@24
|
|
Culled Empty Block label atan2_16::@25
|
|
Culled Empty Block label print_uint_at::@2
|
|
Culled Empty Block label print_uchar_at::@2
|
|
Renumbering block main::@4 to main::@3
|
|
Renumbering block main::@5 to main::@4
|
|
Renumbering block main::@6 to main::@5
|
|
Adding NOP phi() at start of main
|
|
Adding NOP phi() at start of main::toD0181
|
|
Adding NOP phi() at start of main::@3
|
|
Adding NOP phi() at start of main::@4
|
|
Adding NOP phi() at start of main::toD0182
|
|
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::@1
|
|
main::@1: scope:[main] from main::toD0181
|
|
[3] *D018 = main::toD0181_return#0
|
|
[4] call clock_start
|
|
to:main::@3
|
|
main::@3: scope:[main] from main::@1
|
|
[5] phi()
|
|
[6] call init_angle_screen
|
|
to:main::@4
|
|
main::@4: scope:[main] from main::@3
|
|
[7] phi()
|
|
[8] call clock
|
|
[9] clock::return#2 = clock::return#0
|
|
to:main::@5
|
|
main::@5: scope:[main] from main::@4
|
|
[10] main::$4 = clock::return#2
|
|
[11] main::cyclecount#0 = main::$4 - CLOCKS_PER_INIT
|
|
[12] print_ulong_at::dw#0 = main::cyclecount#0
|
|
[13] call print_ulong_at
|
|
to:main::toD0182
|
|
main::toD0182: scope:[main] from main::@5
|
|
[14] phi()
|
|
to:main::@2
|
|
main::@2: scope:[main] from main::toD0182
|
|
[15] *D018 = main::toD0182_return#0
|
|
to:main::@return
|
|
main::@return: scope:[main] from main::@2
|
|
[16] return
|
|
to:@return
|
|
|
|
void init_font_hex(byte* init_font_hex::charset)
|
|
init_font_hex: scope:[init_font_hex] from main
|
|
[17] phi()
|
|
to:init_font_hex::@1
|
|
init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5
|
|
[18] init_font_hex::c#6 = phi( init_font_hex/0, init_font_hex::@5/init_font_hex::c#1 )
|
|
[18] init_font_hex::proto_hi#6 = phi( init_font_hex/FONT_HEX_PROTO, init_font_hex::@5/init_font_hex::proto_hi#1 )
|
|
[18] 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
|
|
[19] init_font_hex::c1#4 = phi( init_font_hex::@1/0, init_font_hex::@4/init_font_hex::c1#1 )
|
|
[19] init_font_hex::proto_lo#4 = phi( init_font_hex::@1/FONT_HEX_PROTO, init_font_hex::@4/init_font_hex::proto_lo#1 )
|
|
[19] init_font_hex::charset#2 = phi( init_font_hex::@1/init_font_hex::charset#5, init_font_hex::@4/init_font_hex::charset#0 )
|
|
[20] *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
|
|
[21] init_font_hex::idx#5 = phi( init_font_hex::@2/1, init_font_hex::@3/init_font_hex::idx#2 )
|
|
[21] init_font_hex::i#2 = phi( init_font_hex::@2/0, init_font_hex::@3/init_font_hex::i#1 )
|
|
[22] init_font_hex::$0 = init_font_hex::proto_hi#6[init_font_hex::i#2] << 4
|
|
[23] init_font_hex::$1 = init_font_hex::proto_lo#4[init_font_hex::i#2] << 1
|
|
[24] init_font_hex::$2 = init_font_hex::$0 | init_font_hex::$1
|
|
[25] init_font_hex::charset#2[init_font_hex::idx#5] = init_font_hex::$2
|
|
[26] init_font_hex::idx#2 = ++ init_font_hex::idx#5
|
|
[27] init_font_hex::i#1 = ++ init_font_hex::i#2
|
|
[28] 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
|
|
[29] init_font_hex::charset#2[init_font_hex::idx#2] = 0
|
|
[30] init_font_hex::idx#3 = ++ init_font_hex::idx#2
|
|
[31] init_font_hex::charset#2[init_font_hex::idx#3] = 0
|
|
[32] init_font_hex::proto_lo#1 = init_font_hex::proto_lo#4 + 5
|
|
[33] init_font_hex::charset#0 = init_font_hex::charset#2 + 8
|
|
[34] init_font_hex::c1#1 = ++ init_font_hex::c1#4
|
|
[35] 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
|
|
[36] init_font_hex::proto_hi#1 = init_font_hex::proto_hi#6 + 5
|
|
[37] init_font_hex::c#1 = ++ init_font_hex::c#6
|
|
[38] 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
|
|
[39] return
|
|
to:@return
|
|
|
|
void clock_start()
|
|
clock_start: scope:[clock_start] from main::@1
|
|
[40] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = 0
|
|
[41] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
|
|
[42] *CIA2_TIMER_AB = $ffffffff
|
|
[43] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
|
|
[44] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = CIA_TIMER_CONTROL_START
|
|
to:clock_start::@return
|
|
clock_start::@return: scope:[clock_start] from clock_start
|
|
[45] return
|
|
to:@return
|
|
|
|
void init_angle_screen(byte* init_angle_screen::screen)
|
|
init_angle_screen: scope:[init_angle_screen] from main::@3
|
|
[46] phi()
|
|
to:init_angle_screen::@1
|
|
init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4
|
|
[47] init_angle_screen::screen_bottomline#6 = phi( init_angle_screen/SCREEN+(word)$28*$c, init_angle_screen::@4/init_angle_screen::screen_bottomline#1 )
|
|
[47] init_angle_screen::screen_topline#6 = phi( init_angle_screen/SCREEN+(word)$28*$c, init_angle_screen::@4/init_angle_screen::screen_topline#1 )
|
|
[47] 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
|
|
[48] init_angle_screen::xb#2 = phi( init_angle_screen::@1/$27, init_angle_screen::@5/init_angle_screen::xb#1 )
|
|
[48] init_angle_screen::x#2 = phi( init_angle_screen::@1/0, init_angle_screen::@5/init_angle_screen::x#1 )
|
|
[49] 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
|
|
[50] init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#6 - $28
|
|
[51] init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#6 + $28
|
|
[52] init_angle_screen::y#1 = ++ init_angle_screen::y#5
|
|
[53] 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
|
|
[54] return
|
|
to:@return
|
|
init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2
|
|
[55] init_angle_screen::$3 = init_angle_screen::x#2 << 1
|
|
[56] init_angle_screen::$4 = $27 - init_angle_screen::$3
|
|
[57] init_angle_screen::xw#0 = init_angle_screen::$4 w= 0
|
|
[58] init_angle_screen::$5 = init_angle_screen::y#5 << 1
|
|
[59] init_angle_screen::yw#0 = init_angle_screen::$5 w= 0
|
|
[60] atan2_16::x#0 = (signed word)init_angle_screen::xw#0
|
|
[61] atan2_16::y#0 = (signed word)init_angle_screen::yw#0
|
|
[62] call atan2_16
|
|
[63] 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
|
|
[64] init_angle_screen::angle_w#0 = atan2_16::return#2
|
|
[65] init_angle_screen::$7 = init_angle_screen::angle_w#0 + $80
|
|
[66] init_angle_screen::ang_w#0 = > init_angle_screen::$7
|
|
[67] init_angle_screen::screen_bottomline#6[init_angle_screen::xb#2] = init_angle_screen::ang_w#0
|
|
[68] init_angle_screen::$9 = - init_angle_screen::ang_w#0
|
|
[69] init_angle_screen::screen_topline#6[init_angle_screen::xb#2] = init_angle_screen::$9
|
|
[70] init_angle_screen::$10 = $80 + init_angle_screen::ang_w#0
|
|
[71] init_angle_screen::screen_topline#6[init_angle_screen::x#2] = init_angle_screen::$10
|
|
[72] init_angle_screen::$11 = $80 - init_angle_screen::ang_w#0
|
|
[73] init_angle_screen::screen_bottomline#6[init_angle_screen::x#2] = init_angle_screen::$11
|
|
[74] init_angle_screen::x#1 = ++ init_angle_screen::x#2
|
|
[75] init_angle_screen::xb#1 = -- init_angle_screen::xb#2
|
|
to:init_angle_screen::@2
|
|
|
|
dword clock()
|
|
clock: scope:[clock] from main::@4
|
|
[76] clock::return#0 = $ffffffff - *CIA2_TIMER_AB
|
|
to:clock::@return
|
|
clock::@return: scope:[clock] from clock
|
|
[77] return
|
|
to:@return
|
|
|
|
void print_ulong_at(dword print_ulong_at::dw , byte* print_ulong_at::at)
|
|
print_ulong_at: scope:[print_ulong_at] from main::@5
|
|
[78] print_uint_at::w#0 = > print_ulong_at::dw#0
|
|
[79] call print_uint_at
|
|
to:print_ulong_at::@1
|
|
print_ulong_at::@1: scope:[print_ulong_at] from print_ulong_at
|
|
[80] print_uint_at::w#1 = < print_ulong_at::dw#0
|
|
[81] call print_uint_at
|
|
to:print_ulong_at::@return
|
|
print_ulong_at::@return: scope:[print_ulong_at] from print_ulong_at::@1
|
|
[82] return
|
|
to:@return
|
|
|
|
word atan2_16(signed word atan2_16::x , signed word atan2_16::y)
|
|
atan2_16: scope:[atan2_16] from init_angle_screen::@3
|
|
[83] if(atan2_16::y#0>=0) goto atan2_16::@1
|
|
to:atan2_16::@2
|
|
atan2_16::@2: scope:[atan2_16] from atan2_16
|
|
[84] atan2_16::$2 = - atan2_16::y#0
|
|
to:atan2_16::@3
|
|
atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2
|
|
[85] atan2_16::yi#0 = phi( atan2_16::@1/atan2_16::yi#16, atan2_16::@2/atan2_16::$2 )
|
|
[86] if(atan2_16::x#0>=0) goto atan2_16::@4
|
|
to:atan2_16::@5
|
|
atan2_16::@5: scope:[atan2_16] from atan2_16::@3
|
|
[87] atan2_16::$7 = - atan2_16::x#0
|
|
to:atan2_16::@6
|
|
atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5
|
|
[88] 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
|
|
[89] atan2_16::angle#12 = phi( atan2_16::@19/atan2_16::angle#13, atan2_16::@6/0 )
|
|
[89] atan2_16::i#2 = phi( atan2_16::@19/atan2_16::i#1, atan2_16::@6/0 )
|
|
[89] atan2_16::xi#3 = phi( atan2_16::@19/atan2_16::xi#8, atan2_16::@6/atan2_16::xi#0 )
|
|
[89] atan2_16::yi#3 = phi( atan2_16::@19/atan2_16::yi#8, atan2_16::@6/atan2_16::yi#0 )
|
|
[90] 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
|
|
[91] atan2_16::angle#6 = phi( atan2_16::@10/atan2_16::angle#12, atan2_16::@19/atan2_16::angle#13 )
|
|
[92] atan2_16::angle#1 = atan2_16::angle#6 >> 1
|
|
[93] if(atan2_16::x#0>=0) goto atan2_16::@7
|
|
to:atan2_16::@21
|
|
atan2_16::@21: scope:[atan2_16] from atan2_16::@12
|
|
[94] 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
|
|
[95] atan2_16::angle#11 = phi( atan2_16::@12/atan2_16::angle#1, atan2_16::@21/atan2_16::angle#4 )
|
|
[96] if(atan2_16::y#0>=0) goto atan2_16::@8
|
|
to:atan2_16::@9
|
|
atan2_16::@9: scope:[atan2_16] from atan2_16::@7
|
|
[97] 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
|
|
[98] 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
|
|
[99] return
|
|
to:@return
|
|
atan2_16::@11: scope:[atan2_16] from atan2_16::@10
|
|
[100] atan2_16::shift#5 = atan2_16::i#2
|
|
[101] atan2_16::xd#10 = atan2_16::xi#3
|
|
[102] 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
|
|
[103] atan2_16::yd#3 = phi( atan2_16::@11/atan2_16::yd#10, atan2_16::@14/atan2_16::yd#1 )
|
|
[103] atan2_16::xd#3 = phi( atan2_16::@11/atan2_16::xd#10, atan2_16::@14/atan2_16::xd#1 )
|
|
[103] atan2_16::shift#2 = phi( atan2_16::@11/atan2_16::shift#5, atan2_16::@14/atan2_16::shift#1 )
|
|
[104] if(atan2_16::shift#2>=2) goto atan2_16::@14
|
|
to:atan2_16::@15
|
|
atan2_16::@15: scope:[atan2_16] from atan2_16::@13
|
|
[105] if(0==atan2_16::shift#2) goto atan2_16::@17
|
|
to:atan2_16::@16
|
|
atan2_16::@16: scope:[atan2_16] from atan2_16::@15
|
|
[106] atan2_16::xd#2 = atan2_16::xd#3 >> 1
|
|
[107] 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
|
|
[108] atan2_16::xd#5 = phi( atan2_16::@15/atan2_16::xd#3, atan2_16::@16/atan2_16::xd#2 )
|
|
[108] atan2_16::yd#5 = phi( atan2_16::@15/atan2_16::yd#3, atan2_16::@16/atan2_16::yd#2 )
|
|
[109] if(atan2_16::yi#3>=0) goto atan2_16::@18
|
|
to:atan2_16::@20
|
|
atan2_16::@20: scope:[atan2_16] from atan2_16::@17
|
|
[110] atan2_16::xi#2 = atan2_16::xi#3 - atan2_16::yd#5
|
|
[111] atan2_16::yi#2 = atan2_16::yi#3 + atan2_16::xd#5
|
|
[112] atan2_16::$23 = atan2_16::i#2 << 1
|
|
[113] 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
|
|
[114] atan2_16::xi#8 = phi( atan2_16::@18/atan2_16::xi#1, atan2_16::@20/atan2_16::xi#2 )
|
|
[114] atan2_16::angle#13 = phi( atan2_16::@18/atan2_16::angle#2, atan2_16::@20/atan2_16::angle#3 )
|
|
[114] atan2_16::yi#8 = phi( atan2_16::@18/atan2_16::yi#1, atan2_16::@20/atan2_16::yi#2 )
|
|
[115] atan2_16::i#1 = ++ atan2_16::i#2
|
|
[116] 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
|
|
[117] atan2_16::xi#1 = atan2_16::xi#3 + atan2_16::yd#5
|
|
[118] atan2_16::yi#1 = atan2_16::yi#3 - atan2_16::xd#5
|
|
[119] atan2_16::$22 = atan2_16::i#2 << 1
|
|
[120] 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
|
|
[121] atan2_16::xd#1 = atan2_16::xd#3 >> 2
|
|
[122] atan2_16::yd#1 = atan2_16::yd#3 >> 2
|
|
[123] atan2_16::shift#1 = atan2_16::shift#2 - 2
|
|
to:atan2_16::@13
|
|
atan2_16::@4: scope:[atan2_16] from atan2_16::@3
|
|
[124] atan2_16::xi#13 = atan2_16::x#0
|
|
to:atan2_16::@6
|
|
atan2_16::@1: scope:[atan2_16] from atan2_16
|
|
[125] atan2_16::yi#16 = atan2_16::y#0
|
|
to:atan2_16::@3
|
|
|
|
void print_uint_at(word print_uint_at::w , byte* print_uint_at::at)
|
|
print_uint_at: scope:[print_uint_at] from print_ulong_at print_ulong_at::@1
|
|
[126] print_uint_at::at#2 = phi( print_ulong_at/main::BASE_SCREEN, print_ulong_at::@1/main::BASE_SCREEN+4 )
|
|
[126] print_uint_at::w#2 = phi( print_ulong_at/print_uint_at::w#0, print_ulong_at::@1/print_uint_at::w#1 )
|
|
[127] print_uchar_at::b#0 = > print_uint_at::w#2
|
|
[128] print_uchar_at::at#0 = print_uint_at::at#2
|
|
[129] call print_uchar_at
|
|
to:print_uint_at::@1
|
|
print_uint_at::@1: scope:[print_uint_at] from print_uint_at
|
|
[130] print_uchar_at::b#1 = < print_uint_at::w#2
|
|
[131] print_uchar_at::at#1 = print_uint_at::at#2 + 2
|
|
[132] call print_uchar_at
|
|
to:print_uint_at::@return
|
|
print_uint_at::@return: scope:[print_uint_at] from print_uint_at::@1
|
|
[133] return
|
|
to:@return
|
|
|
|
void print_uchar_at(byte print_uchar_at::b , byte* print_uchar_at::at)
|
|
print_uchar_at: scope:[print_uchar_at] from print_uint_at print_uint_at::@1
|
|
[134] print_uchar_at::at#2 = phi( print_uint_at/print_uchar_at::at#0, print_uint_at::@1/print_uchar_at::at#1 )
|
|
[134] print_uchar_at::b#2 = phi( print_uint_at/print_uchar_at::b#0, print_uint_at::@1/print_uchar_at::b#1 )
|
|
[135] print_uchar_at::$0 = print_uchar_at::b#2 >> 4
|
|
[136] print_char_at::ch#0 = print_hextab[print_uchar_at::$0]
|
|
[137] print_char_at::at#0 = print_uchar_at::at#2
|
|
[138] call print_char_at
|
|
to:print_uchar_at::@1
|
|
print_uchar_at::@1: scope:[print_uchar_at] from print_uchar_at
|
|
[139] print_uchar_at::$2 = print_uchar_at::b#2 & $f
|
|
[140] print_char_at::at#1 = print_uchar_at::at#2 + 1
|
|
[141] print_char_at::ch#1 = print_hextab[print_uchar_at::$2]
|
|
[142] call print_char_at
|
|
to:print_uchar_at::@return
|
|
print_uchar_at::@return: scope:[print_uchar_at] from print_uchar_at::@1
|
|
[143] return
|
|
to:@return
|
|
|
|
void print_char_at(byte print_char_at::ch , byte* print_char_at::at)
|
|
print_char_at: scope:[print_char_at] from print_uchar_at print_uchar_at::@1
|
|
[144] print_char_at::at#2 = phi( print_uchar_at/print_char_at::at#0, print_uchar_at::@1/print_char_at::at#1 )
|
|
[144] print_char_at::ch#2 = phi( print_uchar_at/print_char_at::ch#0, print_uchar_at::@1/print_char_at::ch#1 )
|
|
[145] *print_char_at::at#2 = print_char_at::ch#2
|
|
to:print_char_at::@return
|
|
print_char_at::@return: scope:[print_char_at] from print_char_at
|
|
[146] return
|
|
to:@return
|
|
|
|
|
|
VARIABLE REGISTER WEIGHTS
|
|
word atan2_16(signed word atan2_16::x , signed word atan2_16::y)
|
|
signed word~ atan2_16::$2 20002.0
|
|
byte~ atan2_16::$22 2.0000002E7
|
|
byte~ atan2_16::$23 2.0000002E7
|
|
signed word~ atan2_16::$7 20002.0
|
|
word atan2_16::angle
|
|
word atan2_16::angle#1 15001.5
|
|
word atan2_16::angle#11 20002.0
|
|
word atan2_16::angle#12 1904762.0952380951
|
|
word atan2_16::angle#13 1.3333334666666666E7
|
|
word atan2_16::angle#2 2.0000002E7
|
|
word atan2_16::angle#3 2.0000002E7
|
|
word atan2_16::angle#4 20002.0
|
|
word atan2_16::angle#5 20002.0
|
|
word atan2_16::angle#6 2.0010003E7
|
|
byte atan2_16::i
|
|
byte atan2_16::i#1 1.50000015E7
|
|
byte atan2_16::i#2 2083333.5416666665
|
|
word atan2_16::return
|
|
word atan2_16::return#0 7001.0
|
|
word atan2_16::return#2 2002.0
|
|
byte atan2_16::shift
|
|
byte atan2_16::shift#1 2.00000002E8
|
|
byte atan2_16::shift#2 8.000000125E7
|
|
byte atan2_16::shift#5 6666667.333333333
|
|
signed word atan2_16::x
|
|
signed word atan2_16::x#0 1079.078947368421
|
|
signed word atan2_16::xd
|
|
signed word atan2_16::xd#1 6.6666667333333336E7
|
|
signed word atan2_16::xd#10 1.0000001E7
|
|
signed word atan2_16::xd#2 1.0000001E7
|
|
signed word atan2_16::xd#3 7.666666833333333E7
|
|
signed word atan2_16::xd#5 1.0000001E7
|
|
signed word atan2_16::xi
|
|
signed word atan2_16::xi#0 30003.0
|
|
signed word atan2_16::xi#1 5000000.5
|
|
signed word atan2_16::xi#13 20002.0
|
|
signed word atan2_16::xi#2 5000000.5
|
|
signed word atan2_16::xi#3 2667333.6666666665
|
|
signed word atan2_16::xi#8 1.0000001E7
|
|
signed word atan2_16::y
|
|
signed word atan2_16::y#0 1025.125
|
|
signed word atan2_16::yd
|
|
signed word atan2_16::yd#1 1.00000001E8
|
|
signed word atan2_16::yd#10 2.0000002E7
|
|
signed word atan2_16::yd#2 2.0000002E7
|
|
signed word atan2_16::yd#3 4.6000001E7
|
|
signed word atan2_16::yd#5 2.0000002E7
|
|
signed word atan2_16::yi
|
|
signed word atan2_16::yi#0 6000.6
|
|
signed word atan2_16::yi#1 6666667.333333333
|
|
signed word atan2_16::yi#16 20002.0
|
|
signed word atan2_16::yi#2 6666667.333333333
|
|
signed word atan2_16::yi#3 3530000.4117647056
|
|
signed word atan2_16::yi#8 1.0000001E7
|
|
dword clock()
|
|
dword clock::return
|
|
dword clock::return#0 4.333333333333333
|
|
dword clock::return#2 4.0
|
|
void clock_start()
|
|
void init_angle_screen(byte* init_angle_screen::screen)
|
|
byte~ init_angle_screen::$10 2002.0
|
|
byte~ init_angle_screen::$11 2002.0
|
|
byte~ init_angle_screen::$3 2002.0
|
|
byte~ init_angle_screen::$4 2002.0
|
|
byte~ init_angle_screen::$5 2002.0
|
|
word~ init_angle_screen::$7 2002.0
|
|
byte~ init_angle_screen::$9 2002.0
|
|
byte init_angle_screen::ang_w
|
|
byte init_angle_screen::ang_w#0 834.1666666666667
|
|
word init_angle_screen::angle_w
|
|
word init_angle_screen::angle_w#0 2002.0
|
|
byte* init_angle_screen::screen
|
|
byte* init_angle_screen::screen_bottomline
|
|
byte* init_angle_screen::screen_bottomline#1 67.33333333333333
|
|
byte* init_angle_screen::screen_bottomline#6 88.16
|
|
byte* init_angle_screen::screen_topline
|
|
byte* init_angle_screen::screen_topline#1 50.5
|
|
byte* init_angle_screen::screen_topline#6 91.83333333333334
|
|
byte init_angle_screen::x
|
|
byte init_angle_screen::x#1 1001.0
|
|
byte init_angle_screen::x#2 286.0
|
|
byte init_angle_screen::xb
|
|
byte init_angle_screen::xb#1 2002.0
|
|
byte init_angle_screen::xb#2 182.0
|
|
signed word init_angle_screen::xw
|
|
word init_angle_screen::xw#0 333.6666666666667
|
|
byte init_angle_screen::y
|
|
byte init_angle_screen::y#1 151.5
|
|
byte init_angle_screen::y#5 46.26923076923077
|
|
signed word init_angle_screen::yw
|
|
word init_angle_screen::yw#0 500.5
|
|
void init_font_hex(byte* init_font_hex::charset)
|
|
byte~ init_font_hex::$0 10001.0
|
|
byte~ init_font_hex::$1 20002.0
|
|
byte~ init_font_hex::$2 20002.0
|
|
byte init_font_hex::c
|
|
byte init_font_hex::c#1 151.5
|
|
byte init_font_hex::c#6 10.631578947368421
|
|
byte init_font_hex::c1
|
|
byte init_font_hex::c1#1 1501.5
|
|
byte init_font_hex::c1#4 133.46666666666667
|
|
byte* init_font_hex::charset
|
|
byte* init_font_hex::charset#0 350.5
|
|
byte* init_font_hex::charset#2 1079.0714285714287
|
|
byte* init_font_hex::charset#5 202.0
|
|
byte init_font_hex::i
|
|
byte init_font_hex::i#1 15001.5
|
|
byte init_font_hex::i#2 6667.333333333333
|
|
byte init_font_hex::idx
|
|
byte init_font_hex::idx#2 5501.0
|
|
byte init_font_hex::idx#3 2002.0
|
|
byte init_font_hex::idx#5 6000.6
|
|
byte* init_font_hex::proto_hi
|
|
byte* init_font_hex::proto_hi#1 67.33333333333333
|
|
byte* init_font_hex::proto_hi#6 566.8333333333333
|
|
byte* init_font_hex::proto_lo
|
|
byte* init_font_hex::proto_lo#1 500.5
|
|
byte* init_font_hex::proto_lo#4 923.3076923076923
|
|
void main()
|
|
dword~ main::$4 4.0
|
|
dword main::cyclecount
|
|
dword main::cyclecount#0 4.0
|
|
byte* main::toD0181_gfx
|
|
byte main::toD0181_return
|
|
byte* main::toD0181_screen
|
|
byte* main::toD0182_gfx
|
|
byte main::toD0182_return
|
|
byte* main::toD0182_screen
|
|
void print_char_at(byte print_char_at::ch , byte* print_char_at::at)
|
|
byte* print_char_at::at
|
|
byte* print_char_at::at#0 2002.0
|
|
byte* print_char_at::at#1 1001.0
|
|
byte* print_char_at::at#2 12003.0
|
|
byte print_char_at::ch
|
|
byte print_char_at::ch#0 1001.0
|
|
byte print_char_at::ch#1 2002.0
|
|
byte print_char_at::ch#2 12003.0
|
|
void print_uchar_at(byte print_uchar_at::b , byte* print_uchar_at::at)
|
|
byte~ print_uchar_at::$0 2002.0
|
|
byte~ print_uchar_at::$2 1001.0
|
|
byte* print_uchar_at::at
|
|
byte* print_uchar_at::at#0 202.0
|
|
byte* print_uchar_at::at#1 202.0
|
|
byte* print_uchar_at::at#2 367.33333333333337
|
|
byte print_uchar_at::b
|
|
byte print_uchar_at::b#0 101.0
|
|
byte print_uchar_at::b#1 101.0
|
|
byte print_uchar_at::b#2 440.79999999999995
|
|
void print_uint_at(word print_uint_at::w , byte* print_uint_at::at)
|
|
byte* print_uint_at::at
|
|
byte* print_uint_at::at#2 40.4
|
|
word print_uint_at::w
|
|
word print_uint_at::w#0 22.0
|
|
word print_uint_at::w#1 22.0
|
|
word print_uint_at::w#2 56.0
|
|
void print_ulong_at(dword print_ulong_at::dw , byte* print_ulong_at::at)
|
|
byte* print_ulong_at::at
|
|
dword print_ulong_at::dw
|
|
dword print_ulong_at::dw#0 8.0
|
|
|
|
Initial phi equivalence classes
|
|
[ 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 ]
|
|
[ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
|
|
[ print_uint_at::at#2 ]
|
|
[ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
|
|
[ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ]
|
|
[ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
|
|
[ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
|
|
Added variable clock::return#2 to live range equivalence class [ clock::return#2 ]
|
|
Added variable main::$4 to live range equivalence class [ main::$4 ]
|
|
Added variable main::cyclecount#0 to live range equivalence class [ main::cyclecount#0 ]
|
|
Added variable print_ulong_at::dw#0 to live range equivalence class [ print_ulong_at::dw#0 ]
|
|
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::$5 to live range equivalence class [ init_angle_screen::$5 ]
|
|
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::$7 to live range equivalence class [ init_angle_screen::$7 ]
|
|
Added variable init_angle_screen::ang_w#0 to live range equivalence class [ init_angle_screen::ang_w#0 ]
|
|
Added variable init_angle_screen::$9 to live range equivalence class [ init_angle_screen::$9 ]
|
|
Added variable init_angle_screen::$10 to live range equivalence class [ init_angle_screen::$10 ]
|
|
Added variable init_angle_screen::$11 to live range equivalence class [ init_angle_screen::$11 ]
|
|
Added variable clock::return#0 to live range equivalence class [ clock::return#0 ]
|
|
Added variable atan2_16::$23 to live range equivalence class [ atan2_16::$23 ]
|
|
Added variable atan2_16::$22 to live range equivalence class [ atan2_16::$22 ]
|
|
Added variable print_uchar_at::$0 to live range equivalence class [ print_uchar_at::$0 ]
|
|
Added variable print_uchar_at::$2 to live range equivalence class [ print_uchar_at::$2 ]
|
|
Complete equivalence classes
|
|
[ 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 ]
|
|
[ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
|
|
[ print_uint_at::at#2 ]
|
|
[ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
|
|
[ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ]
|
|
[ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
|
|
[ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
|
|
[ clock::return#2 ]
|
|
[ main::$4 ]
|
|
[ main::cyclecount#0 ]
|
|
[ print_ulong_at::dw#0 ]
|
|
[ 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::$5 ]
|
|
[ 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::$7 ]
|
|
[ init_angle_screen::ang_w#0 ]
|
|
[ init_angle_screen::$9 ]
|
|
[ init_angle_screen::$10 ]
|
|
[ init_angle_screen::$11 ]
|
|
[ clock::return#0 ]
|
|
[ atan2_16::$23 ]
|
|
[ atan2_16::$22 ]
|
|
[ print_uchar_at::$0 ]
|
|
[ print_uchar_at::$2 ]
|
|
Allocated zp[2]:2 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
|
|
Allocated zp[1]:4 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Allocated zp[2]:5 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
|
|
Allocated zp[2]:7 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
|
|
Allocated zp[1]:9 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
Allocated zp[1]:10 [ init_font_hex::i#2 init_font_hex::i#1 ]
|
|
Allocated zp[1]:11 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
|
|
Allocated zp[1]:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
|
|
Allocated zp[2]:13 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ]
|
|
Allocated zp[2]:15 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ]
|
|
Allocated zp[1]:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
|
|
Allocated zp[1]:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
|
|
Allocated zp[2]:19 [ 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]:21 [ 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]:23 [ atan2_16::i#2 atan2_16::i#1 ]
|
|
Allocated zp[2]:24 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
|
|
Allocated zp[2]:26 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
|
|
Allocated zp[1]:28 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
|
|
Allocated zp[2]:29 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
|
|
Allocated zp[2]:31 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
|
|
Allocated zp[2]:33 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ]
|
|
Allocated zp[2]:35 [ print_uint_at::at#2 ]
|
|
Allocated zp[1]:37 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
|
|
Allocated zp[2]:38 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ]
|
|
Allocated zp[1]:40 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
|
|
Allocated zp[2]:41 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
|
|
Allocated zp[4]:43 [ clock::return#2 ]
|
|
Allocated zp[4]:47 [ main::$4 ]
|
|
Allocated zp[4]:51 [ main::cyclecount#0 ]
|
|
Allocated zp[4]:55 [ print_ulong_at::dw#0 ]
|
|
Allocated zp[1]:59 [ init_font_hex::$0 ]
|
|
Allocated zp[1]:60 [ init_font_hex::$1 ]
|
|
Allocated zp[1]:61 [ init_font_hex::$2 ]
|
|
Allocated zp[1]:62 [ init_font_hex::idx#3 ]
|
|
Allocated zp[1]:63 [ init_angle_screen::$3 ]
|
|
Allocated zp[1]:64 [ init_angle_screen::$4 ]
|
|
Allocated zp[2]:65 [ init_angle_screen::xw#0 ]
|
|
Allocated zp[1]:67 [ init_angle_screen::$5 ]
|
|
Allocated zp[2]:68 [ init_angle_screen::yw#0 ]
|
|
Allocated zp[2]:70 [ atan2_16::x#0 ]
|
|
Allocated zp[2]:72 [ atan2_16::y#0 ]
|
|
Allocated zp[2]:74 [ atan2_16::return#2 ]
|
|
Allocated zp[2]:76 [ init_angle_screen::angle_w#0 ]
|
|
Allocated zp[2]:78 [ init_angle_screen::$7 ]
|
|
Allocated zp[1]:80 [ init_angle_screen::ang_w#0 ]
|
|
Allocated zp[1]:81 [ init_angle_screen::$9 ]
|
|
Allocated zp[1]:82 [ init_angle_screen::$10 ]
|
|
Allocated zp[1]:83 [ init_angle_screen::$11 ]
|
|
Allocated zp[4]:84 [ clock::return#0 ]
|
|
Allocated zp[1]:88 [ atan2_16::$23 ]
|
|
Allocated zp[1]:89 [ atan2_16::$22 ]
|
|
Allocated zp[1]:90 [ print_uchar_at::$0 ]
|
|
Allocated zp[1]:91 [ print_uchar_at::$2 ]
|
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
|
Statement [3] *D018 = main::toD0181_return#0 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [9] clock::return#2 = clock::return#0 [ clock::return#2 ] ( [ clock::return#2 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a
|
|
Statement [10] main::$4 = clock::return#2 [ main::$4 ] ( [ main::$4 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } } ) always clobbers reg byte a
|
|
Statement [11] main::cyclecount#0 = main::$4 - CLOCKS_PER_INIT [ main::cyclecount#0 ] ( [ main::cyclecount#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } } ) always clobbers reg byte a
|
|
Statement [12] print_ulong_at::dw#0 = main::cyclecount#0 [ print_ulong_at::dw#0 ] ( [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } } ) always clobbers reg byte a
|
|
Statement [15] *D018 = main::toD0182_return#0 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [20] *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]:4 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp[1]:4 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:9 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp[1]:9 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
Statement [22] 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]:10 [ init_font_hex::i#2 init_font_hex::i#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:11 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
|
|
Statement [23] 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]:59 [ init_font_hex::$0 ]
|
|
Statement [29] 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 [31] 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 [32] 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 [33] 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 [36] 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 [40] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = 0 [ ] ( clock_start:4 [ ] { } ) always clobbers reg byte a
|
|
Statement [41] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( clock_start:4 [ ] { } ) always clobbers reg byte a
|
|
Statement [42] *CIA2_TIMER_AB = $ffffffff [ ] ( clock_start:4 [ ] { } ) always clobbers reg byte a
|
|
Statement [43] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( clock_start:4 [ ] { } ) always clobbers reg byte a
|
|
Statement [44] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = CIA_TIMER_CONTROL_START [ ] ( clock_start:4 [ ] { } ) always clobbers reg byte a
|
|
Statement [50] 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:6 [ 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]:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
|
|
Statement [51] 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:6 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] { } ) always clobbers reg byte a
|
|
Statement [55] 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:6 [ 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]:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
|
|
Statement [56] 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:6 [ 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 [58] init_angle_screen::$5 = 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::$5 ] ( init_angle_screen:6 [ 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::$5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [60] atan2_16::x#0 = (signed word)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:6 [ 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 [61] atan2_16::y#0 = (signed word)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:6 [ 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 [63] 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:6 [ 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 [64] 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:6 [ 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 [65] init_angle_screen::$7 = 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::$7 ] ( init_angle_screen:6 [ 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::$7 ] { } ) always clobbers reg byte a
|
|
Statement [68] init_angle_screen::$9 = - 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::$9 ] ( init_angle_screen:6 [ 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::$9 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:80 [ init_angle_screen::ang_w#0 ]
|
|
Statement [70] init_angle_screen::$10 = $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::$10 ] ( init_angle_screen:6 [ 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::$10 ] { } ) always clobbers reg byte a
|
|
Statement [72] 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::$11 ] ( init_angle_screen:6 [ 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::$11 ] { } ) always clobbers reg byte a
|
|
Statement [76] clock::return#0 = $ffffffff - *CIA2_TIMER_AB [ clock::return#0 ] ( clock:8 [ clock::return#0 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a
|
|
Statement [78] print_uint_at::w#0 = > print_ulong_at::dw#0 [ print_ulong_at::dw#0 print_uint_at::w#0 ] ( print_ulong_at:13 [ print_ulong_at::dw#0 print_uint_at::w#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } } ) always clobbers reg byte a
|
|
Statement [80] print_uint_at::w#1 = < print_ulong_at::dw#0 [ print_uint_at::w#1 ] ( print_ulong_at:13 [ print_uint_at::w#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } } ) always clobbers reg byte a
|
|
Statement [83] if(atan2_16::y#0>=0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( init_angle_screen:6::atan2_16:62 [ 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 [84] atan2_16::$2 = - atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( init_angle_screen:6::atan2_16:62 [ 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 [86] 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:6::atan2_16:62 [ 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 [87] 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:6::atan2_16:62 [ 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 [90] 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:6::atan2_16:62 [ 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]:23 [ atan2_16::i#2 atan2_16::i#1 ]
|
|
Statement [92] atan2_16::angle#1 = atan2_16::angle#6 >> 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( init_angle_screen:6::atan2_16:62 [ 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 [93] if(atan2_16::x#0>=0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( init_angle_screen:6::atan2_16:62 [ 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 [94] atan2_16::angle#4 = $8000 - atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( init_angle_screen:6::atan2_16:62 [ 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 [96] if(atan2_16::y#0>=0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( init_angle_screen:6::atan2_16:62 [ 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 [97] atan2_16::angle#5 = - atan2_16::angle#11 [ atan2_16::angle#5 ] ( init_angle_screen:6::atan2_16:62 [ 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 [101] 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:6::atan2_16:62 [ 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]:28 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
|
|
Statement [102] 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:6::atan2_16:62 [ 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 [106] 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:6::atan2_16:62 [ 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 [107] 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:6::atan2_16:62 [ 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 [109] 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:6::atan2_16:62 [ 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 [110] 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:6::atan2_16:62 [ 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 [111] 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:6::atan2_16:62 [ 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 [112] 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:6::atan2_16:62 [ 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 [113] 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:6::atan2_16:62 [ 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 [117] 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:6::atan2_16:62 [ 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 [118] 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:6::atan2_16:62 [ 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 [119] 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:6::atan2_16:62 [ 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 [120] 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:6::atan2_16:62 [ 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 [121] 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:6::atan2_16:62 [ 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 [122] 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:6::atan2_16:62 [ 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 [124] 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:6::atan2_16:62 [ 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 [125] atan2_16::yi#16 = atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( init_angle_screen:6::atan2_16:62 [ 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 [128] print_uchar_at::at#0 = print_uint_at::at#2 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#0 print_uchar_at::at#0 ] ( print_ulong_at:13::print_uint_at:79 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#0 print_uchar_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } } print_ulong_at:13::print_uint_at:81 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#0 print_uchar_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:37 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
|
|
Statement [131] print_uchar_at::at#1 = print_uint_at::at#2 + 2 [ print_uchar_at::b#1 print_uchar_at::at#1 ] ( print_ulong_at:13::print_uint_at:79 [ print_ulong_at::dw#0 print_uchar_at::b#1 print_uchar_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } } print_ulong_at:13::print_uint_at:81 [ print_uchar_at::b#1 print_uchar_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } } ) always clobbers reg byte a
|
|
Statement [135] print_uchar_at::$0 = print_uchar_at::b#2 >> 4 [ print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] ( print_ulong_at:13::print_uint_at:79::print_uchar_at:129 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:129 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:13::print_uint_at:79::print_uchar_at:132 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:132 [ print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } ) always clobbers reg byte a
|
|
Statement [137] print_char_at::at#0 = print_uchar_at::at#2 [ print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] ( print_ulong_at:13::print_uint_at:79::print_uchar_at:129 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:129 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:13::print_uint_at:79::print_uchar_at:132 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:132 [ print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:40 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
|
|
Statement [139] print_uchar_at::$2 = print_uchar_at::b#2 & $f [ print_uchar_at::at#2 print_uchar_at::$2 ] ( print_ulong_at:13::print_uint_at:79::print_uchar_at:129 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:129 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:79::print_uchar_at:132 [ print_ulong_at::dw#0 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:132 [ print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a
|
|
Statement [140] print_char_at::at#1 = print_uchar_at::at#2 + 1 [ print_uchar_at::$2 print_char_at::at#1 ] ( print_ulong_at:13::print_uint_at:79::print_uchar_at:129 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:129 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:79::print_uchar_at:132 [ print_ulong_at::dw#0 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:132 [ print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:91 [ print_uchar_at::$2 ]
|
|
Statement [145] *print_char_at::at#2 = print_char_at::ch#2 [ ] ( print_ulong_at:13::print_uint_at:79::print_uchar_at:129::print_char_at:138 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:129::print_char_at:138 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:13::print_uint_at:79::print_uchar_at:132::print_char_at:138 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:132::print_char_at:138 [ print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:13::print_uint_at:79::print_uchar_at:129::print_char_at:142 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:129::print_char_at:142 [ print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:79::print_uchar_at:132::print_char_at:142 [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:132::print_char_at:142 [ ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a reg byte y
|
|
Removing always clobbered register reg byte y as potential for zp[1]:37 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
|
|
Statement [3] *D018 = main::toD0181_return#0 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [9] clock::return#2 = clock::return#0 [ clock::return#2 ] ( [ clock::return#2 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a
|
|
Statement [10] main::$4 = clock::return#2 [ main::$4 ] ( [ main::$4 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } } ) always clobbers reg byte a
|
|
Statement [11] main::cyclecount#0 = main::$4 - CLOCKS_PER_INIT [ main::cyclecount#0 ] ( [ main::cyclecount#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } } ) always clobbers reg byte a
|
|
Statement [12] print_ulong_at::dw#0 = main::cyclecount#0 [ print_ulong_at::dw#0 ] ( [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } } ) always clobbers reg byte a
|
|
Statement [15] *D018 = main::toD0182_return#0 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [20] *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 [22] 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 [23] 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 [29] 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 [31] 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 [32] 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 [33] 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 [36] 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 [40] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = 0 [ ] ( clock_start:4 [ ] { } ) always clobbers reg byte a
|
|
Statement [41] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( clock_start:4 [ ] { } ) always clobbers reg byte a
|
|
Statement [42] *CIA2_TIMER_AB = $ffffffff [ ] ( clock_start:4 [ ] { } ) always clobbers reg byte a
|
|
Statement [43] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( clock_start:4 [ ] { } ) always clobbers reg byte a
|
|
Statement [44] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = CIA_TIMER_CONTROL_START [ ] ( clock_start:4 [ ] { } ) always clobbers reg byte a
|
|
Statement [50] 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:6 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] { } ) always clobbers reg byte a
|
|
Statement [51] 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:6 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] { } ) always clobbers reg byte a
|
|
Statement [55] 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:6 [ 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 [56] 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:6 [ 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 [58] init_angle_screen::$5 = 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::$5 ] ( init_angle_screen:6 [ 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::$5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [60] atan2_16::x#0 = (signed word)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:6 [ 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 [61] atan2_16::y#0 = (signed word)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:6 [ 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 [63] 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:6 [ 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 [64] 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:6 [ 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 [65] init_angle_screen::$7 = 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::$7 ] ( init_angle_screen:6 [ 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::$7 ] { } ) always clobbers reg byte a
|
|
Statement [67] 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::ang_w#0 ] ( init_angle_screen:6 [ 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 ] { } ) always clobbers reg byte a
|
|
Statement [68] init_angle_screen::$9 = - 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::$9 ] ( init_angle_screen:6 [ 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::$9 ] { } ) always clobbers reg byte a
|
|
Statement [70] init_angle_screen::$10 = $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::$10 ] ( init_angle_screen:6 [ 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::$10 ] { } ) always clobbers reg byte a
|
|
Statement [72] 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::$11 ] ( init_angle_screen:6 [ 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::$11 ] { } ) always clobbers reg byte a
|
|
Statement [76] clock::return#0 = $ffffffff - *CIA2_TIMER_AB [ clock::return#0 ] ( clock:8 [ clock::return#0 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a
|
|
Statement [78] print_uint_at::w#0 = > print_ulong_at::dw#0 [ print_ulong_at::dw#0 print_uint_at::w#0 ] ( print_ulong_at:13 [ print_ulong_at::dw#0 print_uint_at::w#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } } ) always clobbers reg byte a
|
|
Statement [80] print_uint_at::w#1 = < print_ulong_at::dw#0 [ print_uint_at::w#1 ] ( print_ulong_at:13 [ print_uint_at::w#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } } ) always clobbers reg byte a
|
|
Statement [83] if(atan2_16::y#0>=0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( init_angle_screen:6::atan2_16:62 [ 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 [84] atan2_16::$2 = - atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( init_angle_screen:6::atan2_16:62 [ 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 [86] 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:6::atan2_16:62 [ 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 [87] 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:6::atan2_16:62 [ 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 [90] 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:6::atan2_16:62 [ 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 [92] atan2_16::angle#1 = atan2_16::angle#6 >> 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( init_angle_screen:6::atan2_16:62 [ 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 [93] if(atan2_16::x#0>=0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( init_angle_screen:6::atan2_16:62 [ 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 [94] atan2_16::angle#4 = $8000 - atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( init_angle_screen:6::atan2_16:62 [ 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 [96] if(atan2_16::y#0>=0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( init_angle_screen:6::atan2_16:62 [ 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 [97] atan2_16::angle#5 = - atan2_16::angle#11 [ atan2_16::angle#5 ] ( init_angle_screen:6::atan2_16:62 [ 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 [101] 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:6::atan2_16:62 [ 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 [102] 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:6::atan2_16:62 [ 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 [106] 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:6::atan2_16:62 [ 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 [107] 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:6::atan2_16:62 [ 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 [109] 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:6::atan2_16:62 [ 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 [110] 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:6::atan2_16:62 [ 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 [111] 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:6::atan2_16:62 [ 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 [112] 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:6::atan2_16:62 [ 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 [113] 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:6::atan2_16:62 [ 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 [117] 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:6::atan2_16:62 [ 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 [118] 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:6::atan2_16:62 [ 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 [119] 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:6::atan2_16:62 [ 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 [120] 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:6::atan2_16:62 [ 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 [121] 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:6::atan2_16:62 [ 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 [122] 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:6::atan2_16:62 [ 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 [124] 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:6::atan2_16:62 [ 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 [125] atan2_16::yi#16 = atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( init_angle_screen:6::atan2_16:62 [ 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 [128] print_uchar_at::at#0 = print_uint_at::at#2 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#0 print_uchar_at::at#0 ] ( print_ulong_at:13::print_uint_at:79 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#0 print_uchar_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } } print_ulong_at:13::print_uint_at:81 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#0 print_uchar_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } } ) always clobbers reg byte a
|
|
Statement [131] print_uchar_at::at#1 = print_uint_at::at#2 + 2 [ print_uchar_at::b#1 print_uchar_at::at#1 ] ( print_ulong_at:13::print_uint_at:79 [ print_ulong_at::dw#0 print_uchar_at::b#1 print_uchar_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } } print_ulong_at:13::print_uint_at:81 [ print_uchar_at::b#1 print_uchar_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } } ) always clobbers reg byte a
|
|
Statement [135] print_uchar_at::$0 = print_uchar_at::b#2 >> 4 [ print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] ( print_ulong_at:13::print_uint_at:79::print_uchar_at:129 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:129 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:13::print_uint_at:79::print_uchar_at:132 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:132 [ print_uchar_at::b#2 print_uchar_at::at#2 print_uchar_at::$0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } ) always clobbers reg byte a
|
|
Statement [137] print_char_at::at#0 = print_uchar_at::at#2 [ print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] ( print_ulong_at:13::print_uint_at:79::print_uchar_at:129 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:129 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:13::print_uint_at:79::print_uchar_at:132 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:132 [ print_uchar_at::b#2 print_uchar_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } ) always clobbers reg byte a
|
|
Statement [139] print_uchar_at::$2 = print_uchar_at::b#2 & $f [ print_uchar_at::at#2 print_uchar_at::$2 ] ( print_ulong_at:13::print_uint_at:79::print_uchar_at:129 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:129 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:79::print_uchar_at:132 [ print_ulong_at::dw#0 print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:132 [ print_uchar_at::at#2 print_uchar_at::$2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a
|
|
Statement [140] print_char_at::at#1 = print_uchar_at::at#2 + 1 [ print_uchar_at::$2 print_char_at::at#1 ] ( print_ulong_at:13::print_uint_at:79::print_uchar_at:129 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:129 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:79::print_uchar_at:132 [ print_ulong_at::dw#0 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:132 [ print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a
|
|
Statement [145] *print_char_at::at#2 = print_char_at::ch#2 [ ] ( print_ulong_at:13::print_uint_at:79::print_uchar_at:129::print_char_at:138 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:129::print_char_at:138 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } print_ulong_at:13::print_uint_at:79::print_uchar_at:132::print_char_at:138 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:132::print_char_at:138 [ print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } print_ulong_at:13::print_uint_at:79::print_uchar_at:129::print_char_at:142 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:129::print_char_at:142 [ print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:79::print_uchar_at:132::print_char_at:142 [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } print_ulong_at:13::print_uint_at:81::print_uchar_at:132::print_char_at:142 [ ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a reg byte y
|
|
Potential registers zp[2]:2 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] : zp[2]:2 ,
|
|
Potential registers zp[1]:4 [ init_font_hex::c#6 init_font_hex::c#1 ] : zp[1]:4 , reg byte x ,
|
|
Potential registers zp[2]:5 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] : zp[2]:5 ,
|
|
Potential registers zp[2]:7 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] : zp[2]:7 ,
|
|
Potential registers zp[1]:9 [ init_font_hex::c1#4 init_font_hex::c1#1 ] : zp[1]:9 , reg byte x ,
|
|
Potential registers zp[1]:10 [ init_font_hex::i#2 init_font_hex::i#1 ] : zp[1]:10 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:11 [ init_font_hex::idx#5 init_font_hex::idx#2 ] : zp[1]:11 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp[1]:12 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:13 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] : zp[2]:13 ,
|
|
Potential registers zp[2]:15 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] : zp[2]:15 ,
|
|
Potential registers zp[1]:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp[1]:17 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp[1]:18 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:19 [ 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]:19 ,
|
|
Potential registers zp[2]:21 [ 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]:21 ,
|
|
Potential registers zp[1]:23 [ atan2_16::i#2 atan2_16::i#1 ] : zp[1]:23 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:24 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp[2]:24 ,
|
|
Potential registers zp[2]:26 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] : zp[2]:26 ,
|
|
Potential registers zp[1]:28 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp[1]:28 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:29 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp[2]:29 ,
|
|
Potential registers zp[2]:31 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp[2]:31 ,
|
|
Potential registers zp[2]:33 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] : zp[2]:33 ,
|
|
Potential registers zp[2]:35 [ print_uint_at::at#2 ] : zp[2]:35 ,
|
|
Potential registers zp[1]:37 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ] : zp[1]:37 , reg byte x ,
|
|
Potential registers zp[2]:38 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] : zp[2]:38 ,
|
|
Potential registers zp[1]:40 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] : zp[1]:40 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:41 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] : zp[2]:41 ,
|
|
Potential registers zp[4]:43 [ clock::return#2 ] : zp[4]:43 ,
|
|
Potential registers zp[4]:47 [ main::$4 ] : zp[4]:47 ,
|
|
Potential registers zp[4]:51 [ main::cyclecount#0 ] : zp[4]:51 ,
|
|
Potential registers zp[4]:55 [ print_ulong_at::dw#0 ] : zp[4]:55 ,
|
|
Potential registers zp[1]:59 [ init_font_hex::$0 ] : zp[1]:59 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:60 [ init_font_hex::$1 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:61 [ init_font_hex::$2 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:62 [ init_font_hex::idx#3 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:63 [ init_angle_screen::$3 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:64 [ init_angle_screen::$4 ] : zp[1]:64 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:65 [ init_angle_screen::xw#0 ] : zp[2]:65 ,
|
|
Potential registers zp[1]:67 [ init_angle_screen::$5 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:68 [ init_angle_screen::yw#0 ] : zp[2]:68 ,
|
|
Potential registers zp[2]:70 [ atan2_16::x#0 ] : zp[2]:70 ,
|
|
Potential registers zp[2]:72 [ atan2_16::y#0 ] : zp[2]:72 ,
|
|
Potential registers zp[2]:74 [ atan2_16::return#2 ] : zp[2]:74 ,
|
|
Potential registers zp[2]:76 [ init_angle_screen::angle_w#0 ] : zp[2]:76 ,
|
|
Potential registers zp[2]:78 [ init_angle_screen::$7 ] : zp[2]:78 ,
|
|
Potential registers zp[1]:80 [ init_angle_screen::ang_w#0 ] : zp[1]:80 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:81 [ init_angle_screen::$9 ] : zp[1]:81 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:82 [ init_angle_screen::$10 ] : zp[1]:82 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:83 [ init_angle_screen::$11 ] : zp[1]:83 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[4]:84 [ clock::return#0 ] : zp[4]:84 ,
|
|
Potential registers zp[1]:88 [ atan2_16::$23 ] : zp[1]:88 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:89 [ atan2_16::$22 ] : zp[1]:89 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:90 [ print_uchar_at::$0 ] : zp[1]:90 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:91 [ print_uchar_at::$2 ] : zp[1]:91 , reg byte x , reg byte y ,
|
|
|
|
REGISTER UPLIFT SCOPES
|
|
Uplift Scope [atan2_16] 286,666,670.58: zp[1]:28 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 206,000,008: zp[2]:29 [ 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]:31 [ 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]:24 [ 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]:19 [ 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]:21 [ 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]:88 [ atan2_16::$23 ] 20,000,002: zp[1]:89 [ atan2_16::$22 ] 17,083,335.04: zp[1]:23 [ atan2_16::i#2 atan2_16::i#1 ] 82,008.5: zp[2]:26 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] 2,002: zp[2]:74 [ atan2_16::return#2 ] 1,079.08: zp[2]:70 [ atan2_16::x#0 ] 1,025.12: zp[2]:72 [ atan2_16::y#0 ]
|
|
Uplift Scope [init_font_hex] 21,668.83: zp[1]:10 [ init_font_hex::i#2 init_font_hex::i#1 ] 20,002: zp[1]:60 [ init_font_hex::$1 ] 20,002: zp[1]:61 [ init_font_hex::$2 ] 11,501.6: zp[1]:11 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 10,001: zp[1]:59 [ init_font_hex::$0 ] 2,002: zp[1]:62 [ init_font_hex::idx#3 ] 1,634.97: zp[1]:9 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 1,631.57: zp[2]:5 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 1,423.81: zp[2]:7 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 634.17: zp[2]:2 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 162.13: zp[1]:4 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Uplift Scope [print_char_at] 15,006: zp[1]:40 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] 15,006: zp[2]:41 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
|
|
Uplift Scope [init_angle_screen] 2,184: zp[1]:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 2,002: zp[1]:63 [ init_angle_screen::$3 ] 2,002: zp[1]:64 [ init_angle_screen::$4 ] 2,002: zp[1]:67 [ init_angle_screen::$5 ] 2,002: zp[2]:76 [ init_angle_screen::angle_w#0 ] 2,002: zp[2]:78 [ init_angle_screen::$7 ] 2,002: zp[1]:81 [ init_angle_screen::$9 ] 2,002: zp[1]:82 [ init_angle_screen::$10 ] 2,002: zp[1]:83 [ init_angle_screen::$11 ] 1,287: zp[1]:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 834.17: zp[1]:80 [ init_angle_screen::ang_w#0 ] 500.5: zp[2]:68 [ init_angle_screen::yw#0 ] 333.67: zp[2]:65 [ init_angle_screen::xw#0 ] 197.77: zp[1]:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 155.49: zp[2]:15 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] 142.33: zp[2]:13 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ]
|
|
Uplift Scope [print_uchar_at] 2,002: zp[1]:90 [ print_uchar_at::$0 ] 1,001: zp[1]:91 [ print_uchar_at::$2 ] 771.33: zp[2]:38 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] 642.8: zp[1]:37 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
|
|
Uplift Scope [print_uint_at] 100: zp[2]:33 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] 40.4: zp[2]:35 [ print_uint_at::at#2 ]
|
|
Uplift Scope [clock] 4.33: zp[4]:84 [ clock::return#0 ] 4: zp[4]:43 [ clock::return#2 ]
|
|
Uplift Scope [print_ulong_at] 8: zp[4]:55 [ print_ulong_at::dw#0 ]
|
|
Uplift Scope [main] 4: zp[4]:47 [ main::$4 ] 4: zp[4]:51 [ main::cyclecount#0 ]
|
|
Uplift Scope [RADIX]
|
|
Uplift Scope [MOS6526_CIA]
|
|
Uplift Scope [MOS6569_VICII]
|
|
Uplift Scope [MOS6581_SID]
|
|
Uplift Scope [clock_start]
|
|
Uplift Scope []
|
|
|
|
Uplifting [atan2_16] best 1157259 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:29 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:31 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:24 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:19 [ 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]:21 [ 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]:26 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:74 [ atan2_16::return#2 ] zp[2]:70 [ atan2_16::x#0 ] zp[2]:72 [ atan2_16::y#0 ]
|
|
Limited combination testing to 100 combinations of 144 possible.
|
|
Uplifting [init_font_hex] best 1138259 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]:11 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp[1]:59 [ init_font_hex::$0 ] zp[1]:62 [ init_font_hex::idx#3 ] zp[1]:9 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp[2]:5 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp[2]:7 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp[2]:2 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp[1]:4 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Limited combination testing to 100 combinations of 6912 possible.
|
|
Uplifting [print_char_at] best 1138252 combination reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] zp[2]:41 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
|
|
Uplifting [init_angle_screen] best 1136652 combination zp[1]:18 [ 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::$5 ] zp[2]:76 [ init_angle_screen::angle_w#0 ] zp[2]:78 [ init_angle_screen::$7 ] zp[1]:81 [ init_angle_screen::$9 ] zp[1]:82 [ init_angle_screen::$10 ] zp[1]:83 [ init_angle_screen::$11 ] zp[1]:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:80 [ init_angle_screen::ang_w#0 ] zp[2]:68 [ init_angle_screen::yw#0 ] zp[2]:65 [ init_angle_screen::xw#0 ] zp[1]:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:15 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] zp[2]:13 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ]
|
|
Limited combination testing to 100 combinations of 331776 possible.
|
|
Uplifting [print_uchar_at] best 1136644 combination reg byte a [ print_uchar_at::$0 ] reg byte y [ print_uchar_at::$2 ] zp[2]:38 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] zp[1]:37 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
|
|
Uplifting [print_uint_at] best 1136644 combination zp[2]:33 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] zp[2]:35 [ print_uint_at::at#2 ]
|
|
Uplifting [clock] best 1136644 combination zp[4]:84 [ clock::return#0 ] zp[4]:43 [ clock::return#2 ]
|
|
Uplifting [print_ulong_at] best 1136644 combination zp[4]:55 [ print_ulong_at::dw#0 ]
|
|
Uplifting [main] best 1136644 combination zp[4]:47 [ main::$4 ] zp[4]:51 [ main::cyclecount#0 ]
|
|
Uplifting [RADIX] best 1136644 combination
|
|
Uplifting [MOS6526_CIA] best 1136644 combination
|
|
Uplifting [MOS6569_VICII] best 1136644 combination
|
|
Uplifting [MOS6581_SID] best 1136644 combination
|
|
Uplifting [clock_start] best 1136644 combination
|
|
Uplifting [] best 1136644 combination
|
|
Attempting to uplift remaining variables inzp[1]:11 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
|
|
Uplifting [init_font_hex] best 1136644 combination zp[1]:11 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
|
|
Attempting to uplift remaining variables inzp[1]:59 [ init_font_hex::$0 ]
|
|
Uplifting [init_font_hex] best 1136644 combination zp[1]:59 [ init_font_hex::$0 ]
|
|
Attempting to uplift remaining variables inzp[1]:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
|
|
Uplifting [init_angle_screen] best 1136644 combination zp[1]:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:62 [ init_font_hex::idx#3 ]
|
|
Uplifting [init_font_hex] best 1136044 combination reg byte y [ init_font_hex::idx#3 ]
|
|
Attempting to uplift remaining variables inzp[1]:81 [ init_angle_screen::$9 ]
|
|
Uplifting [init_angle_screen] best 1135444 combination reg byte a [ init_angle_screen::$9 ]
|
|
Attempting to uplift remaining variables inzp[1]:82 [ init_angle_screen::$10 ]
|
|
Uplifting [init_angle_screen] best 1135044 combination reg byte a [ init_angle_screen::$10 ]
|
|
Attempting to uplift remaining variables inzp[1]:83 [ init_angle_screen::$11 ]
|
|
Uplifting [init_angle_screen] best 1134444 combination reg byte a [ init_angle_screen::$11 ]
|
|
Attempting to uplift remaining variables inzp[1]:9 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
Uplifting [init_font_hex] best 1134444 combination zp[1]:9 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
|
|
Uplifting [init_angle_screen] best 1134444 combination zp[1]:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:80 [ init_angle_screen::ang_w#0 ]
|
|
Uplifting [init_angle_screen] best 1134444 combination zp[1]:80 [ init_angle_screen::ang_w#0 ]
|
|
Attempting to uplift remaining variables inzp[1]:37 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
|
|
Uplifting [print_uchar_at] best 1134444 combination zp[1]:37 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
|
|
Uplifting [init_angle_screen] best 1134444 combination zp[1]:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:4 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Uplifting [init_font_hex] best 1134444 combination zp[1]:4 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Coalescing zero page register [ zp[2]:35 [ print_uint_at::at#2 ] ] with [ zp[2]:38 [ print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] ] - score: 2
|
|
Coalescing zero page register [ zp[2]:24 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp[2]:26 [ 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[4]:43 [ clock::return#2 ] ] with [ zp[4]:47 [ main::$4 ] ] - score: 1
|
|
Coalescing zero page register [ zp[4]:43 [ clock::return#2 main::$4 ] ] with [ zp[4]:84 [ clock::return#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[4]:51 [ main::cyclecount#0 ] ] with [ zp[4]:55 [ print_ulong_at::dw#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:65 [ init_angle_screen::xw#0 ] ] with [ zp[2]:70 [ atan2_16::x#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:68 [ init_angle_screen::yw#0 ] ] with [ zp[2]:72 [ atan2_16::y#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:74 [ atan2_16::return#2 ] ] with [ zp[2]:76 [ init_angle_screen::angle_w#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:24 [ 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]:74 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[4]:43 [ clock::return#2 main::$4 clock::return#0 ] ] with [ zp[4]:51 [ main::cyclecount#0 print_ulong_at::dw#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:24 [ 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]:78 [ init_angle_screen::$7 ] ] - score: 1
|
|
Coalescing zero page register [ zp[1]:12 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] with [ zp[1]:4 [ init_font_hex::c#6 init_font_hex::c#1 ] ]
|
|
Coalescing zero page register [ zp[2]:13 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] ] with [ zp[2]:2 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] ]
|
|
Coalescing zero page register [ zp[2]:15 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] ] with [ zp[2]:5 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] ]
|
|
Coalescing zero page register [ zp[1]:17 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] with [ zp[1]:9 [ init_font_hex::c1#4 init_font_hex::c1#1 ] ]
|
|
Coalescing zero page register [ zp[1]:18 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] with [ zp[1]:11 [ init_font_hex::idx#5 init_font_hex::idx#2 ] ]
|
|
Coalescing zero page register [ zp[2]:19 [ 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]:7 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] ]
|
|
Coalescing zero page register [ zp[2]:33 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] ] with [ zp[2]:21 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ]
|
|
Coalescing zero page register [ zp[2]:35 [ print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#1 ] ] with [ zp[2]:24 [ 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::$7 ] ]
|
|
Coalescing zero page register [ zp[2]:41 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] ] with [ zp[2]:29 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ]
|
|
Coalescing zero page register [ zp[1]:59 [ init_font_hex::$0 ] ] with [ zp[1]:37 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ] ]
|
|
Coalescing zero page register [ zp[1]:80 [ init_angle_screen::ang_w#0 ] ] with [ zp[1]:59 [ init_font_hex::$0 print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ] ]
|
|
Allocated (was zp[1]:12) zp[1]:2 [ init_angle_screen::y#5 init_angle_screen::y#1 init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Allocated (was zp[2]:13) zp[2]:3 [ 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[2]:15) zp[2]:5 [ 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[1]:17) zp[1]:7 [ init_angle_screen::x#2 init_angle_screen::x#1 init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
Allocated (was zp[1]:18) zp[1]:8 [ init_angle_screen::xb#2 init_angle_screen::xb#1 init_font_hex::idx#5 init_font_hex::idx#2 ]
|
|
Allocated (was zp[2]:19) 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 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
|
|
Allocated (was zp[2]:31) zp[2]:11 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
|
|
Allocated (was zp[2]:33) zp[2]:13 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
|
|
Allocated (was zp[2]:35) zp[2]:15 [ print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#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::return#2 init_angle_screen::angle_w#0 init_angle_screen::$7 ]
|
|
Allocated (was zp[2]:41) zp[2]:17 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
|
|
Allocated (was zp[4]:43) zp[4]:19 [ clock::return#2 main::$4 clock::return#0 main::cyclecount#0 print_ulong_at::dw#0 ]
|
|
Allocated (was zp[2]:65) zp[2]:23 [ init_angle_screen::xw#0 atan2_16::x#0 ]
|
|
Allocated (was zp[2]:68) zp[2]:25 [ init_angle_screen::yw#0 atan2_16::y#0 ]
|
|
Allocated (was zp[1]:80) zp[1]:27 [ init_angle_screen::ang_w#0 init_font_hex::$0 print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
|
|
|
|
ASSEMBLER BEFORE OPTIMIZATION
|
|
// File Comments
|
|
// Calculate the angle to the center of the screen - and show it using font-hex
|
|
// 4.65 million cycles
|
|
// C standard library stdlib.h
|
|
// Implementation of functions found int C stdlib.h / stdlib.c
|
|
// C standard library string.h
|
|
// Functions to manipulate C strings and arrays.
|
|
// Upstart
|
|
// Commodore 64 PRG executable file
|
|
.file [name="screen-center-angle.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
|
|
// Timer Control - Start/stop timer (0:stop, 1: start)
|
|
.const CIA_TIMER_CONTROL_START = 1
|
|
// Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high)
|
|
.const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40
|
|
// The number of iterations performed during 16-bit CORDIC atan2 calculation
|
|
.const CORDIC_ITERATIONS_16 = $f
|
|
// Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine.
|
|
// To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code.
|
|
.const CLOCKS_PER_INIT = $12
|
|
.const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e
|
|
.const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f
|
|
.label D018 = $d018
|
|
// The CIA#2: Serial bus, RS-232, VIC memory bank
|
|
.label CIA2 = $dd00
|
|
// CIA#2 timer A&B as one single 32-bit value
|
|
.label CIA2_TIMER_AB = $dd04
|
|
.label CHARSET = $2000
|
|
.label SCREEN = $2800
|
|
.segment Code
|
|
// main
|
|
main: {
|
|
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
|
|
.const toD0182_return = (>(BASE_SCREEN&$3fff)*4)|(>BASE_CHARSET)/4&$f
|
|
.label BASE_SCREEN = $400
|
|
.label BASE_CHARSET = $1000
|
|
.label __4 = $13
|
|
.label cyclecount = $13
|
|
// [1] call init_font_hex
|
|
// [17] 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 __b1
|
|
// main::@1
|
|
__b1:
|
|
// [3] *D018 = main::toD0181_return#0 -- _deref_pbuc1=vbuc2
|
|
lda #toD0181_return
|
|
sta D018
|
|
// [4] call clock_start
|
|
jsr clock_start
|
|
// [5] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
|
|
__b3_from___b1:
|
|
jmp __b3
|
|
// main::@3
|
|
__b3:
|
|
// [6] call init_angle_screen
|
|
// [46] phi from main::@3 to init_angle_screen [phi:main::@3->init_angle_screen]
|
|
init_angle_screen_from___b3:
|
|
jsr init_angle_screen
|
|
// [7] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
|
|
__b4_from___b3:
|
|
jmp __b4
|
|
// main::@4
|
|
__b4:
|
|
// [8] call clock
|
|
jsr clock
|
|
// [9] clock::return#2 = clock::return#0
|
|
jmp __b5
|
|
// main::@5
|
|
__b5:
|
|
// [10] main::$4 = clock::return#2
|
|
// [11] main::cyclecount#0 = main::$4 - CLOCKS_PER_INIT -- vduz1=vduz1_minus_vduc1
|
|
lda.z cyclecount
|
|
sec
|
|
sbc #<CLOCKS_PER_INIT
|
|
sta.z cyclecount
|
|
lda.z cyclecount+1
|
|
sbc #>CLOCKS_PER_INIT
|
|
sta.z cyclecount+1
|
|
lda.z cyclecount+2
|
|
sbc #<CLOCKS_PER_INIT>>$10
|
|
sta.z cyclecount+2
|
|
lda.z cyclecount+3
|
|
sbc #>CLOCKS_PER_INIT>>$10
|
|
sta.z cyclecount+3
|
|
// [12] print_ulong_at::dw#0 = main::cyclecount#0
|
|
// [13] call print_ulong_at
|
|
jsr print_ulong_at
|
|
// [14] phi from main::@5 to main::toD0182 [phi:main::@5->main::toD0182]
|
|
toD0182_from___b5:
|
|
jmp toD0182
|
|
// main::toD0182
|
|
toD0182:
|
|
jmp __b2
|
|
// main::@2
|
|
__b2:
|
|
// [15] *D018 = main::toD0182_return#0 -- _deref_pbuc1=vbuc2
|
|
lda #toD0182_return
|
|
sta D018
|
|
jmp __breturn
|
|
// main::@return
|
|
__breturn:
|
|
// [16] return
|
|
rts
|
|
}
|
|
// init_font_hex
|
|
// Make charset from proto chars
|
|
// init_font_hex(byte* zp(5) charset)
|
|
init_font_hex: {
|
|
.label __0 = $1b
|
|
.label idx = 8
|
|
.label proto_lo = 9
|
|
.label charset = 5
|
|
.label c1 = 7
|
|
.label proto_hi = 3
|
|
.label c = 2
|
|
// [18] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1]
|
|
__b1_from_init_font_hex:
|
|
// [18] phi init_font_hex::c#6 = 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z c
|
|
// [18] 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
|
|
// [18] 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
|
|
// [18] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1]
|
|
__b1_from___b5:
|
|
// [18] phi init_font_hex::c#6 = init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy
|
|
// [18] 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
|
|
// [18] 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:
|
|
// [19] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2]
|
|
__b2_from___b1:
|
|
// [19] phi init_font_hex::c1#4 = 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z c1
|
|
// [19] 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
|
|
// [19] 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
|
|
// [19] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2]
|
|
__b2_from___b4:
|
|
// [19] phi init_font_hex::c1#4 = init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy
|
|
// [19] 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
|
|
// [19] 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:
|
|
// [20] *init_font_hex::charset#2 = 0 -- _deref_pbuz1=vbuc1
|
|
lda #0
|
|
ldy #0
|
|
sta (charset),y
|
|
// [21] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3]
|
|
__b3_from___b2:
|
|
// [21] phi init_font_hex::idx#5 = 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1
|
|
lda #1
|
|
sta.z idx
|
|
// [21] phi init_font_hex::i#2 = 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1
|
|
ldx #0
|
|
jmp __b3
|
|
// [21] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3]
|
|
__b3_from___b3:
|
|
// [21] phi init_font_hex::idx#5 = init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy
|
|
// [21] 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:
|
|
// [22] 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
|
|
// [23] 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
|
|
// [24] init_font_hex::$2 = init_font_hex::$0 | init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa
|
|
ora.z __0
|
|
// [25] init_font_hex::charset#2[init_font_hex::idx#5] = init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa
|
|
ldy.z idx
|
|
sta (charset),y
|
|
// [26] init_font_hex::idx#2 = ++ init_font_hex::idx#5 -- vbuz1=_inc_vbuz1
|
|
inc.z idx
|
|
// [27] init_font_hex::i#1 = ++ init_font_hex::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [28] 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:
|
|
// [29] init_font_hex::charset#2[init_font_hex::idx#2] = 0 -- pbuz1_derefidx_vbuz2=vbuc1
|
|
lda #0
|
|
ldy.z idx
|
|
sta (charset),y
|
|
// [30] init_font_hex::idx#3 = ++ init_font_hex::idx#2 -- vbuyy=_inc_vbuz1
|
|
ldy.z idx
|
|
iny
|
|
// [31] init_font_hex::charset#2[init_font_hex::idx#3] = 0 -- pbuz1_derefidx_vbuyy=vbuc1
|
|
lda #0
|
|
sta (charset),y
|
|
// [32] 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
|
|
!:
|
|
// [33] 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
|
|
!:
|
|
// [34] init_font_hex::c1#1 = ++ init_font_hex::c1#4 -- vbuz1=_inc_vbuz1
|
|
inc.z c1
|
|
// [35] 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:
|
|
// [36] 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
|
|
!:
|
|
// [37] init_font_hex::c#1 = ++ init_font_hex::c#6 -- vbuz1=_inc_vbuz1
|
|
inc.z c
|
|
// [38] 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:
|
|
// [39] return
|
|
rts
|
|
}
|
|
// clock_start
|
|
// Reset & start the processor clock time. The value can be read using clock().
|
|
// This uses CIA #2 Timer A+B on the C64
|
|
clock_start: {
|
|
// [40] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = 0 -- _deref_pbuc1=vbuc2
|
|
// Setup CIA#2 timer A to count (down) CPU cycles
|
|
lda #0
|
|
sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL
|
|
// [41] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2
|
|
lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
|
|
sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL
|
|
// [42] *CIA2_TIMER_AB = $ffffffff -- _deref_pduc1=vduc2
|
|
lda #<$ffffffff
|
|
sta CIA2_TIMER_AB
|
|
lda #>$ffffffff
|
|
sta CIA2_TIMER_AB+1
|
|
lda #<$ffffffff>>$10
|
|
sta CIA2_TIMER_AB+2
|
|
lda #>$ffffffff>>$10
|
|
sta CIA2_TIMER_AB+3
|
|
// [43] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2
|
|
lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
|
|
sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL
|
|
// [44] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2
|
|
lda #CIA_TIMER_CONTROL_START
|
|
sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL
|
|
jmp __breturn
|
|
// clock_start::@return
|
|
__breturn:
|
|
// [45] return
|
|
rts
|
|
}
|
|
// init_angle_screen
|
|
// Populates 1000 bytes (a screen) with values representing the angle to the center.
|
|
// Utilizes symmetry around the center
|
|
init_angle_screen: {
|
|
.label __7 = $f
|
|
.label xw = $17
|
|
.label yw = $19
|
|
.label angle_w = $f
|
|
.label ang_w = $1b
|
|
.label x = 7
|
|
.label xb = 8
|
|
.label screen_topline = 3
|
|
.label screen_bottomline = 5
|
|
.label y = 2
|
|
// [47] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
|
|
__b1_from_init_angle_screen:
|
|
// [47] phi init_angle_screen::screen_bottomline#6 = SCREEN+(word)$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
|
|
// [47] phi init_angle_screen::screen_topline#6 = SCREEN+(word)$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
|
|
// [47] 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
|
|
// [47] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
|
|
__b1_from___b4:
|
|
// [47] 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
|
|
// [47] 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
|
|
// [47] 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:
|
|
// [48] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
|
|
__b2_from___b1:
|
|
// [48] phi init_angle_screen::xb#2 = $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1
|
|
lda #$27
|
|
sta.z xb
|
|
// [48] 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:
|
|
// [49] 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:
|
|
// [50] 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
|
|
// [51] 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
|
|
!:
|
|
// [52] init_angle_screen::y#1 = ++ init_angle_screen::y#5 -- vbuz1=_inc_vbuz1
|
|
inc.z y
|
|
// [53] 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:
|
|
// [54] return
|
|
rts
|
|
// init_angle_screen::@3
|
|
__b3:
|
|
// [55] init_angle_screen::$3 = init_angle_screen::x#2 << 1 -- vbuaa=vbuz1_rol_1
|
|
lda.z x
|
|
asl
|
|
// [56] init_angle_screen::$4 = $27 - init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa
|
|
eor #$ff
|
|
sec
|
|
adc #$27
|
|
// [57] init_angle_screen::xw#0 = init_angle_screen::$4 w= 0 -- vwuz1=vbuaa_word_vbuc1
|
|
ldy #0
|
|
sta.z xw+1
|
|
sty.z xw
|
|
// [58] init_angle_screen::$5 = init_angle_screen::y#5 << 1 -- vbuaa=vbuz1_rol_1
|
|
lda.z y
|
|
asl
|
|
// [59] init_angle_screen::yw#0 = init_angle_screen::$5 w= 0 -- vwuz1=vbuaa_word_vbuc1
|
|
ldy #0
|
|
sta.z yw+1
|
|
sty.z yw
|
|
// [60] atan2_16::x#0 = (signed word)init_angle_screen::xw#0
|
|
// [61] atan2_16::y#0 = (signed word)init_angle_screen::yw#0
|
|
// [62] call atan2_16
|
|
jsr atan2_16
|
|
// [63] atan2_16::return#2 = atan2_16::return#0
|
|
jmp __b5
|
|
// init_angle_screen::@5
|
|
__b5:
|
|
// [64] init_angle_screen::angle_w#0 = atan2_16::return#2
|
|
// [65] init_angle_screen::$7 = init_angle_screen::angle_w#0 + $80 -- vwuz1=vwuz1_plus_vbuc1
|
|
lda #$80
|
|
clc
|
|
adc.z __7
|
|
sta.z __7
|
|
bcc !+
|
|
inc.z __7+1
|
|
!:
|
|
// [66] init_angle_screen::ang_w#0 = > init_angle_screen::$7 -- vbuz1=_hi_vwuz2
|
|
lda.z __7+1
|
|
sta.z ang_w
|
|
// [67] 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
|
|
// [68] init_angle_screen::$9 = - init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1
|
|
lda.z ang_w
|
|
eor #$ff
|
|
clc
|
|
adc #1
|
|
// [69] init_angle_screen::screen_topline#6[init_angle_screen::xb#2] = init_angle_screen::$9 -- pbuz1_derefidx_vbuz2=vbuaa
|
|
ldy.z xb
|
|
sta (screen_topline),y
|
|
// [70] init_angle_screen::$10 = $80 + init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1
|
|
lda #$80
|
|
clc
|
|
adc.z ang_w
|
|
// [71] init_angle_screen::screen_topline#6[init_angle_screen::x#2] = init_angle_screen::$10 -- pbuz1_derefidx_vbuz2=vbuaa
|
|
ldy.z x
|
|
sta (screen_topline),y
|
|
// [72] init_angle_screen::$11 = $80 - init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1
|
|
lda #$80
|
|
sec
|
|
sbc.z ang_w
|
|
// [73] init_angle_screen::screen_bottomline#6[init_angle_screen::x#2] = init_angle_screen::$11 -- pbuz1_derefidx_vbuz2=vbuaa
|
|
ldy.z x
|
|
sta (screen_bottomline),y
|
|
// [74] init_angle_screen::x#1 = ++ init_angle_screen::x#2 -- vbuz1=_inc_vbuz1
|
|
inc.z x
|
|
// [75] init_angle_screen::xb#1 = -- init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1
|
|
dec.z xb
|
|
// [48] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
|
|
__b2_from___b5:
|
|
// [48] phi init_angle_screen::xb#2 = init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy
|
|
// [48] 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
|
|
}
|
|
// clock
|
|
// Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program).
|
|
// This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start()
|
|
clock: {
|
|
.label return = $13
|
|
// [76] clock::return#0 = $ffffffff - *CIA2_TIMER_AB -- vduz1=vduc1_minus__deref_pduc2
|
|
lda #<$ffffffff
|
|
sec
|
|
sbc CIA2_TIMER_AB
|
|
sta.z return
|
|
lda #>$ffffffff
|
|
sbc CIA2_TIMER_AB+1
|
|
sta.z return+1
|
|
lda #<$ffffffff>>$10
|
|
sbc CIA2_TIMER_AB+2
|
|
sta.z return+2
|
|
lda #>$ffffffff>>$10
|
|
sbc CIA2_TIMER_AB+3
|
|
sta.z return+3
|
|
jmp __breturn
|
|
// clock::@return
|
|
__breturn:
|
|
// [77] return
|
|
rts
|
|
}
|
|
// print_ulong_at
|
|
// Print a unsigned long as HEX at a specific position
|
|
// print_ulong_at(dword zp($13) dw)
|
|
print_ulong_at: {
|
|
.label dw = $13
|
|
// [78] print_uint_at::w#0 = > print_ulong_at::dw#0 -- vwuz1=_hi_vduz2
|
|
lda.z dw+2
|
|
sta.z print_uint_at.w
|
|
lda.z dw+3
|
|
sta.z print_uint_at.w+1
|
|
// [79] call print_uint_at
|
|
// [126] phi from print_ulong_at to print_uint_at [phi:print_ulong_at->print_uint_at]
|
|
print_uint_at_from_print_ulong_at:
|
|
// [126] phi print_uint_at::at#2 = main::BASE_SCREEN [phi:print_ulong_at->print_uint_at#0] -- pbuz1=pbuc1
|
|
lda #<main.BASE_SCREEN
|
|
sta.z print_uint_at.at
|
|
lda #>main.BASE_SCREEN
|
|
sta.z print_uint_at.at+1
|
|
// [126] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy
|
|
jsr print_uint_at
|
|
jmp __b1
|
|
// print_ulong_at::@1
|
|
__b1:
|
|
// [80] print_uint_at::w#1 = < print_ulong_at::dw#0 -- vwuz1=_lo_vduz2
|
|
lda.z dw
|
|
sta.z print_uint_at.w
|
|
lda.z dw+1
|
|
sta.z print_uint_at.w+1
|
|
// [81] call print_uint_at
|
|
// [126] phi from print_ulong_at::@1 to print_uint_at [phi:print_ulong_at::@1->print_uint_at]
|
|
print_uint_at_from___b1:
|
|
// [126] phi print_uint_at::at#2 = main::BASE_SCREEN+4 [phi:print_ulong_at::@1->print_uint_at#0] -- pbuz1=pbuc1
|
|
lda #<main.BASE_SCREEN+4
|
|
sta.z print_uint_at.at
|
|
lda #>main.BASE_SCREEN+4
|
|
sta.z print_uint_at.at+1
|
|
// [126] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy
|
|
jsr print_uint_at
|
|
jmp __breturn
|
|
// print_ulong_at::@return
|
|
__breturn:
|
|
// [82] return
|
|
rts
|
|
}
|
|
// atan2_16
|
|
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
|
|
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
|
|
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
|
|
// atan2_16(signed word zp($17) x, signed word zp($19) y)
|
|
atan2_16: {
|
|
.label __2 = 9
|
|
.label __7 = $d
|
|
.label yi = 9
|
|
.label xi = $d
|
|
.label angle = $f
|
|
.label xd = $b
|
|
.label yd = $11
|
|
.label return = $f
|
|
.label x = $17
|
|
.label y = $19
|
|
// [83] 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:
|
|
// [84] 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
|
|
// [85] 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:
|
|
// [85] 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:
|
|
// [86] 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:
|
|
// [87] 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
|
|
// [88] 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:
|
|
// [88] 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:
|
|
// [89] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
|
|
__b10_from___b6:
|
|
// [89] 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
|
|
// [89] phi atan2_16::i#2 = 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [89] phi atan2_16::xi#3 = atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
|
|
// [89] 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:
|
|
// [90] if(atan2_16::yi#3!=0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1
|
|
lda.z yi+1
|
|
ora.z yi
|
|
bne __b11
|
|
// [91] 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:
|
|
// [91] 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:
|
|
// [92] atan2_16::angle#1 = atan2_16::angle#6 >> 1 -- vwuz1=vwuz1_ror_1
|
|
lsr.z angle+1
|
|
ror.z angle
|
|
// [93] 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:
|
|
// [94] atan2_16::angle#4 = $8000 - atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
|
|
sec
|
|
lda #<$8000
|
|
sbc.z angle
|
|
sta.z angle
|
|
lda #>$8000
|
|
sbc.z angle+1
|
|
sta.z angle+1
|
|
// [95] 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:
|
|
// [95] 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:
|
|
// [96] 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:
|
|
// [97] 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
|
|
// [98] 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:
|
|
// [98] 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:
|
|
// [99] return
|
|
rts
|
|
// atan2_16::@11
|
|
__b11:
|
|
// [100] atan2_16::shift#5 = atan2_16::i#2 -- vbuyy=vbuxx
|
|
txa
|
|
tay
|
|
// [101] atan2_16::xd#10 = atan2_16::xi#3 -- vwsz1=vwsz2
|
|
lda.z xi
|
|
sta.z xd
|
|
lda.z xi+1
|
|
sta.z xd+1
|
|
// [102] atan2_16::yd#10 = atan2_16::yi#3 -- vwsz1=vwsz2
|
|
lda.z yi
|
|
sta.z yd
|
|
lda.z yi+1
|
|
sta.z yd+1
|
|
// [103] 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:
|
|
// [103] phi atan2_16::yd#3 = atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy
|
|
// [103] phi atan2_16::xd#3 = atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy
|
|
// [103] 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:
|
|
// [104] 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:
|
|
// [105] 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:
|
|
// [106] 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
|
|
// [107] 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
|
|
// [108] 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:
|
|
// [108] phi atan2_16::xd#5 = atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy
|
|
// [108] 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:
|
|
// [109] 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:
|
|
// [110] 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
|
|
// [111] atan2_16::yi#2 = atan2_16::yi#3 + atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2
|
|
lda.z yi
|
|
clc
|
|
adc.z xd
|
|
sta.z yi
|
|
lda.z yi+1
|
|
adc.z xd+1
|
|
sta.z yi+1
|
|
// [112] atan2_16::$23 = atan2_16::i#2 << 1 -- vbuaa=vbuxx_rol_1
|
|
txa
|
|
asl
|
|
// [113] atan2_16::angle#3 = atan2_16::angle#12 - CORDIC_ATAN2_ANGLES_16[atan2_16::$23] -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa
|
|
tay
|
|
sec
|
|
lda.z angle
|
|
sbc CORDIC_ATAN2_ANGLES_16,y
|
|
sta.z angle
|
|
lda.z angle+1
|
|
sbc CORDIC_ATAN2_ANGLES_16+1,y
|
|
sta.z angle+1
|
|
// [114] 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:
|
|
// [114] phi atan2_16::xi#8 = atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy
|
|
// [114] phi atan2_16::angle#13 = atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
|
|
// [114] 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:
|
|
// [115] atan2_16::i#1 = ++ atan2_16::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [116] 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
|
|
// [89] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
|
|
__b10_from___b19:
|
|
// [89] phi atan2_16::angle#12 = atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
|
|
// [89] phi atan2_16::i#2 = atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
|
|
// [89] phi atan2_16::xi#3 = atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
|
|
// [89] 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:
|
|
// [117] atan2_16::xi#1 = atan2_16::xi#3 + atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2
|
|
lda.z xi
|
|
clc
|
|
adc.z yd
|
|
sta.z xi
|
|
lda.z xi+1
|
|
adc.z yd+1
|
|
sta.z xi+1
|
|
// [118] 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
|
|
// [119] atan2_16::$22 = atan2_16::i#2 << 1 -- vbuaa=vbuxx_rol_1
|
|
txa
|
|
asl
|
|
// [120] 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:
|
|
// [121] 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
|
|
// [122] 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
|
|
// [123] atan2_16::shift#1 = atan2_16::shift#2 - 2 -- vbuyy=vbuyy_minus_2
|
|
dey
|
|
dey
|
|
jmp __b13_from___b14
|
|
// atan2_16::@4
|
|
__b4:
|
|
// [124] 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:
|
|
// [125] 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
|
|
}
|
|
// print_uint_at
|
|
// Print a unsigned int as HEX at a specific position
|
|
// print_uint_at(word zp($d) w, byte* zp($f) at)
|
|
print_uint_at: {
|
|
.label w = $d
|
|
.label at = $f
|
|
// [127] print_uchar_at::b#0 = > print_uint_at::w#2 -- vbuz1=_hi_vwuz2
|
|
lda.z w+1
|
|
sta.z print_uchar_at.b
|
|
// [128] print_uchar_at::at#0 = print_uint_at::at#2
|
|
// [129] call print_uchar_at
|
|
// [134] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at]
|
|
print_uchar_at_from_print_uint_at:
|
|
// [134] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy
|
|
// [134] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy
|
|
jsr print_uchar_at
|
|
jmp __b1
|
|
// print_uint_at::@1
|
|
__b1:
|
|
// [130] print_uchar_at::b#1 = < print_uint_at::w#2 -- vbuz1=_lo_vwuz2
|
|
lda.z w
|
|
sta.z print_uchar_at.b
|
|
// [131] print_uchar_at::at#1 = print_uint_at::at#2 + 2 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #2
|
|
clc
|
|
adc.z print_uchar_at.at
|
|
sta.z print_uchar_at.at
|
|
bcc !+
|
|
inc.z print_uchar_at.at+1
|
|
!:
|
|
// [132] call print_uchar_at
|
|
// [134] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at]
|
|
print_uchar_at_from___b1:
|
|
// [134] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy
|
|
// [134] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy
|
|
jsr print_uchar_at
|
|
jmp __breturn
|
|
// print_uint_at::@return
|
|
__breturn:
|
|
// [133] return
|
|
rts
|
|
}
|
|
// print_uchar_at
|
|
// Print a char as HEX at a specific position
|
|
// print_uchar_at(byte zp($1b) b, byte* zp($f) at)
|
|
print_uchar_at: {
|
|
.label b = $1b
|
|
.label at = $f
|
|
// [135] print_uchar_at::$0 = print_uchar_at::b#2 >> 4 -- vbuaa=vbuz1_ror_4
|
|
lda.z b
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
// [136] print_char_at::ch#0 = print_hextab[print_uchar_at::$0] -- vbuxx=pbuc1_derefidx_vbuaa
|
|
tay
|
|
ldx print_hextab,y
|
|
// [137] print_char_at::at#0 = print_uchar_at::at#2 -- pbuz1=pbuz2
|
|
lda.z at
|
|
sta.z print_char_at.at
|
|
lda.z at+1
|
|
sta.z print_char_at.at+1
|
|
// [138] call print_char_at
|
|
// Table of hexadecimal digits
|
|
// [144] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at]
|
|
print_char_at_from_print_uchar_at:
|
|
// [144] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy
|
|
// [144] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy
|
|
jsr print_char_at
|
|
jmp __b1
|
|
// print_uchar_at::@1
|
|
__b1:
|
|
// [139] print_uchar_at::$2 = print_uchar_at::b#2 & $f -- vbuyy=vbuz1_band_vbuc1
|
|
lda #$f
|
|
and.z b
|
|
tay
|
|
// [140] print_char_at::at#1 = print_uchar_at::at#2 + 1 -- pbuz1=pbuz2_plus_1
|
|
clc
|
|
lda.z at
|
|
adc #1
|
|
sta.z print_char_at.at
|
|
lda.z at+1
|
|
adc #0
|
|
sta.z print_char_at.at+1
|
|
// [141] print_char_at::ch#1 = print_hextab[print_uchar_at::$2] -- vbuxx=pbuc1_derefidx_vbuyy
|
|
ldx print_hextab,y
|
|
// [142] call print_char_at
|
|
// [144] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at]
|
|
print_char_at_from___b1:
|
|
// [144] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy
|
|
// [144] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy
|
|
jsr print_char_at
|
|
jmp __breturn
|
|
// print_uchar_at::@return
|
|
__breturn:
|
|
// [143] return
|
|
rts
|
|
}
|
|
// print_char_at
|
|
// Print a single char
|
|
// print_char_at(byte register(X) ch, byte* zp($11) at)
|
|
print_char_at: {
|
|
.label at = $11
|
|
// [145] *print_char_at::at#2 = print_char_at::ch#2 -- _deref_pbuz1=vbuxx
|
|
txa
|
|
ldy #0
|
|
sta (at),y
|
|
jmp __breturn
|
|
// print_char_at::@return
|
|
__breturn:
|
|
// [146] return
|
|
rts
|
|
}
|
|
// 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
|
|
|
|
print_hextab: .text "0123456789abcdef"
|
|
|
|
ASSEMBLER OPTIMIZATIONS
|
|
Removing instruction jmp toD0181
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b4
|
|
Removing instruction jmp __b5
|
|
Removing instruction jmp toD0182
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __breturn
|
|
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 __breturn
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b4
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b5
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b5
|
|
Removing instruction jmp __b6
|
|
Removing instruction jmp __b10
|
|
Removing instruction jmp __b12
|
|
Removing instruction jmp __b21
|
|
Removing instruction jmp __b7
|
|
Removing instruction jmp __b9
|
|
Removing instruction jmp __b8
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b13
|
|
Removing instruction jmp __b15
|
|
Removing instruction jmp __b16
|
|
Removing instruction jmp __b17
|
|
Removing instruction jmp __b20
|
|
Removing instruction jmp __b19
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __breturn
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
Replacing instruction ldy #0 with TAY
|
|
Removing instruction ldy.z idx
|
|
Removing instruction lda #0
|
|
Removing instruction ldy #0
|
|
Removing instruction lda.z ang_w
|
|
Removing instruction lda.z ang_w
|
|
Removing instruction ldy.z xb
|
|
Removing instruction ldy.z x
|
|
Removing instruction lda #>0
|
|
Replacing instruction ldx #0 with TAX
|
|
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
|
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 __b3_from___b1:
|
|
Removing instruction init_angle_screen_from___b3:
|
|
Removing instruction __b4_from___b3:
|
|
Removing instruction toD0182_from___b5:
|
|
Removing instruction toD0182:
|
|
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 __b1:
|
|
Removing instruction __b3:
|
|
Removing instruction __b4:
|
|
Removing instruction __b5:
|
|
Removing instruction __b2:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b1_from_init_font_hex:
|
|
Removing instruction __b3_from___b2:
|
|
Removing instruction __b4:
|
|
Removing instruction __b5:
|
|
Removing instruction __breturn:
|
|
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 __breturn:
|
|
Removing instruction print_uint_at_from_print_ulong_at:
|
|
Removing instruction __b1:
|
|
Removing instruction print_uint_at_from___b1:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b2:
|
|
Removing instruction __b5:
|
|
Removing instruction __b21:
|
|
Removing instruction __b9:
|
|
Removing instruction __b15:
|
|
Removing instruction __b16:
|
|
Removing instruction __b20:
|
|
Removing instruction __b10_from___b19:
|
|
Removing instruction print_uchar_at_from_print_uint_at:
|
|
Removing instruction __b1:
|
|
Removing instruction print_uchar_at_from___b1:
|
|
Removing instruction __breturn:
|
|
Removing instruction print_char_at_from_print_uchar_at:
|
|
Removing instruction __b1:
|
|
Removing instruction print_char_at_from___b1:
|
|
Removing instruction __breturn:
|
|
Removing instruction __breturn:
|
|
Succesful ASM optimization Pass5UnusedLabelElimination
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b1
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
Fixing long branch [433] beq __b12 to bne
|
|
Fixing long branch [328] bpl __b1 to bmi
|
|
Fixing long branch [340] bpl __b4 to bmi
|
|
|
|
FINAL SYMBOL TABLE
|
|
const nomodify byte* CHARSET = (byte*) 8192
|
|
const nomodify struct MOS6526_CIA* CIA2 = (struct MOS6526_CIA*) 56576
|
|
const nomodify dword* CIA2_TIMER_AB = (dword*) 56580
|
|
const nomodify byte CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40
|
|
const nomodify byte CIA_TIMER_CONTROL_START = 1
|
|
const nomodify dword CLOCKS_PER_INIT = $12
|
|
const word* 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
|
|
}}
|
|
const nomodify byte CORDIC_ITERATIONS_16 = $f
|
|
const nomodify byte* D018 = (byte*) 53272
|
|
const byte* 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 }
|
|
const byte OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e
|
|
const byte OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f
|
|
const byte RADIX::BINARY = 2
|
|
const byte RADIX::DECIMAL = $a
|
|
const byte RADIX::HEXADECIMAL = $10
|
|
const byte RADIX::OCTAL = 8
|
|
const nomodify byte* SCREEN = (byte*) 10240
|
|
word atan2_16(signed word atan2_16::x , signed word atan2_16::y)
|
|
signed word~ atan2_16::$2 zp[2]:9 20002.0
|
|
byte~ atan2_16::$22 reg byte a 2.0000002E7
|
|
byte~ atan2_16::$23 reg byte a 2.0000002E7
|
|
signed word~ atan2_16::$7 zp[2]:13 20002.0
|
|
word atan2_16::angle
|
|
word atan2_16::angle#1 angle zp[2]:15 15001.5
|
|
word atan2_16::angle#11 angle zp[2]:15 20002.0
|
|
word atan2_16::angle#12 angle zp[2]:15 1904762.0952380951
|
|
word atan2_16::angle#13 angle zp[2]:15 1.3333334666666666E7
|
|
word atan2_16::angle#2 angle zp[2]:15 2.0000002E7
|
|
word atan2_16::angle#3 angle zp[2]:15 2.0000002E7
|
|
word atan2_16::angle#4 angle zp[2]:15 20002.0
|
|
word atan2_16::angle#5 angle zp[2]:15 20002.0
|
|
word atan2_16::angle#6 angle zp[2]:15 2.0010003E7
|
|
byte atan2_16::i
|
|
byte atan2_16::i#1 reg byte x 1.50000015E7
|
|
byte atan2_16::i#2 reg byte x 2083333.5416666665
|
|
word atan2_16::return
|
|
word atan2_16::return#0 return zp[2]:15 7001.0
|
|
word atan2_16::return#2 return zp[2]:15 2002.0
|
|
byte atan2_16::shift
|
|
byte atan2_16::shift#1 reg byte y 2.00000002E8
|
|
byte atan2_16::shift#2 reg byte y 8.000000125E7
|
|
byte atan2_16::shift#5 reg byte y 6666667.333333333
|
|
signed word atan2_16::x
|
|
signed word atan2_16::x#0 x zp[2]:23 1079.078947368421
|
|
signed word atan2_16::xd
|
|
signed word atan2_16::xd#1 xd zp[2]:11 6.6666667333333336E7
|
|
signed word atan2_16::xd#10 xd zp[2]:11 1.0000001E7
|
|
signed word atan2_16::xd#2 xd zp[2]:11 1.0000001E7
|
|
signed word atan2_16::xd#3 xd zp[2]:11 7.666666833333333E7
|
|
signed word atan2_16::xd#5 xd zp[2]:11 1.0000001E7
|
|
signed word atan2_16::xi
|
|
signed word atan2_16::xi#0 xi zp[2]:13 30003.0
|
|
signed word atan2_16::xi#1 xi zp[2]:13 5000000.5
|
|
signed word atan2_16::xi#13 xi zp[2]:13 20002.0
|
|
signed word atan2_16::xi#2 xi zp[2]:13 5000000.5
|
|
signed word atan2_16::xi#3 xi zp[2]:13 2667333.6666666665
|
|
signed word atan2_16::xi#8 xi zp[2]:13 1.0000001E7
|
|
signed word atan2_16::y
|
|
signed word atan2_16::y#0 y zp[2]:25 1025.125
|
|
signed word atan2_16::yd
|
|
signed word atan2_16::yd#1 yd zp[2]:17 1.00000001E8
|
|
signed word atan2_16::yd#10 yd zp[2]:17 2.0000002E7
|
|
signed word atan2_16::yd#2 yd zp[2]:17 2.0000002E7
|
|
signed word atan2_16::yd#3 yd zp[2]:17 4.6000001E7
|
|
signed word atan2_16::yd#5 yd zp[2]:17 2.0000002E7
|
|
signed word atan2_16::yi
|
|
signed word atan2_16::yi#0 yi zp[2]:9 6000.6
|
|
signed word atan2_16::yi#1 yi zp[2]:9 6666667.333333333
|
|
signed word atan2_16::yi#16 yi zp[2]:9 20002.0
|
|
signed word atan2_16::yi#2 yi zp[2]:9 6666667.333333333
|
|
signed word atan2_16::yi#3 yi zp[2]:9 3530000.4117647056
|
|
signed word atan2_16::yi#8 yi zp[2]:9 1.0000001E7
|
|
dword clock()
|
|
dword clock::return
|
|
dword clock::return#0 return zp[4]:19 4.333333333333333
|
|
dword clock::return#2 return zp[4]:19 4.0
|
|
void clock_start()
|
|
void init_angle_screen(byte* init_angle_screen::screen)
|
|
byte~ init_angle_screen::$10 reg byte a 2002.0
|
|
byte~ init_angle_screen::$11 reg byte a 2002.0
|
|
byte~ init_angle_screen::$3 reg byte a 2002.0
|
|
byte~ init_angle_screen::$4 reg byte a 2002.0
|
|
byte~ init_angle_screen::$5 reg byte a 2002.0
|
|
word~ init_angle_screen::$7 zp[2]:15 2002.0
|
|
byte~ init_angle_screen::$9 reg byte a 2002.0
|
|
byte init_angle_screen::ang_w
|
|
byte init_angle_screen::ang_w#0 ang_w zp[1]:27 834.1666666666667
|
|
word init_angle_screen::angle_w
|
|
word init_angle_screen::angle_w#0 angle_w zp[2]:15 2002.0
|
|
byte* init_angle_screen::screen
|
|
byte* init_angle_screen::screen_bottomline
|
|
byte* init_angle_screen::screen_bottomline#1 screen_bottomline zp[2]:5 67.33333333333333
|
|
byte* init_angle_screen::screen_bottomline#6 screen_bottomline zp[2]:5 88.16
|
|
byte* init_angle_screen::screen_topline
|
|
byte* init_angle_screen::screen_topline#1 screen_topline zp[2]:3 50.5
|
|
byte* init_angle_screen::screen_topline#6 screen_topline zp[2]:3 91.83333333333334
|
|
byte init_angle_screen::x
|
|
byte init_angle_screen::x#1 x zp[1]:7 1001.0
|
|
byte init_angle_screen::x#2 x zp[1]:7 286.0
|
|
byte init_angle_screen::xb
|
|
byte init_angle_screen::xb#1 xb zp[1]:8 2002.0
|
|
byte init_angle_screen::xb#2 xb zp[1]:8 182.0
|
|
signed word init_angle_screen::xw
|
|
word init_angle_screen::xw#0 xw zp[2]:23 333.6666666666667
|
|
byte init_angle_screen::y
|
|
byte init_angle_screen::y#1 y zp[1]:2 151.5
|
|
byte init_angle_screen::y#5 y zp[1]:2 46.26923076923077
|
|
signed word init_angle_screen::yw
|
|
word init_angle_screen::yw#0 yw zp[2]:25 500.5
|
|
void init_font_hex(byte* init_font_hex::charset)
|
|
byte~ init_font_hex::$0 zp[1]:27 10001.0
|
|
byte~ init_font_hex::$1 reg byte a 20002.0
|
|
byte~ init_font_hex::$2 reg byte a 20002.0
|
|
byte init_font_hex::c
|
|
byte init_font_hex::c#1 c zp[1]:2 151.5
|
|
byte init_font_hex::c#6 c zp[1]:2 10.631578947368421
|
|
byte init_font_hex::c1
|
|
byte init_font_hex::c1#1 c1 zp[1]:7 1501.5
|
|
byte init_font_hex::c1#4 c1 zp[1]:7 133.46666666666667
|
|
byte* init_font_hex::charset
|
|
byte* init_font_hex::charset#0 charset zp[2]:5 350.5
|
|
byte* init_font_hex::charset#2 charset zp[2]:5 1079.0714285714287
|
|
byte* init_font_hex::charset#5 charset zp[2]:5 202.0
|
|
byte init_font_hex::i
|
|
byte init_font_hex::i#1 reg byte x 15001.5
|
|
byte init_font_hex::i#2 reg byte x 6667.333333333333
|
|
byte init_font_hex::idx
|
|
byte init_font_hex::idx#2 idx zp[1]:8 5501.0
|
|
byte init_font_hex::idx#3 reg byte y 2002.0
|
|
byte init_font_hex::idx#5 idx zp[1]:8 6000.6
|
|
byte* init_font_hex::proto_hi
|
|
byte* init_font_hex::proto_hi#1 proto_hi zp[2]:3 67.33333333333333
|
|
byte* init_font_hex::proto_hi#6 proto_hi zp[2]:3 566.8333333333333
|
|
byte* init_font_hex::proto_lo
|
|
byte* init_font_hex::proto_lo#1 proto_lo zp[2]:9 500.5
|
|
byte* init_font_hex::proto_lo#4 proto_lo zp[2]:9 923.3076923076923
|
|
void main()
|
|
dword~ main::$4 zp[4]:19 4.0
|
|
const byte* main::BASE_CHARSET = (byte*) 4096
|
|
const byte* main::BASE_SCREEN = (byte*) 1024
|
|
dword main::cyclecount
|
|
dword main::cyclecount#0 cyclecount zp[4]:19 4.0
|
|
byte* main::toD0181_gfx
|
|
byte main::toD0181_return
|
|
const byte main::toD0181_return#0 toD0181_return = >(word)SCREEN&$3fff*4|>(word)CHARSET/4&$f
|
|
byte* main::toD0181_screen
|
|
byte* main::toD0182_gfx
|
|
byte main::toD0182_return
|
|
const byte main::toD0182_return#0 toD0182_return = >(word)main::BASE_SCREEN&$3fff*4|>(word)main::BASE_CHARSET/4&$f
|
|
byte* main::toD0182_screen
|
|
void print_char_at(byte print_char_at::ch , byte* print_char_at::at)
|
|
byte* print_char_at::at
|
|
byte* print_char_at::at#0 at zp[2]:17 2002.0
|
|
byte* print_char_at::at#1 at zp[2]:17 1001.0
|
|
byte* print_char_at::at#2 at zp[2]:17 12003.0
|
|
byte print_char_at::ch
|
|
byte print_char_at::ch#0 reg byte x 1001.0
|
|
byte print_char_at::ch#1 reg byte x 2002.0
|
|
byte print_char_at::ch#2 reg byte x 12003.0
|
|
const to_nomodify byte* print_hextab[] = "0123456789abcdef"z
|
|
void print_uchar_at(byte print_uchar_at::b , byte* print_uchar_at::at)
|
|
byte~ print_uchar_at::$0 reg byte a 2002.0
|
|
byte~ print_uchar_at::$2 reg byte y 1001.0
|
|
byte* print_uchar_at::at
|
|
byte* print_uchar_at::at#0 at zp[2]:15 202.0
|
|
byte* print_uchar_at::at#1 at zp[2]:15 202.0
|
|
byte* print_uchar_at::at#2 at zp[2]:15 367.33333333333337
|
|
byte print_uchar_at::b
|
|
byte print_uchar_at::b#0 b zp[1]:27 101.0
|
|
byte print_uchar_at::b#1 b zp[1]:27 101.0
|
|
byte print_uchar_at::b#2 b zp[1]:27 440.79999999999995
|
|
void print_uint_at(word print_uint_at::w , byte* print_uint_at::at)
|
|
byte* print_uint_at::at
|
|
byte* print_uint_at::at#2 at zp[2]:15 40.4
|
|
word print_uint_at::w
|
|
word print_uint_at::w#0 w zp[2]:13 22.0
|
|
word print_uint_at::w#1 w zp[2]:13 22.0
|
|
word print_uint_at::w#2 w zp[2]:13 56.0
|
|
void print_ulong_at(dword print_ulong_at::dw , byte* print_ulong_at::at)
|
|
byte* print_ulong_at::at
|
|
dword print_ulong_at::dw
|
|
dword print_ulong_at::dw#0 dw zp[4]:19 8.0
|
|
|
|
reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ]
|
|
zp[1]:2 [ init_angle_screen::y#5 init_angle_screen::y#1 init_font_hex::c#6 init_font_hex::c#1 ]
|
|
zp[2]:3 [ 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]:5 [ 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]:7 [ init_angle_screen::x#2 init_angle_screen::x#1 init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
zp[1]:8 [ init_angle_screen::xb#2 init_angle_screen::xb#1 init_font_hex::idx#5 init_font_hex::idx#2 ]
|
|
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 init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
|
|
reg byte x [ atan2_16::i#2 atan2_16::i#1 ]
|
|
reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
|
|
zp[2]:11 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
|
|
zp[2]:13 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 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]:15 [ print_uint_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uchar_at::at#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::return#2 init_angle_screen::angle_w#0 init_angle_screen::$7 ]
|
|
reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
|
|
zp[2]:17 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
|
|
zp[4]:19 [ clock::return#2 main::$4 clock::return#0 main::cyclecount#0 print_ulong_at::dw#0 ]
|
|
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]:23 [ init_angle_screen::xw#0 atan2_16::x#0 ]
|
|
reg byte a [ init_angle_screen::$5 ]
|
|
zp[2]:25 [ init_angle_screen::yw#0 atan2_16::y#0 ]
|
|
zp[1]:27 [ init_angle_screen::ang_w#0 init_font_hex::$0 print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ]
|
|
reg byte a [ init_angle_screen::$9 ]
|
|
reg byte a [ init_angle_screen::$10 ]
|
|
reg byte a [ init_angle_screen::$11 ]
|
|
reg byte a [ atan2_16::$23 ]
|
|
reg byte a [ atan2_16::$22 ]
|
|
reg byte a [ print_uchar_at::$0 ]
|
|
reg byte y [ print_uchar_at::$2 ]
|
|
|
|
|
|
FINAL ASSEMBLER
|
|
Score: 1042467
|
|
|
|
// File Comments
|
|
// Calculate the angle to the center of the screen - and show it using font-hex
|
|
// 4.65 million cycles
|
|
// C standard library stdlib.h
|
|
// Implementation of functions found int C stdlib.h / stdlib.c
|
|
// C standard library string.h
|
|
// Functions to manipulate C strings and arrays.
|
|
// Upstart
|
|
// Commodore 64 PRG executable file
|
|
.file [name="screen-center-angle.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
|
|
// Timer Control - Start/stop timer (0:stop, 1: start)
|
|
.const CIA_TIMER_CONTROL_START = 1
|
|
// Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high)
|
|
.const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40
|
|
// The number of iterations performed during 16-bit CORDIC atan2 calculation
|
|
.const CORDIC_ITERATIONS_16 = $f
|
|
// Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine.
|
|
// To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code.
|
|
.const CLOCKS_PER_INIT = $12
|
|
.const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e
|
|
.const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f
|
|
.label D018 = $d018
|
|
// The CIA#2: Serial bus, RS-232, VIC memory bank
|
|
.label CIA2 = $dd00
|
|
// CIA#2 timer A&B as one single 32-bit value
|
|
.label CIA2_TIMER_AB = $dd04
|
|
.label CHARSET = $2000
|
|
.label SCREEN = $2800
|
|
.segment Code
|
|
// main
|
|
main: {
|
|
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
|
|
.const toD0182_return = (>(BASE_SCREEN&$3fff)*4)|(>BASE_CHARSET)/4&$f
|
|
.label BASE_SCREEN = $400
|
|
.label BASE_CHARSET = $1000
|
|
.label __4 = $13
|
|
.label cyclecount = $13
|
|
// init_font_hex(CHARSET)
|
|
// [1] call init_font_hex
|
|
// [17] 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::@1
|
|
// *D018 = toD018(SCREEN, CHARSET)
|
|
// [3] *D018 = main::toD0181_return#0 -- _deref_pbuc1=vbuc2
|
|
lda #toD0181_return
|
|
sta D018
|
|
// clock_start()
|
|
// [4] call clock_start
|
|
jsr clock_start
|
|
// [5] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
|
|
// main::@3
|
|
// init_angle_screen(SCREEN)
|
|
// [6] call init_angle_screen
|
|
// [46] phi from main::@3 to init_angle_screen [phi:main::@3->init_angle_screen]
|
|
jsr init_angle_screen
|
|
// [7] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
|
|
// main::@4
|
|
// clock()
|
|
// [8] call clock
|
|
jsr clock
|
|
// [9] clock::return#2 = clock::return#0
|
|
// main::@5
|
|
// [10] main::$4 = clock::return#2
|
|
// cyclecount = clock()-CLOCKS_PER_INIT
|
|
// [11] main::cyclecount#0 = main::$4 - CLOCKS_PER_INIT -- vduz1=vduz1_minus_vduc1
|
|
lda.z cyclecount
|
|
sec
|
|
sbc #<CLOCKS_PER_INIT
|
|
sta.z cyclecount
|
|
lda.z cyclecount+1
|
|
sbc #>CLOCKS_PER_INIT
|
|
sta.z cyclecount+1
|
|
lda.z cyclecount+2
|
|
sbc #<CLOCKS_PER_INIT>>$10
|
|
sta.z cyclecount+2
|
|
lda.z cyclecount+3
|
|
sbc #>CLOCKS_PER_INIT>>$10
|
|
sta.z cyclecount+3
|
|
// print_ulong_at(cyclecount, BASE_SCREEN)
|
|
// [12] print_ulong_at::dw#0 = main::cyclecount#0
|
|
// [13] call print_ulong_at
|
|
jsr print_ulong_at
|
|
// [14] phi from main::@5 to main::toD0182 [phi:main::@5->main::toD0182]
|
|
// main::toD0182
|
|
// main::@2
|
|
// *D018 = toD018(BASE_SCREEN, BASE_CHARSET)
|
|
// [15] *D018 = main::toD0182_return#0 -- _deref_pbuc1=vbuc2
|
|
lda #toD0182_return
|
|
sta D018
|
|
// main::@return
|
|
// }
|
|
// [16] return
|
|
rts
|
|
}
|
|
// init_font_hex
|
|
// Make charset from proto chars
|
|
// init_font_hex(byte* zp(5) charset)
|
|
init_font_hex: {
|
|
.label __0 = $1b
|
|
.label idx = 8
|
|
.label proto_lo = 9
|
|
.label charset = 5
|
|
.label c1 = 7
|
|
.label proto_hi = 3
|
|
.label c = 2
|
|
// [18] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1]
|
|
// [18] phi init_font_hex::c#6 = 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z c
|
|
// [18] 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
|
|
// [18] 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
|
|
// [18] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1]
|
|
// [18] phi init_font_hex::c#6 = init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy
|
|
// [18] 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
|
|
// [18] 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:
|
|
// [19] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2]
|
|
// [19] phi init_font_hex::c1#4 = 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z c1
|
|
// [19] 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
|
|
// [19] phi init_font_hex::charset#2 = init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy
|
|
// [19] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2]
|
|
// [19] phi init_font_hex::c1#4 = init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy
|
|
// [19] 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
|
|
// [19] 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
|
|
// [20] *init_font_hex::charset#2 = 0 -- _deref_pbuz1=vbuc1
|
|
lda #0
|
|
tay
|
|
sta (charset),y
|
|
// [21] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3]
|
|
// [21] phi init_font_hex::idx#5 = 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1
|
|
lda #1
|
|
sta.z idx
|
|
// [21] phi init_font_hex::i#2 = 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [21] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3]
|
|
// [21] phi init_font_hex::idx#5 = init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy
|
|
// [21] 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
|
|
// [22] 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
|
|
// [23] 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
|
|
// [24] 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
|
|
// [25] 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;
|
|
// [26] init_font_hex::idx#2 = ++ init_font_hex::idx#5 -- vbuz1=_inc_vbuz1
|
|
inc.z idx
|
|
// for( byte i: 0..4)
|
|
// [27] init_font_hex::i#1 = ++ init_font_hex::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [28] 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
|
|
// [29] 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;
|
|
// [30] init_font_hex::idx#3 = ++ init_font_hex::idx#2 -- vbuyy=_inc_vbuz1
|
|
iny
|
|
// charset[idx++] = 0
|
|
// [31] init_font_hex::charset#2[init_font_hex::idx#3] = 0 -- pbuz1_derefidx_vbuyy=vbuc1
|
|
sta (charset),y
|
|
// proto_lo += 5
|
|
// [32] 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
|
|
// [33] 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 )
|
|
// [34] init_font_hex::c1#1 = ++ init_font_hex::c1#4 -- vbuz1=_inc_vbuz1
|
|
inc.z c1
|
|
// [35] 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
|
|
// [36] 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 )
|
|
// [37] init_font_hex::c#1 = ++ init_font_hex::c#6 -- vbuz1=_inc_vbuz1
|
|
inc.z c
|
|
// [38] 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
|
|
// }
|
|
// [39] return
|
|
rts
|
|
}
|
|
// clock_start
|
|
// Reset & start the processor clock time. The value can be read using clock().
|
|
// This uses CIA #2 Timer A+B on the C64
|
|
clock_start: {
|
|
// CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES
|
|
// [40] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = 0 -- _deref_pbuc1=vbuc2
|
|
// Setup CIA#2 timer A to count (down) CPU cycles
|
|
lda #0
|
|
sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL
|
|
// CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
|
|
// [41] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2
|
|
lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
|
|
sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL
|
|
// *CIA2_TIMER_AB = 0xffffffff
|
|
// [42] *CIA2_TIMER_AB = $ffffffff -- _deref_pduc1=vduc2
|
|
lda #<$ffffffff
|
|
sta CIA2_TIMER_AB
|
|
lda #>$ffffffff
|
|
sta CIA2_TIMER_AB+1
|
|
lda #<$ffffffff>>$10
|
|
sta CIA2_TIMER_AB+2
|
|
lda #>$ffffffff>>$10
|
|
sta CIA2_TIMER_AB+3
|
|
// CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
|
|
// [43] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2
|
|
lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
|
|
sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL
|
|
// CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES
|
|
// [44] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2
|
|
lda #CIA_TIMER_CONTROL_START
|
|
sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL
|
|
// clock_start::@return
|
|
// }
|
|
// [45] return
|
|
rts
|
|
}
|
|
// init_angle_screen
|
|
// Populates 1000 bytes (a screen) with values representing the angle to the center.
|
|
// Utilizes symmetry around the center
|
|
init_angle_screen: {
|
|
.label __7 = $f
|
|
.label xw = $17
|
|
.label yw = $19
|
|
.label angle_w = $f
|
|
.label ang_w = $1b
|
|
.label x = 7
|
|
.label xb = 8
|
|
.label screen_topline = 3
|
|
.label screen_bottomline = 5
|
|
.label y = 2
|
|
// [47] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
|
|
// [47] phi init_angle_screen::screen_bottomline#6 = SCREEN+(word)$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
|
|
// [47] phi init_angle_screen::screen_topline#6 = SCREEN+(word)$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
|
|
// [47] phi init_angle_screen::y#5 = 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z y
|
|
// [47] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
|
|
// [47] 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
|
|
// [47] 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
|
|
// [47] 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:
|
|
// [48] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
|
|
// [48] phi init_angle_screen::xb#2 = $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1
|
|
lda #$27
|
|
sta.z xb
|
|
// [48] 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--)
|
|
// [49] 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
|
|
// [50] 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
|
|
// [51] 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)
|
|
// [52] init_angle_screen::y#1 = ++ init_angle_screen::y#5 -- vbuz1=_inc_vbuz1
|
|
inc.z y
|
|
// [53] 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
|
|
// }
|
|
// [54] return
|
|
rts
|
|
// init_angle_screen::@3
|
|
__b3:
|
|
// x*2
|
|
// [55] init_angle_screen::$3 = init_angle_screen::x#2 << 1 -- vbuaa=vbuz1_rol_1
|
|
lda.z x
|
|
asl
|
|
// 39-x*2
|
|
// [56] init_angle_screen::$4 = $27 - init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa
|
|
eor #$ff
|
|
sec
|
|
adc #$27
|
|
// xw = (signed word)(word){ 39-x*2, 0 }
|
|
// [57] 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
|
|
// [58] init_angle_screen::$5 = init_angle_screen::y#5 << 1 -- vbuaa=vbuz1_rol_1
|
|
lda.z y
|
|
asl
|
|
// yw = (signed word)(word){ y*2, 0 }
|
|
// [59] init_angle_screen::yw#0 = init_angle_screen::$5 w= 0 -- vwuz1=vbuaa_word_vbuc1
|
|
sta.z yw+1
|
|
sty.z yw
|
|
// atan2_16(xw, yw)
|
|
// [60] atan2_16::x#0 = (signed word)init_angle_screen::xw#0
|
|
// [61] atan2_16::y#0 = (signed word)init_angle_screen::yw#0
|
|
// [62] call atan2_16
|
|
jsr atan2_16
|
|
// [63] atan2_16::return#2 = atan2_16::return#0
|
|
// init_angle_screen::@5
|
|
// angle_w = atan2_16(xw, yw)
|
|
// [64] init_angle_screen::angle_w#0 = atan2_16::return#2
|
|
// angle_w+0x0080
|
|
// [65] init_angle_screen::$7 = init_angle_screen::angle_w#0 + $80 -- vwuz1=vwuz1_plus_vbuc1
|
|
lda #$80
|
|
clc
|
|
adc.z __7
|
|
sta.z __7
|
|
bcc !+
|
|
inc.z __7+1
|
|
!:
|
|
// ang_w = >(angle_w+0x0080)
|
|
// [66] init_angle_screen::ang_w#0 = > init_angle_screen::$7 -- vbuz1=_hi_vwuz2
|
|
lda.z __7+1
|
|
sta.z ang_w
|
|
// screen_bottomline[xb] = ang_w
|
|
// [67] init_angle_screen::screen_bottomline#6[init_angle_screen::xb#2] = init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3
|
|
ldy.z xb
|
|
sta (screen_bottomline),y
|
|
// -ang_w
|
|
// [68] init_angle_screen::$9 = - init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1
|
|
eor #$ff
|
|
clc
|
|
adc #1
|
|
// screen_topline[xb] = -ang_w
|
|
// [69] init_angle_screen::screen_topline#6[init_angle_screen::xb#2] = init_angle_screen::$9 -- pbuz1_derefidx_vbuz2=vbuaa
|
|
sta (screen_topline),y
|
|
// 0x80+ang_w
|
|
// [70] init_angle_screen::$10 = $80 + init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1
|
|
lda #$80
|
|
clc
|
|
adc.z ang_w
|
|
// screen_topline[x] = 0x80+ang_w
|
|
// [71] init_angle_screen::screen_topline#6[init_angle_screen::x#2] = init_angle_screen::$10 -- pbuz1_derefidx_vbuz2=vbuaa
|
|
ldy.z x
|
|
sta (screen_topline),y
|
|
// 0x80-ang_w
|
|
// [72] init_angle_screen::$11 = $80 - init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1
|
|
lda #$80
|
|
sec
|
|
sbc.z ang_w
|
|
// screen_bottomline[x] = 0x80-ang_w
|
|
// [73] init_angle_screen::screen_bottomline#6[init_angle_screen::x#2] = init_angle_screen::$11 -- pbuz1_derefidx_vbuz2=vbuaa
|
|
sta (screen_bottomline),y
|
|
// for( byte x=0,xb=39; x<=19; x++, xb--)
|
|
// [74] init_angle_screen::x#1 = ++ init_angle_screen::x#2 -- vbuz1=_inc_vbuz1
|
|
inc.z x
|
|
// [75] init_angle_screen::xb#1 = -- init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1
|
|
dec.z xb
|
|
// [48] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
|
|
// [48] phi init_angle_screen::xb#2 = init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy
|
|
// [48] 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
|
|
}
|
|
// clock
|
|
// Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program).
|
|
// This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start()
|
|
clock: {
|
|
.label return = $13
|
|
// 0xffffffff - *CIA2_TIMER_AB
|
|
// [76] clock::return#0 = $ffffffff - *CIA2_TIMER_AB -- vduz1=vduc1_minus__deref_pduc2
|
|
lda #<$ffffffff
|
|
sec
|
|
sbc CIA2_TIMER_AB
|
|
sta.z return
|
|
lda #>$ffffffff
|
|
sbc CIA2_TIMER_AB+1
|
|
sta.z return+1
|
|
lda #<$ffffffff>>$10
|
|
sbc CIA2_TIMER_AB+2
|
|
sta.z return+2
|
|
lda #>$ffffffff>>$10
|
|
sbc CIA2_TIMER_AB+3
|
|
sta.z return+3
|
|
// clock::@return
|
|
// }
|
|
// [77] return
|
|
rts
|
|
}
|
|
// print_ulong_at
|
|
// Print a unsigned long as HEX at a specific position
|
|
// print_ulong_at(dword zp($13) dw)
|
|
print_ulong_at: {
|
|
.label dw = $13
|
|
// print_uint_at(>dw, at)
|
|
// [78] print_uint_at::w#0 = > print_ulong_at::dw#0 -- vwuz1=_hi_vduz2
|
|
lda.z dw+2
|
|
sta.z print_uint_at.w
|
|
lda.z dw+3
|
|
sta.z print_uint_at.w+1
|
|
// [79] call print_uint_at
|
|
// [126] phi from print_ulong_at to print_uint_at [phi:print_ulong_at->print_uint_at]
|
|
// [126] phi print_uint_at::at#2 = main::BASE_SCREEN [phi:print_ulong_at->print_uint_at#0] -- pbuz1=pbuc1
|
|
lda #<main.BASE_SCREEN
|
|
sta.z print_uint_at.at
|
|
lda #>main.BASE_SCREEN
|
|
sta.z print_uint_at.at+1
|
|
// [126] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy
|
|
jsr print_uint_at
|
|
// print_ulong_at::@1
|
|
// print_uint_at(<dw, at+4)
|
|
// [80] print_uint_at::w#1 = < print_ulong_at::dw#0 -- vwuz1=_lo_vduz2
|
|
lda.z dw
|
|
sta.z print_uint_at.w
|
|
lda.z dw+1
|
|
sta.z print_uint_at.w+1
|
|
// [81] call print_uint_at
|
|
// [126] phi from print_ulong_at::@1 to print_uint_at [phi:print_ulong_at::@1->print_uint_at]
|
|
// [126] phi print_uint_at::at#2 = main::BASE_SCREEN+4 [phi:print_ulong_at::@1->print_uint_at#0] -- pbuz1=pbuc1
|
|
lda #<main.BASE_SCREEN+4
|
|
sta.z print_uint_at.at
|
|
lda #>main.BASE_SCREEN+4
|
|
sta.z print_uint_at.at+1
|
|
// [126] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy
|
|
jsr print_uint_at
|
|
// print_ulong_at::@return
|
|
// }
|
|
// [82] return
|
|
rts
|
|
}
|
|
// atan2_16
|
|
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
|
|
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
|
|
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
|
|
// atan2_16(signed word zp($17) x, signed word zp($19) y)
|
|
atan2_16: {
|
|
.label __2 = 9
|
|
.label __7 = $d
|
|
.label yi = 9
|
|
.label xi = $d
|
|
.label angle = $f
|
|
.label xd = $b
|
|
.label yd = $11
|
|
.label return = $f
|
|
.label x = $17
|
|
.label y = $19
|
|
// (y>=0)?y:-y
|
|
// [83] 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
|
|
// [84] 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
|
|
// [85] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
|
|
// [85] 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
|
|
// [86] 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
|
|
// [87] 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
|
|
// [88] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
|
|
// [88] 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:
|
|
// [89] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
|
|
// [89] 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
|
|
// [89] phi atan2_16::i#2 = 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1
|
|
tax
|
|
// [89] phi atan2_16::xi#3 = atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
|
|
// [89] 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)
|
|
// [90] if(atan2_16::yi#3!=0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1
|
|
lda.z yi+1
|
|
ora.z yi
|
|
bne __b11
|
|
// [91] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
|
|
// [91] 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
|
|
// [92] atan2_16::angle#1 = atan2_16::angle#6 >> 1 -- vwuz1=vwuz1_ror_1
|
|
lsr.z angle+1
|
|
ror.z angle
|
|
// if(x<0)
|
|
// [93] 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
|
|
// [94] atan2_16::angle#4 = $8000 - atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
|
|
sec
|
|
lda #<$8000
|
|
sbc.z angle
|
|
sta.z angle
|
|
lda #>$8000
|
|
sbc.z angle+1
|
|
sta.z angle+1
|
|
// [95] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
|
|
// [95] 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)
|
|
// [96] 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
|
|
// [97] 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
|
|
// [98] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
|
|
// [98] 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
|
|
// }
|
|
// [99] return
|
|
rts
|
|
// atan2_16::@11
|
|
__b11:
|
|
// [100] atan2_16::shift#5 = atan2_16::i#2 -- vbuyy=vbuxx
|
|
txa
|
|
tay
|
|
// [101] atan2_16::xd#10 = atan2_16::xi#3 -- vwsz1=vwsz2
|
|
lda.z xi
|
|
sta.z xd
|
|
lda.z xi+1
|
|
sta.z xd+1
|
|
// [102] atan2_16::yd#10 = atan2_16::yi#3 -- vwsz1=vwsz2
|
|
lda.z yi
|
|
sta.z yd
|
|
lda.z yi+1
|
|
sta.z yd+1
|
|
// [103] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
|
|
// [103] phi atan2_16::yd#3 = atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy
|
|
// [103] phi atan2_16::xd#3 = atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy
|
|
// [103] 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)
|
|
// [104] if(atan2_16::shift#2>=2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1
|
|
cpy #2
|
|
bcs __b14
|
|
// atan2_16::@15
|
|
// if(shift)
|
|
// [105] if(0==atan2_16::shift#2) goto atan2_16::@17 -- 0_eq_vbuyy_then_la1
|
|
cpy #0
|
|
beq __b17
|
|
// atan2_16::@16
|
|
// xd >>= 1
|
|
// [106] 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
|
|
// [107] 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
|
|
// [108] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
|
|
// [108] phi atan2_16::xd#5 = atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy
|
|
// [108] 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)
|
|
// [109] 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
|
|
// [110] 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
|
|
// [111] atan2_16::yi#2 = atan2_16::yi#3 + atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2
|
|
lda.z yi
|
|
clc
|
|
adc.z xd
|
|
sta.z yi
|
|
lda.z yi+1
|
|
adc.z xd+1
|
|
sta.z yi+1
|
|
// angle -= CORDIC_ATAN2_ANGLES_16[i]
|
|
// [112] atan2_16::$23 = atan2_16::i#2 << 1 -- vbuaa=vbuxx_rol_1
|
|
txa
|
|
asl
|
|
// [113] atan2_16::angle#3 = atan2_16::angle#12 - CORDIC_ATAN2_ANGLES_16[atan2_16::$23] -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa
|
|
tay
|
|
sec
|
|
lda.z angle
|
|
sbc CORDIC_ATAN2_ANGLES_16,y
|
|
sta.z angle
|
|
lda.z angle+1
|
|
sbc CORDIC_ATAN2_ANGLES_16+1,y
|
|
sta.z angle+1
|
|
// [114] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
|
|
// [114] phi atan2_16::xi#8 = atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy
|
|
// [114] phi atan2_16::angle#13 = atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
|
|
// [114] 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)
|
|
// [115] atan2_16::i#1 = ++ atan2_16::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [116] 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:
|
|
// [89] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
|
|
// [89] phi atan2_16::angle#12 = atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
|
|
// [89] phi atan2_16::i#2 = atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
|
|
// [89] phi atan2_16::xi#3 = atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
|
|
// [89] 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
|
|
// [117] atan2_16::xi#1 = atan2_16::xi#3 + atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2
|
|
lda.z xi
|
|
clc
|
|
adc.z yd
|
|
sta.z xi
|
|
lda.z xi+1
|
|
adc.z yd+1
|
|
sta.z xi+1
|
|
// yi -= xd
|
|
// [118] 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]
|
|
// [119] atan2_16::$22 = atan2_16::i#2 << 1 -- vbuaa=vbuxx_rol_1
|
|
txa
|
|
asl
|
|
// [120] 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
|
|
// [121] 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
|
|
// [122] 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
|
|
// [123] 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
|
|
// [124] 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
|
|
// [125] 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
|
|
}
|
|
// print_uint_at
|
|
// Print a unsigned int as HEX at a specific position
|
|
// print_uint_at(word zp($d) w, byte* zp($f) at)
|
|
print_uint_at: {
|
|
.label w = $d
|
|
.label at = $f
|
|
// print_uchar_at(>w, at)
|
|
// [127] print_uchar_at::b#0 = > print_uint_at::w#2 -- vbuz1=_hi_vwuz2
|
|
lda.z w+1
|
|
sta.z print_uchar_at.b
|
|
// [128] print_uchar_at::at#0 = print_uint_at::at#2
|
|
// [129] call print_uchar_at
|
|
// [134] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at]
|
|
// [134] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy
|
|
// [134] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy
|
|
jsr print_uchar_at
|
|
// print_uint_at::@1
|
|
// print_uchar_at(<w, at+2)
|
|
// [130] print_uchar_at::b#1 = < print_uint_at::w#2 -- vbuz1=_lo_vwuz2
|
|
lda.z w
|
|
sta.z print_uchar_at.b
|
|
// [131] print_uchar_at::at#1 = print_uint_at::at#2 + 2 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #2
|
|
clc
|
|
adc.z print_uchar_at.at
|
|
sta.z print_uchar_at.at
|
|
bcc !+
|
|
inc.z print_uchar_at.at+1
|
|
!:
|
|
// [132] call print_uchar_at
|
|
// [134] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at]
|
|
// [134] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy
|
|
// [134] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy
|
|
jsr print_uchar_at
|
|
// print_uint_at::@return
|
|
// }
|
|
// [133] return
|
|
rts
|
|
}
|
|
// print_uchar_at
|
|
// Print a char as HEX at a specific position
|
|
// print_uchar_at(byte zp($1b) b, byte* zp($f) at)
|
|
print_uchar_at: {
|
|
.label b = $1b
|
|
.label at = $f
|
|
// b>>4
|
|
// [135] print_uchar_at::$0 = print_uchar_at::b#2 >> 4 -- vbuaa=vbuz1_ror_4
|
|
lda.z b
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
// print_char_at(print_hextab[b>>4], at)
|
|
// [136] print_char_at::ch#0 = print_hextab[print_uchar_at::$0] -- vbuxx=pbuc1_derefidx_vbuaa
|
|
tay
|
|
ldx print_hextab,y
|
|
// [137] print_char_at::at#0 = print_uchar_at::at#2 -- pbuz1=pbuz2
|
|
lda.z at
|
|
sta.z print_char_at.at
|
|
lda.z at+1
|
|
sta.z print_char_at.at+1
|
|
// [138] call print_char_at
|
|
// Table of hexadecimal digits
|
|
// [144] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at]
|
|
// [144] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy
|
|
// [144] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy
|
|
jsr print_char_at
|
|
// print_uchar_at::@1
|
|
// b&$f
|
|
// [139] print_uchar_at::$2 = print_uchar_at::b#2 & $f -- vbuyy=vbuz1_band_vbuc1
|
|
lda #$f
|
|
and.z b
|
|
tay
|
|
// print_char_at(print_hextab[b&$f], at+1)
|
|
// [140] print_char_at::at#1 = print_uchar_at::at#2 + 1 -- pbuz1=pbuz2_plus_1
|
|
clc
|
|
lda.z at
|
|
adc #1
|
|
sta.z print_char_at.at
|
|
lda.z at+1
|
|
adc #0
|
|
sta.z print_char_at.at+1
|
|
// [141] print_char_at::ch#1 = print_hextab[print_uchar_at::$2] -- vbuxx=pbuc1_derefidx_vbuyy
|
|
ldx print_hextab,y
|
|
// [142] call print_char_at
|
|
// [144] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at]
|
|
// [144] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy
|
|
// [144] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy
|
|
jsr print_char_at
|
|
// print_uchar_at::@return
|
|
// }
|
|
// [143] return
|
|
rts
|
|
}
|
|
// print_char_at
|
|
// Print a single char
|
|
// print_char_at(byte register(X) ch, byte* zp($11) at)
|
|
print_char_at: {
|
|
.label at = $11
|
|
// *(at) = ch
|
|
// [145] *print_char_at::at#2 = print_char_at::ch#2 -- _deref_pbuz1=vbuxx
|
|
txa
|
|
ldy #0
|
|
sta (at),y
|
|
// print_char_at::@return
|
|
// }
|
|
// [146] return
|
|
rts
|
|
}
|
|
// 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
|
|
|
|
print_hextab: .text "0123456789abcdef"
|
|
|