@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @1
  [3] phi()
main: scope:[main]  from @1
  asm { sei  }
  [5] call mulf_init 
  to:main::@1
main::@1: scope:[main]  from main
  [6] *((const word*) psp1#0) ← (word)(const byte[$200]) mulf_sqr1#0
  [7] *((const word*) psp2#0) ← (word)(const byte[$200]) mulf_sqr2#0
  [8] call print_cls 
  to:main::@2
main::@2: scope:[main]  from main::@1
  [9] phi()
  [10] call do_perspective 
  to:main::@return
main::@return: scope:[main]  from main::@2
  [11] return 
  to:@return
do_perspective: scope:[do_perspective]  from main::@2
  [12] phi()
  [13] call print_str 
  to:do_perspective::@1
do_perspective::@1: scope:[do_perspective]  from do_perspective
  [14] phi()
  [15] call print_sbyte 
  to:do_perspective::@2
do_perspective::@2: scope:[do_perspective]  from do_perspective::@1
  [16] phi()
  [17] call print_str 
  to:do_perspective::@3
do_perspective::@3: scope:[do_perspective]  from do_perspective::@2
  [18] phi()
  [19] call print_sbyte 
  to:do_perspective::@4
do_perspective::@4: scope:[do_perspective]  from do_perspective::@3
  [20] phi()
  [21] call print_str 
  to:do_perspective::@5
do_perspective::@5: scope:[do_perspective]  from do_perspective::@4
  [22] phi()
  [23] call print_sbyte 
  to:do_perspective::@6
do_perspective::@6: scope:[do_perspective]  from do_perspective::@5
  [24] phi()
  [25] call print_str 
  to:do_perspective::@7
do_perspective::@7: scope:[do_perspective]  from do_perspective::@6
  [26] phi()
  [27] call perspective 
  to:do_perspective::@8
do_perspective::@8: scope:[do_perspective]  from do_perspective::@7
  [28] (byte~) print_byte::b#6 ← (byte)*((const signed byte*) xr#0)
  [29] call print_byte 
  to:do_perspective::@9
do_perspective::@9: scope:[do_perspective]  from do_perspective::@8
  [30] phi()
  [31] call print_str 
  to:do_perspective::@10
do_perspective::@10: scope:[do_perspective]  from do_perspective::@9
  [32] (byte~) print_byte::b#5 ← (byte)*((const signed byte*) yr#0)
  [33] call print_byte 
  to:do_perspective::@11
do_perspective::@11: scope:[do_perspective]  from do_perspective::@10
  [34] phi()
  [35] call print_str 
  to:do_perspective::@12
do_perspective::@12: scope:[do_perspective]  from do_perspective::@11
  [36] phi()
  [37] call print_ln 
  to:do_perspective::@return
do_perspective::@return: scope:[do_perspective]  from do_perspective::@12
  [38] return 
  to:@return
print_ln: scope:[print_ln]  from do_perspective::@12
  [39] phi()
  to:print_ln::@1
print_ln::@1: scope:[print_ln]  from print_ln print_ln::@1
  [40] (byte*) print_line_cursor#11 ← phi( print_ln/(byte*) 1024 print_ln::@1/(byte*) print_line_cursor#1 )
  [41] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#11 + (byte) $28
  [42] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1
  to:print_ln::@return
print_ln::@return: scope:[print_ln]  from print_ln::@1
  [43] return 
  to:@return
print_str: scope:[print_str]  from do_perspective do_perspective::@11 do_perspective::@2 do_perspective::@4 do_perspective::@6 do_perspective::@9
  [44] (byte*) print_char_cursor#74 ← phi( do_perspective/(byte*) 1024 do_perspective::@11/(byte*) print_char_cursor#12 do_perspective::@2/(byte*) print_char_cursor#12 do_perspective::@4/(byte*) print_char_cursor#12 do_perspective::@6/(byte*) print_char_cursor#12 do_perspective::@9/(byte*) print_char_cursor#12 )
  [44] (byte*) print_str::str#9 ← phi( do_perspective/(const string) do_perspective::str do_perspective::@11/(const string) do_perspective::str5 do_perspective::@2/(const string) do_perspective::str1 do_perspective::@4/(const string) do_perspective::str1 do_perspective::@6/(const string) do_perspective::str3 do_perspective::@9/(const string) do_perspective::str1 )
  to:print_str::@1
print_str::@1: scope:[print_str]  from print_str print_str::@2
  [45] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#74 print_str::@2/(byte*) print_char_cursor#1 )
  [45] (byte*) print_str::str#7 ← phi( print_str/(byte*) print_str::str#9 print_str::@2/(byte*) print_str::str#0 )
  [46] if((byte) 0!=*((byte*) print_str::str#7)) goto print_str::@2
  to:print_str::@return
print_str::@return: scope:[print_str]  from print_str::@1
  [47] return 
  to:@return
print_str::@2: scope:[print_str]  from print_str::@1
  [48] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#7)
  [49] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2
  [50] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#7
  to:print_str::@1
print_byte: scope:[print_byte]  from do_perspective::@10 do_perspective::@8 print_sbyte::@2
  [51] (byte*) print_char_cursor#69 ← phi( do_perspective::@10/(byte*) print_char_cursor#2 do_perspective::@8/(byte*) print_char_cursor#2 print_sbyte::@2/(byte*) print_char_cursor#12 )
  [51] (byte) print_byte::b#3 ← phi( do_perspective::@10/(byte~) print_byte::b#5 do_perspective::@8/(byte~) print_byte::b#6 print_sbyte::@2/(byte) print_byte::b#0 )
  [52] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte) 4
  [53] (byte) print_char::ch#2 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0)
  [54] call print_char 
  to:print_byte::@1
print_byte::@1: scope:[print_byte]  from print_byte
  [55] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f
  [56] (byte) print_char::ch#3 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2)
  [57] call print_char 
  to:print_byte::@return
print_byte::@return: scope:[print_byte]  from print_byte::@1
  [58] return 
  to:@return
print_char: scope:[print_char]  from print_byte print_byte::@1 print_sbyte::@1 print_sbyte::@3
  [59] (byte*) print_char_cursor#44 ← phi( print_byte/(byte*) print_char_cursor#69 print_byte::@1/(byte*) print_char_cursor#12 print_sbyte::@1/(byte*) print_char_cursor#2 print_sbyte::@3/(byte*) print_char_cursor#2 )
  [59] (byte) print_char::ch#4 ← phi( print_byte/(byte) print_char::ch#2 print_byte::@1/(byte) print_char::ch#3 print_sbyte::@1/(byte) '-' print_sbyte::@3/(byte) ' ' )
  [60] *((byte*) print_char_cursor#44) ← (byte) print_char::ch#4
  [61] (byte*) print_char_cursor#12 ← ++ (byte*) print_char_cursor#44
  to:print_char::@return
print_char::@return: scope:[print_char]  from print_char
  [62] return 
  to:@return
perspective: scope:[perspective]  from do_perspective::@7
  [63] *((const signed byte*) xr#0) ← (const signed byte) do_perspective::x#0
  [64] *((const signed byte*) yr#0) ← (const signed byte) do_perspective::y#0
  [65] *((const signed byte*) zr#0) ← (const signed byte) do_perspective::z#0
  asm { ldazr staPP+1 PP: ldaPERSP_Z stapsp1 eor#$ff stapsp2 clc ldyyr lda(psp1),y sbc(psp2),y adc#$80 stayr clc ldyxr lda(psp1),y sbc(psp2),y adc#$80 staxr  }
  to:perspective::@return
perspective::@return: scope:[perspective]  from perspective
  [67] return 
  to:@return
print_sbyte: scope:[print_sbyte]  from do_perspective::@1 do_perspective::@3 do_perspective::@5
  [68] (signed byte) print_sbyte::b#4 ← phi( do_perspective::@1/(const signed byte) do_perspective::x#0 do_perspective::@3/(const signed byte) do_perspective::y#0 do_perspective::@5/(const signed byte) do_perspective::z#0 )
  [69] if((signed byte) print_sbyte::b#4<(signed byte) 0) goto print_sbyte::@1
  to:print_sbyte::@3
print_sbyte::@3: scope:[print_sbyte]  from print_sbyte
  [70] phi()
  [71] call print_char 
  to:print_sbyte::@2
print_sbyte::@2: scope:[print_sbyte]  from print_sbyte::@3 print_sbyte::@4
  [72] (signed byte) print_sbyte::b#6 ← phi( print_sbyte::@4/(signed byte) print_sbyte::b#0 print_sbyte::@3/(signed byte) print_sbyte::b#4 )
  [73] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#6
  [74] call print_byte 
  to:print_sbyte::@return
print_sbyte::@return: scope:[print_sbyte]  from print_sbyte::@2
  [75] return 
  to:@return
print_sbyte::@1: scope:[print_sbyte]  from print_sbyte
  [76] phi()
  [77] call print_char 
  to:print_sbyte::@4
print_sbyte::@4: scope:[print_sbyte]  from print_sbyte::@1
  [78] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#4
  to:print_sbyte::@2
print_cls: scope:[print_cls]  from main::@1
  [79] phi()
  [80] call memset 
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls
  [81] return 
  to:@return
memset: scope:[memset]  from print_cls
  [82] phi()
  to:memset::@2
memset::@2: scope:[memset]  from memset memset::@1
  [83] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 )
  [84] *((byte*) memset::dst#4) ← (const byte) memset::c#0
  [85] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4
  to:memset::@1
memset::@1: scope:[memset]  from memset::@2
  [86] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2
  to:memset::@return
memset::@return: scope:[memset]  from memset::@1
  [87] return 
  to:@return
mulf_init: scope:[mulf_init]  from main
  [88] phi()
  to:mulf_init::@1
mulf_init::@1: scope:[mulf_init]  from mulf_init mulf_init::@1
  [89] (signed word) mulf_init::add#2 ← phi( mulf_init/(signed byte) 1 mulf_init::@1/(signed word) mulf_init::add#1 )
  [89] (byte) mulf_init::i#2 ← phi( mulf_init/(byte) 0 mulf_init::@1/(byte) mulf_init::i#1 )
  [89] (signed word) mulf_init::sqr#2 ← phi( mulf_init/(signed byte) 0 mulf_init::@1/(signed word) mulf_init::sqr#1 )
  [90] (byte) mulf_init::val#0 ← > (signed word) mulf_init::sqr#2
  [91] *((const byte[$200]) mulf_sqr1#0 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0
  [92] *((const byte[$200]) mulf_sqr1#0+(word) $100 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0
  [93] (byte~) mulf_init::$4 ← - (byte) mulf_init::i#2
  [94] *((const byte[$200]) mulf_sqr1#0 + (byte~) mulf_init::$4) ← (byte) mulf_init::val#0
  [95] *((const byte[$200]) mulf_sqr1#0+(word) $100 + (byte~) mulf_init::$4) ← (byte) mulf_init::val#0
  [96] *((const byte[$200]) mulf_sqr2#0+(byte) 1 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0
  [97] *((const byte[$200]) mulf_sqr2#0+(word) $100+(byte) 1 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0
  [98] (byte~) mulf_init::$8 ← (byte) 1 - (byte) mulf_init::i#2
  [99] *((const byte[$200]) mulf_sqr2#0 + (byte~) mulf_init::$8) ← (byte) mulf_init::val#0
  [100] (byte~) mulf_init::$10 ← (byte) 1 - (byte) mulf_init::i#2
  [101] *((const byte[$200]) mulf_sqr2#0+(word) $100 + (byte~) mulf_init::$10) ← (byte) mulf_init::val#0
  [102] (signed word) mulf_init::sqr#1 ← (signed word) mulf_init::sqr#2 + (signed word) mulf_init::add#2
  [103] (signed word) mulf_init::add#1 ← (signed word) mulf_init::add#2 + (signed byte) 2
  [104] (byte) mulf_init::i#1 ← ++ (byte) mulf_init::i#2
  [105] if((byte) mulf_init::i#1!=(byte) $81) goto mulf_init::@1
  to:mulf_init::@return
mulf_init::@return: scope:[mulf_init]  from mulf_init::@1
  [106] return 
  to:@return
