mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-09-29 03:56:15 +00:00
5514 lines
288 KiB
Plaintext
5514 lines
288 KiB
Plaintext
Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO
|
|
Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO
|
|
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
|
|
Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET
|
|
|
|
CONTROL FLOW GRAPH SSA
|
|
@begin: scope:[] from
|
|
to:@1
|
|
|
|
(void()) init_font_hex((byte*) init_font_hex::charset)
|
|
init_font_hex: scope:[init_font_hex] from main
|
|
(byte*) init_font_hex::charset#6 ← phi( main/(byte*) init_font_hex::charset#1 )
|
|
(byte*) init_font_hex::proto_hi#0 ← (const byte*) FONT_HEX_PROTO
|
|
(byte) init_font_hex::c#0 ← (byte) 0
|
|
to:init_font_hex::@1
|
|
init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5
|
|
(byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) init_font_hex::c#0 init_font_hex::@5/(byte) init_font_hex::c#1 )
|
|
(byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(byte*) init_font_hex::proto_hi#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 )
|
|
(byte*) init_font_hex::charset#5 ← phi( init_font_hex/(byte*) init_font_hex::charset#6 init_font_hex::@5/(byte*) init_font_hex::charset#7 )
|
|
(byte*) init_font_hex::proto_lo#0 ← (const byte*) FONT_HEX_PROTO
|
|
(byte) init_font_hex::c1#0 ← (byte) 0
|
|
to:init_font_hex::@2
|
|
init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4
|
|
(byte) init_font_hex::c#5 ← phi( init_font_hex::@1/(byte) init_font_hex::c#6 init_font_hex::@4/(byte) init_font_hex::c#3 )
|
|
(byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) init_font_hex::c1#0 init_font_hex::@4/(byte) init_font_hex::c1#1 )
|
|
(byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(byte*) init_font_hex::proto_lo#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 )
|
|
(byte*) init_font_hex::proto_hi#4 ← phi( init_font_hex::@1/(byte*) init_font_hex::proto_hi#6 init_font_hex::@4/(byte*) init_font_hex::proto_hi#5 )
|
|
(byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 )
|
|
(byte) init_font_hex::idx#0 ← (byte) 0
|
|
*((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0
|
|
(byte) init_font_hex::idx#1 ← ++ (byte) init_font_hex::idx#0
|
|
(byte) init_font_hex::i#0 ← (byte) 0
|
|
to:init_font_hex::@3
|
|
init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3
|
|
(byte) init_font_hex::c#4 ← phi( init_font_hex::@2/(byte) init_font_hex::c#5 init_font_hex::@3/(byte) init_font_hex::c#4 )
|
|
(byte) init_font_hex::c1#3 ← phi( init_font_hex::@2/(byte) init_font_hex::c1#4 init_font_hex::@3/(byte) init_font_hex::c1#3 )
|
|
(byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) init_font_hex::idx#1 init_font_hex::@3/(byte) init_font_hex::idx#2 )
|
|
(byte*) init_font_hex::charset#3 ← phi( init_font_hex::@2/(byte*) init_font_hex::charset#2 init_font_hex::@3/(byte*) init_font_hex::charset#3 )
|
|
(byte*) init_font_hex::proto_lo#2 ← phi( init_font_hex::@2/(byte*) init_font_hex::proto_lo#4 init_font_hex::@3/(byte*) init_font_hex::proto_lo#2 )
|
|
(byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) init_font_hex::i#0 init_font_hex::@3/(byte) init_font_hex::i#1 )
|
|
(byte*) init_font_hex::proto_hi#2 ← phi( init_font_hex::@2/(byte*) init_font_hex::proto_hi#4 init_font_hex::@3/(byte*) init_font_hex::proto_hi#2 )
|
|
(byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#2 + (byte) init_font_hex::i#2) << (number) 4
|
|
(byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#2 + (byte) init_font_hex::i#2) << (number) 1
|
|
(byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1
|
|
*((byte*) init_font_hex::charset#3 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2
|
|
(byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5
|
|
(byte) init_font_hex::i#1 ← (byte) init_font_hex::i#2 + rangenext(0,4)
|
|
(bool~) init_font_hex::$3 ← (byte) init_font_hex::i#1 != rangelast(0,4)
|
|
if((bool~) init_font_hex::$3) goto init_font_hex::@3
|
|
to:init_font_hex::@4
|
|
init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3
|
|
(byte) init_font_hex::c#3 ← phi( init_font_hex::@3/(byte) init_font_hex::c#4 )
|
|
(byte*) init_font_hex::proto_hi#5 ← phi( init_font_hex::@3/(byte*) init_font_hex::proto_hi#2 )
|
|
(byte) init_font_hex::c1#2 ← phi( init_font_hex::@3/(byte) init_font_hex::c1#3 )
|
|
(byte*) init_font_hex::proto_lo#3 ← phi( init_font_hex::@3/(byte*) init_font_hex::proto_lo#2 )
|
|
(byte) init_font_hex::idx#6 ← phi( init_font_hex::@3/(byte) init_font_hex::idx#2 )
|
|
(byte*) init_font_hex::charset#4 ← phi( init_font_hex::@3/(byte*) init_font_hex::charset#3 )
|
|
*((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (number) 0
|
|
(byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#6
|
|
*((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (number) 0
|
|
(byte) init_font_hex::idx#4 ← ++ (byte) init_font_hex::idx#3
|
|
(byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#3 + (number) 5
|
|
(byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#4 + (number) 8
|
|
(byte) init_font_hex::c1#1 ← (byte) init_font_hex::c1#2 + rangenext(0,$f)
|
|
(bool~) init_font_hex::$4 ← (byte) init_font_hex::c1#1 != rangelast(0,$f)
|
|
if((bool~) init_font_hex::$4) goto init_font_hex::@2
|
|
to:init_font_hex::@5
|
|
init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4
|
|
(byte*) init_font_hex::charset#7 ← phi( init_font_hex::@4/(byte*) init_font_hex::charset#0 )
|
|
(byte) init_font_hex::c#2 ← phi( init_font_hex::@4/(byte) init_font_hex::c#3 )
|
|
(byte*) init_font_hex::proto_hi#3 ← phi( init_font_hex::@4/(byte*) init_font_hex::proto_hi#5 )
|
|
(byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#3 + (number) 5
|
|
(byte) init_font_hex::c#1 ← (byte) init_font_hex::c#2 + rangenext(0,$f)
|
|
(bool~) init_font_hex::$5 ← (byte) init_font_hex::c#1 != rangelast(0,$f)
|
|
if((bool~) init_font_hex::$5) goto init_font_hex::@1
|
|
to:init_font_hex::@return
|
|
init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5
|
|
return
|
|
to:@return
|
|
|
|
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
|
|
atan2_16: scope:[atan2_16] from main::@2
|
|
(signed word) atan2_16::x#9 ← phi( main::@2/(signed word) atan2_16::x#0 )
|
|
(signed word) atan2_16::y#1 ← phi( main::@2/(signed word) atan2_16::y#0 )
|
|
(bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 >= (number) 0
|
|
if((bool~) atan2_16::$0) goto atan2_16::@1
|
|
to:atan2_16::@2
|
|
atan2_16::@1: scope:[atan2_16] from atan2_16
|
|
(signed word) atan2_16::x#5 ← phi( atan2_16/(signed word) atan2_16::x#9 )
|
|
(signed word) atan2_16::y#2 ← phi( atan2_16/(signed word) atan2_16::y#1 )
|
|
(signed word~) atan2_16::$3 ← (signed word) atan2_16::y#2
|
|
to:atan2_16::@3
|
|
atan2_16::@2: scope:[atan2_16] from atan2_16
|
|
(signed word) atan2_16::x#6 ← phi( atan2_16/(signed word) atan2_16::x#9 )
|
|
(signed word) atan2_16::y#3 ← phi( atan2_16/(signed word) atan2_16::y#1 )
|
|
(signed word~) atan2_16::$1 ← - (signed word) atan2_16::y#3
|
|
(signed word~) atan2_16::$2 ← (signed word~) atan2_16::$1
|
|
to:atan2_16::@3
|
|
atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2
|
|
(signed word) atan2_16::y#15 ← phi( atan2_16::@1/(signed word) atan2_16::y#2 atan2_16::@2/(signed word) atan2_16::y#3 )
|
|
(signed word) atan2_16::x#1 ← phi( atan2_16::@1/(signed word) atan2_16::x#5 atan2_16::@2/(signed word) atan2_16::x#6 )
|
|
(signed word~) atan2_16::$4 ← phi( atan2_16::@1/(signed word~) atan2_16::$3 atan2_16::@2/(signed word~) atan2_16::$2 )
|
|
(signed word) atan2_16::yi#0 ← (signed word~) atan2_16::$4
|
|
(bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0
|
|
if((bool~) atan2_16::$5) goto atan2_16::@4
|
|
to:atan2_16::@5
|
|
atan2_16::@4: scope:[atan2_16] from atan2_16::@3
|
|
(signed word) atan2_16::y#12 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 )
|
|
(signed word) atan2_16::yi#12 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 )
|
|
(signed word) atan2_16::x#2 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 )
|
|
(signed word~) atan2_16::$8 ← (signed word) atan2_16::x#2
|
|
to:atan2_16::@6
|
|
atan2_16::@5: scope:[atan2_16] from atan2_16::@3
|
|
(signed word) atan2_16::y#13 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 )
|
|
(signed word) atan2_16::yi#13 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 )
|
|
(signed word) atan2_16::x#3 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 )
|
|
(signed word~) atan2_16::$6 ← - (signed word) atan2_16::x#3
|
|
(signed word~) atan2_16::$7 ← (signed word~) atan2_16::$6
|
|
to:atan2_16::@6
|
|
atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5
|
|
(signed word) atan2_16::y#9 ← phi( atan2_16::@4/(signed word) atan2_16::y#12 atan2_16::@5/(signed word) atan2_16::y#13 )
|
|
(signed word) atan2_16::x#10 ← phi( atan2_16::@4/(signed word) atan2_16::x#2 atan2_16::@5/(signed word) atan2_16::x#3 )
|
|
(signed word) atan2_16::yi#9 ← phi( atan2_16::@4/(signed word) atan2_16::yi#12 atan2_16::@5/(signed word) atan2_16::yi#13 )
|
|
(signed word~) atan2_16::$9 ← phi( atan2_16::@4/(signed word~) atan2_16::$8 atan2_16::@5/(signed word~) atan2_16::$7 )
|
|
(signed word) atan2_16::xi#0 ← (signed word~) atan2_16::$9
|
|
(word) atan2_16::angle#0 ← (word) 0
|
|
(byte) atan2_16::i#0 ← (byte) 0
|
|
to:atan2_16::@10
|
|
atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6
|
|
(signed word) atan2_16::y#7 ← phi( atan2_16::@19/(signed word) atan2_16::y#8 atan2_16::@6/(signed word) atan2_16::y#9 )
|
|
(signed word) atan2_16::x#7 ← phi( atan2_16::@19/(signed word) atan2_16::x#8 atan2_16::@6/(signed word) atan2_16::x#10 )
|
|
(word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) atan2_16::angle#0 )
|
|
(byte) atan2_16::i#6 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) atan2_16::i#0 )
|
|
(signed word) atan2_16::xi#6 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 )
|
|
(signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#9 )
|
|
(bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0
|
|
(bool~) atan2_16::$17 ← ! (bool~) atan2_16::$16
|
|
if((bool~) atan2_16::$17) goto atan2_16::@11
|
|
to:atan2_16::@12
|
|
atan2_16::@11: scope:[atan2_16] from atan2_16::@10
|
|
(signed word) atan2_16::y#19 ← phi( atan2_16::@10/(signed word) atan2_16::y#7 )
|
|
(signed word) atan2_16::x#17 ← phi( atan2_16::@10/(signed word) atan2_16::x#7 )
|
|
(word) atan2_16::angle#19 ← phi( atan2_16::@10/(word) atan2_16::angle#12 )
|
|
(byte) atan2_16::i#2 ← phi( atan2_16::@10/(byte) atan2_16::i#6 )
|
|
(signed word) atan2_16::yi#4 ← phi( atan2_16::@10/(signed word) atan2_16::yi#3 )
|
|
(signed word) atan2_16::xi#3 ← phi( atan2_16::@10/(signed word) atan2_16::xi#6 )
|
|
(signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3
|
|
(signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#4
|
|
(byte) atan2_16::shift#0 ← (byte) atan2_16::i#2
|
|
to:atan2_16::@13
|
|
atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19
|
|
(signed word) atan2_16::y#5 ← phi( atan2_16::@10/(signed word) atan2_16::y#7 atan2_16::@19/(signed word) atan2_16::y#8 )
|
|
(signed word) atan2_16::x#4 ← phi( atan2_16::@10/(signed word) atan2_16::x#7 atan2_16::@19/(signed word) atan2_16::x#8 )
|
|
(word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
|
|
(word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2
|
|
(bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0
|
|
(bool~) atan2_16::$11 ← ! (bool~) atan2_16::$10
|
|
if((bool~) atan2_16::$11) goto atan2_16::@7
|
|
to:atan2_16::@21
|
|
atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14
|
|
(signed word) atan2_16::y#18 ← phi( atan2_16::@11/(signed word) atan2_16::y#19 atan2_16::@14/(signed word) atan2_16::y#20 )
|
|
(signed word) atan2_16::x#16 ← phi( atan2_16::@11/(signed word) atan2_16::x#17 atan2_16::@14/(signed word) atan2_16::x#18 )
|
|
(word) atan2_16::angle#18 ← phi( atan2_16::@11/(word) atan2_16::angle#19 atan2_16::@14/(word) atan2_16::angle#20 )
|
|
(byte) atan2_16::i#10 ← phi( atan2_16::@11/(byte) atan2_16::i#2 atan2_16::@14/(byte) atan2_16::i#11 )
|
|
(signed word) atan2_16::xi#11 ← phi( atan2_16::@11/(signed word) atan2_16::xi#3 atan2_16::@14/(signed word) atan2_16::xi#12 )
|
|
(signed word) atan2_16::yi#14 ← phi( atan2_16::@11/(signed word) atan2_16::yi#4 atan2_16::@14/(signed word) atan2_16::yi#15 )
|
|
(signed word) atan2_16::yd#7 ← phi( atan2_16::@11/(signed word) atan2_16::yd#0 atan2_16::@14/(signed word) atan2_16::yd#1 )
|
|
(signed word) atan2_16::xd#7 ← phi( atan2_16::@11/(signed word) atan2_16::xd#0 atan2_16::@14/(signed word) atan2_16::xd#1 )
|
|
(byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#0 atan2_16::@14/(byte) atan2_16::shift#1 )
|
|
(bool~) atan2_16::$18 ← (byte) atan2_16::shift#2 >= (number) 2
|
|
if((bool~) atan2_16::$18) goto atan2_16::@14
|
|
to:atan2_16::@15
|
|
atan2_16::@14: scope:[atan2_16] from atan2_16::@13
|
|
(signed word) atan2_16::y#20 ← phi( atan2_16::@13/(signed word) atan2_16::y#18 )
|
|
(signed word) atan2_16::x#18 ← phi( atan2_16::@13/(signed word) atan2_16::x#16 )
|
|
(word) atan2_16::angle#20 ← phi( atan2_16::@13/(word) atan2_16::angle#18 )
|
|
(byte) atan2_16::i#11 ← phi( atan2_16::@13/(byte) atan2_16::i#10 )
|
|
(signed word) atan2_16::xi#12 ← phi( atan2_16::@13/(signed word) atan2_16::xi#11 )
|
|
(signed word) atan2_16::yi#15 ← phi( atan2_16::@13/(signed word) atan2_16::yi#14 )
|
|
(byte) atan2_16::shift#3 ← phi( atan2_16::@13/(byte) atan2_16::shift#2 )
|
|
(signed word) atan2_16::yd#3 ← phi( atan2_16::@13/(signed word) atan2_16::yd#7 )
|
|
(signed word) atan2_16::xd#3 ← phi( atan2_16::@13/(signed word) atan2_16::xd#7 )
|
|
(signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (number) 2
|
|
(signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (number) 2
|
|
(byte) atan2_16::shift#1 ← (byte) atan2_16::shift#3 - (number) 2
|
|
to:atan2_16::@13
|
|
atan2_16::@15: scope:[atan2_16] from atan2_16::@13
|
|
(signed word) atan2_16::y#16 ← phi( atan2_16::@13/(signed word) atan2_16::y#18 )
|
|
(signed word) atan2_16::x#14 ← phi( atan2_16::@13/(signed word) atan2_16::x#16 )
|
|
(word) atan2_16::angle#16 ← phi( atan2_16::@13/(word) atan2_16::angle#18 )
|
|
(byte) atan2_16::i#8 ← phi( atan2_16::@13/(byte) atan2_16::i#10 )
|
|
(signed word) atan2_16::xi#9 ← phi( atan2_16::@13/(signed word) atan2_16::xi#11 )
|
|
(signed word) atan2_16::yd#8 ← phi( atan2_16::@13/(signed word) atan2_16::yd#7 )
|
|
(signed word) atan2_16::xd#8 ← phi( atan2_16::@13/(signed word) atan2_16::xd#7 )
|
|
(signed word) atan2_16::yi#10 ← phi( atan2_16::@13/(signed word) atan2_16::yi#14 )
|
|
(byte) atan2_16::shift#4 ← phi( atan2_16::@13/(byte) atan2_16::shift#2 )
|
|
(bool~) atan2_16::$24 ← (number) 0 != (byte) atan2_16::shift#4
|
|
(bool~) atan2_16::$19 ← ! (bool~) atan2_16::$24
|
|
if((bool~) atan2_16::$19) goto atan2_16::@17
|
|
to:atan2_16::@16
|
|
atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16
|
|
(signed word) atan2_16::y#14 ← phi( atan2_16::@15/(signed word) atan2_16::y#16 atan2_16::@16/(signed word) atan2_16::y#17 )
|
|
(signed word) atan2_16::x#13 ← phi( atan2_16::@15/(signed word) atan2_16::x#14 atan2_16::@16/(signed word) atan2_16::x#15 )
|
|
(word) atan2_16::angle#14 ← phi( atan2_16::@15/(word) atan2_16::angle#16 atan2_16::@16/(word) atan2_16::angle#17 )
|
|
(byte) atan2_16::i#7 ← phi( atan2_16::@15/(byte) atan2_16::i#8 atan2_16::@16/(byte) atan2_16::i#9 )
|
|
(signed word) atan2_16::xd#9 ← phi( atan2_16::@15/(signed word) atan2_16::xd#8 atan2_16::@16/(signed word) atan2_16::xd#2 )
|
|
(signed word) atan2_16::yd#9 ← phi( atan2_16::@15/(signed word) atan2_16::yd#8 atan2_16::@16/(signed word) atan2_16::yd#2 )
|
|
(signed word) atan2_16::xi#7 ← phi( atan2_16::@15/(signed word) atan2_16::xi#9 atan2_16::@16/(signed word) atan2_16::xi#10 )
|
|
(signed word) atan2_16::yi#5 ← phi( atan2_16::@15/(signed word) atan2_16::yi#10 atan2_16::@16/(signed word) atan2_16::yi#11 )
|
|
(bool~) atan2_16::$20 ← (signed word) atan2_16::yi#5 >= (number) 0
|
|
if((bool~) atan2_16::$20) goto atan2_16::@18
|
|
to:atan2_16::@20
|
|
atan2_16::@16: scope:[atan2_16] from atan2_16::@15
|
|
(signed word) atan2_16::y#17 ← phi( atan2_16::@15/(signed word) atan2_16::y#16 )
|
|
(signed word) atan2_16::x#15 ← phi( atan2_16::@15/(signed word) atan2_16::x#14 )
|
|
(word) atan2_16::angle#17 ← phi( atan2_16::@15/(word) atan2_16::angle#16 )
|
|
(byte) atan2_16::i#9 ← phi( atan2_16::@15/(byte) atan2_16::i#8 )
|
|
(signed word) atan2_16::xi#10 ← phi( atan2_16::@15/(signed word) atan2_16::xi#9 )
|
|
(signed word) atan2_16::yi#11 ← phi( atan2_16::@15/(signed word) atan2_16::yi#10 )
|
|
(signed word) atan2_16::yd#4 ← phi( atan2_16::@15/(signed word) atan2_16::yd#8 )
|
|
(signed word) atan2_16::xd#4 ← phi( atan2_16::@15/(signed word) atan2_16::xd#8 )
|
|
(signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#4 >> (number) 1
|
|
(signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#4 >> (number) 1
|
|
to:atan2_16::@17
|
|
atan2_16::@18: scope:[atan2_16] from atan2_16::@17
|
|
(signed word) atan2_16::y#10 ← phi( atan2_16::@17/(signed word) atan2_16::y#14 )
|
|
(signed word) atan2_16::x#11 ← phi( atan2_16::@17/(signed word) atan2_16::x#13 )
|
|
(word) atan2_16::angle#7 ← phi( atan2_16::@17/(word) atan2_16::angle#14 )
|
|
(byte) atan2_16::i#3 ← phi( atan2_16::@17/(byte) atan2_16::i#7 )
|
|
(signed word) atan2_16::xd#5 ← phi( atan2_16::@17/(signed word) atan2_16::xd#9 )
|
|
(signed word) atan2_16::yi#6 ← phi( atan2_16::@17/(signed word) atan2_16::yi#5 )
|
|
(signed word) atan2_16::yd#5 ← phi( atan2_16::@17/(signed word) atan2_16::yd#9 )
|
|
(signed word) atan2_16::xi#4 ← phi( atan2_16::@17/(signed word) atan2_16::xi#7 )
|
|
(signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#4 + (signed word) atan2_16::yd#5
|
|
(signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#6 - (signed word) atan2_16::xd#5
|
|
(byte~) atan2_16::$22 ← (byte) atan2_16::i#3 * (const byte) SIZEOF_WORD
|
|
(word) atan2_16::angle#2 ← (word) atan2_16::angle#7 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22)
|
|
to:atan2_16::@19
|
|
atan2_16::@20: scope:[atan2_16] from atan2_16::@17
|
|
(signed word) atan2_16::y#11 ← phi( atan2_16::@17/(signed word) atan2_16::y#14 )
|
|
(signed word) atan2_16::x#12 ← phi( atan2_16::@17/(signed word) atan2_16::x#13 )
|
|
(word) atan2_16::angle#8 ← phi( atan2_16::@17/(word) atan2_16::angle#14 )
|
|
(byte) atan2_16::i#4 ← phi( atan2_16::@17/(byte) atan2_16::i#7 )
|
|
(signed word) atan2_16::xd#6 ← phi( atan2_16::@17/(signed word) atan2_16::xd#9 )
|
|
(signed word) atan2_16::yi#7 ← phi( atan2_16::@17/(signed word) atan2_16::yi#5 )
|
|
(signed word) atan2_16::yd#6 ← phi( atan2_16::@17/(signed word) atan2_16::yd#9 )
|
|
(signed word) atan2_16::xi#5 ← phi( atan2_16::@17/(signed word) atan2_16::xi#7 )
|
|
(signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#5 - (signed word) atan2_16::yd#6
|
|
(signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#7 + (signed word) atan2_16::xd#6
|
|
(byte~) atan2_16::$23 ← (byte) atan2_16::i#4 * (const byte) SIZEOF_WORD
|
|
(word) atan2_16::angle#3 ← (word) atan2_16::angle#8 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23)
|
|
to:atan2_16::@19
|
|
atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20
|
|
(signed word) atan2_16::y#8 ← phi( atan2_16::@18/(signed word) atan2_16::y#10 atan2_16::@20/(signed word) atan2_16::y#11 )
|
|
(signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 )
|
|
(signed word) atan2_16::x#8 ← phi( atan2_16::@18/(signed word) atan2_16::x#11 atan2_16::@20/(signed word) atan2_16::x#12 )
|
|
(word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
|
|
(signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 )
|
|
(byte) atan2_16::i#5 ← phi( atan2_16::@18/(byte) atan2_16::i#3 atan2_16::@20/(byte) atan2_16::i#4 )
|
|
(byte) atan2_16::i#1 ← (byte) atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16-1)
|
|
(bool~) atan2_16::$21 ← (byte) atan2_16::i#1 != rangelast(0,CORDIC_ITERATIONS_16-1)
|
|
if((bool~) atan2_16::$21) goto atan2_16::@10
|
|
to:atan2_16::@12
|
|
atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21
|
|
(word) atan2_16::angle#15 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
|
|
(signed word) atan2_16::y#4 ← phi( atan2_16::@12/(signed word) atan2_16::y#5 atan2_16::@21/(signed word) atan2_16::y#6 )
|
|
(bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (number) 0
|
|
(bool~) atan2_16::$14 ← ! (bool~) atan2_16::$13
|
|
if((bool~) atan2_16::$14) goto atan2_16::@8
|
|
to:atan2_16::@9
|
|
atan2_16::@21: scope:[atan2_16] from atan2_16::@12
|
|
(signed word) atan2_16::y#6 ← phi( atan2_16::@12/(signed word) atan2_16::y#5 )
|
|
(word) atan2_16::angle#9 ← phi( atan2_16::@12/(word) atan2_16::angle#1 )
|
|
(number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9
|
|
(word) atan2_16::angle#4 ← (number~) atan2_16::$12
|
|
to:atan2_16::@7
|
|
atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9
|
|
(word) atan2_16::angle#10 ← phi( atan2_16::@7/(word) atan2_16::angle#15 atan2_16::@9/(word) atan2_16::angle#5 )
|
|
(word) atan2_16::return#0 ← (word) atan2_16::angle#10
|
|
to:atan2_16::@return
|
|
atan2_16::@9: scope:[atan2_16] from atan2_16::@7
|
|
(word) atan2_16::angle#11 ← phi( atan2_16::@7/(word) atan2_16::angle#15 )
|
|
(word~) atan2_16::$15 ← - (word) atan2_16::angle#11
|
|
(word) atan2_16::angle#5 ← (word~) atan2_16::$15
|
|
to:atan2_16::@8
|
|
atan2_16::@return: scope:[atan2_16] from atan2_16::@8
|
|
(word) atan2_16::return#3 ← phi( atan2_16::@8/(word) atan2_16::return#0 )
|
|
(word) atan2_16::return#1 ← (word) atan2_16::return#3
|
|
return
|
|
to:@return
|
|
@1: scope:[] from @begin
|
|
(byte*) print_screen#0 ← (byte*)(number) $400
|
|
(byte*) print_line_cursor#0 ← (byte*) print_screen#0
|
|
(byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0
|
|
to:@2
|
|
|
|
(void()) print_uint((word) print_uint::w)
|
|
print_uint: scope:[print_uint] from main::@4
|
|
(byte*) print_char_cursor#23 ← phi( main::@4/(byte*) print_char_cursor#25 )
|
|
(word) print_uint::w#1 ← phi( main::@4/(word) print_uint::w#0 )
|
|
(byte~) print_uint::$0 ← > (word) print_uint::w#1
|
|
(byte) print_uchar::b#0 ← (byte~) print_uint::$0
|
|
call print_uchar
|
|
to:print_uint::@1
|
|
print_uint::@1: scope:[print_uint] from print_uint
|
|
(word) print_uint::w#2 ← phi( print_uint/(word) print_uint::w#1 )
|
|
(byte*) print_char_cursor#12 ← phi( print_uint/(byte*) print_char_cursor#6 )
|
|
(byte*) print_char_cursor#1 ← (byte*) print_char_cursor#12
|
|
(byte~) print_uint::$2 ← < (word) print_uint::w#2
|
|
(byte) print_uchar::b#1 ← (byte~) print_uint::$2
|
|
call print_uchar
|
|
to:print_uint::@2
|
|
print_uint::@2: scope:[print_uint] from print_uint::@1
|
|
(byte*) print_char_cursor#13 ← phi( print_uint::@1/(byte*) print_char_cursor#6 )
|
|
(byte*) print_char_cursor#2 ← (byte*) print_char_cursor#13
|
|
to:print_uint::@return
|
|
print_uint::@return: scope:[print_uint] from print_uint::@2
|
|
(byte*) print_char_cursor#14 ← phi( print_uint::@2/(byte*) print_char_cursor#2 )
|
|
(byte*) print_char_cursor#3 ← (byte*) print_char_cursor#14
|
|
return
|
|
to:@return
|
|
|
|
(void()) print_uchar((byte) print_uchar::b)
|
|
print_uchar: scope:[print_uchar] from print_uint print_uint::@1
|
|
(byte*) print_char_cursor#24 ← phi( print_uint/(byte*) print_char_cursor#23 print_uint::@1/(byte*) print_char_cursor#1 )
|
|
(byte) print_uchar::b#2 ← phi( print_uint/(byte) print_uchar::b#0 print_uint::@1/(byte) print_uchar::b#1 )
|
|
(byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (number) 4
|
|
(byte) print_char::ch#0 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$0)
|
|
call print_char
|
|
to:print_uchar::@1
|
|
print_uchar::@1: scope:[print_uchar] from print_uchar
|
|
(byte) print_uchar::b#3 ← phi( print_uchar/(byte) print_uchar::b#2 )
|
|
(byte*) print_char_cursor#15 ← phi( print_uchar/(byte*) print_char_cursor#8 )
|
|
(byte*) print_char_cursor#4 ← (byte*) print_char_cursor#15
|
|
(number~) print_uchar::$2 ← (byte) print_uchar::b#3 & (number) $f
|
|
(byte) print_char::ch#1 ← *((const to_nomodify byte*) print_hextab + (number~) print_uchar::$2)
|
|
call print_char
|
|
to:print_uchar::@2
|
|
print_uchar::@2: scope:[print_uchar] from print_uchar::@1
|
|
(byte*) print_char_cursor#16 ← phi( print_uchar::@1/(byte*) print_char_cursor#8 )
|
|
(byte*) print_char_cursor#5 ← (byte*) print_char_cursor#16
|
|
to:print_uchar::@return
|
|
print_uchar::@return: scope:[print_uchar] from print_uchar::@2
|
|
(byte*) print_char_cursor#17 ← phi( print_uchar::@2/(byte*) print_char_cursor#5 )
|
|
(byte*) print_char_cursor#6 ← (byte*) print_char_cursor#17
|
|
return
|
|
to:@return
|
|
|
|
(void()) print_char((byte) print_char::ch)
|
|
print_char: scope:[print_char] from print_uchar print_uchar::@1
|
|
(byte*) print_char_cursor#18 ← phi( print_uchar/(byte*) print_char_cursor#24 print_uchar::@1/(byte*) print_char_cursor#4 )
|
|
(byte) print_char::ch#2 ← phi( print_uchar/(byte) print_char::ch#0 print_uchar::@1/(byte) print_char::ch#1 )
|
|
*((byte*) print_char_cursor#18) ← (byte) print_char::ch#2
|
|
(byte*) print_char_cursor#7 ← ++ (byte*) print_char_cursor#18
|
|
to:print_char::@return
|
|
print_char::@return: scope:[print_char] from print_char
|
|
(byte*) print_char_cursor#19 ← phi( print_char/(byte*) print_char_cursor#7 )
|
|
(byte*) print_char_cursor#8 ← (byte*) print_char_cursor#19
|
|
return
|
|
to:@return
|
|
|
|
(void()) main()
|
|
main: scope:[main] from @2
|
|
(byte*) print_char_cursor#38 ← phi( @2/(byte*) print_char_cursor#27 )
|
|
(byte*) init_font_hex::charset#1 ← (const nomodify byte*) CHARSET
|
|
call init_font_hex
|
|
to:main::@8
|
|
main::@8: scope:[main] from main
|
|
(byte*) print_char_cursor#37 ← phi( main/(byte*) print_char_cursor#38 )
|
|
(byte*) main::toD0181_screen#0 ← (const nomodify byte*) SCREEN
|
|
(byte*) main::toD0181_gfx#0 ← (const nomodify byte*) CHARSET
|
|
to:main::toD0181
|
|
main::toD0181: scope:[main] from main::@8
|
|
(byte*) print_char_cursor#36 ← phi( main::@8/(byte*) print_char_cursor#37 )
|
|
(byte*) main::toD0181_gfx#1 ← phi( main::@8/(byte*) main::toD0181_gfx#0 )
|
|
(byte*) main::toD0181_screen#1 ← phi( main::@8/(byte*) main::toD0181_screen#0 )
|
|
(word~) main::toD0181_$7 ← (word)(byte*) main::toD0181_screen#1
|
|
(number~) main::toD0181_$0 ← (word~) main::toD0181_$7 & (number) $3fff
|
|
(number~) main::toD0181_$1 ← (number~) main::toD0181_$0 * (number) 4
|
|
(number~) main::toD0181_$2 ← > (number~) main::toD0181_$1
|
|
(byte~) main::toD0181_$3 ← > (word)(byte*) main::toD0181_gfx#1
|
|
(number~) main::toD0181_$4 ← (byte~) main::toD0181_$3 / (number) 4
|
|
(number~) main::toD0181_$5 ← (number~) main::toD0181_$4 & (number) $f
|
|
(number~) main::toD0181_$6 ← (number~) main::toD0181_$2 | (number~) main::toD0181_$5
|
|
(byte) main::toD0181_return#0 ← (number~) main::toD0181_$6
|
|
to:main::toD0181_@return
|
|
main::toD0181_@return: scope:[main] from main::toD0181
|
|
(byte*) print_char_cursor#35 ← phi( main::toD0181/(byte*) print_char_cursor#36 )
|
|
(byte) main::toD0181_return#2 ← phi( main::toD0181/(byte) main::toD0181_return#0 )
|
|
(byte) main::toD0181_return#1 ← (byte) main::toD0181_return#2
|
|
to:main::@7
|
|
main::@7: scope:[main] from main::toD0181_@return
|
|
(byte*) print_char_cursor#34 ← phi( main::toD0181_@return/(byte*) print_char_cursor#35 )
|
|
(byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 )
|
|
(byte~) main::$1 ← (byte) main::toD0181_return#3
|
|
*((const nomodify byte*) D018) ← (byte~) main::$1
|
|
(byte*) main::screen#0 ← (const nomodify byte*) SCREEN
|
|
(byte*) main::screen_ref#0 ← (const to_nomodify byte*) SCREEN_REF
|
|
(word) main::diff_sum#0 ← (word) 0
|
|
(signed byte) main::y#0 ← (signed byte) -$c
|
|
to:main::@1
|
|
main::@1: scope:[main] from main::@3 main::@7
|
|
(byte*) print_char_cursor#33 ← phi( main::@3/(byte*) print_char_cursor#28 main::@7/(byte*) print_char_cursor#34 )
|
|
(byte*) main::screen#5 ← phi( main::@3/(byte*) main::screen#6 main::@7/(byte*) main::screen#0 )
|
|
(word) main::diff_sum#7 ← phi( main::@3/(word) main::diff_sum#5 main::@7/(word) main::diff_sum#0 )
|
|
(byte*) main::screen_ref#5 ← phi( main::@3/(byte*) main::screen_ref#6 main::@7/(byte*) main::screen_ref#0 )
|
|
(signed byte) main::y#4 ← phi( main::@3/(signed byte) main::y#1 main::@7/(signed byte) main::y#0 )
|
|
(signed byte) main::x#0 ← (signed byte) -$13
|
|
to:main::@2
|
|
main::@2: scope:[main] from main::@1 main::@10
|
|
(byte*) print_char_cursor#32 ← phi( main::@1/(byte*) print_char_cursor#33 main::@10/(byte*) print_char_cursor#30 )
|
|
(byte*) main::screen#4 ← phi( main::@1/(byte*) main::screen#5 main::@10/(byte*) main::screen#1 )
|
|
(word) main::diff_sum#6 ← phi( main::@1/(word) main::diff_sum#7 main::@10/(word) main::diff_sum#1 )
|
|
(byte*) main::screen_ref#4 ← phi( main::@1/(byte*) main::screen_ref#5 main::@10/(byte*) main::screen_ref#1 )
|
|
(signed byte) main::y#2 ← phi( main::@1/(signed byte) main::y#4 main::@10/(signed byte) main::y#5 )
|
|
(signed byte) main::x#2 ← phi( main::@1/(signed byte) main::x#0 main::@10/(signed byte) main::x#1 )
|
|
(signed word) main::xw#0 ← (signed word)(word){ (byte)(signed byte) main::x#2, (number) 0 }
|
|
(signed word) main::yw#0 ← (signed word)(word){ (byte)(signed byte) main::y#2, (number) 0 }
|
|
(signed word) atan2_16::x#0 ← (signed word) main::xw#0
|
|
(signed word) atan2_16::y#0 ← (signed word) main::yw#0
|
|
call atan2_16
|
|
(word) atan2_16::return#2 ← (word) atan2_16::return#1
|
|
to:main::@9
|
|
main::@9: scope:[main] from main::@2
|
|
(byte*) print_char_cursor#31 ← phi( main::@2/(byte*) print_char_cursor#32 )
|
|
(signed byte) main::y#6 ← phi( main::@2/(signed byte) main::y#2 )
|
|
(signed byte) main::x#4 ← phi( main::@2/(signed byte) main::x#2 )
|
|
(byte*) main::screen#3 ← phi( main::@2/(byte*) main::screen#4 )
|
|
(word) main::diff_sum#4 ← phi( main::@2/(word) main::diff_sum#6 )
|
|
(byte*) main::screen_ref#2 ← phi( main::@2/(byte*) main::screen_ref#4 )
|
|
(word) atan2_16::return#4 ← phi( main::@2/(word) atan2_16::return#2 )
|
|
(word~) main::$3 ← (word) atan2_16::return#4
|
|
(word) main::angle_w#0 ← (word~) main::$3
|
|
(number~) main::$4 ← (word) main::angle_w#0 + (number) $80
|
|
(number~) main::$5 ← > (number~) main::$4
|
|
(byte) main::ang_w#0 ← (number~) main::$5
|
|
(byte) diff::bb1#0 ← (byte) main::ang_w#0
|
|
(byte) diff::bb2#0 ← *((byte*) main::screen_ref#2)
|
|
call diff
|
|
(byte) diff::return#0 ← (byte) diff::return#2
|
|
to:main::@10
|
|
main::@10: scope:[main] from main::@9
|
|
(byte*) print_char_cursor#30 ← phi( main::@9/(byte*) print_char_cursor#31 )
|
|
(signed byte) main::y#5 ← phi( main::@9/(signed byte) main::y#6 )
|
|
(signed byte) main::x#3 ← phi( main::@9/(signed byte) main::x#4 )
|
|
(byte*) main::screen#2 ← phi( main::@9/(byte*) main::screen#3 )
|
|
(byte*) main::screen_ref#3 ← phi( main::@9/(byte*) main::screen_ref#2 )
|
|
(byte) main::ang_w#1 ← phi( main::@9/(byte) main::ang_w#0 )
|
|
(word) main::diff_sum#2 ← phi( main::@9/(word) main::diff_sum#4 )
|
|
(byte) diff::return#3 ← phi( main::@9/(byte) diff::return#0 )
|
|
(byte~) main::$6 ← (byte) diff::return#3
|
|
(word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$6
|
|
(byte~) main::$7 ← (byte) main::ang_w#1 - *((byte*) main::screen_ref#3)
|
|
*((byte*) main::screen#2) ← (byte~) main::$7
|
|
(byte*) main::screen#1 ← ++ (byte*) main::screen#2
|
|
(byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#3
|
|
(signed byte) main::x#1 ← (signed byte) main::x#3 + rangenext(-$13,$14)
|
|
(bool~) main::$8 ← (signed byte) main::x#1 != rangelast(-$13,$14)
|
|
if((bool~) main::$8) goto main::@2
|
|
to:main::@3
|
|
main::@3: scope:[main] from main::@10
|
|
(byte*) main::screen#6 ← phi( main::@10/(byte*) main::screen#1 )
|
|
(byte*) main::screen_ref#6 ← phi( main::@10/(byte*) main::screen_ref#1 )
|
|
(byte*) print_char_cursor#28 ← phi( main::@10/(byte*) print_char_cursor#30 )
|
|
(word) main::diff_sum#5 ← phi( main::@10/(word) main::diff_sum#1 )
|
|
(signed byte) main::y#3 ← phi( main::@10/(signed byte) main::y#5 )
|
|
(signed byte) main::y#1 ← (signed byte) main::y#3 + rangenext(-$c,$c)
|
|
(bool~) main::$9 ← (signed byte) main::y#1 != rangelast(-$c,$c)
|
|
if((bool~) main::$9) goto main::@1
|
|
to:main::@4
|
|
main::@4: scope:[main] from main::@3
|
|
(byte*) print_char_cursor#25 ← phi( main::@3/(byte*) print_char_cursor#28 )
|
|
(word) main::diff_sum#3 ← phi( main::@3/(word) main::diff_sum#5 )
|
|
(word) print_uint::w#0 ← (word) main::diff_sum#3
|
|
call print_uint
|
|
to:main::@11
|
|
main::@11: scope:[main] from main::@4
|
|
(byte*) print_char_cursor#20 ← phi( main::@4/(byte*) print_char_cursor#3 )
|
|
(byte*) print_char_cursor#9 ← (byte*) print_char_cursor#20
|
|
to:main::@5
|
|
main::@5: scope:[main] from main::@11 main::@6
|
|
(byte*) print_char_cursor#26 ← phi( main::@11/(byte*) print_char_cursor#9 main::@6/(byte*) print_char_cursor#29 )
|
|
if(true) goto main::@6
|
|
to:main::@return
|
|
main::@6: scope:[main] from main::@5
|
|
(byte*) print_char_cursor#29 ← phi( main::@5/(byte*) print_char_cursor#26 )
|
|
*((const byte*) main::col00) ← ++ *((const byte*) main::col00)
|
|
to:main::@5
|
|
main::@return: scope:[main] from main::@5
|
|
(byte*) print_char_cursor#21 ← phi( main::@5/(byte*) print_char_cursor#26 )
|
|
(byte*) print_char_cursor#10 ← (byte*) print_char_cursor#21
|
|
return
|
|
to:@return
|
|
|
|
(byte()) diff((byte) diff::bb1 , (byte) diff::bb2)
|
|
diff: scope:[diff] from main::@9
|
|
(byte) diff::bb2#1 ← phi( main::@9/(byte) diff::bb2#0 )
|
|
(byte) diff::bb1#1 ← phi( main::@9/(byte) diff::bb1#0 )
|
|
(bool~) diff::$0 ← (byte) diff::bb1#1 < (byte) diff::bb2#1
|
|
if((bool~) diff::$0) goto diff::@1
|
|
to:diff::@2
|
|
diff::@1: scope:[diff] from diff
|
|
(byte) diff::bb1#2 ← phi( diff/(byte) diff::bb1#1 )
|
|
(byte) diff::bb2#2 ← phi( diff/(byte) diff::bb2#1 )
|
|
(byte~) diff::$3 ← (byte) diff::bb2#2 - (byte) diff::bb1#2
|
|
(byte~) diff::$4 ← (byte~) diff::$3
|
|
to:diff::@3
|
|
diff::@2: scope:[diff] from diff
|
|
(byte) diff::bb2#3 ← phi( diff/(byte) diff::bb2#1 )
|
|
(byte) diff::bb1#3 ← phi( diff/(byte) diff::bb1#1 )
|
|
(byte~) diff::$1 ← (byte) diff::bb1#3 - (byte) diff::bb2#3
|
|
(byte~) diff::$2 ← (byte~) diff::$1
|
|
to:diff::@3
|
|
diff::@3: scope:[diff] from diff::@1 diff::@2
|
|
(byte~) diff::$5 ← phi( diff::@1/(byte~) diff::$4 diff::@2/(byte~) diff::$2 )
|
|
(byte) diff::return#1 ← (byte~) diff::$5
|
|
to:diff::@return
|
|
diff::@return: scope:[diff] from diff::@3
|
|
(byte) diff::return#4 ← phi( diff::@3/(byte) diff::return#1 )
|
|
(byte) diff::return#2 ← (byte) diff::return#4
|
|
return
|
|
to:@return
|
|
@2: scope:[] from @1
|
|
(byte*) print_char_cursor#27 ← phi( @1/(byte*) print_char_cursor#0 )
|
|
call main
|
|
to:@3
|
|
@3: scope:[] from @2
|
|
(byte*) print_char_cursor#22 ← phi( @2/(byte*) print_char_cursor#10 )
|
|
(byte*) print_char_cursor#11 ← (byte*) print_char_cursor#22
|
|
to:@end
|
|
@end: scope:[] from @3
|
|
|
|
SYMBOL TABLE SSA
|
|
(label) @1
|
|
(label) @2
|
|
(label) @3
|
|
(label) @begin
|
|
(label) @end
|
|
(const nomodify byte*) CHARSET = (byte*)(number) $2000
|
|
(const nomodify byte*) COLS = (byte*)(number) $d800
|
|
(const word*) CORDIC_ATAN2_ANGLES_16[(const nomodify byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
|
|
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
|
}}
|
|
(const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f
|
|
(const nomodify byte*) D018 = (byte*)(number) $d018
|
|
(const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 }
|
|
(byte) MOS6526_CIA::INTERRUPT
|
|
(byte) MOS6526_CIA::PORT_A
|
|
(byte) MOS6526_CIA::PORT_A_DDR
|
|
(byte) MOS6526_CIA::PORT_B
|
|
(byte) MOS6526_CIA::PORT_B_DDR
|
|
(byte) MOS6526_CIA::SERIAL_DATA
|
|
(word) MOS6526_CIA::TIMER_A
|
|
(byte) MOS6526_CIA::TIMER_A_CONTROL
|
|
(word) MOS6526_CIA::TIMER_B
|
|
(byte) MOS6526_CIA::TIMER_B_CONTROL
|
|
(byte) MOS6526_CIA::TOD_10THS
|
|
(byte) MOS6526_CIA::TOD_HOURS
|
|
(byte) MOS6526_CIA::TOD_MIN
|
|
(byte) MOS6526_CIA::TOD_SEC
|
|
(byte) MOS6569_VICII::BG_COLOR
|
|
(byte) MOS6569_VICII::BG_COLOR1
|
|
(byte) MOS6569_VICII::BG_COLOR2
|
|
(byte) MOS6569_VICII::BG_COLOR3
|
|
(byte) MOS6569_VICII::BORDER_COLOR
|
|
(byte) MOS6569_VICII::CONTROL1
|
|
(byte) MOS6569_VICII::CONTROL2
|
|
(byte) MOS6569_VICII::IRQ_ENABLE
|
|
(byte) MOS6569_VICII::IRQ_STATUS
|
|
(byte) MOS6569_VICII::LIGHTPEN_X
|
|
(byte) MOS6569_VICII::LIGHTPEN_Y
|
|
(byte) MOS6569_VICII::MEMORY
|
|
(byte) MOS6569_VICII::RASTER
|
|
(byte) MOS6569_VICII::SPRITE0_COLOR
|
|
(byte) MOS6569_VICII::SPRITE0_X
|
|
(byte) MOS6569_VICII::SPRITE0_Y
|
|
(byte) MOS6569_VICII::SPRITE1_COLOR
|
|
(byte) MOS6569_VICII::SPRITE1_X
|
|
(byte) MOS6569_VICII::SPRITE1_Y
|
|
(byte) MOS6569_VICII::SPRITE2_COLOR
|
|
(byte) MOS6569_VICII::SPRITE2_X
|
|
(byte) MOS6569_VICII::SPRITE2_Y
|
|
(byte) MOS6569_VICII::SPRITE3_COLOR
|
|
(byte) MOS6569_VICII::SPRITE3_X
|
|
(byte) MOS6569_VICII::SPRITE3_Y
|
|
(byte) MOS6569_VICII::SPRITE4_COLOR
|
|
(byte) MOS6569_VICII::SPRITE4_X
|
|
(byte) MOS6569_VICII::SPRITE4_Y
|
|
(byte) MOS6569_VICII::SPRITE5_COLOR
|
|
(byte) MOS6569_VICII::SPRITE5_X
|
|
(byte) MOS6569_VICII::SPRITE5_Y
|
|
(byte) MOS6569_VICII::SPRITE6_COLOR
|
|
(byte) MOS6569_VICII::SPRITE6_X
|
|
(byte) MOS6569_VICII::SPRITE6_Y
|
|
(byte) MOS6569_VICII::SPRITE7_COLOR
|
|
(byte) MOS6569_VICII::SPRITE7_X
|
|
(byte) MOS6569_VICII::SPRITE7_Y
|
|
(byte) MOS6569_VICII::SPRITES_BG_COLLISION
|
|
(byte) MOS6569_VICII::SPRITES_COLLISION
|
|
(byte) MOS6569_VICII::SPRITES_ENABLE
|
|
(byte) MOS6569_VICII::SPRITES_EXPAND_X
|
|
(byte) MOS6569_VICII::SPRITES_EXPAND_Y
|
|
(byte) MOS6569_VICII::SPRITES_MC
|
|
(byte) MOS6569_VICII::SPRITES_MCOLOR1
|
|
(byte) MOS6569_VICII::SPRITES_MCOLOR2
|
|
(byte) MOS6569_VICII::SPRITES_PRIORITY
|
|
(byte) MOS6569_VICII::SPRITES_XMSB
|
|
(byte) MOS6581_SID::CH1_ATTACK_DECAY
|
|
(byte) MOS6581_SID::CH1_CONTROL
|
|
(word) MOS6581_SID::CH1_FREQ
|
|
(word) MOS6581_SID::CH1_PULSE_WIDTH
|
|
(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE
|
|
(byte) MOS6581_SID::CH2_ATTACK_DECAY
|
|
(byte) MOS6581_SID::CH2_CONTROL
|
|
(word) MOS6581_SID::CH2_FREQ
|
|
(word) MOS6581_SID::CH2_PULSE_WIDTH
|
|
(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE
|
|
(byte) MOS6581_SID::CH3_ATTACK_DECAY
|
|
(byte) MOS6581_SID::CH3_CONTROL
|
|
(byte) MOS6581_SID::CH3_ENV
|
|
(word) MOS6581_SID::CH3_FREQ
|
|
(byte) MOS6581_SID::CH3_OSC
|
|
(word) MOS6581_SID::CH3_PULSE_WIDTH
|
|
(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE
|
|
(byte) MOS6581_SID::FILTER_CUTOFF_HIGH
|
|
(byte) MOS6581_SID::FILTER_CUTOFF_LOW
|
|
(byte) MOS6581_SID::FILTER_SETUP
|
|
(byte) MOS6581_SID::POT_X
|
|
(byte) MOS6581_SID::POT_Y
|
|
(byte) MOS6581_SID::VOLUME_FILTER_MODE
|
|
(const byte) RADIX::BINARY = (number) 2
|
|
(const byte) RADIX::DECIMAL = (number) $a
|
|
(const byte) RADIX::HEXADECIMAL = (number) $10
|
|
(const byte) RADIX::OCTAL = (number) 8
|
|
(const nomodify byte*) SCREEN = (byte*)(number) $2800
|
|
(const to_nomodify byte*) SCREEN_REF[(number) $3e8] = kickasm {{ .for(var y=-12;y<=12;y++)
|
|
.for(var x=-19;x<=20;x++)
|
|
.byte round(256*atan2(y, x)/PI/2)
|
|
}}
|
|
(const byte) SIZEOF_WORD = (byte) 2
|
|
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
|
|
(bool~) atan2_16::$0
|
|
(signed word~) atan2_16::$1
|
|
(bool~) atan2_16::$10
|
|
(bool~) atan2_16::$11
|
|
(number~) atan2_16::$12
|
|
(bool~) atan2_16::$13
|
|
(bool~) atan2_16::$14
|
|
(word~) atan2_16::$15
|
|
(bool~) atan2_16::$16
|
|
(bool~) atan2_16::$17
|
|
(bool~) atan2_16::$18
|
|
(bool~) atan2_16::$19
|
|
(signed word~) atan2_16::$2
|
|
(bool~) atan2_16::$20
|
|
(bool~) atan2_16::$21
|
|
(byte~) atan2_16::$22
|
|
(byte~) atan2_16::$23
|
|
(bool~) atan2_16::$24
|
|
(signed word~) atan2_16::$3
|
|
(signed word~) atan2_16::$4
|
|
(bool~) atan2_16::$5
|
|
(signed word~) atan2_16::$6
|
|
(signed word~) atan2_16::$7
|
|
(signed word~) atan2_16::$8
|
|
(signed word~) atan2_16::$9
|
|
(label) atan2_16::@1
|
|
(label) atan2_16::@10
|
|
(label) atan2_16::@11
|
|
(label) atan2_16::@12
|
|
(label) atan2_16::@13
|
|
(label) atan2_16::@14
|
|
(label) atan2_16::@15
|
|
(label) atan2_16::@16
|
|
(label) atan2_16::@17
|
|
(label) atan2_16::@18
|
|
(label) atan2_16::@19
|
|
(label) atan2_16::@2
|
|
(label) atan2_16::@20
|
|
(label) atan2_16::@21
|
|
(label) atan2_16::@3
|
|
(label) atan2_16::@4
|
|
(label) atan2_16::@5
|
|
(label) atan2_16::@6
|
|
(label) atan2_16::@7
|
|
(label) atan2_16::@8
|
|
(label) atan2_16::@9
|
|
(label) atan2_16::@return
|
|
(word) atan2_16::angle
|
|
(word) atan2_16::angle#0
|
|
(word) atan2_16::angle#1
|
|
(word) atan2_16::angle#10
|
|
(word) atan2_16::angle#11
|
|
(word) atan2_16::angle#12
|
|
(word) atan2_16::angle#13
|
|
(word) atan2_16::angle#14
|
|
(word) atan2_16::angle#15
|
|
(word) atan2_16::angle#16
|
|
(word) atan2_16::angle#17
|
|
(word) atan2_16::angle#18
|
|
(word) atan2_16::angle#19
|
|
(word) atan2_16::angle#2
|
|
(word) atan2_16::angle#20
|
|
(word) atan2_16::angle#3
|
|
(word) atan2_16::angle#4
|
|
(word) atan2_16::angle#5
|
|
(word) atan2_16::angle#6
|
|
(word) atan2_16::angle#7
|
|
(word) atan2_16::angle#8
|
|
(word) atan2_16::angle#9
|
|
(byte) atan2_16::i
|
|
(byte) atan2_16::i#0
|
|
(byte) atan2_16::i#1
|
|
(byte) atan2_16::i#10
|
|
(byte) atan2_16::i#11
|
|
(byte) atan2_16::i#2
|
|
(byte) atan2_16::i#3
|
|
(byte) atan2_16::i#4
|
|
(byte) atan2_16::i#5
|
|
(byte) atan2_16::i#6
|
|
(byte) atan2_16::i#7
|
|
(byte) atan2_16::i#8
|
|
(byte) atan2_16::i#9
|
|
(word) atan2_16::return
|
|
(word) atan2_16::return#0
|
|
(word) atan2_16::return#1
|
|
(word) atan2_16::return#2
|
|
(word) atan2_16::return#3
|
|
(word) atan2_16::return#4
|
|
(byte) atan2_16::shift
|
|
(byte) atan2_16::shift#0
|
|
(byte) atan2_16::shift#1
|
|
(byte) atan2_16::shift#2
|
|
(byte) atan2_16::shift#3
|
|
(byte) atan2_16::shift#4
|
|
(signed word) atan2_16::x
|
|
(signed word) atan2_16::x#0
|
|
(signed word) atan2_16::x#1
|
|
(signed word) atan2_16::x#10
|
|
(signed word) atan2_16::x#11
|
|
(signed word) atan2_16::x#12
|
|
(signed word) atan2_16::x#13
|
|
(signed word) atan2_16::x#14
|
|
(signed word) atan2_16::x#15
|
|
(signed word) atan2_16::x#16
|
|
(signed word) atan2_16::x#17
|
|
(signed word) atan2_16::x#18
|
|
(signed word) atan2_16::x#2
|
|
(signed word) atan2_16::x#3
|
|
(signed word) atan2_16::x#4
|
|
(signed word) atan2_16::x#5
|
|
(signed word) atan2_16::x#6
|
|
(signed word) atan2_16::x#7
|
|
(signed word) atan2_16::x#8
|
|
(signed word) atan2_16::x#9
|
|
(signed word) atan2_16::xd
|
|
(signed word) atan2_16::xd#0
|
|
(signed word) atan2_16::xd#1
|
|
(signed word) atan2_16::xd#2
|
|
(signed word) atan2_16::xd#3
|
|
(signed word) atan2_16::xd#4
|
|
(signed word) atan2_16::xd#5
|
|
(signed word) atan2_16::xd#6
|
|
(signed word) atan2_16::xd#7
|
|
(signed word) atan2_16::xd#8
|
|
(signed word) atan2_16::xd#9
|
|
(signed word) atan2_16::xi
|
|
(signed word) atan2_16::xi#0
|
|
(signed word) atan2_16::xi#1
|
|
(signed word) atan2_16::xi#10
|
|
(signed word) atan2_16::xi#11
|
|
(signed word) atan2_16::xi#12
|
|
(signed word) atan2_16::xi#2
|
|
(signed word) atan2_16::xi#3
|
|
(signed word) atan2_16::xi#4
|
|
(signed word) atan2_16::xi#5
|
|
(signed word) atan2_16::xi#6
|
|
(signed word) atan2_16::xi#7
|
|
(signed word) atan2_16::xi#8
|
|
(signed word) atan2_16::xi#9
|
|
(signed word) atan2_16::y
|
|
(signed word) atan2_16::y#0
|
|
(signed word) atan2_16::y#1
|
|
(signed word) atan2_16::y#10
|
|
(signed word) atan2_16::y#11
|
|
(signed word) atan2_16::y#12
|
|
(signed word) atan2_16::y#13
|
|
(signed word) atan2_16::y#14
|
|
(signed word) atan2_16::y#15
|
|
(signed word) atan2_16::y#16
|
|
(signed word) atan2_16::y#17
|
|
(signed word) atan2_16::y#18
|
|
(signed word) atan2_16::y#19
|
|
(signed word) atan2_16::y#2
|
|
(signed word) atan2_16::y#20
|
|
(signed word) atan2_16::y#3
|
|
(signed word) atan2_16::y#4
|
|
(signed word) atan2_16::y#5
|
|
(signed word) atan2_16::y#6
|
|
(signed word) atan2_16::y#7
|
|
(signed word) atan2_16::y#8
|
|
(signed word) atan2_16::y#9
|
|
(signed word) atan2_16::yd
|
|
(signed word) atan2_16::yd#0
|
|
(signed word) atan2_16::yd#1
|
|
(signed word) atan2_16::yd#2
|
|
(signed word) atan2_16::yd#3
|
|
(signed word) atan2_16::yd#4
|
|
(signed word) atan2_16::yd#5
|
|
(signed word) atan2_16::yd#6
|
|
(signed word) atan2_16::yd#7
|
|
(signed word) atan2_16::yd#8
|
|
(signed word) atan2_16::yd#9
|
|
(signed word) atan2_16::yi
|
|
(signed word) atan2_16::yi#0
|
|
(signed word) atan2_16::yi#1
|
|
(signed word) atan2_16::yi#10
|
|
(signed word) atan2_16::yi#11
|
|
(signed word) atan2_16::yi#12
|
|
(signed word) atan2_16::yi#13
|
|
(signed word) atan2_16::yi#14
|
|
(signed word) atan2_16::yi#15
|
|
(signed word) atan2_16::yi#2
|
|
(signed word) atan2_16::yi#3
|
|
(signed word) atan2_16::yi#4
|
|
(signed word) atan2_16::yi#5
|
|
(signed word) atan2_16::yi#6
|
|
(signed word) atan2_16::yi#7
|
|
(signed word) atan2_16::yi#8
|
|
(signed word) atan2_16::yi#9
|
|
(byte()) diff((byte) diff::bb1 , (byte) diff::bb2)
|
|
(bool~) diff::$0
|
|
(byte~) diff::$1
|
|
(byte~) diff::$2
|
|
(byte~) diff::$3
|
|
(byte~) diff::$4
|
|
(byte~) diff::$5
|
|
(label) diff::@1
|
|
(label) diff::@2
|
|
(label) diff::@3
|
|
(label) diff::@return
|
|
(byte) diff::bb1
|
|
(byte) diff::bb1#0
|
|
(byte) diff::bb1#1
|
|
(byte) diff::bb1#2
|
|
(byte) diff::bb1#3
|
|
(byte) diff::bb2
|
|
(byte) diff::bb2#0
|
|
(byte) diff::bb2#1
|
|
(byte) diff::bb2#2
|
|
(byte) diff::bb2#3
|
|
(byte) diff::return
|
|
(byte) diff::return#0
|
|
(byte) diff::return#1
|
|
(byte) diff::return#2
|
|
(byte) diff::return#3
|
|
(byte) diff::return#4
|
|
(void()) init_font_hex((byte*) init_font_hex::charset)
|
|
(byte~) init_font_hex::$0
|
|
(byte~) init_font_hex::$1
|
|
(byte~) init_font_hex::$2
|
|
(bool~) init_font_hex::$3
|
|
(bool~) init_font_hex::$4
|
|
(bool~) init_font_hex::$5
|
|
(label) init_font_hex::@1
|
|
(label) init_font_hex::@2
|
|
(label) init_font_hex::@3
|
|
(label) init_font_hex::@4
|
|
(label) init_font_hex::@5
|
|
(label) init_font_hex::@return
|
|
(byte) init_font_hex::c
|
|
(byte) init_font_hex::c#0
|
|
(byte) init_font_hex::c#1
|
|
(byte) init_font_hex::c#2
|
|
(byte) init_font_hex::c#3
|
|
(byte) init_font_hex::c#4
|
|
(byte) init_font_hex::c#5
|
|
(byte) init_font_hex::c#6
|
|
(byte) init_font_hex::c1
|
|
(byte) init_font_hex::c1#0
|
|
(byte) init_font_hex::c1#1
|
|
(byte) init_font_hex::c1#2
|
|
(byte) init_font_hex::c1#3
|
|
(byte) init_font_hex::c1#4
|
|
(byte*) init_font_hex::charset
|
|
(byte*) init_font_hex::charset#0
|
|
(byte*) init_font_hex::charset#1
|
|
(byte*) init_font_hex::charset#2
|
|
(byte*) init_font_hex::charset#3
|
|
(byte*) init_font_hex::charset#4
|
|
(byte*) init_font_hex::charset#5
|
|
(byte*) init_font_hex::charset#6
|
|
(byte*) init_font_hex::charset#7
|
|
(byte) init_font_hex::i
|
|
(byte) init_font_hex::i#0
|
|
(byte) init_font_hex::i#1
|
|
(byte) init_font_hex::i#2
|
|
(byte) init_font_hex::idx
|
|
(byte) init_font_hex::idx#0
|
|
(byte) init_font_hex::idx#1
|
|
(byte) init_font_hex::idx#2
|
|
(byte) init_font_hex::idx#3
|
|
(byte) init_font_hex::idx#4
|
|
(byte) init_font_hex::idx#5
|
|
(byte) init_font_hex::idx#6
|
|
(byte*) init_font_hex::proto_hi
|
|
(byte*) init_font_hex::proto_hi#0
|
|
(byte*) init_font_hex::proto_hi#1
|
|
(byte*) init_font_hex::proto_hi#2
|
|
(byte*) init_font_hex::proto_hi#3
|
|
(byte*) init_font_hex::proto_hi#4
|
|
(byte*) init_font_hex::proto_hi#5
|
|
(byte*) init_font_hex::proto_hi#6
|
|
(byte*) init_font_hex::proto_lo
|
|
(byte*) init_font_hex::proto_lo#0
|
|
(byte*) init_font_hex::proto_lo#1
|
|
(byte*) init_font_hex::proto_lo#2
|
|
(byte*) init_font_hex::proto_lo#3
|
|
(byte*) init_font_hex::proto_lo#4
|
|
(void()) main()
|
|
(byte~) main::$1
|
|
(word~) main::$3
|
|
(number~) main::$4
|
|
(number~) main::$5
|
|
(byte~) main::$6
|
|
(byte~) main::$7
|
|
(bool~) main::$8
|
|
(bool~) main::$9
|
|
(label) main::@1
|
|
(label) main::@10
|
|
(label) main::@11
|
|
(label) main::@2
|
|
(label) main::@3
|
|
(label) main::@4
|
|
(label) main::@5
|
|
(label) main::@6
|
|
(label) main::@7
|
|
(label) main::@8
|
|
(label) main::@9
|
|
(label) main::@return
|
|
(byte) main::ang_w
|
|
(byte) main::ang_w#0
|
|
(byte) main::ang_w#1
|
|
(word) main::angle_w
|
|
(word) main::angle_w#0
|
|
(const byte*) main::col00 = (const nomodify byte*) COLS+(number) $c*(number) $28+(number) $13
|
|
(word) main::diff_sum
|
|
(word) main::diff_sum#0
|
|
(word) main::diff_sum#1
|
|
(word) main::diff_sum#2
|
|
(word) main::diff_sum#3
|
|
(word) main::diff_sum#4
|
|
(word) main::diff_sum#5
|
|
(word) main::diff_sum#6
|
|
(word) main::diff_sum#7
|
|
(byte*) main::screen
|
|
(byte*) main::screen#0
|
|
(byte*) main::screen#1
|
|
(byte*) main::screen#2
|
|
(byte*) main::screen#3
|
|
(byte*) main::screen#4
|
|
(byte*) main::screen#5
|
|
(byte*) main::screen#6
|
|
(byte*) main::screen_ref
|
|
(byte*) main::screen_ref#0
|
|
(byte*) main::screen_ref#1
|
|
(byte*) main::screen_ref#2
|
|
(byte*) main::screen_ref#3
|
|
(byte*) main::screen_ref#4
|
|
(byte*) main::screen_ref#5
|
|
(byte*) main::screen_ref#6
|
|
(label) main::toD0181
|
|
(number~) main::toD0181_$0
|
|
(number~) main::toD0181_$1
|
|
(number~) main::toD0181_$2
|
|
(byte~) main::toD0181_$3
|
|
(number~) main::toD0181_$4
|
|
(number~) main::toD0181_$5
|
|
(number~) main::toD0181_$6
|
|
(word~) main::toD0181_$7
|
|
(label) main::toD0181_@return
|
|
(byte*) main::toD0181_gfx
|
|
(byte*) main::toD0181_gfx#0
|
|
(byte*) main::toD0181_gfx#1
|
|
(byte) main::toD0181_return
|
|
(byte) main::toD0181_return#0
|
|
(byte) main::toD0181_return#1
|
|
(byte) main::toD0181_return#2
|
|
(byte) main::toD0181_return#3
|
|
(byte*) main::toD0181_screen
|
|
(byte*) main::toD0181_screen#0
|
|
(byte*) main::toD0181_screen#1
|
|
(signed byte) main::x
|
|
(signed byte) main::x#0
|
|
(signed byte) main::x#1
|
|
(signed byte) main::x#2
|
|
(signed byte) main::x#3
|
|
(signed byte) main::x#4
|
|
(signed word) main::xw
|
|
(signed word) main::xw#0
|
|
(signed byte) main::y
|
|
(signed byte) main::y#0
|
|
(signed byte) main::y#1
|
|
(signed byte) main::y#2
|
|
(signed byte) main::y#3
|
|
(signed byte) main::y#4
|
|
(signed byte) main::y#5
|
|
(signed byte) main::y#6
|
|
(signed word) main::yw
|
|
(signed word) main::yw#0
|
|
(void()) print_char((byte) print_char::ch)
|
|
(label) print_char::@return
|
|
(byte) print_char::ch
|
|
(byte) print_char::ch#0
|
|
(byte) print_char::ch#1
|
|
(byte) print_char::ch#2
|
|
(byte*) print_char_cursor
|
|
(byte*) print_char_cursor#0
|
|
(byte*) print_char_cursor#1
|
|
(byte*) print_char_cursor#10
|
|
(byte*) print_char_cursor#11
|
|
(byte*) print_char_cursor#12
|
|
(byte*) print_char_cursor#13
|
|
(byte*) print_char_cursor#14
|
|
(byte*) print_char_cursor#15
|
|
(byte*) print_char_cursor#16
|
|
(byte*) print_char_cursor#17
|
|
(byte*) print_char_cursor#18
|
|
(byte*) print_char_cursor#19
|
|
(byte*) print_char_cursor#2
|
|
(byte*) print_char_cursor#20
|
|
(byte*) print_char_cursor#21
|
|
(byte*) print_char_cursor#22
|
|
(byte*) print_char_cursor#23
|
|
(byte*) print_char_cursor#24
|
|
(byte*) print_char_cursor#25
|
|
(byte*) print_char_cursor#26
|
|
(byte*) print_char_cursor#27
|
|
(byte*) print_char_cursor#28
|
|
(byte*) print_char_cursor#29
|
|
(byte*) print_char_cursor#3
|
|
(byte*) print_char_cursor#30
|
|
(byte*) print_char_cursor#31
|
|
(byte*) print_char_cursor#32
|
|
(byte*) print_char_cursor#33
|
|
(byte*) print_char_cursor#34
|
|
(byte*) print_char_cursor#35
|
|
(byte*) print_char_cursor#36
|
|
(byte*) print_char_cursor#37
|
|
(byte*) print_char_cursor#38
|
|
(byte*) print_char_cursor#4
|
|
(byte*) print_char_cursor#5
|
|
(byte*) print_char_cursor#6
|
|
(byte*) print_char_cursor#7
|
|
(byte*) print_char_cursor#8
|
|
(byte*) print_char_cursor#9
|
|
(const to_nomodify byte*) print_hextab[] = (byte*) "0123456789abcdef"z
|
|
(byte*) print_line_cursor
|
|
(byte*) print_line_cursor#0
|
|
(byte*) print_screen
|
|
(byte*) print_screen#0
|
|
(void()) print_uchar((byte) print_uchar::b)
|
|
(byte~) print_uchar::$0
|
|
(number~) print_uchar::$2
|
|
(label) print_uchar::@1
|
|
(label) print_uchar::@2
|
|
(label) print_uchar::@return
|
|
(byte) print_uchar::b
|
|
(byte) print_uchar::b#0
|
|
(byte) print_uchar::b#1
|
|
(byte) print_uchar::b#2
|
|
(byte) print_uchar::b#3
|
|
(void()) print_uint((word) print_uint::w)
|
|
(byte~) print_uint::$0
|
|
(byte~) print_uint::$2
|
|
(label) print_uint::@1
|
|
(label) print_uint::@2
|
|
(label) print_uint::@return
|
|
(word) print_uint::w
|
|
(word) print_uint::w#0
|
|
(word) print_uint::w#1
|
|
(word) print_uint::w#2
|
|
|
|
Fixing inline constructor with main::$11 ← (byte)(byte)main::x#2 w= (byte)0
|
|
Fixing inline constructor with main::$12 ← (byte)(byte)main::y#2 w= (byte)0
|
|
Successful SSA optimization Pass2FixInlineConstructors
|
|
Adding number conversion cast (unumber) $13 in
|
|
Adding number conversion cast (unumber) $c*$28 in
|
|
Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0
|
|
Adding number conversion cast (unumber) 4 in (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#2 + (byte) init_font_hex::i#2) << (number) 4
|
|
Adding number conversion cast (unumber) 1 in (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#2 + (byte) init_font_hex::i#2) << (number) 1
|
|
Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (number) 0
|
|
Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (number) 0
|
|
Adding number conversion cast (unumber) 5 in (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#3 + (number) 5
|
|
Adding number conversion cast (unumber) 8 in (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#4 + (number) 8
|
|
Adding number conversion cast (unumber) 5 in (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#3 + (number) 5
|
|
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 >= (number) 0
|
|
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0
|
|
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0
|
|
Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2
|
|
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0
|
|
Adding number conversion cast (unumber) 2 in (bool~) atan2_16::$18 ← (byte) atan2_16::shift#2 >= (number) 2
|
|
Adding number conversion cast (snumber) 2 in (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (number) 2
|
|
Adding number conversion cast (snumber) 2 in (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (number) 2
|
|
Adding number conversion cast (unumber) 2 in (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#3 - (number) 2
|
|
Adding number conversion cast (unumber) 0 in (bool~) atan2_16::$24 ← (number) 0 != (byte) atan2_16::shift#4
|
|
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$20 ← (signed word) atan2_16::yi#5 >= (number) 0
|
|
Adding number conversion cast (snumber) 1 in (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#4 >> (number) 1
|
|
Adding number conversion cast (snumber) 1 in (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#4 >> (number) 1
|
|
Adding number conversion cast (unumber) 1 in (byte) atan2_16::i#1 ← (byte) atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16-1)
|
|
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (number) 0
|
|
Adding number conversion cast (unumber) $8000 in (number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9
|
|
Adding number conversion cast (unumber) atan2_16::$12 in (number~) atan2_16::$12 ← (unumber)(number) $8000 - (word) atan2_16::angle#9
|
|
Adding number conversion cast (unumber) 4 in (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (number) 4
|
|
Adding number conversion cast (unumber) $f in (number~) print_uchar::$2 ← (byte) print_uchar::b#3 & (number) $f
|
|
Adding number conversion cast (unumber) print_uchar::$2 in (number~) print_uchar::$2 ← (byte) print_uchar::b#3 & (unumber)(number) $f
|
|
Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$0 ← (word~) main::toD0181_$7 & (number) $3fff
|
|
Adding number conversion cast (unumber) main::toD0181_$0 in (number~) main::toD0181_$0 ← (word~) main::toD0181_$7 & (unumber)(number) $3fff
|
|
Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$1 ← (unumber~) main::toD0181_$0 * (number) 4
|
|
Adding number conversion cast (unumber) main::toD0181_$1 in (number~) main::toD0181_$1 ← (unumber~) main::toD0181_$0 * (unumber)(number) 4
|
|
Adding number conversion cast (unumber) main::toD0181_$2 in (number~) main::toD0181_$2 ← > (unumber~) main::toD0181_$1
|
|
Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$4 ← (byte~) main::toD0181_$3 / (number) 4
|
|
Adding number conversion cast (unumber) main::toD0181_$4 in (number~) main::toD0181_$4 ← (byte~) main::toD0181_$3 / (unumber)(number) 4
|
|
Adding number conversion cast (unumber) $f in (number~) main::toD0181_$5 ← (unumber~) main::toD0181_$4 & (number) $f
|
|
Adding number conversion cast (unumber) main::toD0181_$5 in (number~) main::toD0181_$5 ← (unumber~) main::toD0181_$4 & (unumber)(number) $f
|
|
Adding number conversion cast (unumber) main::toD0181_$6 in (number~) main::toD0181_$6 ← (unumber~) main::toD0181_$2 | (unumber~) main::toD0181_$5
|
|
Adding number conversion cast (unumber) $80 in (number~) main::$4 ← (word) main::angle_w#0 + (number) $80
|
|
Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← (word) main::angle_w#0 + (unumber)(number) $80
|
|
Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← > (unumber~) main::$4
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Inlining cast *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (unumber)(number) 0
|
|
Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (unumber)(number) 0
|
|
Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (unumber)(number) 0
|
|
Successful SSA optimization Pass2InlineCast
|
|
Simplifying constant pointer cast (byte*) 53272
|
|
Simplifying constant pointer cast (byte*) 55296
|
|
Simplifying constant pointer cast (byte*) 8192
|
|
Simplifying constant pointer cast (byte*) 10240
|
|
Simplifying constant integer cast $13
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 5
|
|
Simplifying constant integer cast 8
|
|
Simplifying constant integer cast 5
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $8000
|
|
Simplifying constant pointer cast (byte*) 1024
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast $f
|
|
Simplifying constant integer cast $3fff
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast 4
|
|
Simplifying constant integer cast $f
|
|
Simplifying constant integer cast (byte)(signed byte) main::x#2
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast (byte)(signed byte) main::y#2
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $80
|
|
Successful SSA optimization PassNCastSimplification
|
|
Finalized unsigned number type (byte) $13
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 4
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 5
|
|
Finalized unsigned number type (byte) 8
|
|
Finalized unsigned number type (byte) 5
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized signed number type (signed byte) 2
|
|
Finalized signed number type (signed byte) 2
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized signed number type (signed byte) 1
|
|
Finalized signed number type (signed byte) 1
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized unsigned number type (word) $8000
|
|
Finalized unsigned number type (byte) 4
|
|
Finalized unsigned number type (byte) $f
|
|
Finalized unsigned number type (word) $3fff
|
|
Finalized unsigned number type (byte) 4
|
|
Finalized unsigned number type (byte) 4
|
|
Finalized unsigned number type (byte) $f
|
|
Finalized unsigned number type (byte) $80
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Inferred type updated to word in (unumber~) atan2_16::$12 ← (word) $8000 - (word) atan2_16::angle#9
|
|
Inferred type updated to byte in (unumber~) print_uchar::$2 ← (byte) print_uchar::b#3 & (byte) $f
|
|
Inferred type updated to word in (unumber~) main::toD0181_$0 ← (word~) main::toD0181_$7 & (word) $3fff
|
|
Inferred type updated to word in (unumber~) main::toD0181_$1 ← (word~) main::toD0181_$0 * (byte) 4
|
|
Inferred type updated to byte in (unumber~) main::toD0181_$2 ← > (word~) main::toD0181_$1
|
|
Inferred type updated to byte in (unumber~) main::toD0181_$4 ← (byte~) main::toD0181_$3 / (byte) 4
|
|
Inferred type updated to byte in (unumber~) main::toD0181_$5 ← (byte~) main::toD0181_$4 & (byte) $f
|
|
Inferred type updated to byte in (unumber~) main::toD0181_$6 ← (byte~) main::toD0181_$2 | (byte~) main::toD0181_$5
|
|
Inferred type updated to word in (unumber~) main::$4 ← (word) main::angle_w#0 + (byte) $80
|
|
Inferred type updated to byte in (unumber~) main::$5 ← > (word~) main::$4
|
|
Inversing boolean not [59] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 != (signed byte) 0 from [58] (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (signed byte) 0
|
|
Inversing boolean not [68] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [67] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0
|
|
Inversing boolean not [79] (bool~) atan2_16::$19 ← (byte) 0 == (byte) atan2_16::shift#4 from [78] (bool~) atan2_16::$24 ← (byte) 0 != (byte) atan2_16::shift#4
|
|
Inversing boolean not [103] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [102] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0
|
|
Successful SSA optimization Pass2UnaryNotSimplification
|
|
Alias init_font_hex::charset#3 = init_font_hex::charset#4
|
|
Alias init_font_hex::idx#2 = init_font_hex::idx#6
|
|
Alias init_font_hex::proto_lo#2 = init_font_hex::proto_lo#3
|
|
Alias init_font_hex::c1#2 = init_font_hex::c1#3
|
|
Alias init_font_hex::proto_hi#2 = init_font_hex::proto_hi#5 init_font_hex::proto_hi#3
|
|
Alias init_font_hex::c#2 = init_font_hex::c#3 init_font_hex::c#4
|
|
Alias init_font_hex::charset#0 = init_font_hex::charset#7
|
|
Alias atan2_16::y#1 = atan2_16::y#2 atan2_16::$3 atan2_16::y#3
|
|
Alias atan2_16::x#5 = atan2_16::x#9 atan2_16::x#6
|
|
Alias atan2_16::$2 = atan2_16::$1
|
|
Alias atan2_16::yi#0 = atan2_16::$4 atan2_16::yi#12 atan2_16::yi#13
|
|
Alias atan2_16::x#1 = atan2_16::x#2 atan2_16::$8 atan2_16::x#3
|
|
Alias atan2_16::y#12 = atan2_16::y#15 atan2_16::y#13
|
|
Alias atan2_16::$7 = atan2_16::$6
|
|
Alias atan2_16::xi#0 = atan2_16::$9
|
|
Alias atan2_16::xi#3 = atan2_16::xi#6 atan2_16::xd#0
|
|
Alias atan2_16::yi#3 = atan2_16::yi#4 atan2_16::yd#0
|
|
Alias atan2_16::i#2 = atan2_16::i#6 atan2_16::shift#0
|
|
Alias atan2_16::angle#12 = atan2_16::angle#19
|
|
Alias atan2_16::x#17 = atan2_16::x#7
|
|
Alias atan2_16::y#19 = atan2_16::y#7
|
|
Alias atan2_16::xd#3 = atan2_16::xd#7 atan2_16::xd#8 atan2_16::xd#4
|
|
Alias atan2_16::yd#3 = atan2_16::yd#7 atan2_16::yd#8 atan2_16::yd#4
|
|
Alias atan2_16::shift#2 = atan2_16::shift#3 atan2_16::shift#4
|
|
Alias atan2_16::yi#10 = atan2_16::yi#15 atan2_16::yi#14 atan2_16::yi#11
|
|
Alias atan2_16::xi#10 = atan2_16::xi#12 atan2_16::xi#11 atan2_16::xi#9
|
|
Alias atan2_16::i#10 = atan2_16::i#11 atan2_16::i#8 atan2_16::i#9
|
|
Alias atan2_16::angle#16 = atan2_16::angle#20 atan2_16::angle#18 atan2_16::angle#17
|
|
Alias atan2_16::x#14 = atan2_16::x#18 atan2_16::x#16 atan2_16::x#15
|
|
Alias atan2_16::y#16 = atan2_16::y#20 atan2_16::y#18 atan2_16::y#17
|
|
Alias atan2_16::xi#4 = atan2_16::xi#7 atan2_16::xi#5
|
|
Alias atan2_16::yd#5 = atan2_16::yd#9 atan2_16::yd#6
|
|
Alias atan2_16::yi#5 = atan2_16::yi#6 atan2_16::yi#7
|
|
Alias atan2_16::xd#5 = atan2_16::xd#9 atan2_16::xd#6
|
|
Alias atan2_16::i#3 = atan2_16::i#7 atan2_16::i#4
|
|
Alias atan2_16::angle#14 = atan2_16::angle#7 atan2_16::angle#8
|
|
Alias atan2_16::x#11 = atan2_16::x#13 atan2_16::x#12
|
|
Alias atan2_16::y#10 = atan2_16::y#14 atan2_16::y#11
|
|
Alias atan2_16::angle#1 = atan2_16::angle#9
|
|
Alias atan2_16::y#5 = atan2_16::y#6
|
|
Alias atan2_16::angle#4 = atan2_16::$12
|
|
Alias atan2_16::return#0 = atan2_16::angle#10 atan2_16::return#3 atan2_16::return#1
|
|
Alias atan2_16::angle#11 = atan2_16::angle#15
|
|
Alias atan2_16::angle#5 = atan2_16::$15
|
|
Alias print_char_cursor#0 = print_line_cursor#0 print_screen#0 print_char_cursor#27
|
|
Alias print_uchar::b#0 = print_uint::$0
|
|
Alias print_uint::w#1 = print_uint::w#2
|
|
Alias print_char_cursor#1 = print_char_cursor#12
|
|
Alias print_uchar::b#1 = print_uint::$2
|
|
Alias print_char_cursor#13 = print_char_cursor#2 print_char_cursor#14 print_char_cursor#3
|
|
Alias print_uchar::b#2 = print_uchar::b#3
|
|
Alias print_char_cursor#15 = print_char_cursor#4
|
|
Alias print_char_cursor#16 = print_char_cursor#5 print_char_cursor#17 print_char_cursor#6
|
|
Alias print_char_cursor#19 = print_char_cursor#7 print_char_cursor#8
|
|
Alias print_char_cursor#34 = print_char_cursor#37 print_char_cursor#38 print_char_cursor#36 print_char_cursor#35
|
|
Alias main::toD0181_screen#0 = main::toD0181_screen#1
|
|
Alias main::toD0181_gfx#0 = main::toD0181_gfx#1
|
|
Alias main::toD0181_return#0 = main::toD0181_$6 main::toD0181_return#2 main::toD0181_return#1 main::toD0181_return#3 main::$1
|
|
Alias atan2_16::return#2 = atan2_16::return#4
|
|
Alias main::screen_ref#2 = main::screen_ref#4 main::screen_ref#3
|
|
Alias main::diff_sum#2 = main::diff_sum#4 main::diff_sum#6
|
|
Alias main::screen#2 = main::screen#3 main::screen#4
|
|
Alias main::x#2 = main::x#4 main::x#3
|
|
Alias main::y#2 = main::y#6 main::y#5 main::y#3
|
|
Alias print_char_cursor#25 = print_char_cursor#31 print_char_cursor#32 print_char_cursor#30 print_char_cursor#28
|
|
Alias main::angle_w#0 = main::$3
|
|
Alias main::ang_w#0 = main::$5 main::ang_w#1
|
|
Alias diff::return#0 = diff::return#3
|
|
Alias main::diff_sum#1 = main::diff_sum#5 main::diff_sum#3
|
|
Alias main::screen_ref#1 = main::screen_ref#6
|
|
Alias main::screen#1 = main::screen#6
|
|
Alias print_char_cursor#20 = print_char_cursor#9
|
|
Alias print_char_cursor#10 = print_char_cursor#29 print_char_cursor#26 print_char_cursor#21
|
|
Alias diff::bb2#1 = diff::bb2#2 diff::bb2#3
|
|
Alias diff::bb1#1 = diff::bb1#2 diff::bb1#3
|
|
Alias diff::$4 = diff::$3
|
|
Alias diff::$2 = diff::$1
|
|
Alias diff::return#1 = diff::$5 diff::return#4 diff::return#2
|
|
Alias print_char_cursor#11 = print_char_cursor#22
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Alias atan2_16::x#1 = atan2_16::x#5 atan2_16::x#10
|
|
Alias atan2_16::y#1 = atan2_16::y#12 atan2_16::y#9
|
|
Alias atan2_16::yi#0 = atan2_16::yi#9
|
|
Alias atan2_16::yi#10 = atan2_16::yi#5
|
|
Alias atan2_16::xi#10 = atan2_16::xi#4
|
|
Alias atan2_16::i#10 = atan2_16::i#3 atan2_16::i#5
|
|
Alias atan2_16::angle#14 = atan2_16::angle#16
|
|
Alias atan2_16::x#11 = atan2_16::x#14 atan2_16::x#8
|
|
Alias atan2_16::y#10 = atan2_16::y#16 atan2_16::y#8
|
|
Alias atan2_16::y#4 = atan2_16::y#5
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Identical Phi Values (byte*) init_font_hex::charset#6 (byte*) init_font_hex::charset#1
|
|
Identical Phi Values (byte*) init_font_hex::proto_hi#2 (byte*) init_font_hex::proto_hi#4
|
|
Identical Phi Values (byte*) init_font_hex::proto_lo#2 (byte*) init_font_hex::proto_lo#4
|
|
Identical Phi Values (byte*) init_font_hex::charset#3 (byte*) init_font_hex::charset#2
|
|
Identical Phi Values (byte) init_font_hex::c1#2 (byte) init_font_hex::c1#4
|
|
Identical Phi Values (byte) init_font_hex::c#2 (byte) init_font_hex::c#5
|
|
Identical Phi Values (signed word) atan2_16::y#1 (signed word) atan2_16::y#0
|
|
Identical Phi Values (signed word) atan2_16::x#1 (signed word) atan2_16::x#0
|
|
Identical Phi Values (signed word) atan2_16::yi#10 (signed word) atan2_16::yi#3
|
|
Identical Phi Values (signed word) atan2_16::xi#10 (signed word) atan2_16::xi#3
|
|
Identical Phi Values (byte) atan2_16::i#10 (byte) atan2_16::i#2
|
|
Identical Phi Values (word) atan2_16::angle#14 (word) atan2_16::angle#12
|
|
Identical Phi Values (signed word) atan2_16::x#11 (signed word) atan2_16::x#17
|
|
Identical Phi Values (signed word) atan2_16::y#10 (signed word) atan2_16::y#19
|
|
Identical Phi Values (word) print_uint::w#1 (word) print_uint::w#0
|
|
Identical Phi Values (byte*) print_char_cursor#23 (byte*) print_char_cursor#25
|
|
Identical Phi Values (byte*) print_char_cursor#1 (byte*) print_char_cursor#16
|
|
Identical Phi Values (byte*) print_char_cursor#13 (byte*) print_char_cursor#16
|
|
Identical Phi Values (byte*) print_char_cursor#15 (byte*) print_char_cursor#19
|
|
Identical Phi Values (byte*) print_char_cursor#16 (byte*) print_char_cursor#19
|
|
Identical Phi Values (byte*) print_char_cursor#34 (byte*) print_char_cursor#0
|
|
Identical Phi Values (signed byte) main::y#2 (signed byte) main::y#4
|
|
Identical Phi Values (byte*) print_char_cursor#25 (byte*) print_char_cursor#33
|
|
Identical Phi Values (byte*) print_char_cursor#20 (byte*) print_char_cursor#13
|
|
Identical Phi Values (byte*) print_char_cursor#10 (byte*) print_char_cursor#20
|
|
Identical Phi Values (byte) diff::bb1#1 (byte) diff::bb1#0
|
|
Identical Phi Values (byte) diff::bb2#1 (byte) diff::bb2#0
|
|
Identical Phi Values (byte*) print_char_cursor#11 (byte*) print_char_cursor#10
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6
|
|
Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6
|
|
Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0
|
|
Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0
|
|
Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17
|
|
Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19
|
|
Identical Phi Values (byte*) print_char_cursor#33 (byte*) print_char_cursor#0
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Simple Condition (bool~) init_font_hex::$3 [19] if((byte) init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3
|
|
Simple Condition (bool~) init_font_hex::$4 [28] if((byte) init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2
|
|
Simple Condition (bool~) init_font_hex::$5 [32] if((byte) init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1
|
|
Simple Condition (bool~) atan2_16::$0 [36] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
|
|
Simple Condition (bool~) atan2_16::$5 [40] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
|
|
Simple Condition (bool~) atan2_16::$17 [47] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11
|
|
Simple Condition (bool~) atan2_16::$11 [51] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
|
|
Simple Condition (bool~) atan2_16::$18 [54] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14
|
|
Simple Condition (bool~) atan2_16::$19 [59] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17
|
|
Simple Condition (bool~) atan2_16::$20 [62] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18
|
|
Simple Condition (bool~) atan2_16::$21 [76] if((byte) atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@10
|
|
Simple Condition (bool~) atan2_16::$14 [79] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
|
|
Simple Condition (bool~) main::$8 [151] if((signed byte) main::x#1!=rangelast(-$13,$14)) goto main::@2
|
|
Simple Condition (bool~) main::$9 [154] if((signed byte) main::y#1!=rangelast(-$c,$c)) goto main::@1
|
|
Simple Condition (bool~) diff::$0 [164] if((byte) diff::bb1#0<(byte) diff::bb2#0) goto diff::@1
|
|
Successful SSA optimization Pass2ConditionalJumpSimplification
|
|
Negating conditional jump and destination [76] if((byte) atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@12
|
|
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
|
Constant (const byte*) init_font_hex::proto_hi#0 = FONT_HEX_PROTO
|
|
Constant (const byte) init_font_hex::c#0 = 0
|
|
Constant (const byte*) init_font_hex::proto_lo#0 = FONT_HEX_PROTO
|
|
Constant (const byte) init_font_hex::c1#0 = 0
|
|
Constant (const byte) init_font_hex::idx#0 = 0
|
|
Constant (const byte) init_font_hex::i#0 = 0
|
|
Constant (const word) atan2_16::angle#0 = 0
|
|
Constant (const byte) atan2_16::i#0 = 0
|
|
Constant (const byte*) print_char_cursor#0 = (byte*) 1024
|
|
Constant (const byte*) init_font_hex::charset#1 = CHARSET
|
|
Constant (const byte*) main::toD0181_screen#0 = SCREEN
|
|
Constant (const byte*) main::toD0181_gfx#0 = CHARSET
|
|
Constant (const byte*) main::screen#0 = SCREEN
|
|
Constant (const byte*) main::screen_ref#0 = SCREEN_REF
|
|
Constant (const word) main::diff_sum#0 = 0
|
|
Constant (const signed byte) main::y#0 = -$c
|
|
Constant (const signed byte) main::x#0 = -$13
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant (const word) main::toD0181_$7 = (word)main::toD0181_screen#0
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant value identified (word)main::toD0181_gfx#0 in [116] (byte~) main::toD0181_$3 ← > (word)(const byte*) main::toD0181_gfx#0
|
|
Successful SSA optimization Pass2ConstantValues
|
|
if() condition always true - replacing block destination [159] if(true) goto main::@6
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Resolved ranged next value [17] init_font_hex::i#1 ← ++ init_font_hex::i#2 to ++
|
|
Resolved ranged comparison value [19] if(init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 to (number) 5
|
|
Resolved ranged next value [26] init_font_hex::c1#1 ← ++ init_font_hex::c1#4 to ++
|
|
Resolved ranged comparison value [28] if(init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 to (number) $10
|
|
Resolved ranged next value [30] init_font_hex::c#1 ← ++ init_font_hex::c#6 to ++
|
|
Resolved ranged comparison value [32] if(init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 to (number) $10
|
|
Resolved ranged next value [74] atan2_16::i#1 ← ++ atan2_16::i#2 to ++
|
|
Resolved ranged comparison value [76] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@12 to (const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1
|
|
Resolved ranged next value [149] main::x#1 ← ++ main::x#2 to ++
|
|
Resolved ranged comparison value [151] if(main::x#1!=rangelast(-$13,$14)) goto main::@2 to (number) $15
|
|
Resolved ranged next value [152] main::y#1 ← ++ main::y#4 to ++
|
|
Resolved ranged comparison value [154] if(main::y#1!=rangelast(-$c,$c)) goto main::@1 to (number) $d
|
|
Simplifying expression containing zero init_font_hex::charset#2 in [8] *((byte*) init_font_hex::charset#2 + (const byte) init_font_hex::idx#0) ← (byte) 0
|
|
Successful SSA optimization PassNSimplifyExpressionWithZero
|
|
Eliminating unused variable (byte) init_font_hex::idx#4 and assignment [15] (byte) init_font_hex::idx#4 ← ++ (byte) init_font_hex::idx#3
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Removing unused block main::@return
|
|
Successful SSA optimization Pass2EliminateUnusedBlocks
|
|
Adding number conversion cast (unumber) 5 in if((byte) init_font_hex::i#1!=(number) 5) goto init_font_hex::@3
|
|
Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c1#1!=(number) $10) goto init_font_hex::@2
|
|
Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c#1!=(number) $10) goto init_font_hex::@1
|
|
Adding number conversion cast (unumber) CORDIC_ITERATIONS_16-1+1 in if((byte) atan2_16::i#1==(const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1) goto atan2_16::@12
|
|
Adding number conversion cast (unumber) 1 in if((byte) atan2_16::i#1==(unumber)(const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1) goto atan2_16::@12
|
|
Adding number conversion cast (snumber) $15 in if((signed byte) main::x#1!=(number) $15) goto main::@2
|
|
Adding number conversion cast (snumber) $d in if((signed byte) main::y#1!=(number) $d) goto main::@1
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Simplifying constant integer cast 5
|
|
Simplifying constant integer cast $10
|
|
Simplifying constant integer cast $10
|
|
Simplifying constant integer cast (const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(unumber)(number) 1
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast $15
|
|
Simplifying constant integer cast $d
|
|
Successful SSA optimization PassNCastSimplification
|
|
Finalized unsigned number type (byte) 5
|
|
Finalized unsigned number type (byte) $10
|
|
Finalized unsigned number type (byte) $10
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized signed number type (signed byte) $15
|
|
Finalized signed number type (signed byte) $d
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Constant right-side identified [3] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0
|
|
Constant right-side identified [79] (word~) main::toD0181_$0 ← (const word) main::toD0181_$7 & (word) $3fff
|
|
Constant right-side identified [82] (byte~) main::toD0181_$3 ← > (word)(const byte*) main::toD0181_gfx#0
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant (const byte) init_font_hex::idx#1 = ++init_font_hex::idx#0
|
|
Constant (const word) main::toD0181_$0 = main::toD0181_$7&$3fff
|
|
Constant (const byte) main::toD0181_$3 = >(word)main::toD0181_gfx#0
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant right-side identified [78] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 * (byte) 4
|
|
Constant right-side identified [80] (byte~) main::toD0181_$4 ← (const byte) main::toD0181_$3 / (byte) 4
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant (const word) main::toD0181_$1 = main::toD0181_$0*4
|
|
Constant (const byte) main::toD0181_$4 = main::toD0181_$3/4
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant right-side identified [78] (byte~) main::toD0181_$2 ← > (const word) main::toD0181_$1
|
|
Constant right-side identified [79] (byte~) main::toD0181_$5 ← (const byte) main::toD0181_$4 & (byte) $f
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant (const byte) main::toD0181_$2 = >main::toD0181_$1
|
|
Constant (const byte) main::toD0181_$5 = main::toD0181_$4&$f
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Constant right-side identified [78] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$2 | (const byte) main::toD0181_$5
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant (const byte) main::toD0181_return#0 = main::toD0181_$2|main::toD0181_$5
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Inlining Noop Cast [82] (signed word) main::xw#0 ← (signed word)(word~) main::$11 keeping main::xw#0
|
|
Inlining Noop Cast [84] (signed word) main::yw#0 ← (signed word)(word~) main::$12 keeping main::yw#0
|
|
Successful SSA optimization Pass2NopCastInlining
|
|
Rewriting division to use shift [31] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2
|
|
Rewriting multiplication to use shift [45] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
|
|
Rewriting multiplication to use shift [49] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
|
|
Successful SSA optimization Pass2MultiplyToShiftRewriting
|
|
Inlining constant with var siblings (const byte*) init_font_hex::proto_hi#0
|
|
Inlining constant with var siblings (const byte) init_font_hex::c#0
|
|
Inlining constant with var siblings (const byte*) init_font_hex::proto_lo#0
|
|
Inlining constant with var siblings (const byte) init_font_hex::c1#0
|
|
Inlining constant with var siblings (const byte) init_font_hex::idx#0
|
|
Inlining constant with var siblings (const byte) init_font_hex::i#0
|
|
Inlining constant with var siblings (const byte*) init_font_hex::charset#1
|
|
Inlining constant with var siblings (const byte) init_font_hex::idx#1
|
|
Inlining constant with var siblings (const word) atan2_16::angle#0
|
|
Inlining constant with var siblings (const byte) atan2_16::i#0
|
|
Inlining constant with var siblings (const byte*) main::screen#0
|
|
Inlining constant with var siblings (const byte*) main::screen_ref#0
|
|
Inlining constant with var siblings (const word) main::diff_sum#0
|
|
Inlining constant with var siblings (const signed byte) main::y#0
|
|
Inlining constant with var siblings (const signed byte) main::x#0
|
|
Inlining constant with var siblings (const byte*) print_char_cursor#0
|
|
Constant inlined main::screen#0 = (const nomodify byte*) SCREEN
|
|
Constant inlined main::toD0181_screen#0 = (const nomodify byte*) SCREEN
|
|
Constant inlined main::toD0181_gfx#0 = (const nomodify byte*) CHARSET
|
|
Constant inlined main::diff_sum#0 = (word) 0
|
|
Constant inlined init_font_hex::proto_hi#0 = (const byte*) FONT_HEX_PROTO
|
|
Constant inlined atan2_16::angle#0 = (word) 0
|
|
Constant inlined init_font_hex::charset#1 = (const nomodify byte*) CHARSET
|
|
Constant inlined init_font_hex::c1#0 = (byte) 0
|
|
Constant inlined main::toD0181_$7 = (word)(const nomodify byte*) SCREEN
|
|
Constant inlined main::screen_ref#0 = (const to_nomodify byte*) SCREEN_REF
|
|
Constant inlined main::toD0181_$2 = >(word)(const nomodify byte*) SCREEN&(word) $3fff*(byte) 4
|
|
Constant inlined atan2_16::i#0 = (byte) 0
|
|
Constant inlined main::toD0181_$1 = (word)(const nomodify byte*) SCREEN&(word) $3fff*(byte) 4
|
|
Constant inlined main::toD0181_$0 = (word)(const nomodify byte*) SCREEN&(word) $3fff
|
|
Constant inlined main::x#0 = (signed byte) -$13
|
|
Constant inlined main::y#0 = (signed byte) -$c
|
|
Constant inlined init_font_hex::i#0 = (byte) 0
|
|
Constant inlined main::toD0181_$5 = >(word)(const nomodify byte*) CHARSET/(byte) 4&(byte) $f
|
|
Constant inlined main::toD0181_$4 = >(word)(const nomodify byte*) CHARSET/(byte) 4
|
|
Constant inlined main::toD0181_$3 = >(word)(const nomodify byte*) CHARSET
|
|
Constant inlined print_char_cursor#0 = (byte*) 1024
|
|
Constant inlined init_font_hex::idx#1 = ++(byte) 0
|
|
Constant inlined init_font_hex::idx#0 = (byte) 0
|
|
Constant inlined init_font_hex::proto_lo#0 = (const byte*) FONT_HEX_PROTO
|
|
Constant inlined init_font_hex::c#0 = (byte) 0
|
|
Successful SSA optimization Pass2ConstantInlining
|
|
Simplifying constant integer increment ++0
|
|
Successful SSA optimization Pass2ConstantSimplification
|
|
Eliminating unused constant (const byte) SIZEOF_WORD
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Added new block during phi lifting init_font_hex::@6(between init_font_hex::@5 and init_font_hex::@1)
|
|
Added new block during phi lifting init_font_hex::@7(between init_font_hex::@4 and init_font_hex::@2)
|
|
Added new block during phi lifting init_font_hex::@8(between init_font_hex::@3 and init_font_hex::@3)
|
|
Added new block during phi lifting atan2_16::@22(between atan2_16::@19 and atan2_16::@10)
|
|
Added new block during phi lifting atan2_16::@23(between atan2_16::@10 and atan2_16::@12)
|
|
Added new block during phi lifting atan2_16::@24(between atan2_16::@19 and atan2_16::@12)
|
|
Added new block during phi lifting atan2_16::@25(between atan2_16::@15 and atan2_16::@17)
|
|
Added new block during phi lifting atan2_16::@26(between atan2_16::@12 and atan2_16::@7)
|
|
Added new block during phi lifting atan2_16::@27(between atan2_16::@7 and atan2_16::@8)
|
|
Added new block during phi lifting main::@12(between main::@3 and main::@1)
|
|
Added new block during phi lifting main::@13(between main::@10 and main::@2)
|
|
Adding NOP phi() at start of @begin
|
|
Adding NOP phi() at start of @1
|
|
Adding NOP phi() at start of @2
|
|
Adding NOP phi() at start of @3
|
|
Adding NOP phi() at start of @end
|
|
Adding NOP phi() at start of main
|
|
Adding NOP phi() at start of main::@8
|
|
Adding NOP phi() at start of main::toD0181
|
|
Adding NOP phi() at start of main::toD0181_@return
|
|
Adding NOP phi() at start of main::@11
|
|
Adding NOP phi() at start of main::@5
|
|
Adding NOP phi() at start of print_uint::@2
|
|
Adding NOP phi() at start of print_uchar::@2
|
|
Adding NOP phi() at start of init_font_hex
|
|
CALL GRAPH
|
|
Calls in [] to main:3
|
|
Calls in [main] to init_font_hex:7 atan2_16:21 diff:28 print_uint:41
|
|
Calls in [print_uint] to print_uchar:55 print_uchar:59
|
|
Calls in [print_uchar] to print_char:67 print_char:72
|
|
|
|
Created 38 initial phi equivalence classes
|
|
Coalesced [13] main::screen_ref#8 ← main::screen_ref#5
|
|
Coalesced [14] main::diff_sum#9 ← main::diff_sum#7
|
|
Coalesced [15] main::screen#8 ← main::screen#5
|
|
Coalesced [45] main::y#7 ← main::y#1
|
|
Coalesced [46] main::screen_ref#7 ← main::screen_ref#1
|
|
Coalesced [47] main::diff_sum#8 ← main::diff_sum#1
|
|
Coalesced [48] main::screen#7 ← main::screen#1
|
|
Coalesced [49] main::x#5 ← main::x#1
|
|
Coalesced (already) [50] main::screen_ref#9 ← main::screen_ref#1
|
|
Coalesced (already) [51] main::diff_sum#10 ← main::diff_sum#1
|
|
Coalesced (already) [52] main::screen#9 ← main::screen#1
|
|
Coalesced [54] print_uchar::b#4 ← print_uchar::b#0
|
|
Coalesced [57] print_uchar::b#5 ← print_uchar::b#1
|
|
Coalesced [58] print_char_cursor#39 ← print_char_cursor#19
|
|
Coalesced [65] print_char::ch#3 ← print_char::ch#0
|
|
Coalesced [66] print_char_cursor#40 ← print_char_cursor#24
|
|
Coalesced [70] print_char::ch#4 ← print_char::ch#1
|
|
Coalesced (already) [71] print_char_cursor#41 ← print_char_cursor#19
|
|
Coalesced [81] diff::return#6 ← diff::$2
|
|
Coalesced [85] diff::return#5 ← diff::$4
|
|
Coalesced [88] atan2_16::yi#17 ← atan2_16::$2
|
|
Coalesced [92] atan2_16::xi#14 ← atan2_16::$7
|
|
Coalesced [94] atan2_16::yi#19 ← atan2_16::yi#0
|
|
Coalesced [95] atan2_16::xi#16 ← atan2_16::xi#0
|
|
Coalesced [98] atan2_16::angle#22 ← atan2_16::angle#12
|
|
Coalesced [103] atan2_16::angle#27 ← atan2_16::angle#4
|
|
Coalesced [107] atan2_16::return#6 ← atan2_16::angle#5
|
|
Coalesced [110] atan2_16::return#5 ← atan2_16::angle#11
|
|
Coalesced [111] atan2_16::angle#26 ← atan2_16::angle#1
|
|
Not coalescing [112] atan2_16::shift#5 ← atan2_16::i#2
|
|
Not coalescing [113] atan2_16::xd#10 ← atan2_16::xi#3
|
|
Not coalescing [114] atan2_16::yd#10 ← atan2_16::yi#3
|
|
Coalesced [120] atan2_16::yd#13 ← atan2_16::yd#2
|
|
Coalesced [121] atan2_16::xd#13 ← atan2_16::xd#2
|
|
Coalesced [128] atan2_16::yi#21 ← atan2_16::yi#2
|
|
Coalesced [129] atan2_16::angle#25 ← atan2_16::angle#3
|
|
Coalesced [130] atan2_16::xi#18 ← atan2_16::xi#2
|
|
Coalesced [134] atan2_16::yi#18 ← atan2_16::yi#8
|
|
Coalesced [135] atan2_16::xi#15 ← atan2_16::xi#8
|
|
Coalesced [136] atan2_16::i#12 ← atan2_16::i#1
|
|
Coalesced [137] atan2_16::angle#21 ← atan2_16::angle#13
|
|
Coalesced (already) [138] atan2_16::angle#23 ← atan2_16::angle#13
|
|
Coalesced [143] atan2_16::yi#20 ← atan2_16::yi#1
|
|
Coalesced [144] atan2_16::angle#24 ← atan2_16::angle#2
|
|
Coalesced [145] atan2_16::xi#17 ← atan2_16::xi#1
|
|
Coalesced [146] atan2_16::yd#12 ← atan2_16::yd#3
|
|
Coalesced [147] atan2_16::xd#12 ← atan2_16::xd#3
|
|
Coalesced [151] atan2_16::shift#6 ← atan2_16::shift#1
|
|
Coalesced [152] atan2_16::xd#11 ← atan2_16::xd#1
|
|
Coalesced [153] atan2_16::yd#11 ← atan2_16::yd#1
|
|
Not coalescing [154] atan2_16::xi#13 ← atan2_16::x#0
|
|
Not coalescing [155] atan2_16::yi#16 ← atan2_16::y#0
|
|
Coalesced [158] init_font_hex::charset#9 ← init_font_hex::charset#5
|
|
Coalesced [180] init_font_hex::charset#8 ← init_font_hex::charset#0
|
|
Coalesced [181] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1
|
|
Coalesced [182] init_font_hex::c#7 ← init_font_hex::c#1
|
|
Coalesced (already) [183] init_font_hex::charset#10 ← init_font_hex::charset#0
|
|
Coalesced [184] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1
|
|
Coalesced [185] init_font_hex::c1#5 ← init_font_hex::c1#1
|
|
Coalesced [186] init_font_hex::i#3 ← init_font_hex::i#1
|
|
Coalesced [187] init_font_hex::idx#7 ← init_font_hex::idx#2
|
|
Coalesced down to 26 phi equivalence classes
|
|
Culled Empty Block (label) @1
|
|
Culled Empty Block (label) @3
|
|
Culled Empty Block (label) main::@8
|
|
Culled Empty Block (label) main::toD0181_@return
|
|
Culled Empty Block (label) main::@11
|
|
Culled Empty Block (label) main::@5
|
|
Culled Empty Block (label) main::@12
|
|
Culled Empty Block (label) main::@13
|
|
Culled Empty Block (label) print_uint::@2
|
|
Culled Empty Block (label) print_uchar::@2
|
|
Culled Empty Block (label) atan2_16::@23
|
|
Culled Empty Block (label) atan2_16::@27
|
|
Culled Empty Block (label) atan2_16::@26
|
|
Culled Empty Block (label) atan2_16::@22
|
|
Culled Empty Block (label) atan2_16::@24
|
|
Culled Empty Block (label) atan2_16::@25
|
|
Culled Empty Block (label) init_font_hex::@6
|
|
Culled Empty Block (label) init_font_hex::@7
|
|
Culled Empty Block (label) init_font_hex::@8
|
|
Renumbering block @2 to @1
|
|
Renumbering block main::@6 to main::@5
|
|
Renumbering block main::@7 to main::@6
|
|
Renumbering block main::@9 to main::@7
|
|
Renumbering block main::@10 to main::@8
|
|
Adding NOP phi() at start of @begin
|
|
Adding NOP phi() at start of @1
|
|
Adding NOP phi() at start of @end
|
|
Adding NOP phi() at start of main
|
|
Adding NOP phi() at start of main::toD0181
|
|
Adding NOP phi() at start of init_font_hex
|
|
|
|
FINAL CONTROL FLOW GRAPH
|
|
@begin: scope:[] from
|
|
[0] phi()
|
|
to:@1
|
|
@1: scope:[] from @begin
|
|
[1] phi()
|
|
[2] call main
|
|
to:@end
|
|
@end: scope:[] from @1
|
|
[3] phi()
|
|
|
|
(void()) main()
|
|
main: scope:[main] from @1
|
|
[4] phi()
|
|
[5] call init_font_hex
|
|
to:main::toD0181
|
|
main::toD0181: scope:[main] from main
|
|
[6] phi()
|
|
to:main::@6
|
|
main::@6: scope:[main] from main::toD0181
|
|
[7] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0
|
|
to:main::@1
|
|
main::@1: scope:[main] from main::@3 main::@6
|
|
[8] (byte*) main::screen#5 ← phi( main::@3/(byte*) main::screen#1 main::@6/(const nomodify byte*) SCREEN )
|
|
[8] (word) main::diff_sum#7 ← phi( main::@3/(word) main::diff_sum#1 main::@6/(word) 0 )
|
|
[8] (byte*) main::screen_ref#5 ← phi( main::@3/(byte*) main::screen_ref#1 main::@6/(const to_nomodify byte*) SCREEN_REF )
|
|
[8] (signed byte) main::y#4 ← phi( main::@3/(signed byte) main::y#1 main::@6/(signed byte) -$c )
|
|
to:main::@2
|
|
main::@2: scope:[main] from main::@1 main::@8
|
|
[9] (byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#5 main::@8/(byte*) main::screen#1 )
|
|
[9] (word) main::diff_sum#2 ← phi( main::@1/(word) main::diff_sum#7 main::@8/(word) main::diff_sum#1 )
|
|
[9] (byte*) main::screen_ref#2 ← phi( main::@1/(byte*) main::screen_ref#5 main::@8/(byte*) main::screen_ref#1 )
|
|
[9] (signed byte) main::x#2 ← phi( main::@1/(signed byte) -$13 main::@8/(signed byte) main::x#1 )
|
|
[10] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0
|
|
[11] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0
|
|
[12] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0
|
|
[13] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0
|
|
[14] call atan2_16
|
|
[15] (word) atan2_16::return#2 ← (word) atan2_16::return#0
|
|
to:main::@7
|
|
main::@7: scope:[main] from main::@2
|
|
[16] (word) main::angle_w#0 ← (word) atan2_16::return#2
|
|
[17] (word~) main::$4 ← (word) main::angle_w#0 + (byte) $80
|
|
[18] (byte) main::ang_w#0 ← > (word~) main::$4
|
|
[19] (byte) diff::bb1#0 ← (byte) main::ang_w#0
|
|
[20] (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2)
|
|
[21] call diff
|
|
[22] (byte) diff::return#0 ← (byte) diff::return#1
|
|
to:main::@8
|
|
main::@8: scope:[main] from main::@7
|
|
[23] (byte~) main::$6 ← (byte) diff::return#0
|
|
[24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$6
|
|
[25] (byte~) main::$7 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2)
|
|
[26] *((byte*) main::screen#2) ← (byte~) main::$7
|
|
[27] (byte*) main::screen#1 ← ++ (byte*) main::screen#2
|
|
[28] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2
|
|
[29] (signed byte) main::x#1 ← ++ (signed byte) main::x#2
|
|
[30] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2
|
|
to:main::@3
|
|
main::@3: scope:[main] from main::@8
|
|
[31] (signed byte) main::y#1 ← ++ (signed byte) main::y#4
|
|
[32] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1
|
|
to:main::@4
|
|
main::@4: scope:[main] from main::@3
|
|
[33] (word) print_uint::w#0 ← (word) main::diff_sum#1
|
|
[34] call print_uint
|
|
to:main::@5
|
|
main::@5: scope:[main] from main::@4 main::@5
|
|
[35] *((const byte*) main::col00) ← ++ *((const byte*) main::col00)
|
|
to:main::@5
|
|
|
|
(void()) print_uint((word) print_uint::w)
|
|
print_uint: scope:[print_uint] from main::@4
|
|
[36] (byte) print_uchar::b#0 ← > (word) print_uint::w#0
|
|
[37] call print_uchar
|
|
to:print_uint::@1
|
|
print_uint::@1: scope:[print_uint] from print_uint
|
|
[38] (byte) print_uchar::b#1 ← < (word) print_uint::w#0
|
|
[39] call print_uchar
|
|
to:print_uint::@return
|
|
print_uint::@return: scope:[print_uint] from print_uint::@1
|
|
[40] return
|
|
to:@return
|
|
|
|
(void()) print_uchar((byte) print_uchar::b)
|
|
print_uchar: scope:[print_uchar] from print_uint print_uint::@1
|
|
[41] (byte*) print_char_cursor#24 ← phi( print_uint/(byte*) 1024 print_uint::@1/(byte*) print_char_cursor#19 )
|
|
[41] (byte) print_uchar::b#2 ← phi( print_uint/(byte) print_uchar::b#0 print_uint::@1/(byte) print_uchar::b#1 )
|
|
[42] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4
|
|
[43] (byte) print_char::ch#0 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$0)
|
|
[44] call print_char
|
|
to:print_uchar::@1
|
|
print_uchar::@1: scope:[print_uchar] from print_uchar
|
|
[45] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f
|
|
[46] (byte) print_char::ch#1 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$2)
|
|
[47] call print_char
|
|
to:print_uchar::@return
|
|
print_uchar::@return: scope:[print_uchar] from print_uchar::@1
|
|
[48] return
|
|
to:@return
|
|
|
|
(void()) print_char((byte) print_char::ch)
|
|
print_char: scope:[print_char] from print_uchar print_uchar::@1
|
|
[49] (byte*) print_char_cursor#18 ← phi( print_uchar/(byte*) print_char_cursor#24 print_uchar::@1/(byte*) print_char_cursor#19 )
|
|
[49] (byte) print_char::ch#2 ← phi( print_uchar/(byte) print_char::ch#0 print_uchar::@1/(byte) print_char::ch#1 )
|
|
[50] *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2
|
|
[51] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#18
|
|
to:print_char::@return
|
|
print_char::@return: scope:[print_char] from print_char
|
|
[52] return
|
|
to:@return
|
|
|
|
(byte()) diff((byte) diff::bb1 , (byte) diff::bb2)
|
|
diff: scope:[diff] from main::@7
|
|
[53] if((byte) diff::bb1#0<(byte) diff::bb2#0) goto diff::@1
|
|
to:diff::@2
|
|
diff::@2: scope:[diff] from diff
|
|
[54] (byte~) diff::$2 ← (byte) diff::bb1#0 - (byte) diff::bb2#0
|
|
to:diff::@3
|
|
diff::@3: scope:[diff] from diff::@1 diff::@2
|
|
[55] (byte) diff::return#1 ← phi( diff::@1/(byte~) diff::$4 diff::@2/(byte~) diff::$2 )
|
|
to:diff::@return
|
|
diff::@return: scope:[diff] from diff::@3
|
|
[56] return
|
|
to:@return
|
|
diff::@1: scope:[diff] from diff
|
|
[57] (byte~) diff::$4 ← (byte) diff::bb2#0 - (byte) diff::bb1#0
|
|
to:diff::@3
|
|
|
|
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
|
|
atan2_16: scope:[atan2_16] from main::@2
|
|
[58] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
|
|
to:atan2_16::@2
|
|
atan2_16::@2: scope:[atan2_16] from atan2_16
|
|
[59] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0
|
|
to:atan2_16::@3
|
|
atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2
|
|
[60] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 )
|
|
[61] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
|
|
to:atan2_16::@5
|
|
atan2_16::@5: scope:[atan2_16] from atan2_16::@3
|
|
[62] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0
|
|
to:atan2_16::@6
|
|
atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5
|
|
[63] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 )
|
|
to:atan2_16::@10
|
|
atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6
|
|
[64] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 )
|
|
[64] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 )
|
|
[64] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 )
|
|
[64] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 )
|
|
[65] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11
|
|
to:atan2_16::@12
|
|
atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19
|
|
[66] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
|
|
[67] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1
|
|
[68] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
|
|
to:atan2_16::@21
|
|
atan2_16::@21: scope:[atan2_16] from atan2_16::@12
|
|
[69] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1
|
|
to:atan2_16::@7
|
|
atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21
|
|
[70] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
|
|
[71] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
|
|
to:atan2_16::@9
|
|
atan2_16::@9: scope:[atan2_16] from atan2_16::@7
|
|
[72] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11
|
|
to:atan2_16::@8
|
|
atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9
|
|
[73] (word) atan2_16::return#0 ← phi( atan2_16::@7/(word) atan2_16::angle#11 atan2_16::@9/(word) atan2_16::angle#5 )
|
|
to:atan2_16::@return
|
|
atan2_16::@return: scope:[atan2_16] from atan2_16::@8
|
|
[74] return
|
|
to:@return
|
|
atan2_16::@11: scope:[atan2_16] from atan2_16::@10
|
|
[75] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2
|
|
[76] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3
|
|
[77] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3
|
|
to:atan2_16::@13
|
|
atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14
|
|
[78] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 )
|
|
[78] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 )
|
|
[78] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 )
|
|
[79] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14
|
|
to:atan2_16::@15
|
|
atan2_16::@15: scope:[atan2_16] from atan2_16::@13
|
|
[80] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17
|
|
to:atan2_16::@16
|
|
atan2_16::@16: scope:[atan2_16] from atan2_16::@15
|
|
[81] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1
|
|
[82] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1
|
|
to:atan2_16::@17
|
|
atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16
|
|
[83] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 )
|
|
[83] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 )
|
|
[84] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18
|
|
to:atan2_16::@20
|
|
atan2_16::@20: scope:[atan2_16] from atan2_16::@17
|
|
[85] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5
|
|
[86] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5
|
|
[87] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1
|
|
[88] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23)
|
|
to:atan2_16::@19
|
|
atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20
|
|
[89] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 )
|
|
[89] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
|
|
[89] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 )
|
|
[90] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2
|
|
[91] if((byte) atan2_16::i#1==(const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12
|
|
to:atan2_16::@10
|
|
atan2_16::@18: scope:[atan2_16] from atan2_16::@17
|
|
[92] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5
|
|
[93] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5
|
|
[94] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1
|
|
[95] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22)
|
|
to:atan2_16::@19
|
|
atan2_16::@14: scope:[atan2_16] from atan2_16::@13
|
|
[96] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2
|
|
[97] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2
|
|
[98] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2
|
|
to:atan2_16::@13
|
|
atan2_16::@4: scope:[atan2_16] from atan2_16::@3
|
|
[99] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0
|
|
to:atan2_16::@6
|
|
atan2_16::@1: scope:[atan2_16] from atan2_16
|
|
[100] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0
|
|
to:atan2_16::@3
|
|
|
|
(void()) init_font_hex((byte*) init_font_hex::charset)
|
|
init_font_hex: scope:[init_font_hex] from main
|
|
[101] phi()
|
|
to:init_font_hex::@1
|
|
init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5
|
|
[102] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 )
|
|
[102] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte*) FONT_HEX_PROTO init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 )
|
|
[102] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const nomodify byte*) CHARSET init_font_hex::@5/(byte*) init_font_hex::charset#0 )
|
|
to:init_font_hex::@2
|
|
init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4
|
|
[103] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 )
|
|
[103] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte*) FONT_HEX_PROTO init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 )
|
|
[103] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 )
|
|
[104] *((byte*) init_font_hex::charset#2) ← (byte) 0
|
|
to:init_font_hex::@3
|
|
init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3
|
|
[105] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 )
|
|
[105] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 )
|
|
[106] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4
|
|
[107] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1
|
|
[108] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1
|
|
[109] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2
|
|
[110] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5
|
|
[111] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2
|
|
[112] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3
|
|
to:init_font_hex::@4
|
|
init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3
|
|
[113] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0
|
|
[114] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2
|
|
[115] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0
|
|
[116] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5
|
|
[117] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8
|
|
[118] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4
|
|
[119] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2
|
|
to:init_font_hex::@5
|
|
init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4
|
|
[120] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5
|
|
[121] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6
|
|
[122] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1
|
|
to:init_font_hex::@return
|
|
init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5
|
|
[123] return
|
|
to:@return
|
|
|
|
|
|
VARIABLE REGISTER WEIGHTS
|
|
(byte) MOS6526_CIA::INTERRUPT
|
|
(byte) MOS6526_CIA::PORT_A
|
|
(byte) MOS6526_CIA::PORT_A_DDR
|
|
(byte) MOS6526_CIA::PORT_B
|
|
(byte) MOS6526_CIA::PORT_B_DDR
|
|
(byte) MOS6526_CIA::SERIAL_DATA
|
|
(word) MOS6526_CIA::TIMER_A
|
|
(byte) MOS6526_CIA::TIMER_A_CONTROL
|
|
(word) MOS6526_CIA::TIMER_B
|
|
(byte) MOS6526_CIA::TIMER_B_CONTROL
|
|
(byte) MOS6526_CIA::TOD_10THS
|
|
(byte) MOS6526_CIA::TOD_HOURS
|
|
(byte) MOS6526_CIA::TOD_MIN
|
|
(byte) MOS6526_CIA::TOD_SEC
|
|
(byte) MOS6569_VICII::BG_COLOR
|
|
(byte) MOS6569_VICII::BG_COLOR1
|
|
(byte) MOS6569_VICII::BG_COLOR2
|
|
(byte) MOS6569_VICII::BG_COLOR3
|
|
(byte) MOS6569_VICII::BORDER_COLOR
|
|
(byte) MOS6569_VICII::CONTROL1
|
|
(byte) MOS6569_VICII::CONTROL2
|
|
(byte) MOS6569_VICII::IRQ_ENABLE
|
|
(byte) MOS6569_VICII::IRQ_STATUS
|
|
(byte) MOS6569_VICII::LIGHTPEN_X
|
|
(byte) MOS6569_VICII::LIGHTPEN_Y
|
|
(byte) MOS6569_VICII::MEMORY
|
|
(byte) MOS6569_VICII::RASTER
|
|
(byte) MOS6569_VICII::SPRITE0_COLOR
|
|
(byte) MOS6569_VICII::SPRITE0_X
|
|
(byte) MOS6569_VICII::SPRITE0_Y
|
|
(byte) MOS6569_VICII::SPRITE1_COLOR
|
|
(byte) MOS6569_VICII::SPRITE1_X
|
|
(byte) MOS6569_VICII::SPRITE1_Y
|
|
(byte) MOS6569_VICII::SPRITE2_COLOR
|
|
(byte) MOS6569_VICII::SPRITE2_X
|
|
(byte) MOS6569_VICII::SPRITE2_Y
|
|
(byte) MOS6569_VICII::SPRITE3_COLOR
|
|
(byte) MOS6569_VICII::SPRITE3_X
|
|
(byte) MOS6569_VICII::SPRITE3_Y
|
|
(byte) MOS6569_VICII::SPRITE4_COLOR
|
|
(byte) MOS6569_VICII::SPRITE4_X
|
|
(byte) MOS6569_VICII::SPRITE4_Y
|
|
(byte) MOS6569_VICII::SPRITE5_COLOR
|
|
(byte) MOS6569_VICII::SPRITE5_X
|
|
(byte) MOS6569_VICII::SPRITE5_Y
|
|
(byte) MOS6569_VICII::SPRITE6_COLOR
|
|
(byte) MOS6569_VICII::SPRITE6_X
|
|
(byte) MOS6569_VICII::SPRITE6_Y
|
|
(byte) MOS6569_VICII::SPRITE7_COLOR
|
|
(byte) MOS6569_VICII::SPRITE7_X
|
|
(byte) MOS6569_VICII::SPRITE7_Y
|
|
(byte) MOS6569_VICII::SPRITES_BG_COLLISION
|
|
(byte) MOS6569_VICII::SPRITES_COLLISION
|
|
(byte) MOS6569_VICII::SPRITES_ENABLE
|
|
(byte) MOS6569_VICII::SPRITES_EXPAND_X
|
|
(byte) MOS6569_VICII::SPRITES_EXPAND_Y
|
|
(byte) MOS6569_VICII::SPRITES_MC
|
|
(byte) MOS6569_VICII::SPRITES_MCOLOR1
|
|
(byte) MOS6569_VICII::SPRITES_MCOLOR2
|
|
(byte) MOS6569_VICII::SPRITES_PRIORITY
|
|
(byte) MOS6569_VICII::SPRITES_XMSB
|
|
(byte) MOS6581_SID::CH1_ATTACK_DECAY
|
|
(byte) MOS6581_SID::CH1_CONTROL
|
|
(word) MOS6581_SID::CH1_FREQ
|
|
(word) MOS6581_SID::CH1_PULSE_WIDTH
|
|
(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE
|
|
(byte) MOS6581_SID::CH2_ATTACK_DECAY
|
|
(byte) MOS6581_SID::CH2_CONTROL
|
|
(word) MOS6581_SID::CH2_FREQ
|
|
(word) MOS6581_SID::CH2_PULSE_WIDTH
|
|
(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE
|
|
(byte) MOS6581_SID::CH3_ATTACK_DECAY
|
|
(byte) MOS6581_SID::CH3_CONTROL
|
|
(byte) MOS6581_SID::CH3_ENV
|
|
(word) MOS6581_SID::CH3_FREQ
|
|
(byte) MOS6581_SID::CH3_OSC
|
|
(word) MOS6581_SID::CH3_PULSE_WIDTH
|
|
(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE
|
|
(byte) MOS6581_SID::FILTER_CUTOFF_HIGH
|
|
(byte) MOS6581_SID::FILTER_CUTOFF_LOW
|
|
(byte) MOS6581_SID::FILTER_SETUP
|
|
(byte) MOS6581_SID::POT_X
|
|
(byte) MOS6581_SID::POT_Y
|
|
(byte) MOS6581_SID::VOLUME_FILTER_MODE
|
|
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
|
|
(signed word~) atan2_16::$2 20002.0
|
|
(byte~) atan2_16::$22 2.0000002E7
|
|
(byte~) atan2_16::$23 2.0000002E7
|
|
(signed word~) atan2_16::$7 20002.0
|
|
(word) atan2_16::angle
|
|
(word) atan2_16::angle#1 15001.5
|
|
(word) atan2_16::angle#11 20002.0
|
|
(word) atan2_16::angle#12 1904762.0952380951
|
|
(word) atan2_16::angle#13 1.3333334666666666E7
|
|
(word) atan2_16::angle#2 2.0000002E7
|
|
(word) atan2_16::angle#3 2.0000002E7
|
|
(word) atan2_16::angle#4 20002.0
|
|
(word) atan2_16::angle#5 20002.0
|
|
(word) atan2_16::angle#6 2.0010003E7
|
|
(byte) atan2_16::i
|
|
(byte) atan2_16::i#1 1.50000015E7
|
|
(byte) atan2_16::i#2 2083333.5416666665
|
|
(word) atan2_16::return
|
|
(word) atan2_16::return#0 7001.0
|
|
(word) atan2_16::return#2 2002.0
|
|
(byte) atan2_16::shift
|
|
(byte) atan2_16::shift#1 2.00000002E8
|
|
(byte) atan2_16::shift#2 8.000000125E7
|
|
(byte) atan2_16::shift#5 6666667.333333333
|
|
(signed word) atan2_16::x
|
|
(signed word) atan2_16::x#0 1079.078947368421
|
|
(signed word) atan2_16::xd
|
|
(signed word) atan2_16::xd#1 6.6666667333333336E7
|
|
(signed word) atan2_16::xd#10 1.0000001E7
|
|
(signed word) atan2_16::xd#2 1.0000001E7
|
|
(signed word) atan2_16::xd#3 7.666666833333333E7
|
|
(signed word) atan2_16::xd#5 1.0000001E7
|
|
(signed word) atan2_16::xi
|
|
(signed word) atan2_16::xi#0 30003.0
|
|
(signed word) atan2_16::xi#1 5000000.5
|
|
(signed word) atan2_16::xi#13 20002.0
|
|
(signed word) atan2_16::xi#2 5000000.5
|
|
(signed word) atan2_16::xi#3 2667333.6666666665
|
|
(signed word) atan2_16::xi#8 1.0000001E7
|
|
(signed word) atan2_16::y
|
|
(signed word) atan2_16::y#0 1025.125
|
|
(signed word) atan2_16::yd
|
|
(signed word) atan2_16::yd#1 1.00000001E8
|
|
(signed word) atan2_16::yd#10 2.0000002E7
|
|
(signed word) atan2_16::yd#2 2.0000002E7
|
|
(signed word) atan2_16::yd#3 4.6000001E7
|
|
(signed word) atan2_16::yd#5 2.0000002E7
|
|
(signed word) atan2_16::yi
|
|
(signed word) atan2_16::yi#0 6000.6
|
|
(signed word) atan2_16::yi#1 6666667.333333333
|
|
(signed word) atan2_16::yi#16 20002.0
|
|
(signed word) atan2_16::yi#2 6666667.333333333
|
|
(signed word) atan2_16::yi#3 3530000.4117647056
|
|
(signed word) atan2_16::yi#8 1.0000001E7
|
|
(byte()) diff((byte) diff::bb1 , (byte) diff::bb2)
|
|
(byte~) diff::$2 20002.0
|
|
(byte~) diff::$4 20002.0
|
|
(byte) diff::bb1
|
|
(byte) diff::bb1#0 10334.666666666666
|
|
(byte) diff::bb2
|
|
(byte) diff::bb2#0 15502.0
|
|
(byte) diff::return
|
|
(byte) diff::return#0 2002.0
|
|
(byte) diff::return#1 7001.0
|
|
(void()) init_font_hex((byte*) init_font_hex::charset)
|
|
(byte~) init_font_hex::$0 100001.0
|
|
(byte~) init_font_hex::$1 200002.0
|
|
(byte~) init_font_hex::$2 200002.0
|
|
(byte) init_font_hex::c
|
|
(byte) init_font_hex::c#1 1501.5
|
|
(byte) init_font_hex::c#6 105.36842105263158
|
|
(byte) init_font_hex::c1
|
|
(byte) init_font_hex::c1#1 15001.5
|
|
(byte) init_font_hex::c1#4 1333.4666666666667
|
|
(byte*) init_font_hex::charset
|
|
(byte*) init_font_hex::charset#0 3500.5
|
|
(byte*) init_font_hex::charset#2 10786.214285714286
|
|
(byte*) init_font_hex::charset#5 2002.0
|
|
(byte) init_font_hex::i
|
|
(byte) init_font_hex::i#1 150001.5
|
|
(byte) init_font_hex::i#2 66667.33333333333
|
|
(byte) init_font_hex::idx
|
|
(byte) init_font_hex::idx#2 55001.0
|
|
(byte) init_font_hex::idx#3 20002.0
|
|
(byte) init_font_hex::idx#5 60000.600000000006
|
|
(byte*) init_font_hex::proto_hi
|
|
(byte*) init_font_hex::proto_hi#1 667.3333333333334
|
|
(byte*) init_font_hex::proto_hi#6 5666.833333333334
|
|
(byte*) init_font_hex::proto_lo
|
|
(byte*) init_font_hex::proto_lo#1 5000.5
|
|
(byte*) init_font_hex::proto_lo#4 9230.999999999998
|
|
(void()) main()
|
|
(word~) main::$4 2002.0
|
|
(byte~) main::$6 2002.0
|
|
(byte~) main::$7 2002.0
|
|
(byte) main::ang_w
|
|
(byte) main::ang_w#0 429.0
|
|
(word) main::angle_w
|
|
(word) main::angle_w#0 2002.0
|
|
(word) main::diff_sum
|
|
(word) main::diff_sum#1 234.8888888888889
|
|
(word) main::diff_sum#2 140.2
|
|
(word) main::diff_sum#7 202.0
|
|
(byte*) main::screen
|
|
(byte*) main::screen#1 350.5
|
|
(byte*) main::screen#2 172.44444444444446
|
|
(byte*) main::screen#5 202.0
|
|
(byte*) main::screen_ref
|
|
(byte*) main::screen_ref#1 420.59999999999997
|
|
(byte*) main::screen_ref#2 216.05263157894734
|
|
(byte*) main::screen_ref#5 202.0
|
|
(byte*) main::toD0181_gfx
|
|
(byte) main::toD0181_return
|
|
(byte*) main::toD0181_screen
|
|
(signed byte) main::x
|
|
(signed byte) main::x#1 1501.5
|
|
(signed byte) main::x#2 100.1
|
|
(signed word) main::xw
|
|
(word) main::xw#0 500.5
|
|
(signed byte) main::y
|
|
(signed byte) main::y#1 151.5
|
|
(signed byte) main::y#4 8.782608695652174
|
|
(signed word) main::yw
|
|
(word) main::yw#0 500.5
|
|
(void()) print_char((byte) print_char::ch)
|
|
(byte) print_char::ch
|
|
(byte) print_char::ch#0 2002.0
|
|
(byte) print_char::ch#1 2002.0
|
|
(byte) print_char::ch#2 12003.0
|
|
(byte*) print_char_cursor
|
|
(byte*) print_char_cursor#18 11002.0
|
|
(byte*) print_char_cursor#19 1233.6666666666665
|
|
(byte*) print_char_cursor#24 367.33333333333337
|
|
(byte*) print_line_cursor
|
|
(byte*) print_screen
|
|
(void()) print_uchar((byte) print_uchar::b)
|
|
(byte~) print_uchar::$0 2002.0
|
|
(byte~) print_uchar::$2 2002.0
|
|
(byte) print_uchar::b
|
|
(byte) print_uchar::b#0 202.0
|
|
(byte) print_uchar::b#1 202.0
|
|
(byte) print_uchar::b#2 551.0
|
|
(void()) print_uint((word) print_uint::w)
|
|
(word) print_uint::w
|
|
(word) print_uint::w#0 71.0
|
|
|
|
Initial phi equivalence classes
|
|
[ main::y#4 main::y#1 ]
|
|
[ main::x#2 main::x#1 ]
|
|
[ main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ]
|
|
[ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ]
|
|
[ main::screen#2 main::screen#5 main::screen#1 ]
|
|
[ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
|
|
[ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
|
|
[ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ]
|
|
[ diff::return#1 diff::$4 diff::$2 ]
|
|
[ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
|
|
[ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
|
|
[ atan2_16::i#2 atan2_16::i#1 ]
|
|
[ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
|
|
[ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
|
|
[ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
|
|
[ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
|
|
[ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
|
|
[ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
|
|
[ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
[ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
|
|
[ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
|
|
[ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
[ init_font_hex::i#2 init_font_hex::i#1 ]
|
|
[ init_font_hex::idx#5 init_font_hex::idx#2 ]
|
|
Added variable main::xw#0 to live range equivalence class [ main::xw#0 ]
|
|
Added variable main::yw#0 to live range equivalence class [ main::yw#0 ]
|
|
Added variable atan2_16::x#0 to live range equivalence class [ atan2_16::x#0 ]
|
|
Added variable atan2_16::y#0 to live range equivalence class [ atan2_16::y#0 ]
|
|
Added variable atan2_16::return#2 to live range equivalence class [ atan2_16::return#2 ]
|
|
Added variable main::angle_w#0 to live range equivalence class [ main::angle_w#0 ]
|
|
Added variable main::$4 to live range equivalence class [ main::$4 ]
|
|
Added variable main::ang_w#0 to live range equivalence class [ main::ang_w#0 ]
|
|
Added variable diff::bb1#0 to live range equivalence class [ diff::bb1#0 ]
|
|
Added variable diff::bb2#0 to live range equivalence class [ diff::bb2#0 ]
|
|
Added variable diff::return#0 to live range equivalence class [ diff::return#0 ]
|
|
Added variable main::$6 to live range equivalence class [ main::$6 ]
|
|
Added variable main::$7 to live range equivalence class [ main::$7 ]
|
|
Added variable print_uint::w#0 to live range equivalence class [ print_uint::w#0 ]
|
|
Added variable print_uchar::$0 to live range equivalence class [ print_uchar::$0 ]
|
|
Added variable print_uchar::$2 to live range equivalence class [ print_uchar::$2 ]
|
|
Added variable atan2_16::$23 to live range equivalence class [ atan2_16::$23 ]
|
|
Added variable atan2_16::$22 to live range equivalence class [ atan2_16::$22 ]
|
|
Added variable init_font_hex::$0 to live range equivalence class [ init_font_hex::$0 ]
|
|
Added variable init_font_hex::$1 to live range equivalence class [ init_font_hex::$1 ]
|
|
Added variable init_font_hex::$2 to live range equivalence class [ init_font_hex::$2 ]
|
|
Added variable init_font_hex::idx#3 to live range equivalence class [ init_font_hex::idx#3 ]
|
|
Complete equivalence classes
|
|
[ main::y#4 main::y#1 ]
|
|
[ main::x#2 main::x#1 ]
|
|
[ main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ]
|
|
[ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ]
|
|
[ main::screen#2 main::screen#5 main::screen#1 ]
|
|
[ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
|
|
[ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
|
|
[ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ]
|
|
[ diff::return#1 diff::$4 diff::$2 ]
|
|
[ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
|
|
[ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
|
|
[ atan2_16::i#2 atan2_16::i#1 ]
|
|
[ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
|
|
[ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
|
|
[ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
|
|
[ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
|
|
[ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
|
|
[ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
|
|
[ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
[ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
|
|
[ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
|
|
[ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
[ init_font_hex::i#2 init_font_hex::i#1 ]
|
|
[ init_font_hex::idx#5 init_font_hex::idx#2 ]
|
|
[ main::xw#0 ]
|
|
[ main::yw#0 ]
|
|
[ atan2_16::x#0 ]
|
|
[ atan2_16::y#0 ]
|
|
[ atan2_16::return#2 ]
|
|
[ main::angle_w#0 ]
|
|
[ main::$4 ]
|
|
[ main::ang_w#0 ]
|
|
[ diff::bb1#0 ]
|
|
[ diff::bb2#0 ]
|
|
[ diff::return#0 ]
|
|
[ main::$6 ]
|
|
[ main::$7 ]
|
|
[ print_uint::w#0 ]
|
|
[ print_uchar::$0 ]
|
|
[ print_uchar::$2 ]
|
|
[ atan2_16::$23 ]
|
|
[ atan2_16::$22 ]
|
|
[ init_font_hex::$0 ]
|
|
[ init_font_hex::$1 ]
|
|
[ init_font_hex::$2 ]
|
|
[ init_font_hex::idx#3 ]
|
|
Allocated zp[1]:2 [ main::y#4 main::y#1 ]
|
|
Allocated zp[1]:3 [ main::x#2 main::x#1 ]
|
|
Allocated zp[2]:4 [ main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ]
|
|
Allocated zp[2]:6 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ]
|
|
Allocated zp[2]:8 [ main::screen#2 main::screen#5 main::screen#1 ]
|
|
Allocated zp[1]:10 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
|
|
Allocated zp[1]:11 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
|
|
Allocated zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ]
|
|
Allocated zp[1]:14 [ diff::return#1 diff::$4 diff::$2 ]
|
|
Allocated zp[2]:15 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
|
|
Allocated zp[2]:17 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
|
|
Allocated zp[1]:19 [ atan2_16::i#2 atan2_16::i#1 ]
|
|
Allocated zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
|
|
Allocated zp[2]:22 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
|
|
Allocated zp[1]:24 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
|
|
Allocated zp[2]:25 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
|
|
Allocated zp[2]:27 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
|
|
Allocated zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
|
|
Allocated zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Allocated zp[2]:32 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
|
|
Allocated zp[2]:34 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
|
|
Allocated zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
Allocated zp[1]:37 [ init_font_hex::i#2 init_font_hex::i#1 ]
|
|
Allocated zp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
|
|
Allocated zp[2]:39 [ main::xw#0 ]
|
|
Allocated zp[2]:41 [ main::yw#0 ]
|
|
Allocated zp[2]:43 [ atan2_16::x#0 ]
|
|
Allocated zp[2]:45 [ atan2_16::y#0 ]
|
|
Allocated zp[2]:47 [ atan2_16::return#2 ]
|
|
Allocated zp[2]:49 [ main::angle_w#0 ]
|
|
Allocated zp[2]:51 [ main::$4 ]
|
|
Allocated zp[1]:53 [ main::ang_w#0 ]
|
|
Allocated zp[1]:54 [ diff::bb1#0 ]
|
|
Allocated zp[1]:55 [ diff::bb2#0 ]
|
|
Allocated zp[1]:56 [ diff::return#0 ]
|
|
Allocated zp[1]:57 [ main::$6 ]
|
|
Allocated zp[1]:58 [ main::$7 ]
|
|
Allocated zp[2]:59 [ print_uint::w#0 ]
|
|
Allocated zp[1]:61 [ print_uchar::$0 ]
|
|
Allocated zp[1]:62 [ print_uchar::$2 ]
|
|
Allocated zp[1]:63 [ atan2_16::$23 ]
|
|
Allocated zp[1]:64 [ atan2_16::$22 ]
|
|
Allocated zp[1]:65 [ init_font_hex::$0 ]
|
|
Allocated zp[1]:66 [ init_font_hex::$1 ]
|
|
Allocated zp[1]:67 [ init_font_hex::$2 ]
|
|
Allocated zp[1]:68 [ init_font_hex::idx#3 ]
|
|
|
|
INITIAL ASM
|
|
Target platform is c64basic / MOS6502X
|
|
// File Comments
|
|
// Find atan2(x, y) using the CORDIC method
|
|
// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf
|
|
// Upstart
|
|
.pc = $801 "Basic"
|
|
:BasicUpstart(main)
|
|
.pc = $80d "Program"
|
|
// Global Constants & labels
|
|
// The number of iterations performed during 16-bit CORDIC atan2 calculation
|
|
.const CORDIC_ITERATIONS_16 = $f
|
|
.label D018 = $d018
|
|
// Color Ram
|
|
.label COLS = $d800
|
|
.label CHARSET = $2000
|
|
.label SCREEN = $2800
|
|
.label print_char_cursor = $c
|
|
// @begin
|
|
__bbegin:
|
|
// [1] phi from @begin to @1 [phi:@begin->@1]
|
|
__b1_from___bbegin:
|
|
jmp __b1
|
|
// @1
|
|
__b1:
|
|
// [2] call main
|
|
// [4] phi from @1 to main [phi:@1->main]
|
|
main_from___b1:
|
|
jsr main
|
|
// [3] phi from @1 to @end [phi:@1->@end]
|
|
__bend_from___b1:
|
|
jmp __bend
|
|
// @end
|
|
__bend:
|
|
// main
|
|
main: {
|
|
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
|
|
.label col00 = COLS+$c*$28+$13
|
|
.label __4 = $33
|
|
.label __6 = $39
|
|
.label __7 = $3a
|
|
.label xw = $27
|
|
.label yw = $29
|
|
.label angle_w = $31
|
|
.label ang_w = $35
|
|
.label diff_sum = 6
|
|
.label screen = 8
|
|
.label screen_ref = 4
|
|
.label x = 3
|
|
.label y = 2
|
|
// [5] call init_font_hex
|
|
// [101] phi from main to init_font_hex [phi:main->init_font_hex]
|
|
init_font_hex_from_main:
|
|
jsr init_font_hex
|
|
// [6] phi from main to main::toD0181 [phi:main->main::toD0181]
|
|
toD0181_from_main:
|
|
jmp toD0181
|
|
// main::toD0181
|
|
toD0181:
|
|
jmp __b6
|
|
// main::@6
|
|
__b6:
|
|
// [7] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2
|
|
lda #toD0181_return
|
|
sta D018
|
|
// [8] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
|
|
__b1_from___b6:
|
|
// [8] phi (byte*) main::screen#5 = (const nomodify byte*) SCREEN [phi:main::@6->main::@1#0] -- pbuz1=pbuc1
|
|
lda #<SCREEN
|
|
sta.z screen
|
|
lda #>SCREEN
|
|
sta.z screen+1
|
|
// [8] phi (word) main::diff_sum#7 = (word) 0 [phi:main::@6->main::@1#1] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z diff_sum
|
|
lda #>0
|
|
sta.z diff_sum+1
|
|
// [8] phi (byte*) main::screen_ref#5 = (const to_nomodify byte*) SCREEN_REF [phi:main::@6->main::@1#2] -- pbuz1=pbuc1
|
|
lda #<SCREEN_REF
|
|
sta.z screen_ref
|
|
lda #>SCREEN_REF
|
|
sta.z screen_ref+1
|
|
// [8] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@6->main::@1#3] -- vbsz1=vbsc1
|
|
lda #-$c
|
|
sta.z y
|
|
jmp __b1
|
|
// [8] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
|
|
__b1_from___b3:
|
|
// [8] phi (byte*) main::screen#5 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy
|
|
// [8] phi (word) main::diff_sum#7 = (word) main::diff_sum#1 [phi:main::@3->main::@1#1] -- register_copy
|
|
// [8] phi (byte*) main::screen_ref#5 = (byte*) main::screen_ref#1 [phi:main::@3->main::@1#2] -- register_copy
|
|
// [8] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#3] -- register_copy
|
|
jmp __b1
|
|
// main::@1
|
|
__b1:
|
|
// [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
|
__b2_from___b1:
|
|
// [9] phi (byte*) main::screen#2 = (byte*) main::screen#5 [phi:main::@1->main::@2#0] -- register_copy
|
|
// [9] phi (word) main::diff_sum#2 = (word) main::diff_sum#7 [phi:main::@1->main::@2#1] -- register_copy
|
|
// [9] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#5 [phi:main::@1->main::@2#2] -- register_copy
|
|
// [9] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#3] -- vbsz1=vbsc1
|
|
lda #-$13
|
|
sta.z x
|
|
jmp __b2
|
|
// [9] phi from main::@8 to main::@2 [phi:main::@8->main::@2]
|
|
__b2_from___b8:
|
|
// [9] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@8->main::@2#0] -- register_copy
|
|
// [9] phi (word) main::diff_sum#2 = (word) main::diff_sum#1 [phi:main::@8->main::@2#1] -- register_copy
|
|
// [9] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#1 [phi:main::@8->main::@2#2] -- register_copy
|
|
// [9] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@8->main::@2#3] -- register_copy
|
|
jmp __b2
|
|
// main::@2
|
|
__b2:
|
|
// [10] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1
|
|
lda.z x
|
|
ldy #0
|
|
sta.z xw+1
|
|
sty.z xw
|
|
// [11] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1
|
|
lda.z y
|
|
ldy #0
|
|
sta.z yw+1
|
|
sty.z yw
|
|
// [12] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 -- vwsz1=vwsz2
|
|
lda.z xw
|
|
sta.z atan2_16.x
|
|
lda.z xw+1
|
|
sta.z atan2_16.x+1
|
|
// [13] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 -- vwsz1=vwsz2
|
|
lda.z yw
|
|
sta.z atan2_16.y
|
|
lda.z yw+1
|
|
sta.z atan2_16.y+1
|
|
// [14] call atan2_16
|
|
jsr atan2_16
|
|
// [15] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2
|
|
lda.z atan2_16.return
|
|
sta.z atan2_16.return_1
|
|
lda.z atan2_16.return+1
|
|
sta.z atan2_16.return_1+1
|
|
jmp __b7
|
|
// main::@7
|
|
__b7:
|
|
// [16] (word) main::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2
|
|
lda.z atan2_16.return_1
|
|
sta.z angle_w
|
|
lda.z atan2_16.return_1+1
|
|
sta.z angle_w+1
|
|
// [17] (word~) main::$4 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1
|
|
lda #$80
|
|
clc
|
|
adc.z angle_w
|
|
sta.z __4
|
|
lda #0
|
|
adc.z angle_w+1
|
|
sta.z __4+1
|
|
// [18] (byte) main::ang_w#0 ← > (word~) main::$4 -- vbuz1=_hi_vwuz2
|
|
lda.z __4+1
|
|
sta.z ang_w
|
|
// [19] (byte) diff::bb1#0 ← (byte) main::ang_w#0 -- vbuz1=vbuz2
|
|
lda.z ang_w
|
|
sta.z diff.bb1
|
|
// [20] (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2) -- vbuz1=_deref_pbuz2
|
|
ldy #0
|
|
lda (screen_ref),y
|
|
sta.z diff.bb2
|
|
// [21] call diff
|
|
jsr diff
|
|
// [22] (byte) diff::return#0 ← (byte) diff::return#1 -- vbuz1=vbuz2
|
|
lda.z diff.return_1
|
|
sta.z diff.return
|
|
jmp __b8
|
|
// main::@8
|
|
__b8:
|
|
// [23] (byte~) main::$6 ← (byte) diff::return#0 -- vbuz1=vbuz2
|
|
lda.z diff.return
|
|
sta.z __6
|
|
// [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$6 -- vwuz1=vwuz1_plus_vbuz2
|
|
//*screen = (>angle_w)-angle_b;
|
|
//*screen = >angle_w;
|
|
lda.z __6
|
|
clc
|
|
adc.z diff_sum
|
|
sta.z diff_sum
|
|
bcc !+
|
|
inc.z diff_sum+1
|
|
!:
|
|
// [25] (byte~) main::$7 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2) -- vbuz1=vbuz2_minus__deref_pbuz3
|
|
lda.z ang_w
|
|
sec
|
|
ldy #0
|
|
sbc (screen_ref),y
|
|
sta.z __7
|
|
// [26] *((byte*) main::screen#2) ← (byte~) main::$7 -- _deref_pbuz1=vbuz2
|
|
lda.z __7
|
|
ldy #0
|
|
sta (screen),y
|
|
// [27] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
|
|
inc.z screen
|
|
bne !+
|
|
inc.z screen+1
|
|
!:
|
|
// [28] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 -- pbuz1=_inc_pbuz1
|
|
inc.z screen_ref
|
|
bne !+
|
|
inc.z screen_ref+1
|
|
!:
|
|
// [29] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1
|
|
inc.z x
|
|
// [30] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsz1_neq_vbsc1_then_la1
|
|
lda #$15
|
|
cmp.z x
|
|
bne __b2_from___b8
|
|
jmp __b3
|
|
// main::@3
|
|
__b3:
|
|
// [31] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1
|
|
inc.z y
|
|
// [32] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1
|
|
lda #$d
|
|
cmp.z y
|
|
bne __b1_from___b3
|
|
jmp __b4
|
|
// main::@4
|
|
__b4:
|
|
// [33] (word) print_uint::w#0 ← (word) main::diff_sum#1 -- vwuz1=vwuz2
|
|
lda.z diff_sum
|
|
sta.z print_uint.w
|
|
lda.z diff_sum+1
|
|
sta.z print_uint.w+1
|
|
// [34] call print_uint
|
|
jsr print_uint
|
|
jmp __b5
|
|
// main::@5
|
|
__b5:
|
|
// [35] *((const byte*) main::col00) ← ++ *((const byte*) main::col00) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc col00
|
|
jmp __b5
|
|
}
|
|
// print_uint
|
|
// Print a unsigned int as HEX
|
|
// print_uint(word zp($3b) w)
|
|
print_uint: {
|
|
.label w = $3b
|
|
// [36] (byte) print_uchar::b#0 ← > (word) print_uint::w#0 -- vbuz1=_hi_vwuz2
|
|
lda.z w+1
|
|
sta.z print_uchar.b
|
|
// [37] call print_uchar
|
|
// [41] phi from print_uint to print_uchar [phi:print_uint->print_uchar]
|
|
print_uchar_from_print_uint:
|
|
// [41] phi (byte*) print_char_cursor#24 = (byte*) 1024 [phi:print_uint->print_uchar#0] -- pbuz1=pbuc1
|
|
lda #<$400
|
|
sta.z print_char_cursor
|
|
lda #>$400
|
|
sta.z print_char_cursor+1
|
|
// [41] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy
|
|
jsr print_uchar
|
|
jmp __b1
|
|
// print_uint::@1
|
|
__b1:
|
|
// [38] (byte) print_uchar::b#1 ← < (word) print_uint::w#0 -- vbuz1=_lo_vwuz2
|
|
lda.z w
|
|
sta.z print_uchar.b
|
|
// [39] call print_uchar
|
|
// [41] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar]
|
|
print_uchar_from___b1:
|
|
// [41] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#19 [phi:print_uint::@1->print_uchar#0] -- register_copy
|
|
// [41] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy
|
|
jsr print_uchar
|
|
jmp __breturn
|
|
// print_uint::@return
|
|
__breturn:
|
|
// [40] return
|
|
rts
|
|
}
|
|
// print_uchar
|
|
// Print a char as HEX
|
|
// print_uchar(byte zp($a) b)
|
|
print_uchar: {
|
|
.label __0 = $3d
|
|
.label __2 = $3e
|
|
.label b = $a
|
|
// [42] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4 -- vbuz1=vbuz2_ror_4
|
|
lda.z b
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
sta.z __0
|
|
// [43] (byte) print_char::ch#0 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$0) -- vbuz1=pbuc1_derefidx_vbuz2
|
|
ldy.z __0
|
|
lda print_hextab,y
|
|
sta.z print_char.ch
|
|
// [44] call print_char
|
|
// Table of hexadecimal digits
|
|
// [49] phi from print_uchar to print_char [phi:print_uchar->print_char]
|
|
print_char_from_print_uchar:
|
|
// [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#24 [phi:print_uchar->print_char#0] -- register_copy
|
|
// [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy
|
|
jsr print_char
|
|
jmp __b1
|
|
// print_uchar::@1
|
|
__b1:
|
|
// [45] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f -- vbuz1=vbuz2_band_vbuc1
|
|
lda #$f
|
|
and.z b
|
|
sta.z __2
|
|
// [46] (byte) print_char::ch#1 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$2) -- vbuz1=pbuc1_derefidx_vbuz2
|
|
ldy.z __2
|
|
lda print_hextab,y
|
|
sta.z print_char.ch
|
|
// [47] call print_char
|
|
// [49] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char]
|
|
print_char_from___b1:
|
|
// [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#19 [phi:print_uchar::@1->print_char#0] -- register_copy
|
|
// [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy
|
|
jsr print_char
|
|
jmp __breturn
|
|
// print_uchar::@return
|
|
__breturn:
|
|
// [48] return
|
|
rts
|
|
}
|
|
// print_char
|
|
// Print a single char
|
|
// print_char(byte zp($b) ch)
|
|
print_char: {
|
|
.label ch = $b
|
|
// [50] *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2 -- _deref_pbuz1=vbuz2
|
|
lda.z ch
|
|
ldy #0
|
|
sta (print_char_cursor),y
|
|
// [51] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1
|
|
inc.z print_char_cursor
|
|
bne !+
|
|
inc.z print_char_cursor+1
|
|
!:
|
|
jmp __breturn
|
|
// print_char::@return
|
|
__breturn:
|
|
// [52] return
|
|
rts
|
|
}
|
|
// diff
|
|
// diff(byte zp($36) bb1, byte zp($37) bb2)
|
|
diff: {
|
|
.label __2 = $e
|
|
.label __4 = $e
|
|
.label bb1 = $36
|
|
.label bb2 = $37
|
|
.label return = $38
|
|
.label return_1 = $e
|
|
// [53] if((byte) diff::bb1#0<(byte) diff::bb2#0) goto diff::@1 -- vbuz1_lt_vbuz2_then_la1
|
|
lda.z bb1
|
|
cmp.z bb2
|
|
bcc __b1
|
|
jmp __b2
|
|
// diff::@2
|
|
__b2:
|
|
// [54] (byte~) diff::$2 ← (byte) diff::bb1#0 - (byte) diff::bb2#0 -- vbuz1=vbuz2_minus_vbuz3
|
|
lda.z bb1
|
|
sec
|
|
sbc.z bb2
|
|
sta.z __2
|
|
// [55] phi from diff::@1 diff::@2 to diff::@3 [phi:diff::@1/diff::@2->diff::@3]
|
|
__b3_from___b1:
|
|
__b3_from___b2:
|
|
// [55] phi (byte) diff::return#1 = (byte~) diff::$4 [phi:diff::@1/diff::@2->diff::@3#0] -- register_copy
|
|
jmp __b3
|
|
// diff::@3
|
|
__b3:
|
|
jmp __breturn
|
|
// diff::@return
|
|
__breturn:
|
|
// [56] return
|
|
rts
|
|
// diff::@1
|
|
__b1:
|
|
// [57] (byte~) diff::$4 ← (byte) diff::bb2#0 - (byte) diff::bb1#0 -- vbuz1=vbuz2_minus_vbuz3
|
|
lda.z bb2
|
|
sec
|
|
sbc.z bb1
|
|
sta.z __4
|
|
jmp __b3_from___b1
|
|
}
|
|
// atan2_16
|
|
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
|
|
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
|
|
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
|
|
// atan2_16(signed word zp($2b) x, signed word zp($2d) y)
|
|
atan2_16: {
|
|
.label __2 = $f
|
|
.label __7 = $11
|
|
.label __22 = $40
|
|
.label __23 = $3f
|
|
.label yi = $f
|
|
.label xi = $11
|
|
.label angle = $16
|
|
.label xd = $1b
|
|
.label yd = $19
|
|
.label shift = $18
|
|
.label angle_1 = $14
|
|
.label i = $13
|
|
.label return = $16
|
|
.label x = $2b
|
|
.label y = $2d
|
|
.label return_1 = $2f
|
|
// [58] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1
|
|
lda.z y+1
|
|
bpl __b1
|
|
jmp __b2
|
|
// atan2_16::@2
|
|
__b2:
|
|
// [59] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2
|
|
sec
|
|
lda #0
|
|
sbc.z y
|
|
sta.z __2
|
|
lda #0
|
|
sbc.z y+1
|
|
sta.z __2+1
|
|
// [60] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
|
|
__b3_from___b1:
|
|
__b3_from___b2:
|
|
// [60] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy
|
|
jmp __b3
|
|
// atan2_16::@3
|
|
__b3:
|
|
// [61] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1
|
|
lda.z x+1
|
|
bpl __b4
|
|
jmp __b5
|
|
// atan2_16::@5
|
|
__b5:
|
|
// [62] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2
|
|
sec
|
|
lda #0
|
|
sbc.z x
|
|
sta.z __7
|
|
lda #0
|
|
sbc.z x+1
|
|
sta.z __7+1
|
|
// [63] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
|
|
__b6_from___b4:
|
|
__b6_from___b5:
|
|
// [63] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy
|
|
jmp __b6
|
|
// atan2_16::@6
|
|
__b6:
|
|
// [64] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
|
|
__b10_from___b6:
|
|
// [64] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z angle_1
|
|
lda #>0
|
|
sta.z angle_1+1
|
|
// [64] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z i
|
|
// [64] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
|
|
// [64] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy
|
|
jmp __b10
|
|
// atan2_16::@10
|
|
__b10:
|
|
// [65] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1
|
|
lda.z yi+1
|
|
bne __b11
|
|
lda.z yi
|
|
bne __b11
|
|
// [66] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
|
|
__b12_from___b10:
|
|
__b12_from___b19:
|
|
// [66] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy
|
|
jmp __b12
|
|
// atan2_16::@12
|
|
__b12:
|
|
// [67] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1
|
|
lda.z angle_1+1
|
|
lsr
|
|
sta.z angle+1
|
|
lda.z angle_1
|
|
ror
|
|
sta.z angle
|
|
// [68] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1
|
|
lda.z x+1
|
|
bpl __b7_from___b12
|
|
jmp __b21
|
|
// atan2_16::@21
|
|
__b21:
|
|
// [69] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
|
|
sec
|
|
lda #<$8000
|
|
sbc.z angle
|
|
sta.z angle
|
|
lda #>$8000
|
|
sbc.z angle+1
|
|
sta.z angle+1
|
|
// [70] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
|
|
__b7_from___b12:
|
|
__b7_from___b21:
|
|
// [70] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy
|
|
jmp __b7
|
|
// atan2_16::@7
|
|
__b7:
|
|
// [71] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1
|
|
lda.z y+1
|
|
bpl __b8_from___b7
|
|
jmp __b9
|
|
// atan2_16::@9
|
|
__b9:
|
|
// [72] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1
|
|
sec
|
|
lda #0
|
|
sbc.z angle
|
|
sta.z angle
|
|
lda #0
|
|
sbc.z angle+1
|
|
sta.z angle+1
|
|
// [73] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
|
|
__b8_from___b7:
|
|
__b8_from___b9:
|
|
// [73] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy
|
|
jmp __b8
|
|
// atan2_16::@8
|
|
__b8:
|
|
jmp __breturn
|
|
// atan2_16::@return
|
|
__breturn:
|
|
// [74] return
|
|
rts
|
|
// atan2_16::@11
|
|
__b11:
|
|
// [75] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2
|
|
lda.z i
|
|
sta.z shift
|
|
// [76] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2
|
|
lda.z xi
|
|
sta.z xd
|
|
lda.z xi+1
|
|
sta.z xd+1
|
|
// [77] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2
|
|
lda.z yi
|
|
sta.z yd
|
|
lda.z yi+1
|
|
sta.z yd+1
|
|
// [78] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
|
|
__b13_from___b11:
|
|
__b13_from___b14:
|
|
// [78] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy
|
|
// [78] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy
|
|
// [78] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy
|
|
jmp __b13
|
|
// atan2_16::@13
|
|
__b13:
|
|
// [79] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1
|
|
lda.z shift
|
|
cmp #2
|
|
bcs __b14
|
|
jmp __b15
|
|
// atan2_16::@15
|
|
__b15:
|
|
// [80] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1
|
|
lda #0
|
|
cmp.z shift
|
|
beq __b17_from___b15
|
|
jmp __b16
|
|
// atan2_16::@16
|
|
__b16:
|
|
// [81] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1
|
|
lda.z xd+1
|
|
cmp #$80
|
|
ror.z xd+1
|
|
ror.z xd
|
|
// [82] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1
|
|
lda.z yd+1
|
|
cmp #$80
|
|
ror.z yd+1
|
|
ror.z yd
|
|
// [83] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
|
|
__b17_from___b15:
|
|
__b17_from___b16:
|
|
// [83] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy
|
|
// [83] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy
|
|
jmp __b17
|
|
// atan2_16::@17
|
|
__b17:
|
|
// [84] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1
|
|
lda.z yi+1
|
|
bpl __b18
|
|
jmp __b20
|
|
// atan2_16::@20
|
|
__b20:
|
|
// [85] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2
|
|
lda.z xi
|
|
sec
|
|
sbc.z yd
|
|
sta.z xi
|
|
lda.z xi+1
|
|
sbc.z yd+1
|
|
sta.z xi+1
|
|
// [86] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2
|
|
lda.z yi
|
|
clc
|
|
adc.z xd
|
|
sta.z yi
|
|
lda.z yi+1
|
|
adc.z xd+1
|
|
sta.z yi+1
|
|
// [87] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
|
|
lda.z i
|
|
asl
|
|
sta.z __23
|
|
// [88] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2
|
|
ldy.z __23
|
|
sec
|
|
lda.z angle_1
|
|
sbc CORDIC_ATAN2_ANGLES_16,y
|
|
sta.z angle_1
|
|
lda.z angle_1+1
|
|
sbc CORDIC_ATAN2_ANGLES_16+1,y
|
|
sta.z angle_1+1
|
|
// [89] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
|
|
__b19_from___b18:
|
|
__b19_from___b20:
|
|
// [89] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy
|
|
// [89] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
|
|
// [89] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy
|
|
jmp __b19
|
|
// atan2_16::@19
|
|
__b19:
|
|
// [90] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1
|
|
inc.z i
|
|
// [91] if((byte) atan2_16::i#1==(const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1
|
|
lda #CORDIC_ITERATIONS_16-1+1
|
|
cmp.z i
|
|
beq __b12_from___b19
|
|
// [64] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
|
|
__b10_from___b19:
|
|
// [64] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
|
|
// [64] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
|
|
// [64] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
|
|
// [64] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy
|
|
jmp __b10
|
|
// atan2_16::@18
|
|
__b18:
|
|
// [92] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2
|
|
lda.z xi
|
|
clc
|
|
adc.z yd
|
|
sta.z xi
|
|
lda.z xi+1
|
|
adc.z yd+1
|
|
sta.z xi+1
|
|
// [93] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2
|
|
lda.z yi
|
|
sec
|
|
sbc.z xd
|
|
sta.z yi
|
|
lda.z yi+1
|
|
sbc.z xd+1
|
|
sta.z yi+1
|
|
// [94] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
|
|
lda.z i
|
|
asl
|
|
sta.z __22
|
|
// [95] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2
|
|
ldy.z __22
|
|
clc
|
|
lda.z angle_1
|
|
adc CORDIC_ATAN2_ANGLES_16,y
|
|
sta.z angle_1
|
|
lda.z angle_1+1
|
|
adc CORDIC_ATAN2_ANGLES_16+1,y
|
|
sta.z angle_1+1
|
|
jmp __b19_from___b18
|
|
// atan2_16::@14
|
|
__b14:
|
|
// [96] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2
|
|
lda.z xd+1
|
|
cmp #$80
|
|
ror.z xd+1
|
|
ror.z xd
|
|
lda.z xd+1
|
|
cmp #$80
|
|
ror.z xd+1
|
|
ror.z xd
|
|
// [97] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2
|
|
lda.z yd+1
|
|
cmp #$80
|
|
ror.z yd+1
|
|
ror.z yd
|
|
lda.z yd+1
|
|
cmp #$80
|
|
ror.z yd+1
|
|
ror.z yd
|
|
// [98] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2
|
|
dec.z shift
|
|
dec.z shift
|
|
jmp __b13_from___b14
|
|
// atan2_16::@4
|
|
__b4:
|
|
// [99] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2
|
|
lda.z x
|
|
sta.z xi
|
|
lda.z x+1
|
|
sta.z xi+1
|
|
jmp __b6_from___b4
|
|
// atan2_16::@1
|
|
__b1:
|
|
// [100] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2
|
|
lda.z y
|
|
sta.z yi
|
|
lda.z y+1
|
|
sta.z yi+1
|
|
jmp __b3_from___b1
|
|
}
|
|
// init_font_hex
|
|
// Make charset from proto chars
|
|
// init_font_hex(byte* zp($20) charset)
|
|
init_font_hex: {
|
|
.label __0 = $41
|
|
.label __1 = $42
|
|
.label __2 = $43
|
|
.label idx = $26
|
|
.label i = $25
|
|
.label idx_1 = $44
|
|
.label proto_lo = $22
|
|
.label charset = $20
|
|
.label c1 = $24
|
|
.label proto_hi = $1d
|
|
.label c = $1f
|
|
// [102] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1]
|
|
__b1_from_init_font_hex:
|
|
// [102] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z c
|
|
// [102] phi (byte*) init_font_hex::proto_hi#6 = (const byte*) FONT_HEX_PROTO [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1
|
|
lda #<FONT_HEX_PROTO
|
|
sta.z proto_hi
|
|
lda #>FONT_HEX_PROTO
|
|
sta.z proto_hi+1
|
|
// [102] phi (byte*) init_font_hex::charset#5 = (const nomodify byte*) CHARSET [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1
|
|
lda #<CHARSET
|
|
sta.z charset
|
|
lda #>CHARSET
|
|
sta.z charset+1
|
|
jmp __b1
|
|
// [102] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1]
|
|
__b1_from___b5:
|
|
// [102] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy
|
|
// [102] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy
|
|
// [102] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy
|
|
jmp __b1
|
|
// init_font_hex::@1
|
|
__b1:
|
|
// [103] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2]
|
|
__b2_from___b1:
|
|
// [103] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z c1
|
|
// [103] phi (byte*) init_font_hex::proto_lo#4 = (const byte*) FONT_HEX_PROTO [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1
|
|
lda #<FONT_HEX_PROTO
|
|
sta.z proto_lo
|
|
lda #>FONT_HEX_PROTO
|
|
sta.z proto_lo+1
|
|
// [103] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy
|
|
jmp __b2
|
|
// [103] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2]
|
|
__b2_from___b4:
|
|
// [103] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy
|
|
// [103] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy
|
|
// [103] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy
|
|
jmp __b2
|
|
// init_font_hex::@2
|
|
__b2:
|
|
// [104] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1
|
|
lda #0
|
|
ldy #0
|
|
sta (charset),y
|
|
// [105] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3]
|
|
__b3_from___b2:
|
|
// [105] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1
|
|
lda #1
|
|
sta.z idx
|
|
// [105] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z i
|
|
jmp __b3
|
|
// [105] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3]
|
|
__b3_from___b3:
|
|
// [105] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy
|
|
// [105] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy
|
|
jmp __b3
|
|
// init_font_hex::@3
|
|
__b3:
|
|
// [106] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuz3_rol_4
|
|
ldy.z i
|
|
lda (proto_hi),y
|
|
asl
|
|
asl
|
|
asl
|
|
asl
|
|
sta.z __0
|
|
// [107] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuz1=pbuz2_derefidx_vbuz3_rol_1
|
|
ldy.z i
|
|
lda (proto_lo),y
|
|
asl
|
|
sta.z __1
|
|
// [108] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuz1=vbuz2_bor_vbuz3
|
|
lda.z __0
|
|
ora.z __1
|
|
sta.z __2
|
|
// [109] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuz3
|
|
lda.z __2
|
|
ldy.z idx
|
|
sta (charset),y
|
|
// [110] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1
|
|
inc.z idx
|
|
// [111] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuz1=_inc_vbuz1
|
|
inc.z i
|
|
// [112] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuz1_neq_vbuc1_then_la1
|
|
lda #5
|
|
cmp.z i
|
|
bne __b3_from___b3
|
|
jmp __b4
|
|
// init_font_hex::@4
|
|
__b4:
|
|
// [113] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1
|
|
lda #0
|
|
ldy.z idx
|
|
sta (charset),y
|
|
// [114] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuz1=_inc_vbuz2
|
|
ldy.z idx
|
|
iny
|
|
sty.z idx_1
|
|
// [115] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1
|
|
lda #0
|
|
ldy.z idx_1
|
|
sta (charset),y
|
|
// [116] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #5
|
|
clc
|
|
adc.z proto_lo
|
|
sta.z proto_lo
|
|
bcc !+
|
|
inc.z proto_lo+1
|
|
!:
|
|
// [117] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #8
|
|
clc
|
|
adc.z charset
|
|
sta.z charset
|
|
bcc !+
|
|
inc.z charset+1
|
|
!:
|
|
// [118] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1
|
|
inc.z c1
|
|
// [119] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1
|
|
lda #$10
|
|
cmp.z c1
|
|
bne __b2_from___b4
|
|
jmp __b5
|
|
// init_font_hex::@5
|
|
__b5:
|
|
// [120] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #5
|
|
clc
|
|
adc.z proto_hi
|
|
sta.z proto_hi
|
|
bcc !+
|
|
inc.z proto_hi+1
|
|
!:
|
|
// [121] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1
|
|
inc.z c
|
|
// [122] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1
|
|
lda #$10
|
|
cmp.z c
|
|
bne __b1_from___b5
|
|
jmp __breturn
|
|
// init_font_hex::@return
|
|
__breturn:
|
|
// [123] return
|
|
rts
|
|
}
|
|
// File Data
|
|
// Bit patterns for symbols 0-f (3x5 pixels) used in font hex
|
|
FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4
|
|
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
|
|
CORDIC_ATAN2_ANGLES_16:
|
|
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
|
|
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
|
|
|
print_hextab: .text "0123456789abcdef"
|
|
SCREEN_REF:
|
|
.for(var y=-12;y<=12;y++)
|
|
.for(var x=-19;x<=20;x++)
|
|
.byte round(256*atan2(y, x)/PI/2)
|
|
|
|
|
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
|
Statement [7] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a
|
|
Statement [10] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::xw#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::xw#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte y
|
|
Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::y#4 main::y#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::x#2 main::x#1 ]
|
|
Statement [11] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::xw#0 main::yw#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::xw#0 main::yw#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte y
|
|
Statement [12] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::yw#0 atan2_16::x#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::yw#0 atan2_16::x#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::y#4 main::y#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::x#2 main::x#1 ]
|
|
Statement [13] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [15] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::return#2 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::return#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [16] (word) main::angle_w#0 ← (word) atan2_16::return#2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::angle_w#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::angle_w#0 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) always clobbers reg byte a
|
|
Statement [17] (word~) main::$4 ← (word) main::angle_w#0 + (byte) $80 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::$4 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::$4 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) always clobbers reg byte a
|
|
Statement [20] (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2) [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::bb1#0 diff::bb2#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::bb1#0 diff::bb2#0 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) always clobbers reg byte a reg byte y
|
|
Removing always clobbered register reg byte a as potential for zp[1]:53 [ main::ang_w#0 ]
|
|
Removing always clobbered register reg byte y as potential for zp[1]:53 [ main::ang_w#0 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:54 [ diff::bb1#0 ]
|
|
Removing always clobbered register reg byte y as potential for zp[1]:54 [ diff::bb1#0 ]
|
|
Statement [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$6 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::ang_w#0 ] ( main:2 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::ang_w#0 ] { } ) always clobbers reg byte a
|
|
Statement [25] (byte~) main::$7 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2) [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::$7 ] ( main:2 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::$7 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [26] *((byte*) main::screen#2) ← (byte~) main::$7 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 ] ( main:2 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 ] { } ) always clobbers reg byte y
|
|
Statement [33] (word) print_uint::w#0 ← (word) main::diff_sum#1 [ print_uint::w#0 ] ( main:2 [ print_uint::w#0 ] { { print_uint::w#0 = main::diff_sum#1 } } ) always clobbers reg byte a
|
|
Statement [42] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4 [ print_uchar::b#2 print_char_cursor#24 print_uchar::$0 ] ( main:2::print_uint:34::print_uchar:37 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#24 print_uchar::$0 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#24 } } main:2::print_uint:34::print_uchar:39 [ print_uchar::b#2 print_char_cursor#24 print_uchar::$0 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#0 = print_char::ch#2 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:10 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
|
|
Statement [45] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f [ print_char_cursor#19 print_uchar::$2 ] ( main:2::print_uint:34::print_uchar:37 [ print_uint::w#0 print_char_cursor#19 print_uchar::$2 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#19 } } main:2::print_uint:34::print_uchar:39 [ print_char_cursor#19 print_uchar::$2 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#1 = print_char::ch#2 } } ) always clobbers reg byte a
|
|
Statement [50] *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2 [ print_char_cursor#18 ] ( main:2::print_uint:34::print_uchar:37::print_char:44 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#24 } } main:2::print_uint:34::print_uchar:39::print_char:44 [ print_uchar::b#2 print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#0 = print_char::ch#2 } } main:2::print_uint:34::print_uchar:37::print_char:47 [ print_uint::w#0 print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#19 } } main:2::print_uint:34::print_uchar:39::print_char:47 [ print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#1 = print_char::ch#2 } } ) always clobbers reg byte y
|
|
Removing always clobbered register reg byte y as potential for zp[1]:10 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
|
|
Statement [54] (byte~) diff::$2 ← (byte) diff::bb1#0 - (byte) diff::bb2#0 [ diff::$2 ] ( main:2::diff:21 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::$2 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) always clobbers reg byte a
|
|
Statement [57] (byte~) diff::$4 ← (byte) diff::bb2#0 - (byte) diff::bb1#0 [ diff::$4 ] ( main:2::diff:21 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::$4 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) always clobbers reg byte a
|
|
Statement [58] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [59] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [61] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [62] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [65] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:19 [ atan2_16::i#2 atan2_16::i#1 ]
|
|
Statement [67] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [68] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [69] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::y#0 atan2_16::angle#4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [71] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::angle#11 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [72] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::angle#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [76] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:24 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
|
|
Statement [77] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [81] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [82] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [84] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [85] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [86] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [87] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [88] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [92] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [93] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [94] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [95] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [96] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [97] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [99] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [100] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [104] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] { } ) always clobbers reg byte a reg byte y
|
|
Removing always clobbered register reg byte a as potential for zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
Statement [106] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:37 [ init_font_hex::i#2 init_font_hex::i#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
|
|
Statement [107] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] { } ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp[1]:65 [ init_font_hex::$0 ]
|
|
Statement [113] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] { } ) always clobbers reg byte a
|
|
Statement [115] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] { } ) always clobbers reg byte a
|
|
Statement [116] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] { } ) always clobbers reg byte a
|
|
Statement [117] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] { } ) always clobbers reg byte a
|
|
Statement [120] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:2::init_font_hex:5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] { } ) always clobbers reg byte a
|
|
Statement [7] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a
|
|
Statement [10] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::xw#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::xw#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a reg byte y
|
|
Statement [11] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::xw#0 main::yw#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::xw#0 main::yw#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a reg byte y
|
|
Statement [12] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::yw#0 atan2_16::x#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::yw#0 atan2_16::x#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [13] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [15] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::return#2 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::return#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [16] (word) main::angle_w#0 ← (word) atan2_16::return#2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::angle_w#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::angle_w#0 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) always clobbers reg byte a
|
|
Statement [17] (word~) main::$4 ← (word) main::angle_w#0 + (byte) $80 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::$4 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::$4 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) always clobbers reg byte a
|
|
Statement [20] (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2) [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::bb1#0 diff::bb2#0 ] ( main:2 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::bb1#0 diff::bb2#0 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) always clobbers reg byte a reg byte y
|
|
Statement [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$6 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::ang_w#0 ] ( main:2 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::ang_w#0 ] { } ) always clobbers reg byte a
|
|
Statement [25] (byte~) main::$7 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2) [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::$7 ] ( main:2 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 main::$7 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [26] *((byte*) main::screen#2) ← (byte~) main::$7 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 ] ( main:2 [ main::y#4 main::diff_sum#1 main::x#2 main::screen_ref#2 main::screen#2 ] { } ) always clobbers reg byte y
|
|
Statement [33] (word) print_uint::w#0 ← (word) main::diff_sum#1 [ print_uint::w#0 ] ( main:2 [ print_uint::w#0 ] { { print_uint::w#0 = main::diff_sum#1 } } ) always clobbers reg byte a
|
|
Statement [42] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4 [ print_uchar::b#2 print_char_cursor#24 print_uchar::$0 ] ( main:2::print_uint:34::print_uchar:37 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#24 print_uchar::$0 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#24 } } main:2::print_uint:34::print_uchar:39 [ print_uchar::b#2 print_char_cursor#24 print_uchar::$0 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#0 = print_char::ch#2 } } ) always clobbers reg byte a
|
|
Statement [45] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f [ print_char_cursor#19 print_uchar::$2 ] ( main:2::print_uint:34::print_uchar:37 [ print_uint::w#0 print_char_cursor#19 print_uchar::$2 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#19 } } main:2::print_uint:34::print_uchar:39 [ print_char_cursor#19 print_uchar::$2 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#1 = print_char::ch#2 } } ) always clobbers reg byte a
|
|
Statement [50] *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2 [ print_char_cursor#18 ] ( main:2::print_uint:34::print_uchar:37::print_char:44 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#24 } } main:2::print_uint:34::print_uchar:39::print_char:44 [ print_uchar::b#2 print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#0 = print_char::ch#2 } } main:2::print_uint:34::print_uchar:37::print_char:47 [ print_uint::w#0 print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#18 = print_char_cursor#19 } } main:2::print_uint:34::print_uchar:39::print_char:47 [ print_char_cursor#18 ] { { print_uint::w#0 = main::diff_sum#1 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#18 = print_char_cursor#24 print_char_cursor#19 } { print_char::ch#1 = print_char::ch#2 } } ) always clobbers reg byte y
|
|
Statement [54] (byte~) diff::$2 ← (byte) diff::bb1#0 - (byte) diff::bb2#0 [ diff::$2 ] ( main:2::diff:21 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::$2 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) always clobbers reg byte a
|
|
Statement [57] (byte~) diff::$4 ← (byte) diff::bb2#0 - (byte) diff::bb1#0 [ diff::$4 ] ( main:2::diff:21 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 main::ang_w#0 diff::$4 ] { { diff::bb1#0 = main::ang_w#0 } { diff::return#0 = diff::return#1 } } ) always clobbers reg byte a
|
|
Statement [58] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [59] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [61] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [62] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [65] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [67] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [68] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [69] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::y#0 atan2_16::angle#4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [71] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::angle#11 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [72] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::angle#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [76] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [77] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [81] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [82] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [84] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [85] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [86] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [87] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [88] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [92] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [93] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [94] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [95] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [96] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [97] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [99] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [100] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::atan2_16:14 [ main::y#4 main::x#2 main::screen_ref#2 main::diff_sum#2 main::screen#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
|
|
Statement [104] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] { } ) always clobbers reg byte a reg byte y
|
|
Statement [106] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] { } ) always clobbers reg byte a
|
|
Statement [107] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] { } ) always clobbers reg byte a
|
|
Statement [113] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] { } ) always clobbers reg byte a
|
|
Statement [115] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] { } ) always clobbers reg byte a
|
|
Statement [116] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] { } ) always clobbers reg byte a
|
|
Statement [117] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] { } ) always clobbers reg byte a
|
|
Statement [120] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:2::init_font_hex:5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] { } ) always clobbers reg byte a
|
|
Potential registers zp[1]:2 [ main::y#4 main::y#1 ] : zp[1]:2 , reg byte x ,
|
|
Potential registers zp[1]:3 [ main::x#2 main::x#1 ] : zp[1]:3 , reg byte x ,
|
|
Potential registers zp[2]:4 [ main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ] : zp[2]:4 ,
|
|
Potential registers zp[2]:6 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ] : zp[2]:6 ,
|
|
Potential registers zp[2]:8 [ main::screen#2 main::screen#5 main::screen#1 ] : zp[2]:8 ,
|
|
Potential registers zp[1]:10 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] : zp[1]:10 , reg byte x ,
|
|
Potential registers zp[1]:11 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ] : zp[2]:12 ,
|
|
Potential registers zp[1]:14 [ diff::return#1 diff::$4 diff::$2 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:15 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp[2]:15 ,
|
|
Potential registers zp[2]:17 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp[2]:17 ,
|
|
Potential registers zp[1]:19 [ atan2_16::i#2 atan2_16::i#1 ] : zp[1]:19 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp[2]:20 ,
|
|
Potential registers zp[2]:22 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] : zp[2]:22 ,
|
|
Potential registers zp[1]:24 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp[1]:24 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:25 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp[2]:25 ,
|
|
Potential registers zp[2]:27 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp[2]:27 ,
|
|
Potential registers zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] : zp[2]:29 ,
|
|
Potential registers zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ] : zp[1]:31 , reg byte x ,
|
|
Potential registers zp[2]:32 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] : zp[2]:32 ,
|
|
Potential registers zp[2]:34 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] : zp[2]:34 ,
|
|
Potential registers zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ] : zp[1]:36 , reg byte x ,
|
|
Potential registers zp[1]:37 [ init_font_hex::i#2 init_font_hex::i#1 ] : zp[1]:37 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] : zp[1]:38 , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:39 [ main::xw#0 ] : zp[2]:39 ,
|
|
Potential registers zp[2]:41 [ main::yw#0 ] : zp[2]:41 ,
|
|
Potential registers zp[2]:43 [ atan2_16::x#0 ] : zp[2]:43 ,
|
|
Potential registers zp[2]:45 [ atan2_16::y#0 ] : zp[2]:45 ,
|
|
Potential registers zp[2]:47 [ atan2_16::return#2 ] : zp[2]:47 ,
|
|
Potential registers zp[2]:49 [ main::angle_w#0 ] : zp[2]:49 ,
|
|
Potential registers zp[2]:51 [ main::$4 ] : zp[2]:51 ,
|
|
Potential registers zp[1]:53 [ main::ang_w#0 ] : zp[1]:53 , reg byte x ,
|
|
Potential registers zp[1]:54 [ diff::bb1#0 ] : zp[1]:54 , reg byte x ,
|
|
Potential registers zp[1]:55 [ diff::bb2#0 ] : zp[1]:55 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:56 [ diff::return#0 ] : zp[1]:56 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:57 [ main::$6 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:58 [ main::$7 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[2]:59 [ print_uint::w#0 ] : zp[2]:59 ,
|
|
Potential registers zp[1]:61 [ print_uchar::$0 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:62 [ print_uchar::$2 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:63 [ atan2_16::$23 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:64 [ atan2_16::$22 ] : zp[1]:64 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:65 [ init_font_hex::$0 ] : zp[1]:65 , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:66 [ init_font_hex::$1 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:67 [ init_font_hex::$2 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp[1]:68 [ init_font_hex::idx#3 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y ,
|
|
|
|
REGISTER UPLIFT SCOPES
|
|
Uplift Scope [atan2_16] 286,666,670.58: zp[1]:24 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 206,000,008: zp[2]:25 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 173,333,338.67: zp[2]:27 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 75,248,103.76: zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 26,909,340.68: zp[2]:15 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 22,737,342.67: zp[2]:17 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 20,000,002: zp[1]:63 [ atan2_16::$23 ] 20,000,002: zp[1]:64 [ atan2_16::$22 ] 17,083,335.04: zp[1]:19 [ atan2_16::i#2 atan2_16::i#1 ] 82,008.5: zp[2]:22 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] 2,002: zp[2]:47 [ atan2_16::return#2 ] 1,079.08: zp[2]:43 [ atan2_16::x#0 ] 1,025.12: zp[2]:45 [ atan2_16::y#0 ]
|
|
Uplift Scope [init_font_hex] 216,668.83: zp[1]:37 [ init_font_hex::i#2 init_font_hex::i#1 ] 200,002: zp[1]:66 [ init_font_hex::$1 ] 200,002: zp[1]:67 [ init_font_hex::$2 ] 115,001.6: zp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 100,001: zp[1]:65 [ init_font_hex::$0 ] 20,002: zp[1]:68 [ init_font_hex::idx#3 ] 16,334.97: zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 16,288.71: zp[2]:32 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 14,231.5: zp[2]:34 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 6,334.17: zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 1,606.87: zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Uplift Scope [diff] 47,005: zp[1]:14 [ diff::return#1 diff::$4 diff::$2 ] 15,502: zp[1]:55 [ diff::bb2#0 ] 10,334.67: zp[1]:54 [ diff::bb1#0 ] 2,002: zp[1]:56 [ diff::return#0 ]
|
|
Uplift Scope [print_char] 16,007: zp[1]:11 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
|
|
Uplift Scope [main] 2,002: zp[2]:49 [ main::angle_w#0 ] 2,002: zp[2]:51 [ main::$4 ] 2,002: zp[1]:57 [ main::$6 ] 2,002: zp[1]:58 [ main::$7 ] 1,601.6: zp[1]:3 [ main::x#2 main::x#1 ] 838.65: zp[2]:4 [ main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ] 724.94: zp[2]:8 [ main::screen#2 main::screen#5 main::screen#1 ] 577.09: zp[2]:6 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ] 500.5: zp[2]:39 [ main::xw#0 ] 500.5: zp[2]:41 [ main::yw#0 ] 429: zp[1]:53 [ main::ang_w#0 ] 160.28: zp[1]:2 [ main::y#4 main::y#1 ]
|
|
Uplift Scope [] 12,603: zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ]
|
|
Uplift Scope [print_uchar] 2,002: zp[1]:61 [ print_uchar::$0 ] 2,002: zp[1]:62 [ print_uchar::$2 ] 955: zp[1]:10 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
|
|
Uplift Scope [print_uint] 71: zp[2]:59 [ print_uint::w#0 ]
|
|
Uplift Scope [MOS6526_CIA]
|
|
Uplift Scope [MOS6569_VICII]
|
|
Uplift Scope [MOS6581_SID]
|
|
Uplift Scope [RADIX]
|
|
|
|
Uplifting [atan2_16] best 1158649 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:25 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:27 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:15 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:17 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:22 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:47 [ atan2_16::return#2 ] zp[2]:43 [ atan2_16::x#0 ] zp[2]:45 [ atan2_16::y#0 ]
|
|
Limited combination testing to 100 combinations of 144 possible.
|
|
Uplifting [init_font_hex] best 1139649 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp[1]:65 [ init_font_hex::$0 ] zp[1]:68 [ init_font_hex::idx#3 ] zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp[2]:32 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp[2]:34 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Limited combination testing to 100 combinations of 6912 possible.
|
|
Uplifting [diff] best 1138145 combination reg byte a [ diff::return#1 diff::$4 diff::$2 ] reg byte a [ diff::bb2#0 ] reg byte x [ diff::bb1#0 ] reg byte a [ diff::return#0 ]
|
|
Limited combination testing to 100 combinations of 128 possible.
|
|
Uplifting [print_char] best 1138136 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
|
|
Uplifting [main] best 1136236 combination zp[2]:49 [ main::angle_w#0 ] zp[2]:51 [ main::$4 ] reg byte a [ main::$6 ] reg byte a [ main::$7 ] zp[1]:3 [ main::x#2 main::x#1 ] zp[2]:4 [ main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ] zp[2]:8 [ main::screen#2 main::screen#5 main::screen#1 ] zp[2]:6 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ] zp[2]:39 [ main::xw#0 ] zp[2]:41 [ main::yw#0 ] reg byte x [ main::ang_w#0 ] zp[1]:2 [ main::y#4 main::y#1 ]
|
|
Limited combination testing to 100 combinations of 128 possible.
|
|
Uplifting [] best 1136236 combination zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ]
|
|
Uplifting [print_uchar] best 1136218 combination reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] reg byte x [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
|
|
Uplifting [print_uint] best 1136218 combination zp[2]:59 [ print_uint::w#0 ]
|
|
Uplifting [MOS6526_CIA] best 1136218 combination
|
|
Uplifting [MOS6569_VICII] best 1136218 combination
|
|
Uplifting [MOS6581_SID] best 1136218 combination
|
|
Uplifting [RADIX] best 1136218 combination
|
|
Attempting to uplift remaining variables inzp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
|
|
Uplifting [init_font_hex] best 1136218 combination zp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
|
|
Attempting to uplift remaining variables inzp[1]:65 [ init_font_hex::$0 ]
|
|
Uplifting [init_font_hex] best 1136218 combination zp[1]:65 [ init_font_hex::$0 ]
|
|
Attempting to uplift remaining variables inzp[1]:68 [ init_font_hex::idx#3 ]
|
|
Uplifting [init_font_hex] best 1135618 combination reg byte y [ init_font_hex::idx#3 ]
|
|
Attempting to uplift remaining variables inzp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
Uplifting [init_font_hex] best 1135618 combination zp[1]:36 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Uplifting [init_font_hex] best 1135618 combination zp[1]:31 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:3 [ main::x#2 main::x#1 ]
|
|
Uplifting [main] best 1135618 combination zp[1]:3 [ main::x#2 main::x#1 ]
|
|
Attempting to uplift remaining variables inzp[1]:2 [ main::y#4 main::y#1 ]
|
|
Uplifting [main] best 1135618 combination zp[1]:2 [ main::y#4 main::y#1 ]
|
|
Coalescing zero page register [ zp[2]:6 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 ] ] with [ zp[2]:59 [ print_uint::w#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp[2]:22 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:39 [ main::xw#0 ] ] with [ zp[2]:43 [ atan2_16::x#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:41 [ main::yw#0 ] ] with [ zp[2]:45 [ atan2_16::y#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:47 [ atan2_16::return#2 ] ] with [ zp[2]:49 [ main::angle_w#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] ] with [ zp[2]:47 [ atan2_16::return#2 main::angle_w#0 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 ] ] with [ zp[2]:51 [ main::$4 ] ] - score: 1
|
|
Coalescing zero page register [ zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ] ] with [ zp[2]:4 [ main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ] ]
|
|
Coalescing zero page register [ zp[2]:29 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] ] with [ zp[2]:15 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ]
|
|
Coalescing zero page register [ zp[2]:32 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] ] with [ zp[2]:17 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ]
|
|
Coalescing zero page register [ zp[2]:34 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] ] with [ zp[2]:25 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ]
|
|
Allocated (was zp[2]:6) zp[2]:4 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 print_uint::w#0 ]
|
|
Allocated (was zp[2]:8) zp[2]:6 [ main::screen#2 main::screen#5 main::screen#1 ]
|
|
Allocated (was zp[2]:12) zp[2]:8 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ]
|
|
Allocated (was zp[2]:20) zp[2]:10 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 main::$4 ]
|
|
Allocated (was zp[2]:27) zp[2]:12 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
|
|
Allocated (was zp[2]:29) zp[2]:14 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
|
|
Allocated (was zp[1]:31) zp[1]:16 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
Allocated (was zp[2]:32) zp[2]:17 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
|
|
Allocated (was zp[2]:34) zp[2]:19 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
|
|
Allocated (was zp[1]:36) zp[1]:21 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
Allocated (was zp[1]:38) zp[1]:22 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
|
|
Allocated (was zp[2]:39) zp[2]:23 [ main::xw#0 atan2_16::x#0 ]
|
|
Allocated (was zp[2]:41) zp[2]:25 [ main::yw#0 atan2_16::y#0 ]
|
|
Allocated (was zp[1]:65) zp[1]:27 [ init_font_hex::$0 ]
|
|
|
|
ASSEMBLER BEFORE OPTIMIZATION
|
|
// File Comments
|
|
// Find atan2(x, y) using the CORDIC method
|
|
// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf
|
|
// Upstart
|
|
.pc = $801 "Basic"
|
|
:BasicUpstart(main)
|
|
.pc = $80d "Program"
|
|
// Global Constants & labels
|
|
// The number of iterations performed during 16-bit CORDIC atan2 calculation
|
|
.const CORDIC_ITERATIONS_16 = $f
|
|
.label D018 = $d018
|
|
// Color Ram
|
|
.label COLS = $d800
|
|
.label CHARSET = $2000
|
|
.label SCREEN = $2800
|
|
.label print_char_cursor = 8
|
|
// @begin
|
|
__bbegin:
|
|
// [1] phi from @begin to @1 [phi:@begin->@1]
|
|
__b1_from___bbegin:
|
|
jmp __b1
|
|
// @1
|
|
__b1:
|
|
// [2] call main
|
|
// [4] phi from @1 to main [phi:@1->main]
|
|
main_from___b1:
|
|
jsr main
|
|
// [3] phi from @1 to @end [phi:@1->@end]
|
|
__bend_from___b1:
|
|
jmp __bend
|
|
// @end
|
|
__bend:
|
|
// main
|
|
main: {
|
|
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
|
|
.label col00 = COLS+$c*$28+$13
|
|
.label __4 = $a
|
|
.label xw = $17
|
|
.label yw = $19
|
|
.label angle_w = $a
|
|
.label diff_sum = 4
|
|
.label screen = 6
|
|
.label screen_ref = 8
|
|
.label x = 3
|
|
.label y = 2
|
|
// [5] call init_font_hex
|
|
// [101] phi from main to init_font_hex [phi:main->init_font_hex]
|
|
init_font_hex_from_main:
|
|
jsr init_font_hex
|
|
// [6] phi from main to main::toD0181 [phi:main->main::toD0181]
|
|
toD0181_from_main:
|
|
jmp toD0181
|
|
// main::toD0181
|
|
toD0181:
|
|
jmp __b6
|
|
// main::@6
|
|
__b6:
|
|
// [7] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2
|
|
lda #toD0181_return
|
|
sta D018
|
|
// [8] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
|
|
__b1_from___b6:
|
|
// [8] phi (byte*) main::screen#5 = (const nomodify byte*) SCREEN [phi:main::@6->main::@1#0] -- pbuz1=pbuc1
|
|
lda #<SCREEN
|
|
sta.z screen
|
|
lda #>SCREEN
|
|
sta.z screen+1
|
|
// [8] phi (word) main::diff_sum#7 = (word) 0 [phi:main::@6->main::@1#1] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z diff_sum
|
|
lda #>0
|
|
sta.z diff_sum+1
|
|
// [8] phi (byte*) main::screen_ref#5 = (const to_nomodify byte*) SCREEN_REF [phi:main::@6->main::@1#2] -- pbuz1=pbuc1
|
|
lda #<SCREEN_REF
|
|
sta.z screen_ref
|
|
lda #>SCREEN_REF
|
|
sta.z screen_ref+1
|
|
// [8] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@6->main::@1#3] -- vbsz1=vbsc1
|
|
lda #-$c
|
|
sta.z y
|
|
jmp __b1
|
|
// [8] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
|
|
__b1_from___b3:
|
|
// [8] phi (byte*) main::screen#5 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy
|
|
// [8] phi (word) main::diff_sum#7 = (word) main::diff_sum#1 [phi:main::@3->main::@1#1] -- register_copy
|
|
// [8] phi (byte*) main::screen_ref#5 = (byte*) main::screen_ref#1 [phi:main::@3->main::@1#2] -- register_copy
|
|
// [8] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#3] -- register_copy
|
|
jmp __b1
|
|
// main::@1
|
|
__b1:
|
|
// [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
|
__b2_from___b1:
|
|
// [9] phi (byte*) main::screen#2 = (byte*) main::screen#5 [phi:main::@1->main::@2#0] -- register_copy
|
|
// [9] phi (word) main::diff_sum#2 = (word) main::diff_sum#7 [phi:main::@1->main::@2#1] -- register_copy
|
|
// [9] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#5 [phi:main::@1->main::@2#2] -- register_copy
|
|
// [9] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#3] -- vbsz1=vbsc1
|
|
lda #-$13
|
|
sta.z x
|
|
jmp __b2
|
|
// [9] phi from main::@8 to main::@2 [phi:main::@8->main::@2]
|
|
__b2_from___b8:
|
|
// [9] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@8->main::@2#0] -- register_copy
|
|
// [9] phi (word) main::diff_sum#2 = (word) main::diff_sum#1 [phi:main::@8->main::@2#1] -- register_copy
|
|
// [9] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#1 [phi:main::@8->main::@2#2] -- register_copy
|
|
// [9] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@8->main::@2#3] -- register_copy
|
|
jmp __b2
|
|
// main::@2
|
|
__b2:
|
|
// [10] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1
|
|
lda.z x
|
|
ldy #0
|
|
sta.z xw+1
|
|
sty.z xw
|
|
// [11] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1
|
|
lda.z y
|
|
ldy #0
|
|
sta.z yw+1
|
|
sty.z yw
|
|
// [12] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0
|
|
// [13] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0
|
|
// [14] call atan2_16
|
|
jsr atan2_16
|
|
// [15] (word) atan2_16::return#2 ← (word) atan2_16::return#0
|
|
jmp __b7
|
|
// main::@7
|
|
__b7:
|
|
// [16] (word) main::angle_w#0 ← (word) atan2_16::return#2
|
|
// [17] (word~) main::$4 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1
|
|
lda #$80
|
|
clc
|
|
adc.z __4
|
|
sta.z __4
|
|
bcc !+
|
|
inc.z __4+1
|
|
!:
|
|
// [18] (byte) main::ang_w#0 ← > (word~) main::$4 -- vbuxx=_hi_vwuz1
|
|
ldx.z __4+1
|
|
// [19] (byte) diff::bb1#0 ← (byte) main::ang_w#0
|
|
// [20] (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2) -- vbuaa=_deref_pbuz1
|
|
ldy #0
|
|
lda (screen_ref),y
|
|
// [21] call diff
|
|
jsr diff
|
|
// [22] (byte) diff::return#0 ← (byte) diff::return#1
|
|
jmp __b8
|
|
// main::@8
|
|
__b8:
|
|
// [23] (byte~) main::$6 ← (byte) diff::return#0
|
|
// [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$6 -- vwuz1=vwuz1_plus_vbuaa
|
|
//*screen = (>angle_w)-angle_b;
|
|
//*screen = >angle_w;
|
|
clc
|
|
adc.z diff_sum
|
|
sta.z diff_sum
|
|
bcc !+
|
|
inc.z diff_sum+1
|
|
!:
|
|
// [25] (byte~) main::$7 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2) -- vbuaa=vbuxx_minus__deref_pbuz1
|
|
txa
|
|
sec
|
|
ldy #0
|
|
sbc (screen_ref),y
|
|
// [26] *((byte*) main::screen#2) ← (byte~) main::$7 -- _deref_pbuz1=vbuaa
|
|
ldy #0
|
|
sta (screen),y
|
|
// [27] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
|
|
inc.z screen
|
|
bne !+
|
|
inc.z screen+1
|
|
!:
|
|
// [28] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 -- pbuz1=_inc_pbuz1
|
|
inc.z screen_ref
|
|
bne !+
|
|
inc.z screen_ref+1
|
|
!:
|
|
// [29] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1
|
|
inc.z x
|
|
// [30] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsz1_neq_vbsc1_then_la1
|
|
lda #$15
|
|
cmp.z x
|
|
bne __b2_from___b8
|
|
jmp __b3
|
|
// main::@3
|
|
__b3:
|
|
// [31] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1
|
|
inc.z y
|
|
// [32] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1
|
|
lda #$d
|
|
cmp.z y
|
|
bne __b1_from___b3
|
|
jmp __b4
|
|
// main::@4
|
|
__b4:
|
|
// [33] (word) print_uint::w#0 ← (word) main::diff_sum#1
|
|
// [34] call print_uint
|
|
jsr print_uint
|
|
jmp __b5
|
|
// main::@5
|
|
__b5:
|
|
// [35] *((const byte*) main::col00) ← ++ *((const byte*) main::col00) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc col00
|
|
jmp __b5
|
|
}
|
|
// print_uint
|
|
// Print a unsigned int as HEX
|
|
// print_uint(word zp(4) w)
|
|
print_uint: {
|
|
.label w = 4
|
|
// [36] (byte) print_uchar::b#0 ← > (word) print_uint::w#0 -- vbuxx=_hi_vwuz1
|
|
ldx.z w+1
|
|
// [37] call print_uchar
|
|
// [41] phi from print_uint to print_uchar [phi:print_uint->print_uchar]
|
|
print_uchar_from_print_uint:
|
|
// [41] phi (byte*) print_char_cursor#24 = (byte*) 1024 [phi:print_uint->print_uchar#0] -- pbuz1=pbuc1
|
|
lda #<$400
|
|
sta.z print_char_cursor
|
|
lda #>$400
|
|
sta.z print_char_cursor+1
|
|
// [41] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy
|
|
jsr print_uchar
|
|
jmp __b1
|
|
// print_uint::@1
|
|
__b1:
|
|
// [38] (byte) print_uchar::b#1 ← < (word) print_uint::w#0 -- vbuxx=_lo_vwuz1
|
|
ldx.z w
|
|
// [39] call print_uchar
|
|
// [41] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar]
|
|
print_uchar_from___b1:
|
|
// [41] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#19 [phi:print_uint::@1->print_uchar#0] -- register_copy
|
|
// [41] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy
|
|
jsr print_uchar
|
|
jmp __breturn
|
|
// print_uint::@return
|
|
__breturn:
|
|
// [40] return
|
|
rts
|
|
}
|
|
// print_uchar
|
|
// Print a char as HEX
|
|
// print_uchar(byte register(X) b)
|
|
print_uchar: {
|
|
// [42] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4 -- vbuaa=vbuxx_ror_4
|
|
txa
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
// [43] (byte) print_char::ch#0 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$0) -- vbuaa=pbuc1_derefidx_vbuaa
|
|
tay
|
|
lda print_hextab,y
|
|
// [44] call print_char
|
|
// Table of hexadecimal digits
|
|
// [49] phi from print_uchar to print_char [phi:print_uchar->print_char]
|
|
print_char_from_print_uchar:
|
|
// [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#24 [phi:print_uchar->print_char#0] -- register_copy
|
|
// [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy
|
|
jsr print_char
|
|
jmp __b1
|
|
// print_uchar::@1
|
|
__b1:
|
|
// [45] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f -- vbuxx=vbuxx_band_vbuc1
|
|
lda #$f
|
|
axs #0
|
|
// [46] (byte) print_char::ch#1 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$2) -- vbuaa=pbuc1_derefidx_vbuxx
|
|
lda print_hextab,x
|
|
// [47] call print_char
|
|
// [49] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char]
|
|
print_char_from___b1:
|
|
// [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#19 [phi:print_uchar::@1->print_char#0] -- register_copy
|
|
// [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy
|
|
jsr print_char
|
|
jmp __breturn
|
|
// print_uchar::@return
|
|
__breturn:
|
|
// [48] return
|
|
rts
|
|
}
|
|
// print_char
|
|
// Print a single char
|
|
// print_char(byte register(A) ch)
|
|
print_char: {
|
|
// [50] *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2 -- _deref_pbuz1=vbuaa
|
|
ldy #0
|
|
sta (print_char_cursor),y
|
|
// [51] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1
|
|
inc.z print_char_cursor
|
|
bne !+
|
|
inc.z print_char_cursor+1
|
|
!:
|
|
jmp __breturn
|
|
// print_char::@return
|
|
__breturn:
|
|
// [52] return
|
|
rts
|
|
}
|
|
// diff
|
|
// diff(byte register(X) bb1, byte register(A) bb2)
|
|
diff: {
|
|
// [53] if((byte) diff::bb1#0<(byte) diff::bb2#0) goto diff::@1 -- vbuxx_lt_vbuaa_then_la1
|
|
sta.z $ff
|
|
cpx.z $ff
|
|
bcc __b1
|
|
jmp __b2
|
|
// diff::@2
|
|
__b2:
|
|
// [54] (byte~) diff::$2 ← (byte) diff::bb1#0 - (byte) diff::bb2#0 -- vbuaa=vbuxx_minus_vbuaa
|
|
sta.z $ff
|
|
txa
|
|
sec
|
|
sbc.z $ff
|
|
// [55] phi from diff::@1 diff::@2 to diff::@3 [phi:diff::@1/diff::@2->diff::@3]
|
|
__b3_from___b1:
|
|
__b3_from___b2:
|
|
// [55] phi (byte) diff::return#1 = (byte~) diff::$4 [phi:diff::@1/diff::@2->diff::@3#0] -- register_copy
|
|
jmp __b3
|
|
// diff::@3
|
|
__b3:
|
|
jmp __breturn
|
|
// diff::@return
|
|
__breturn:
|
|
// [56] return
|
|
rts
|
|
// diff::@1
|
|
__b1:
|
|
// [57] (byte~) diff::$4 ← (byte) diff::bb2#0 - (byte) diff::bb1#0 -- vbuaa=vbuaa_minus_vbuxx
|
|
stx.z $ff
|
|
sec
|
|
sbc.z $ff
|
|
jmp __b3_from___b1
|
|
}
|
|
// atan2_16
|
|
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
|
|
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
|
|
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
|
|
// atan2_16(signed word zp($17) x, signed word zp($19) y)
|
|
atan2_16: {
|
|
.label __2 = $e
|
|
.label __7 = $11
|
|
.label yi = $e
|
|
.label xi = $11
|
|
.label angle = $a
|
|
.label xd = $c
|
|
.label yd = $13
|
|
.label return = $a
|
|
.label x = $17
|
|
.label y = $19
|
|
// [58] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1
|
|
lda.z y+1
|
|
bpl __b1
|
|
jmp __b2
|
|
// atan2_16::@2
|
|
__b2:
|
|
// [59] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2
|
|
sec
|
|
lda #0
|
|
sbc.z y
|
|
sta.z __2
|
|
lda #0
|
|
sbc.z y+1
|
|
sta.z __2+1
|
|
// [60] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
|
|
__b3_from___b1:
|
|
__b3_from___b2:
|
|
// [60] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy
|
|
jmp __b3
|
|
// atan2_16::@3
|
|
__b3:
|
|
// [61] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1
|
|
lda.z x+1
|
|
bpl __b4
|
|
jmp __b5
|
|
// atan2_16::@5
|
|
__b5:
|
|
// [62] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2
|
|
sec
|
|
lda #0
|
|
sbc.z x
|
|
sta.z __7
|
|
lda #0
|
|
sbc.z x+1
|
|
sta.z __7+1
|
|
// [63] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
|
|
__b6_from___b4:
|
|
__b6_from___b5:
|
|
// [63] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy
|
|
jmp __b6
|
|
// atan2_16::@6
|
|
__b6:
|
|
// [64] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
|
|
__b10_from___b6:
|
|
// [64] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z angle
|
|
lda #>0
|
|
sta.z angle+1
|
|
// [64] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [64] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
|
|
// [64] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy
|
|
jmp __b10
|
|
// atan2_16::@10
|
|
__b10:
|
|
// [65] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1
|
|
lda.z yi+1
|
|
bne __b11
|
|
lda.z yi
|
|
bne __b11
|
|
// [66] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
|
|
__b12_from___b10:
|
|
__b12_from___b19:
|
|
// [66] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy
|
|
jmp __b12
|
|
// atan2_16::@12
|
|
__b12:
|
|
// [67] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1
|
|
lsr.z angle+1
|
|
ror.z angle
|
|
// [68] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1
|
|
lda.z x+1
|
|
bpl __b7_from___b12
|
|
jmp __b21
|
|
// atan2_16::@21
|
|
__b21:
|
|
// [69] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
|
|
sec
|
|
lda #<$8000
|
|
sbc.z angle
|
|
sta.z angle
|
|
lda #>$8000
|
|
sbc.z angle+1
|
|
sta.z angle+1
|
|
// [70] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
|
|
__b7_from___b12:
|
|
__b7_from___b21:
|
|
// [70] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy
|
|
jmp __b7
|
|
// atan2_16::@7
|
|
__b7:
|
|
// [71] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1
|
|
lda.z y+1
|
|
bpl __b8_from___b7
|
|
jmp __b9
|
|
// atan2_16::@9
|
|
__b9:
|
|
// [72] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1
|
|
sec
|
|
lda #0
|
|
sbc.z angle
|
|
sta.z angle
|
|
lda #0
|
|
sbc.z angle+1
|
|
sta.z angle+1
|
|
// [73] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
|
|
__b8_from___b7:
|
|
__b8_from___b9:
|
|
// [73] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy
|
|
jmp __b8
|
|
// atan2_16::@8
|
|
__b8:
|
|
jmp __breturn
|
|
// atan2_16::@return
|
|
__breturn:
|
|
// [74] return
|
|
rts
|
|
// atan2_16::@11
|
|
__b11:
|
|
// [75] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx
|
|
txa
|
|
tay
|
|
// [76] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2
|
|
lda.z xi
|
|
sta.z xd
|
|
lda.z xi+1
|
|
sta.z xd+1
|
|
// [77] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2
|
|
lda.z yi
|
|
sta.z yd
|
|
lda.z yi+1
|
|
sta.z yd+1
|
|
// [78] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
|
|
__b13_from___b11:
|
|
__b13_from___b14:
|
|
// [78] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy
|
|
// [78] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy
|
|
// [78] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy
|
|
jmp __b13
|
|
// atan2_16::@13
|
|
__b13:
|
|
// [79] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1
|
|
cpy #2
|
|
bcs __b14
|
|
jmp __b15
|
|
// atan2_16::@15
|
|
__b15:
|
|
// [80] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1
|
|
cpy #0
|
|
beq __b17_from___b15
|
|
jmp __b16
|
|
// atan2_16::@16
|
|
__b16:
|
|
// [81] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1
|
|
lda.z xd+1
|
|
cmp #$80
|
|
ror.z xd+1
|
|
ror.z xd
|
|
// [82] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1
|
|
lda.z yd+1
|
|
cmp #$80
|
|
ror.z yd+1
|
|
ror.z yd
|
|
// [83] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
|
|
__b17_from___b15:
|
|
__b17_from___b16:
|
|
// [83] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy
|
|
// [83] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy
|
|
jmp __b17
|
|
// atan2_16::@17
|
|
__b17:
|
|
// [84] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1
|
|
lda.z yi+1
|
|
bpl __b18
|
|
jmp __b20
|
|
// atan2_16::@20
|
|
__b20:
|
|
// [85] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2
|
|
lda.z xi
|
|
sec
|
|
sbc.z yd
|
|
sta.z xi
|
|
lda.z xi+1
|
|
sbc.z yd+1
|
|
sta.z xi+1
|
|
// [86] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2
|
|
lda.z yi
|
|
clc
|
|
adc.z xd
|
|
sta.z yi
|
|
lda.z yi+1
|
|
adc.z xd+1
|
|
sta.z yi+1
|
|
// [87] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
|
|
txa
|
|
asl
|
|
// [88] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa
|
|
tay
|
|
sec
|
|
lda.z angle
|
|
sbc CORDIC_ATAN2_ANGLES_16,y
|
|
sta.z angle
|
|
lda.z angle+1
|
|
sbc CORDIC_ATAN2_ANGLES_16+1,y
|
|
sta.z angle+1
|
|
// [89] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
|
|
__b19_from___b18:
|
|
__b19_from___b20:
|
|
// [89] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy
|
|
// [89] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
|
|
// [89] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy
|
|
jmp __b19
|
|
// atan2_16::@19
|
|
__b19:
|
|
// [90] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [91] if((byte) atan2_16::i#1==(const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1
|
|
cpx #CORDIC_ITERATIONS_16-1+1
|
|
beq __b12_from___b19
|
|
// [64] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
|
|
__b10_from___b19:
|
|
// [64] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
|
|
// [64] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
|
|
// [64] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
|
|
// [64] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy
|
|
jmp __b10
|
|
// atan2_16::@18
|
|
__b18:
|
|
// [92] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2
|
|
lda.z xi
|
|
clc
|
|
adc.z yd
|
|
sta.z xi
|
|
lda.z xi+1
|
|
adc.z yd+1
|
|
sta.z xi+1
|
|
// [93] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2
|
|
lda.z yi
|
|
sec
|
|
sbc.z xd
|
|
sta.z yi
|
|
lda.z yi+1
|
|
sbc.z xd+1
|
|
sta.z yi+1
|
|
// [94] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
|
|
txa
|
|
asl
|
|
// [95] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa
|
|
tay
|
|
clc
|
|
lda.z angle
|
|
adc CORDIC_ATAN2_ANGLES_16,y
|
|
sta.z angle
|
|
lda.z angle+1
|
|
adc CORDIC_ATAN2_ANGLES_16+1,y
|
|
sta.z angle+1
|
|
jmp __b19_from___b18
|
|
// atan2_16::@14
|
|
__b14:
|
|
// [96] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2
|
|
lda.z xd+1
|
|
cmp #$80
|
|
ror.z xd+1
|
|
ror.z xd
|
|
lda.z xd+1
|
|
cmp #$80
|
|
ror.z xd+1
|
|
ror.z xd
|
|
// [97] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2
|
|
lda.z yd+1
|
|
cmp #$80
|
|
ror.z yd+1
|
|
ror.z yd
|
|
lda.z yd+1
|
|
cmp #$80
|
|
ror.z yd+1
|
|
ror.z yd
|
|
// [98] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2
|
|
dey
|
|
dey
|
|
jmp __b13_from___b14
|
|
// atan2_16::@4
|
|
__b4:
|
|
// [99] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2
|
|
lda.z x
|
|
sta.z xi
|
|
lda.z x+1
|
|
sta.z xi+1
|
|
jmp __b6_from___b4
|
|
// atan2_16::@1
|
|
__b1:
|
|
// [100] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2
|
|
lda.z y
|
|
sta.z yi
|
|
lda.z y+1
|
|
sta.z yi+1
|
|
jmp __b3_from___b1
|
|
}
|
|
// init_font_hex
|
|
// Make charset from proto chars
|
|
// init_font_hex(byte* zp($11) charset)
|
|
init_font_hex: {
|
|
.label __0 = $1b
|
|
.label idx = $16
|
|
.label proto_lo = $13
|
|
.label charset = $11
|
|
.label c1 = $15
|
|
.label proto_hi = $e
|
|
.label c = $10
|
|
// [102] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1]
|
|
__b1_from_init_font_hex:
|
|
// [102] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z c
|
|
// [102] phi (byte*) init_font_hex::proto_hi#6 = (const byte*) FONT_HEX_PROTO [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1
|
|
lda #<FONT_HEX_PROTO
|
|
sta.z proto_hi
|
|
lda #>FONT_HEX_PROTO
|
|
sta.z proto_hi+1
|
|
// [102] phi (byte*) init_font_hex::charset#5 = (const nomodify byte*) CHARSET [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1
|
|
lda #<CHARSET
|
|
sta.z charset
|
|
lda #>CHARSET
|
|
sta.z charset+1
|
|
jmp __b1
|
|
// [102] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1]
|
|
__b1_from___b5:
|
|
// [102] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy
|
|
// [102] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy
|
|
// [102] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy
|
|
jmp __b1
|
|
// init_font_hex::@1
|
|
__b1:
|
|
// [103] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2]
|
|
__b2_from___b1:
|
|
// [103] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z c1
|
|
// [103] phi (byte*) init_font_hex::proto_lo#4 = (const byte*) FONT_HEX_PROTO [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1
|
|
lda #<FONT_HEX_PROTO
|
|
sta.z proto_lo
|
|
lda #>FONT_HEX_PROTO
|
|
sta.z proto_lo+1
|
|
// [103] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy
|
|
jmp __b2
|
|
// [103] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2]
|
|
__b2_from___b4:
|
|
// [103] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy
|
|
// [103] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy
|
|
// [103] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy
|
|
jmp __b2
|
|
// init_font_hex::@2
|
|
__b2:
|
|
// [104] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1
|
|
lda #0
|
|
ldy #0
|
|
sta (charset),y
|
|
// [105] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3]
|
|
__b3_from___b2:
|
|
// [105] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1
|
|
lda #1
|
|
sta.z idx
|
|
// [105] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1
|
|
ldx #0
|
|
jmp __b3
|
|
// [105] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3]
|
|
__b3_from___b3:
|
|
// [105] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy
|
|
// [105] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy
|
|
jmp __b3
|
|
// init_font_hex::@3
|
|
__b3:
|
|
// [106] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4
|
|
txa
|
|
tay
|
|
lda (proto_hi),y
|
|
asl
|
|
asl
|
|
asl
|
|
asl
|
|
sta.z __0
|
|
// [107] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1
|
|
txa
|
|
tay
|
|
lda (proto_lo),y
|
|
asl
|
|
// [108] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa
|
|
ora.z __0
|
|
// [109] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa
|
|
ldy.z idx
|
|
sta (charset),y
|
|
// [110] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1
|
|
inc.z idx
|
|
// [111] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [112] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1
|
|
cpx #5
|
|
bne __b3_from___b3
|
|
jmp __b4
|
|
// init_font_hex::@4
|
|
__b4:
|
|
// [113] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1
|
|
lda #0
|
|
ldy.z idx
|
|
sta (charset),y
|
|
// [114] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1
|
|
ldy.z idx
|
|
iny
|
|
// [115] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1
|
|
lda #0
|
|
sta (charset),y
|
|
// [116] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #5
|
|
clc
|
|
adc.z proto_lo
|
|
sta.z proto_lo
|
|
bcc !+
|
|
inc.z proto_lo+1
|
|
!:
|
|
// [117] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #8
|
|
clc
|
|
adc.z charset
|
|
sta.z charset
|
|
bcc !+
|
|
inc.z charset+1
|
|
!:
|
|
// [118] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1
|
|
inc.z c1
|
|
// [119] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1
|
|
lda #$10
|
|
cmp.z c1
|
|
bne __b2_from___b4
|
|
jmp __b5
|
|
// init_font_hex::@5
|
|
__b5:
|
|
// [120] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #5
|
|
clc
|
|
adc.z proto_hi
|
|
sta.z proto_hi
|
|
bcc !+
|
|
inc.z proto_hi+1
|
|
!:
|
|
// [121] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1
|
|
inc.z c
|
|
// [122] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1
|
|
lda #$10
|
|
cmp.z c
|
|
bne __b1_from___b5
|
|
jmp __breturn
|
|
// init_font_hex::@return
|
|
__breturn:
|
|
// [123] return
|
|
rts
|
|
}
|
|
// File Data
|
|
// Bit patterns for symbols 0-f (3x5 pixels) used in font hex
|
|
FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4
|
|
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
|
|
CORDIC_ATAN2_ANGLES_16:
|
|
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
|
|
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
|
|
|
print_hextab: .text "0123456789abcdef"
|
|
SCREEN_REF:
|
|
.for(var y=-12;y<=12;y++)
|
|
.for(var x=-19;x<=20;x++)
|
|
.byte round(256*atan2(y, x)/PI/2)
|
|
|
|
|
|
ASSEMBLER OPTIMIZATIONS
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __bend
|
|
Removing instruction jmp toD0181
|
|
Removing instruction jmp __b6
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b7
|
|
Removing instruction jmp __b8
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b4
|
|
Removing instruction jmp __b5
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b5
|
|
Removing instruction jmp __b6
|
|
Removing instruction jmp __b10
|
|
Removing instruction jmp __b12
|
|
Removing instruction jmp __b21
|
|
Removing instruction jmp __b7
|
|
Removing instruction jmp __b9
|
|
Removing instruction jmp __b8
|
|
Removing instruction jmp __breturn
|
|
Removing instruction jmp __b13
|
|
Removing instruction jmp __b15
|
|
Removing instruction jmp __b16
|
|
Removing instruction jmp __b17
|
|
Removing instruction jmp __b20
|
|
Removing instruction jmp __b19
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b3
|
|
Removing instruction jmp __b4
|
|
Removing instruction jmp __b5
|
|
Removing instruction jmp __breturn
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
Removing instruction lda #>0
|
|
Removing instruction ldy #0
|
|
Removing instruction ldy #0
|
|
Removing instruction lda #>0
|
|
Replacing instruction ldx #0 with TAX
|
|
Replacing instruction ldy #0 with TAY
|
|
Removing instruction ldy.z idx
|
|
Removing instruction lda #0
|
|
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
|
Replacing label __b2_from___b8 with __b2
|
|
Replacing label __b1_from___b3 with __b1
|
|
Replacing label __b3_from___b1 with __b3
|
|
Replacing label __b7_from___b12 with __b7
|
|
Replacing label __b8_from___b7 with __b8
|
|
Replacing label __b17_from___b15 with __b17
|
|
Replacing label __b12_from___b19 with __b12
|
|
Replacing label __b19_from___b18 with __b19
|
|
Replacing label __b13_from___b14 with __b13
|
|
Replacing label __b6_from___b4 with __b6
|
|
Replacing label __b3_from___b1 with __b3
|
|
Replacing label __b3_from___b3 with __b3
|
|
Replacing label __b2_from___b4 with __b2
|
|
Replacing label __b1_from___b5 with __b1
|
|
Removing instruction __b1_from___bbegin:
|
|
Removing instruction __b1:
|
|
Removing instruction main_from___b1:
|
|
Removing instruction __bend_from___b1:
|
|
Removing instruction toD0181_from_main:
|
|
Removing instruction toD0181:
|
|
Removing instruction __b1_from___b3:
|
|
Removing instruction __b2_from___b1:
|
|
Removing instruction __b2_from___b8:
|
|
Removing instruction __b3_from___b1:
|
|
Removing instruction __b3_from___b2:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b3_from___b1:
|
|
Removing instruction __b3_from___b2:
|
|
Removing instruction __b6_from___b4:
|
|
Removing instruction __b6_from___b5:
|
|
Removing instruction __b10_from___b6:
|
|
Removing instruction __b12_from___b10:
|
|
Removing instruction __b12_from___b19:
|
|
Removing instruction __b7_from___b12:
|
|
Removing instruction __b7_from___b21:
|
|
Removing instruction __b8_from___b7:
|
|
Removing instruction __b8_from___b9:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b13_from___b11:
|
|
Removing instruction __b13_from___b14:
|
|
Removing instruction __b17_from___b15:
|
|
Removing instruction __b17_from___b16:
|
|
Removing instruction __b19_from___b18:
|
|
Removing instruction __b19_from___b20:
|
|
Removing instruction __b1_from___b5:
|
|
Removing instruction __b2_from___b1:
|
|
Removing instruction __b2_from___b4:
|
|
Removing instruction __b3_from___b3:
|
|
Succesful ASM optimization Pass5RedundantLabelElimination
|
|
Removing instruction __bbegin:
|
|
Removing instruction __bend:
|
|
Removing instruction init_font_hex_from_main:
|
|
Removing instruction __b6:
|
|
Removing instruction __b1_from___b6:
|
|
Removing instruction __b7:
|
|
Removing instruction __b8:
|
|
Removing instruction __b3:
|
|
Removing instruction __b4:
|
|
Removing instruction print_uchar_from_print_uint:
|
|
Removing instruction __b1:
|
|
Removing instruction print_uchar_from___b1:
|
|
Removing instruction __breturn:
|
|
Removing instruction print_char_from_print_uchar:
|
|
Removing instruction __b1:
|
|
Removing instruction print_char_from___b1:
|
|
Removing instruction __breturn:
|
|
Removing instruction __breturn:
|
|
Removing instruction __b2:
|
|
Removing instruction __b2:
|
|
Removing instruction __b5:
|
|
Removing instruction __b21:
|
|
Removing instruction __b9:
|
|
Removing instruction __b15:
|
|
Removing instruction __b16:
|
|
Removing instruction __b20:
|
|
Removing instruction __b10_from___b19:
|
|
Removing instruction __b1_from_init_font_hex:
|
|
Removing instruction __b3_from___b2:
|
|
Removing instruction __b4:
|
|
Removing instruction __b5:
|
|
Removing instruction __breturn:
|
|
Succesful ASM optimization Pass5UnusedLabelElimination
|
|
Removing instruction jsr main
|
|
Succesful ASM optimization Pass5SkipBegin
|
|
Replacing jump to rts with rts in jmp __b3
|
|
Succesful ASM optimization Pass5DoubleJumpElimination
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __b3
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
Removing instruction __b3:
|
|
Succesful ASM optimization Pass5UnusedLabelElimination
|
|
Fixing long branch [279] beq __b12 to bne
|
|
Fixing long branch [173] bpl __b1 to bmi
|
|
Fixing long branch [185] bpl __b4 to bmi
|
|
|
|
FINAL SYMBOL TABLE
|
|
(label) @1
|
|
(label) @begin
|
|
(label) @end
|
|
(const nomodify byte*) CHARSET = (byte*) 8192
|
|
(const nomodify byte*) COLS = (byte*) 55296
|
|
(const word*) CORDIC_ATAN2_ANGLES_16[(const nomodify byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
|
|
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
|
}}
|
|
(const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f
|
|
(const nomodify byte*) D018 = (byte*) 53272
|
|
(const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 }
|
|
(byte) MOS6526_CIA::INTERRUPT
|
|
(byte) MOS6526_CIA::PORT_A
|
|
(byte) MOS6526_CIA::PORT_A_DDR
|
|
(byte) MOS6526_CIA::PORT_B
|
|
(byte) MOS6526_CIA::PORT_B_DDR
|
|
(byte) MOS6526_CIA::SERIAL_DATA
|
|
(word) MOS6526_CIA::TIMER_A
|
|
(byte) MOS6526_CIA::TIMER_A_CONTROL
|
|
(word) MOS6526_CIA::TIMER_B
|
|
(byte) MOS6526_CIA::TIMER_B_CONTROL
|
|
(byte) MOS6526_CIA::TOD_10THS
|
|
(byte) MOS6526_CIA::TOD_HOURS
|
|
(byte) MOS6526_CIA::TOD_MIN
|
|
(byte) MOS6526_CIA::TOD_SEC
|
|
(byte) MOS6569_VICII::BG_COLOR
|
|
(byte) MOS6569_VICII::BG_COLOR1
|
|
(byte) MOS6569_VICII::BG_COLOR2
|
|
(byte) MOS6569_VICII::BG_COLOR3
|
|
(byte) MOS6569_VICII::BORDER_COLOR
|
|
(byte) MOS6569_VICII::CONTROL1
|
|
(byte) MOS6569_VICII::CONTROL2
|
|
(byte) MOS6569_VICII::IRQ_ENABLE
|
|
(byte) MOS6569_VICII::IRQ_STATUS
|
|
(byte) MOS6569_VICII::LIGHTPEN_X
|
|
(byte) MOS6569_VICII::LIGHTPEN_Y
|
|
(byte) MOS6569_VICII::MEMORY
|
|
(byte) MOS6569_VICII::RASTER
|
|
(byte) MOS6569_VICII::SPRITE0_COLOR
|
|
(byte) MOS6569_VICII::SPRITE0_X
|
|
(byte) MOS6569_VICII::SPRITE0_Y
|
|
(byte) MOS6569_VICII::SPRITE1_COLOR
|
|
(byte) MOS6569_VICII::SPRITE1_X
|
|
(byte) MOS6569_VICII::SPRITE1_Y
|
|
(byte) MOS6569_VICII::SPRITE2_COLOR
|
|
(byte) MOS6569_VICII::SPRITE2_X
|
|
(byte) MOS6569_VICII::SPRITE2_Y
|
|
(byte) MOS6569_VICII::SPRITE3_COLOR
|
|
(byte) MOS6569_VICII::SPRITE3_X
|
|
(byte) MOS6569_VICII::SPRITE3_Y
|
|
(byte) MOS6569_VICII::SPRITE4_COLOR
|
|
(byte) MOS6569_VICII::SPRITE4_X
|
|
(byte) MOS6569_VICII::SPRITE4_Y
|
|
(byte) MOS6569_VICII::SPRITE5_COLOR
|
|
(byte) MOS6569_VICII::SPRITE5_X
|
|
(byte) MOS6569_VICII::SPRITE5_Y
|
|
(byte) MOS6569_VICII::SPRITE6_COLOR
|
|
(byte) MOS6569_VICII::SPRITE6_X
|
|
(byte) MOS6569_VICII::SPRITE6_Y
|
|
(byte) MOS6569_VICII::SPRITE7_COLOR
|
|
(byte) MOS6569_VICII::SPRITE7_X
|
|
(byte) MOS6569_VICII::SPRITE7_Y
|
|
(byte) MOS6569_VICII::SPRITES_BG_COLLISION
|
|
(byte) MOS6569_VICII::SPRITES_COLLISION
|
|
(byte) MOS6569_VICII::SPRITES_ENABLE
|
|
(byte) MOS6569_VICII::SPRITES_EXPAND_X
|
|
(byte) MOS6569_VICII::SPRITES_EXPAND_Y
|
|
(byte) MOS6569_VICII::SPRITES_MC
|
|
(byte) MOS6569_VICII::SPRITES_MCOLOR1
|
|
(byte) MOS6569_VICII::SPRITES_MCOLOR2
|
|
(byte) MOS6569_VICII::SPRITES_PRIORITY
|
|
(byte) MOS6569_VICII::SPRITES_XMSB
|
|
(byte) MOS6581_SID::CH1_ATTACK_DECAY
|
|
(byte) MOS6581_SID::CH1_CONTROL
|
|
(word) MOS6581_SID::CH1_FREQ
|
|
(word) MOS6581_SID::CH1_PULSE_WIDTH
|
|
(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE
|
|
(byte) MOS6581_SID::CH2_ATTACK_DECAY
|
|
(byte) MOS6581_SID::CH2_CONTROL
|
|
(word) MOS6581_SID::CH2_FREQ
|
|
(word) MOS6581_SID::CH2_PULSE_WIDTH
|
|
(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE
|
|
(byte) MOS6581_SID::CH3_ATTACK_DECAY
|
|
(byte) MOS6581_SID::CH3_CONTROL
|
|
(byte) MOS6581_SID::CH3_ENV
|
|
(word) MOS6581_SID::CH3_FREQ
|
|
(byte) MOS6581_SID::CH3_OSC
|
|
(word) MOS6581_SID::CH3_PULSE_WIDTH
|
|
(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE
|
|
(byte) MOS6581_SID::FILTER_CUTOFF_HIGH
|
|
(byte) MOS6581_SID::FILTER_CUTOFF_LOW
|
|
(byte) MOS6581_SID::FILTER_SETUP
|
|
(byte) MOS6581_SID::POT_X
|
|
(byte) MOS6581_SID::POT_Y
|
|
(byte) MOS6581_SID::VOLUME_FILTER_MODE
|
|
(const byte) RADIX::BINARY = (number) 2
|
|
(const byte) RADIX::DECIMAL = (number) $a
|
|
(const byte) RADIX::HEXADECIMAL = (number) $10
|
|
(const byte) RADIX::OCTAL = (number) 8
|
|
(const nomodify byte*) SCREEN = (byte*) 10240
|
|
(const to_nomodify byte*) SCREEN_REF[(number) $3e8] = kickasm {{ .for(var y=-12;y<=12;y++)
|
|
.for(var x=-19;x<=20;x++)
|
|
.byte round(256*atan2(y, x)/PI/2)
|
|
}}
|
|
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
|
|
(signed word~) atan2_16::$2 zp[2]:14 20002.0
|
|
(byte~) atan2_16::$22 reg byte a 2.0000002E7
|
|
(byte~) atan2_16::$23 reg byte a 2.0000002E7
|
|
(signed word~) atan2_16::$7 zp[2]:17 20002.0
|
|
(label) atan2_16::@1
|
|
(label) atan2_16::@10
|
|
(label) atan2_16::@11
|
|
(label) atan2_16::@12
|
|
(label) atan2_16::@13
|
|
(label) atan2_16::@14
|
|
(label) atan2_16::@15
|
|
(label) atan2_16::@16
|
|
(label) atan2_16::@17
|
|
(label) atan2_16::@18
|
|
(label) atan2_16::@19
|
|
(label) atan2_16::@2
|
|
(label) atan2_16::@20
|
|
(label) atan2_16::@21
|
|
(label) atan2_16::@3
|
|
(label) atan2_16::@4
|
|
(label) atan2_16::@5
|
|
(label) atan2_16::@6
|
|
(label) atan2_16::@7
|
|
(label) atan2_16::@8
|
|
(label) atan2_16::@9
|
|
(label) atan2_16::@return
|
|
(word) atan2_16::angle
|
|
(word) atan2_16::angle#1 angle zp[2]:10 15001.5
|
|
(word) atan2_16::angle#11 angle zp[2]:10 20002.0
|
|
(word) atan2_16::angle#12 angle zp[2]:10 1904762.0952380951
|
|
(word) atan2_16::angle#13 angle zp[2]:10 1.3333334666666666E7
|
|
(word) atan2_16::angle#2 angle zp[2]:10 2.0000002E7
|
|
(word) atan2_16::angle#3 angle zp[2]:10 2.0000002E7
|
|
(word) atan2_16::angle#4 angle zp[2]:10 20002.0
|
|
(word) atan2_16::angle#5 angle zp[2]:10 20002.0
|
|
(word) atan2_16::angle#6 angle zp[2]:10 2.0010003E7
|
|
(byte) atan2_16::i
|
|
(byte) atan2_16::i#1 reg byte x 1.50000015E7
|
|
(byte) atan2_16::i#2 reg byte x 2083333.5416666665
|
|
(word) atan2_16::return
|
|
(word) atan2_16::return#0 return zp[2]:10 7001.0
|
|
(word) atan2_16::return#2 return zp[2]:10 2002.0
|
|
(byte) atan2_16::shift
|
|
(byte) atan2_16::shift#1 reg byte y 2.00000002E8
|
|
(byte) atan2_16::shift#2 reg byte y 8.000000125E7
|
|
(byte) atan2_16::shift#5 reg byte y 6666667.333333333
|
|
(signed word) atan2_16::x
|
|
(signed word) atan2_16::x#0 x zp[2]:23 1079.078947368421
|
|
(signed word) atan2_16::xd
|
|
(signed word) atan2_16::xd#1 xd zp[2]:12 6.6666667333333336E7
|
|
(signed word) atan2_16::xd#10 xd zp[2]:12 1.0000001E7
|
|
(signed word) atan2_16::xd#2 xd zp[2]:12 1.0000001E7
|
|
(signed word) atan2_16::xd#3 xd zp[2]:12 7.666666833333333E7
|
|
(signed word) atan2_16::xd#5 xd zp[2]:12 1.0000001E7
|
|
(signed word) atan2_16::xi
|
|
(signed word) atan2_16::xi#0 xi zp[2]:17 30003.0
|
|
(signed word) atan2_16::xi#1 xi zp[2]:17 5000000.5
|
|
(signed word) atan2_16::xi#13 xi zp[2]:17 20002.0
|
|
(signed word) atan2_16::xi#2 xi zp[2]:17 5000000.5
|
|
(signed word) atan2_16::xi#3 xi zp[2]:17 2667333.6666666665
|
|
(signed word) atan2_16::xi#8 xi zp[2]:17 1.0000001E7
|
|
(signed word) atan2_16::y
|
|
(signed word) atan2_16::y#0 y zp[2]:25 1025.125
|
|
(signed word) atan2_16::yd
|
|
(signed word) atan2_16::yd#1 yd zp[2]:19 1.00000001E8
|
|
(signed word) atan2_16::yd#10 yd zp[2]:19 2.0000002E7
|
|
(signed word) atan2_16::yd#2 yd zp[2]:19 2.0000002E7
|
|
(signed word) atan2_16::yd#3 yd zp[2]:19 4.6000001E7
|
|
(signed word) atan2_16::yd#5 yd zp[2]:19 2.0000002E7
|
|
(signed word) atan2_16::yi
|
|
(signed word) atan2_16::yi#0 yi zp[2]:14 6000.6
|
|
(signed word) atan2_16::yi#1 yi zp[2]:14 6666667.333333333
|
|
(signed word) atan2_16::yi#16 yi zp[2]:14 20002.0
|
|
(signed word) atan2_16::yi#2 yi zp[2]:14 6666667.333333333
|
|
(signed word) atan2_16::yi#3 yi zp[2]:14 3530000.4117647056
|
|
(signed word) atan2_16::yi#8 yi zp[2]:14 1.0000001E7
|
|
(byte()) diff((byte) diff::bb1 , (byte) diff::bb2)
|
|
(byte~) diff::$2 reg byte a 20002.0
|
|
(byte~) diff::$4 reg byte a 20002.0
|
|
(label) diff::@1
|
|
(label) diff::@2
|
|
(label) diff::@3
|
|
(label) diff::@return
|
|
(byte) diff::bb1
|
|
(byte) diff::bb1#0 reg byte x 10334.666666666666
|
|
(byte) diff::bb2
|
|
(byte) diff::bb2#0 reg byte a 15502.0
|
|
(byte) diff::return
|
|
(byte) diff::return#0 reg byte a 2002.0
|
|
(byte) diff::return#1 reg byte a 7001.0
|
|
(void()) init_font_hex((byte*) init_font_hex::charset)
|
|
(byte~) init_font_hex::$0 zp[1]:27 100001.0
|
|
(byte~) init_font_hex::$1 reg byte a 200002.0
|
|
(byte~) init_font_hex::$2 reg byte a 200002.0
|
|
(label) init_font_hex::@1
|
|
(label) init_font_hex::@2
|
|
(label) init_font_hex::@3
|
|
(label) init_font_hex::@4
|
|
(label) init_font_hex::@5
|
|
(label) init_font_hex::@return
|
|
(byte) init_font_hex::c
|
|
(byte) init_font_hex::c#1 c zp[1]:16 1501.5
|
|
(byte) init_font_hex::c#6 c zp[1]:16 105.36842105263158
|
|
(byte) init_font_hex::c1
|
|
(byte) init_font_hex::c1#1 c1 zp[1]:21 15001.5
|
|
(byte) init_font_hex::c1#4 c1 zp[1]:21 1333.4666666666667
|
|
(byte*) init_font_hex::charset
|
|
(byte*) init_font_hex::charset#0 charset zp[2]:17 3500.5
|
|
(byte*) init_font_hex::charset#2 charset zp[2]:17 10786.214285714286
|
|
(byte*) init_font_hex::charset#5 charset zp[2]:17 2002.0
|
|
(byte) init_font_hex::i
|
|
(byte) init_font_hex::i#1 reg byte x 150001.5
|
|
(byte) init_font_hex::i#2 reg byte x 66667.33333333333
|
|
(byte) init_font_hex::idx
|
|
(byte) init_font_hex::idx#2 idx zp[1]:22 55001.0
|
|
(byte) init_font_hex::idx#3 reg byte y 20002.0
|
|
(byte) init_font_hex::idx#5 idx zp[1]:22 60000.600000000006
|
|
(byte*) init_font_hex::proto_hi
|
|
(byte*) init_font_hex::proto_hi#1 proto_hi zp[2]:14 667.3333333333334
|
|
(byte*) init_font_hex::proto_hi#6 proto_hi zp[2]:14 5666.833333333334
|
|
(byte*) init_font_hex::proto_lo
|
|
(byte*) init_font_hex::proto_lo#1 proto_lo zp[2]:19 5000.5
|
|
(byte*) init_font_hex::proto_lo#4 proto_lo zp[2]:19 9230.999999999998
|
|
(void()) main()
|
|
(word~) main::$4 zp[2]:10 2002.0
|
|
(byte~) main::$6 reg byte a 2002.0
|
|
(byte~) main::$7 reg byte a 2002.0
|
|
(label) main::@1
|
|
(label) main::@2
|
|
(label) main::@3
|
|
(label) main::@4
|
|
(label) main::@5
|
|
(label) main::@6
|
|
(label) main::@7
|
|
(label) main::@8
|
|
(byte) main::ang_w
|
|
(byte) main::ang_w#0 reg byte x 429.0
|
|
(word) main::angle_w
|
|
(word) main::angle_w#0 angle_w zp[2]:10 2002.0
|
|
(const byte*) main::col00 = (const nomodify byte*) COLS+(word)(number) $c*(number) $28+(byte) $13
|
|
(word) main::diff_sum
|
|
(word) main::diff_sum#1 diff_sum zp[2]:4 234.8888888888889
|
|
(word) main::diff_sum#2 diff_sum zp[2]:4 140.2
|
|
(word) main::diff_sum#7 diff_sum zp[2]:4 202.0
|
|
(byte*) main::screen
|
|
(byte*) main::screen#1 screen zp[2]:6 350.5
|
|
(byte*) main::screen#2 screen zp[2]:6 172.44444444444446
|
|
(byte*) main::screen#5 screen zp[2]:6 202.0
|
|
(byte*) main::screen_ref
|
|
(byte*) main::screen_ref#1 screen_ref zp[2]:8 420.59999999999997
|
|
(byte*) main::screen_ref#2 screen_ref zp[2]:8 216.05263157894734
|
|
(byte*) main::screen_ref#5 screen_ref zp[2]:8 202.0
|
|
(label) main::toD0181
|
|
(byte*) main::toD0181_gfx
|
|
(byte) main::toD0181_return
|
|
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const nomodify byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const nomodify byte*) CHARSET/(byte) 4&(byte) $f
|
|
(byte*) main::toD0181_screen
|
|
(signed byte) main::x
|
|
(signed byte) main::x#1 x zp[1]:3 1501.5
|
|
(signed byte) main::x#2 x zp[1]:3 100.1
|
|
(signed word) main::xw
|
|
(word) main::xw#0 xw zp[2]:23 500.5
|
|
(signed byte) main::y
|
|
(signed byte) main::y#1 y zp[1]:2 151.5
|
|
(signed byte) main::y#4 y zp[1]:2 8.782608695652174
|
|
(signed word) main::yw
|
|
(word) main::yw#0 yw zp[2]:25 500.5
|
|
(void()) print_char((byte) print_char::ch)
|
|
(label) print_char::@return
|
|
(byte) print_char::ch
|
|
(byte) print_char::ch#0 reg byte a 2002.0
|
|
(byte) print_char::ch#1 reg byte a 2002.0
|
|
(byte) print_char::ch#2 reg byte a 12003.0
|
|
(byte*) print_char_cursor
|
|
(byte*) print_char_cursor#18 print_char_cursor zp[2]:8 11002.0
|
|
(byte*) print_char_cursor#19 print_char_cursor zp[2]:8 1233.6666666666665
|
|
(byte*) print_char_cursor#24 print_char_cursor zp[2]:8 367.33333333333337
|
|
(const to_nomodify byte*) print_hextab[] = (byte*) "0123456789abcdef"z
|
|
(byte*) print_line_cursor
|
|
(byte*) print_screen
|
|
(void()) print_uchar((byte) print_uchar::b)
|
|
(byte~) print_uchar::$0 reg byte a 2002.0
|
|
(byte~) print_uchar::$2 reg byte x 2002.0
|
|
(label) print_uchar::@1
|
|
(label) print_uchar::@return
|
|
(byte) print_uchar::b
|
|
(byte) print_uchar::b#0 reg byte x 202.0
|
|
(byte) print_uchar::b#1 reg byte x 202.0
|
|
(byte) print_uchar::b#2 reg byte x 551.0
|
|
(void()) print_uint((word) print_uint::w)
|
|
(label) print_uint::@1
|
|
(label) print_uint::@return
|
|
(word) print_uint::w
|
|
(word) print_uint::w#0 w zp[2]:4 71.0
|
|
|
|
zp[1]:2 [ main::y#4 main::y#1 ]
|
|
zp[1]:3 [ main::x#2 main::x#1 ]
|
|
zp[2]:4 [ main::diff_sum#2 main::diff_sum#7 main::diff_sum#1 print_uint::w#0 ]
|
|
zp[2]:6 [ main::screen#2 main::screen#5 main::screen#1 ]
|
|
reg byte x [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ]
|
|
reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
|
|
zp[2]:8 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 main::screen_ref#2 main::screen_ref#5 main::screen_ref#1 ]
|
|
reg byte a [ diff::return#1 diff::$4 diff::$2 ]
|
|
reg byte x [ atan2_16::i#2 atan2_16::i#1 ]
|
|
zp[2]:10 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 main::angle_w#0 main::$4 ]
|
|
reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
|
|
zp[2]:12 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
|
|
zp[2]:14 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
|
|
zp[1]:16 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
|
zp[2]:17 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
|
|
zp[2]:19 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
|
|
zp[1]:21 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
|
reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ]
|
|
zp[1]:22 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
|
|
zp[2]:23 [ main::xw#0 atan2_16::x#0 ]
|
|
zp[2]:25 [ main::yw#0 atan2_16::y#0 ]
|
|
reg byte x [ main::ang_w#0 ]
|
|
reg byte x [ diff::bb1#0 ]
|
|
reg byte a [ diff::bb2#0 ]
|
|
reg byte a [ diff::return#0 ]
|
|
reg byte a [ main::$6 ]
|
|
reg byte a [ main::$7 ]
|
|
reg byte a [ print_uchar::$0 ]
|
|
reg byte x [ print_uchar::$2 ]
|
|
reg byte a [ atan2_16::$23 ]
|
|
reg byte a [ atan2_16::$22 ]
|
|
zp[1]:27 [ init_font_hex::$0 ]
|
|
reg byte a [ init_font_hex::$1 ]
|
|
reg byte a [ init_font_hex::$2 ]
|
|
reg byte y [ init_font_hex::idx#3 ]
|
|
|
|
|
|
FINAL ASSEMBLER
|
|
Score: 1044103
|
|
|
|
// File Comments
|
|
// Find atan2(x, y) using the CORDIC method
|
|
// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf
|
|
// Upstart
|
|
.pc = $801 "Basic"
|
|
:BasicUpstart(main)
|
|
.pc = $80d "Program"
|
|
// Global Constants & labels
|
|
// The number of iterations performed during 16-bit CORDIC atan2 calculation
|
|
.const CORDIC_ITERATIONS_16 = $f
|
|
.label D018 = $d018
|
|
// Color Ram
|
|
.label COLS = $d800
|
|
.label CHARSET = $2000
|
|
.label SCREEN = $2800
|
|
.label print_char_cursor = 8
|
|
// @begin
|
|
// [1] phi from @begin to @1 [phi:@begin->@1]
|
|
// @1
|
|
// [2] call main
|
|
// [4] phi from @1 to main [phi:@1->main]
|
|
// [3] phi from @1 to @end [phi:@1->@end]
|
|
// @end
|
|
// main
|
|
main: {
|
|
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
|
|
.label col00 = COLS+$c*$28+$13
|
|
.label __4 = $a
|
|
.label xw = $17
|
|
.label yw = $19
|
|
.label angle_w = $a
|
|
.label diff_sum = 4
|
|
.label screen = 6
|
|
.label screen_ref = 8
|
|
.label x = 3
|
|
.label y = 2
|
|
// init_font_hex(CHARSET)
|
|
// [5] call init_font_hex
|
|
// [101] phi from main to init_font_hex [phi:main->init_font_hex]
|
|
jsr init_font_hex
|
|
// [6] phi from main to main::toD0181 [phi:main->main::toD0181]
|
|
// main::toD0181
|
|
// main::@6
|
|
// *D018 = toD018(SCREEN, CHARSET)
|
|
// [7] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2
|
|
lda #toD0181_return
|
|
sta D018
|
|
// [8] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
|
|
// [8] phi (byte*) main::screen#5 = (const nomodify byte*) SCREEN [phi:main::@6->main::@1#0] -- pbuz1=pbuc1
|
|
lda #<SCREEN
|
|
sta.z screen
|
|
lda #>SCREEN
|
|
sta.z screen+1
|
|
// [8] phi (word) main::diff_sum#7 = (word) 0 [phi:main::@6->main::@1#1] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z diff_sum
|
|
sta.z diff_sum+1
|
|
// [8] phi (byte*) main::screen_ref#5 = (const to_nomodify byte*) SCREEN_REF [phi:main::@6->main::@1#2] -- pbuz1=pbuc1
|
|
lda #<SCREEN_REF
|
|
sta.z screen_ref
|
|
lda #>SCREEN_REF
|
|
sta.z screen_ref+1
|
|
// [8] phi (signed byte) main::y#4 = (signed byte) -$c [phi:main::@6->main::@1#3] -- vbsz1=vbsc1
|
|
lda #-$c
|
|
sta.z y
|
|
// [8] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
|
|
// [8] phi (byte*) main::screen#5 = (byte*) main::screen#1 [phi:main::@3->main::@1#0] -- register_copy
|
|
// [8] phi (word) main::diff_sum#7 = (word) main::diff_sum#1 [phi:main::@3->main::@1#1] -- register_copy
|
|
// [8] phi (byte*) main::screen_ref#5 = (byte*) main::screen_ref#1 [phi:main::@3->main::@1#2] -- register_copy
|
|
// [8] phi (signed byte) main::y#4 = (signed byte) main::y#1 [phi:main::@3->main::@1#3] -- register_copy
|
|
// main::@1
|
|
__b1:
|
|
// [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
|
// [9] phi (byte*) main::screen#2 = (byte*) main::screen#5 [phi:main::@1->main::@2#0] -- register_copy
|
|
// [9] phi (word) main::diff_sum#2 = (word) main::diff_sum#7 [phi:main::@1->main::@2#1] -- register_copy
|
|
// [9] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#5 [phi:main::@1->main::@2#2] -- register_copy
|
|
// [9] phi (signed byte) main::x#2 = (signed byte) -$13 [phi:main::@1->main::@2#3] -- vbsz1=vbsc1
|
|
lda #-$13
|
|
sta.z x
|
|
// [9] phi from main::@8 to main::@2 [phi:main::@8->main::@2]
|
|
// [9] phi (byte*) main::screen#2 = (byte*) main::screen#1 [phi:main::@8->main::@2#0] -- register_copy
|
|
// [9] phi (word) main::diff_sum#2 = (word) main::diff_sum#1 [phi:main::@8->main::@2#1] -- register_copy
|
|
// [9] phi (byte*) main::screen_ref#2 = (byte*) main::screen_ref#1 [phi:main::@8->main::@2#2] -- register_copy
|
|
// [9] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@8->main::@2#3] -- register_copy
|
|
// main::@2
|
|
__b2:
|
|
// xw = (signed word)(word){ (byte)x, 0 }
|
|
// [10] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1
|
|
lda.z x
|
|
ldy #0
|
|
sta.z xw+1
|
|
sty.z xw
|
|
// yw = (signed word)(word){ (byte)y, 0 }
|
|
// [11] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1
|
|
lda.z y
|
|
sta.z yw+1
|
|
sty.z yw
|
|
// atan2_16(xw, yw)
|
|
// [12] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0
|
|
// [13] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0
|
|
// [14] call atan2_16
|
|
jsr atan2_16
|
|
// [15] (word) atan2_16::return#2 ← (word) atan2_16::return#0
|
|
// main::@7
|
|
// angle_w = atan2_16(xw, yw)
|
|
// [16] (word) main::angle_w#0 ← (word) atan2_16::return#2
|
|
// angle_w+0x0080
|
|
// [17] (word~) main::$4 ← (word) main::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1
|
|
lda #$80
|
|
clc
|
|
adc.z __4
|
|
sta.z __4
|
|
bcc !+
|
|
inc.z __4+1
|
|
!:
|
|
// ang_w = >(angle_w+0x0080)
|
|
// [18] (byte) main::ang_w#0 ← > (word~) main::$4 -- vbuxx=_hi_vwuz1
|
|
ldx.z __4+1
|
|
// diff(ang_w, *screen_ref)
|
|
// [19] (byte) diff::bb1#0 ← (byte) main::ang_w#0
|
|
// [20] (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2) -- vbuaa=_deref_pbuz1
|
|
ldy #0
|
|
lda (screen_ref),y
|
|
// [21] call diff
|
|
jsr diff
|
|
// [22] (byte) diff::return#0 ← (byte) diff::return#1
|
|
// main::@8
|
|
// [23] (byte~) main::$6 ← (byte) diff::return#0
|
|
// diff_sum += diff(ang_w, *screen_ref)
|
|
// [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$6 -- vwuz1=vwuz1_plus_vbuaa
|
|
//*screen = (>angle_w)-angle_b;
|
|
//*screen = >angle_w;
|
|
clc
|
|
adc.z diff_sum
|
|
sta.z diff_sum
|
|
bcc !+
|
|
inc.z diff_sum+1
|
|
!:
|
|
// ang_w - *screen_ref
|
|
// [25] (byte~) main::$7 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2) -- vbuaa=vbuxx_minus__deref_pbuz1
|
|
txa
|
|
sec
|
|
ldy #0
|
|
sbc (screen_ref),y
|
|
// *screen = ang_w - *screen_ref
|
|
// [26] *((byte*) main::screen#2) ← (byte~) main::$7 -- _deref_pbuz1=vbuaa
|
|
sta (screen),y
|
|
// screen++;
|
|
// [27] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
|
|
inc.z screen
|
|
bne !+
|
|
inc.z screen+1
|
|
!:
|
|
// screen_ref++;
|
|
// [28] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 -- pbuz1=_inc_pbuz1
|
|
inc.z screen_ref
|
|
bne !+
|
|
inc.z screen_ref+1
|
|
!:
|
|
// for(signed byte x: -19..20)
|
|
// [29] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1
|
|
inc.z x
|
|
// [30] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 -- vbsz1_neq_vbsc1_then_la1
|
|
lda #$15
|
|
cmp.z x
|
|
bne __b2
|
|
// main::@3
|
|
// for(signed byte y: -12..12)
|
|
// [31] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 -- vbsz1=_inc_vbsz1
|
|
inc.z y
|
|
// [32] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 -- vbsz1_neq_vbsc1_then_la1
|
|
lda #$d
|
|
cmp.z y
|
|
bne __b1
|
|
// main::@4
|
|
// print_uint(diff_sum)
|
|
// [33] (word) print_uint::w#0 ← (word) main::diff_sum#1
|
|
// [34] call print_uint
|
|
jsr print_uint
|
|
// main::@5
|
|
__b5:
|
|
// (*col00)++;
|
|
// [35] *((const byte*) main::col00) ← ++ *((const byte*) main::col00) -- _deref_pbuc1=_inc__deref_pbuc1
|
|
inc col00
|
|
jmp __b5
|
|
}
|
|
// print_uint
|
|
// Print a unsigned int as HEX
|
|
// print_uint(word zp(4) w)
|
|
print_uint: {
|
|
.label w = 4
|
|
// print_uchar(>w)
|
|
// [36] (byte) print_uchar::b#0 ← > (word) print_uint::w#0 -- vbuxx=_hi_vwuz1
|
|
ldx.z w+1
|
|
// [37] call print_uchar
|
|
// [41] phi from print_uint to print_uchar [phi:print_uint->print_uchar]
|
|
// [41] phi (byte*) print_char_cursor#24 = (byte*) 1024 [phi:print_uint->print_uchar#0] -- pbuz1=pbuc1
|
|
lda #<$400
|
|
sta.z print_char_cursor
|
|
lda #>$400
|
|
sta.z print_char_cursor+1
|
|
// [41] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy
|
|
jsr print_uchar
|
|
// print_uint::@1
|
|
// print_uchar(<w)
|
|
// [38] (byte) print_uchar::b#1 ← < (word) print_uint::w#0 -- vbuxx=_lo_vwuz1
|
|
ldx.z w
|
|
// [39] call print_uchar
|
|
// [41] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar]
|
|
// [41] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#19 [phi:print_uint::@1->print_uchar#0] -- register_copy
|
|
// [41] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy
|
|
jsr print_uchar
|
|
// print_uint::@return
|
|
// }
|
|
// [40] return
|
|
rts
|
|
}
|
|
// print_uchar
|
|
// Print a char as HEX
|
|
// print_uchar(byte register(X) b)
|
|
print_uchar: {
|
|
// b>>4
|
|
// [42] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4 -- vbuaa=vbuxx_ror_4
|
|
txa
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
// print_char(print_hextab[b>>4])
|
|
// [43] (byte) print_char::ch#0 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$0) -- vbuaa=pbuc1_derefidx_vbuaa
|
|
tay
|
|
lda print_hextab,y
|
|
// [44] call print_char
|
|
// Table of hexadecimal digits
|
|
// [49] phi from print_uchar to print_char [phi:print_uchar->print_char]
|
|
// [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#24 [phi:print_uchar->print_char#0] -- register_copy
|
|
// [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy
|
|
jsr print_char
|
|
// print_uchar::@1
|
|
// b&$f
|
|
// [45] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f -- vbuxx=vbuxx_band_vbuc1
|
|
lda #$f
|
|
axs #0
|
|
// print_char(print_hextab[b&$f])
|
|
// [46] (byte) print_char::ch#1 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$2) -- vbuaa=pbuc1_derefidx_vbuxx
|
|
lda print_hextab,x
|
|
// [47] call print_char
|
|
// [49] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char]
|
|
// [49] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#19 [phi:print_uchar::@1->print_char#0] -- register_copy
|
|
// [49] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy
|
|
jsr print_char
|
|
// print_uchar::@return
|
|
// }
|
|
// [48] return
|
|
rts
|
|
}
|
|
// print_char
|
|
// Print a single char
|
|
// print_char(byte register(A) ch)
|
|
print_char: {
|
|
// *(print_char_cursor++) = ch
|
|
// [50] *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2 -- _deref_pbuz1=vbuaa
|
|
ldy #0
|
|
sta (print_char_cursor),y
|
|
// *(print_char_cursor++) = ch;
|
|
// [51] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1
|
|
inc.z print_char_cursor
|
|
bne !+
|
|
inc.z print_char_cursor+1
|
|
!:
|
|
// print_char::@return
|
|
// }
|
|
// [52] return
|
|
rts
|
|
}
|
|
// diff
|
|
// diff(byte register(X) bb1, byte register(A) bb2)
|
|
diff: {
|
|
// (bb1<bb2)?(bb2-bb1):bb1-bb2
|
|
// [53] if((byte) diff::bb1#0<(byte) diff::bb2#0) goto diff::@1 -- vbuxx_lt_vbuaa_then_la1
|
|
sta.z $ff
|
|
cpx.z $ff
|
|
bcc __b1
|
|
// diff::@2
|
|
// [54] (byte~) diff::$2 ← (byte) diff::bb1#0 - (byte) diff::bb2#0 -- vbuaa=vbuxx_minus_vbuaa
|
|
sta.z $ff
|
|
txa
|
|
sec
|
|
sbc.z $ff
|
|
// [55] phi from diff::@1 diff::@2 to diff::@3 [phi:diff::@1/diff::@2->diff::@3]
|
|
// [55] phi (byte) diff::return#1 = (byte~) diff::$4 [phi:diff::@1/diff::@2->diff::@3#0] -- register_copy
|
|
// diff::@3
|
|
// diff::@return
|
|
// }
|
|
// [56] return
|
|
rts
|
|
// diff::@1
|
|
__b1:
|
|
// (bb1<bb2)?(bb2-bb1):bb1-bb2
|
|
// [57] (byte~) diff::$4 ← (byte) diff::bb2#0 - (byte) diff::bb1#0 -- vbuaa=vbuaa_minus_vbuxx
|
|
stx.z $ff
|
|
sec
|
|
sbc.z $ff
|
|
rts
|
|
}
|
|
// atan2_16
|
|
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
|
|
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
|
|
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
|
|
// atan2_16(signed word zp($17) x, signed word zp($19) y)
|
|
atan2_16: {
|
|
.label __2 = $e
|
|
.label __7 = $11
|
|
.label yi = $e
|
|
.label xi = $11
|
|
.label angle = $a
|
|
.label xd = $c
|
|
.label yd = $13
|
|
.label return = $a
|
|
.label x = $17
|
|
.label y = $19
|
|
// (y>=0)?y:-y
|
|
// [58] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1
|
|
lda.z y+1
|
|
bmi !__b1+
|
|
jmp __b1
|
|
!__b1:
|
|
// atan2_16::@2
|
|
// [59] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2
|
|
sec
|
|
lda #0
|
|
sbc.z y
|
|
sta.z __2
|
|
lda #0
|
|
sbc.z y+1
|
|
sta.z __2+1
|
|
// [60] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
|
|
// [60] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy
|
|
// atan2_16::@3
|
|
__b3:
|
|
// (x>=0)?x:-x
|
|
// [61] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1
|
|
lda.z x+1
|
|
bmi !__b4+
|
|
jmp __b4
|
|
!__b4:
|
|
// atan2_16::@5
|
|
// [62] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2
|
|
sec
|
|
lda #0
|
|
sbc.z x
|
|
sta.z __7
|
|
lda #0
|
|
sbc.z x+1
|
|
sta.z __7+1
|
|
// [63] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
|
|
// [63] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy
|
|
// atan2_16::@6
|
|
__b6:
|
|
// [64] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
|
|
// [64] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1
|
|
lda #<0
|
|
sta.z angle
|
|
sta.z angle+1
|
|
// [64] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1
|
|
tax
|
|
// [64] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
|
|
// [64] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy
|
|
// atan2_16::@10
|
|
__b10:
|
|
// if(yi==0)
|
|
// [65] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1
|
|
lda.z yi+1
|
|
bne __b11
|
|
lda.z yi
|
|
bne __b11
|
|
// [66] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
|
|
// [66] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy
|
|
// atan2_16::@12
|
|
__b12:
|
|
// angle /=2
|
|
// [67] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1
|
|
lsr.z angle+1
|
|
ror.z angle
|
|
// if(x<0)
|
|
// [68] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1
|
|
lda.z x+1
|
|
bpl __b7
|
|
// atan2_16::@21
|
|
// angle = 0x8000-angle
|
|
// [69] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
|
|
sec
|
|
lda #<$8000
|
|
sbc.z angle
|
|
sta.z angle
|
|
lda #>$8000
|
|
sbc.z angle+1
|
|
sta.z angle+1
|
|
// [70] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
|
|
// [70] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy
|
|
// atan2_16::@7
|
|
__b7:
|
|
// if(y<0)
|
|
// [71] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1
|
|
lda.z y+1
|
|
bpl __b8
|
|
// atan2_16::@9
|
|
// angle = -angle
|
|
// [72] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1
|
|
sec
|
|
lda #0
|
|
sbc.z angle
|
|
sta.z angle
|
|
lda #0
|
|
sbc.z angle+1
|
|
sta.z angle+1
|
|
// [73] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
|
|
// [73] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy
|
|
// atan2_16::@8
|
|
__b8:
|
|
// atan2_16::@return
|
|
// }
|
|
// [74] return
|
|
rts
|
|
// atan2_16::@11
|
|
__b11:
|
|
// [75] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx
|
|
txa
|
|
tay
|
|
// [76] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2
|
|
lda.z xi
|
|
sta.z xd
|
|
lda.z xi+1
|
|
sta.z xd+1
|
|
// [77] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2
|
|
lda.z yi
|
|
sta.z yd
|
|
lda.z yi+1
|
|
sta.z yd+1
|
|
// [78] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
|
|
// [78] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy
|
|
// [78] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy
|
|
// [78] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy
|
|
// atan2_16::@13
|
|
__b13:
|
|
// while(shift>=2)
|
|
// [79] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1
|
|
cpy #2
|
|
bcs __b14
|
|
// atan2_16::@15
|
|
// if(shift)
|
|
// [80] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1
|
|
cpy #0
|
|
beq __b17
|
|
// atan2_16::@16
|
|
// xd >>= 1
|
|
// [81] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1
|
|
lda.z xd+1
|
|
cmp #$80
|
|
ror.z xd+1
|
|
ror.z xd
|
|
// yd >>= 1
|
|
// [82] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1
|
|
lda.z yd+1
|
|
cmp #$80
|
|
ror.z yd+1
|
|
ror.z yd
|
|
// [83] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
|
|
// [83] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy
|
|
// [83] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy
|
|
// atan2_16::@17
|
|
__b17:
|
|
// if(yi>=0)
|
|
// [84] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1
|
|
lda.z yi+1
|
|
bpl __b18
|
|
// atan2_16::@20
|
|
// xi -= yd
|
|
// [85] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2
|
|
lda.z xi
|
|
sec
|
|
sbc.z yd
|
|
sta.z xi
|
|
lda.z xi+1
|
|
sbc.z yd+1
|
|
sta.z xi+1
|
|
// yi += xd
|
|
// [86] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2
|
|
lda.z yi
|
|
clc
|
|
adc.z xd
|
|
sta.z yi
|
|
lda.z yi+1
|
|
adc.z xd+1
|
|
sta.z yi+1
|
|
// angle -= CORDIC_ATAN2_ANGLES_16[i]
|
|
// [87] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
|
|
txa
|
|
asl
|
|
// [88] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa
|
|
tay
|
|
sec
|
|
lda.z angle
|
|
sbc CORDIC_ATAN2_ANGLES_16,y
|
|
sta.z angle
|
|
lda.z angle+1
|
|
sbc CORDIC_ATAN2_ANGLES_16+1,y
|
|
sta.z angle+1
|
|
// [89] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
|
|
// [89] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy
|
|
// [89] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
|
|
// [89] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy
|
|
// atan2_16::@19
|
|
__b19:
|
|
// for( char i: 0..CORDIC_ITERATIONS_16-1)
|
|
// [90] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [91] if((byte) atan2_16::i#1==(const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1
|
|
cpx #CORDIC_ITERATIONS_16-1+1
|
|
bne !__b12+
|
|
jmp __b12
|
|
!__b12:
|
|
// [64] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
|
|
// [64] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
|
|
// [64] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
|
|
// [64] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
|
|
// [64] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy
|
|
jmp __b10
|
|
// atan2_16::@18
|
|
__b18:
|
|
// xi += yd
|
|
// [92] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2
|
|
lda.z xi
|
|
clc
|
|
adc.z yd
|
|
sta.z xi
|
|
lda.z xi+1
|
|
adc.z yd+1
|
|
sta.z xi+1
|
|
// yi -= xd
|
|
// [93] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2
|
|
lda.z yi
|
|
sec
|
|
sbc.z xd
|
|
sta.z yi
|
|
lda.z yi+1
|
|
sbc.z xd+1
|
|
sta.z yi+1
|
|
// angle += CORDIC_ATAN2_ANGLES_16[i]
|
|
// [94] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
|
|
txa
|
|
asl
|
|
// [95] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa
|
|
tay
|
|
clc
|
|
lda.z angle
|
|
adc CORDIC_ATAN2_ANGLES_16,y
|
|
sta.z angle
|
|
lda.z angle+1
|
|
adc CORDIC_ATAN2_ANGLES_16+1,y
|
|
sta.z angle+1
|
|
jmp __b19
|
|
// atan2_16::@14
|
|
__b14:
|
|
// xd >>= 2
|
|
// [96] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2
|
|
lda.z xd+1
|
|
cmp #$80
|
|
ror.z xd+1
|
|
ror.z xd
|
|
lda.z xd+1
|
|
cmp #$80
|
|
ror.z xd+1
|
|
ror.z xd
|
|
// yd >>= 2
|
|
// [97] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2
|
|
lda.z yd+1
|
|
cmp #$80
|
|
ror.z yd+1
|
|
ror.z yd
|
|
lda.z yd+1
|
|
cmp #$80
|
|
ror.z yd+1
|
|
ror.z yd
|
|
// shift -=2
|
|
// [98] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2
|
|
dey
|
|
dey
|
|
jmp __b13
|
|
// atan2_16::@4
|
|
__b4:
|
|
// (x>=0)?x:-x
|
|
// [99] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2
|
|
lda.z x
|
|
sta.z xi
|
|
lda.z x+1
|
|
sta.z xi+1
|
|
jmp __b6
|
|
// atan2_16::@1
|
|
__b1:
|
|
// (y>=0)?y:-y
|
|
// [100] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2
|
|
lda.z y
|
|
sta.z yi
|
|
lda.z y+1
|
|
sta.z yi+1
|
|
jmp __b3
|
|
}
|
|
// init_font_hex
|
|
// Make charset from proto chars
|
|
// init_font_hex(byte* zp($11) charset)
|
|
init_font_hex: {
|
|
.label __0 = $1b
|
|
.label idx = $16
|
|
.label proto_lo = $13
|
|
.label charset = $11
|
|
.label c1 = $15
|
|
.label proto_hi = $e
|
|
.label c = $10
|
|
// [102] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1]
|
|
// [102] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z c
|
|
// [102] phi (byte*) init_font_hex::proto_hi#6 = (const byte*) FONT_HEX_PROTO [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1
|
|
lda #<FONT_HEX_PROTO
|
|
sta.z proto_hi
|
|
lda #>FONT_HEX_PROTO
|
|
sta.z proto_hi+1
|
|
// [102] phi (byte*) init_font_hex::charset#5 = (const nomodify byte*) CHARSET [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1
|
|
lda #<CHARSET
|
|
sta.z charset
|
|
lda #>CHARSET
|
|
sta.z charset+1
|
|
// [102] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1]
|
|
// [102] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy
|
|
// [102] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy
|
|
// [102] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy
|
|
// init_font_hex::@1
|
|
__b1:
|
|
// [103] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2]
|
|
// [103] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta.z c1
|
|
// [103] phi (byte*) init_font_hex::proto_lo#4 = (const byte*) FONT_HEX_PROTO [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1
|
|
lda #<FONT_HEX_PROTO
|
|
sta.z proto_lo
|
|
lda #>FONT_HEX_PROTO
|
|
sta.z proto_lo+1
|
|
// [103] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy
|
|
// [103] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2]
|
|
// [103] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy
|
|
// [103] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy
|
|
// [103] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy
|
|
// init_font_hex::@2
|
|
__b2:
|
|
// charset[idx++] = 0
|
|
// [104] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1
|
|
lda #0
|
|
tay
|
|
sta (charset),y
|
|
// [105] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3]
|
|
// [105] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1
|
|
lda #1
|
|
sta.z idx
|
|
// [105] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [105] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3]
|
|
// [105] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy
|
|
// [105] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy
|
|
// init_font_hex::@3
|
|
__b3:
|
|
// proto_hi[i]<<4
|
|
// [106] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4
|
|
txa
|
|
tay
|
|
lda (proto_hi),y
|
|
asl
|
|
asl
|
|
asl
|
|
asl
|
|
sta.z __0
|
|
// proto_lo[i]<<1
|
|
// [107] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1
|
|
txa
|
|
tay
|
|
lda (proto_lo),y
|
|
asl
|
|
// proto_hi[i]<<4 | proto_lo[i]<<1
|
|
// [108] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa
|
|
ora.z __0
|
|
// charset[idx++] = proto_hi[i]<<4 | proto_lo[i]<<1
|
|
// [109] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa
|
|
ldy.z idx
|
|
sta (charset),y
|
|
// charset[idx++] = proto_hi[i]<<4 | proto_lo[i]<<1;
|
|
// [110] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1
|
|
inc.z idx
|
|
// for( byte i: 0..4)
|
|
// [111] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [112] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1
|
|
cpx #5
|
|
bne __b3
|
|
// init_font_hex::@4
|
|
// charset[idx++] = 0
|
|
// [113] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1
|
|
lda #0
|
|
ldy.z idx
|
|
sta (charset),y
|
|
// charset[idx++] = 0;
|
|
// [114] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1
|
|
iny
|
|
// charset[idx++] = 0
|
|
// [115] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1
|
|
sta (charset),y
|
|
// proto_lo += 5
|
|
// [116] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #5
|
|
clc
|
|
adc.z proto_lo
|
|
sta.z proto_lo
|
|
bcc !+
|
|
inc.z proto_lo+1
|
|
!:
|
|
// charset += 8
|
|
// [117] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #8
|
|
clc
|
|
adc.z charset
|
|
sta.z charset
|
|
bcc !+
|
|
inc.z charset+1
|
|
!:
|
|
// for( byte c: 0..15 )
|
|
// [118] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1
|
|
inc.z c1
|
|
// [119] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1
|
|
lda #$10
|
|
cmp.z c1
|
|
bne __b2
|
|
// init_font_hex::@5
|
|
// proto_hi += 5
|
|
// [120] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1
|
|
lda #5
|
|
clc
|
|
adc.z proto_hi
|
|
sta.z proto_hi
|
|
bcc !+
|
|
inc.z proto_hi+1
|
|
!:
|
|
// for( byte c: 0..15 )
|
|
// [121] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1
|
|
inc.z c
|
|
// [122] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1
|
|
lda #$10
|
|
cmp.z c
|
|
bne __b1
|
|
// init_font_hex::@return
|
|
// }
|
|
// [123] return
|
|
rts
|
|
}
|
|
// File Data
|
|
// Bit patterns for symbols 0-f (3x5 pixels) used in font hex
|
|
FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4
|
|
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
|
|
CORDIC_ATAN2_ANGLES_16:
|
|
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
|
|
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
|
|
|
print_hextab: .text "0123456789abcdef"
|
|
SCREEN_REF:
|
|
.for(var y=-12;y<=12;y++)
|
|
.for(var x=-19;x<=20;x++)
|
|
.byte round(256*atan2(y, x)/PI/2)
|
|
|
|
|