Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6
Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1
Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1
Fixing pointer increment (word*) init_squares::squares ← ++ (word*) init_squares::squares
Fixing pointer addition (word~) sqrt::$1 ← (word*) sqrt::found - (word*) SQUARES
Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Fixing pointer array-indexing *((word*) SQUARES + (byte) sqr::val)
Fixing pointer array-indexing *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i)
Fixing pointer array-indexing *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) strlen::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) atan2_16::shift
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 
Inlined call (byte~) main::$5 ← call toD018 (const byte*) SCREEN1 (const byte*) CHARSET 
Inlined call (byte~) main::$7 ← call toD018 (const byte*) SCREEN2 (const byte*) CHARSET 
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) memset::@7
Culled Empty Block (label) memset::@6
Culled Empty Block (label) memset::@8
Culled Empty Block (label) memset::@9
Culled Empty Block (label) memset::@3
Culled Empty Block (label) @7
Culled Empty Block (label) @8
Culled Empty Block (label) malloc::@1
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Culled Empty Block (label) bsearch16u::@11
Culled Empty Block (label) bsearch16u::@12
Culled Empty Block (label) bsearch16u::@14
Culled Empty Block (label) bsearch16u::@16
Culled Empty Block (label) bsearch16u::@17
Culled Empty Block (label) bsearch16u::@4
Culled Empty Block (label) bsearch16u::@5
Culled Empty Block (label) @13
Culled Empty Block (label) @14
Culled Empty Block (label) @15
Culled Empty Block (label) @16
Culled Empty Block (label) init_squares::@4
Culled Empty Block (label) init_squares::@3
Culled Empty Block (label) init_squares::@5
Culled Empty Block (label) init_squares::@6
Culled Empty Block (label) @18
Culled Empty Block (label) sqr::@1
Culled Empty Block (label) @19
Culled Empty Block (label) sqrt::@1
Culled Empty Block (label) @20
Culled Empty Block (label) atan2_16::@9
Culled Empty Block (label) atan2_16::@10
Culled Empty Block (label) atan2_16::@11
Culled Empty Block (label) atan2_16::@12
Culled Empty Block (label) atan2_16::@28
Culled Empty Block (label) atan2_16::@29
Culled Empty Block (label) atan2_16::@21
Culled Empty Block (label) atan2_16::@22
Culled Empty Block (label) atan2_16::@23
Culled Empty Block (label) atan2_16::@31
Culled Empty Block (label) atan2_16::@32
Culled Empty Block (label) atan2_16::@14
Culled Empty Block (label) @21
Culled Empty Block (label) @23
Culled Empty Block (label) @24
Culled Empty Block (label) @25
Culled Empty Block (label) @26
Culled Empty Block (label) @27
Culled Empty Block (label) @28
Culled Empty Block (label) @29
Culled Empty Block (label) @30
Culled Empty Block (label) @31
Culled Empty Block (label) @32
Culled Empty Block (label) @33
Culled Empty Block (label) @34
Culled Empty Block (label) @35
Culled Empty Block (label) @36
Culled Empty Block (label) @37
Culled Empty Block (label) @38
Culled Empty Block (label) @39
Culled Empty Block (label) @40
Culled Empty Block (label) @41
Culled Empty Block (label) @42
Culled Empty Block (label) @43
Culled Empty Block (label) @44
Culled Empty Block (label) @45
Culled Empty Block (label) @46
Culled Empty Block (label) @47
Culled Empty Block (label) sid_rnd::@1
Culled Empty Block (label) main::toD0181_@1
Culled Empty Block (label) main::toD0182_@1
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Culled Empty Block (label) @50
Culled Empty Block (label) init_angle_screen::@5
Culled Empty Block (label) init_angle_screen::@6
Culled Empty Block (label) init_angle_screen::@7
Culled Empty Block (label) init_angle_screen::@8
Culled Empty Block (label) @51
Culled Empty Block (label) init_dist_screen::@17
Culled Empty Block (label) init_dist_screen::@18
Culled Empty Block (label) init_dist_screen::@11
Culled Empty Block (label) init_dist_screen::@12
Culled Empty Block (label) init_dist_screen::@13
Culled Empty Block (label) init_dist_screen::@14
Culled Empty Block (label) init_dist_screen::@15
Culled Empty Block (label) init_dist_screen::@16
Culled Empty Block (label) @52
Culled Empty Block (label) make_plasma_charset::@20
Culled Empty Block (label) make_plasma_charset::@3
Culled Empty Block (label) make_plasma_charset::@21
Culled Empty Block (label) make_plasma_charset::@16
Culled Empty Block (label) make_plasma_charset::@17
Culled Empty Block (label) make_plasma_charset::@11
Culled Empty Block (label) make_plasma_charset::@12
Culled Empty Block (label) make_plasma_charset::@14
Culled Empty Block (label) make_plasma_charset::@15
Culled Empty Block (label) make_plasma_charset::@22

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  to:@9

(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
memset: scope:[memset]  from main::@11 print_cls
  (byte) memset::c#5 ← phi( main::@11/(byte) memset::c#1 print_cls/(byte) memset::c#0 )
  (void*) memset::str#4 ← phi( main::@11/(void*) memset::str#1 print_cls/(void*) memset::str#0 )
  (word) memset::num#2 ← phi( main::@11/(word) memset::num#1 print_cls/(word) memset::num#0 )
  (bool~) memset::$0 ← (word) memset::num#2 > (number) 0
  (bool~) memset::$1 ← ! (bool~) memset::$0
  if((bool~) memset::$1) goto memset::@1
  to:memset::@2
memset::@1: scope:[memset]  from memset memset::@4
  (void*) memset::str#2 ← phi( memset/(void*) memset::str#4 memset::@4/(void*) memset::str#5 )
  (void*) memset::return#0 ← (void*) memset::str#2
  to:memset::@return
memset::@2: scope:[memset]  from memset
  (byte) memset::c#4 ← phi( memset/(byte) memset::c#5 )
  (word) memset::num#3 ← phi( memset/(word) memset::num#2 )
  (void*) memset::str#3 ← phi( memset/(void*) memset::str#4 )
  (byte*~) memset::$2 ← ((byte*)) (void*) memset::str#3
  (byte*~) memset::$3 ← (byte*~) memset::$2 + (word) memset::num#3
  (byte*) memset::end#0 ← (byte*~) memset::$3
  (byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#3
  to:memset::@4
memset::@4: scope:[memset]  from memset::@2 memset::@5
  (byte) memset::c#3 ← phi( memset::@2/(byte) memset::c#4 memset::@5/(byte) memset::c#2 )
  (void*) memset::str#5 ← phi( memset::@2/(void*) memset::str#3 memset::@5/(void*) memset::str#6 )
  (byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@5/(byte*) memset::end#2 )
  (byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@5/(byte*) memset::dst#1 )
  (bool~) memset::$4 ← (byte*) memset::dst#2 != (byte*) memset::end#1
  if((bool~) memset::$4) goto memset::@5
  to:memset::@1
memset::@5: scope:[memset]  from memset::@4
  (void*) memset::str#6 ← phi( memset::@4/(void*) memset::str#5 )
  (byte*) memset::end#2 ← phi( memset::@4/(byte*) memset::end#1 )
  (byte*) memset::dst#3 ← phi( memset::@4/(byte*) memset::dst#2 )
  (byte) memset::c#2 ← phi( memset::@4/(byte) memset::c#3 )
  *((byte*) memset::dst#3) ← (byte) memset::c#2
  (byte*) memset::dst#1 ← ++ (byte*) memset::dst#3
  to:memset::@4
memset::@return: scope:[memset]  from memset::@1
  (void*) memset::return#4 ← phi( memset::@1/(void*) memset::return#0 )
  (void*) memset::return#1 ← (void*) memset::return#4
  return 
  to:@return
@9: scope:[]  from @begin
  (byte*) heap_head#0 ← (const byte*) HEAP_TOP
  to:@17

(void*()) malloc((word) malloc::size)
malloc: scope:[malloc]  from @48 @54 init_squares
  (word) malloc::size#3 ← phi( @48/(word) malloc::size#1 @54/(word) malloc::size#2 init_squares/(word) malloc::size#0 )
  (byte*) heap_head#12 ← phi( @48/(byte*) heap_head#23 @54/(byte*) heap_head#5 init_squares/(byte*) heap_head#24 )
  (byte*~) malloc::$0 ← (byte*) heap_head#12 - (word) malloc::size#3
  (byte*) malloc::mem#0 ← (byte*~) malloc::$0
  (byte*) heap_head#1 ← (byte*) malloc::mem#0
  (void*) malloc::return#0 ← ((void*)) (byte*) malloc::mem#0
  to:malloc::@return
malloc::@return: scope:[malloc]  from malloc
  (byte*) heap_head#13 ← phi( malloc/(byte*) heap_head#1 )
  (void*) malloc::return#5 ← phi( malloc/(void*) malloc::return#0 )
  (void*) malloc::return#1 ← (void*) malloc::return#5
  (byte*) heap_head#2 ← (byte*) heap_head#13
  return 
  to:@return

(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
bsearch16u: scope:[bsearch16u]  from sqrt
  (word) bsearch16u::key#4 ← phi( sqrt/(word) bsearch16u::key#0 )
  (word*) bsearch16u::items#7 ← phi( sqrt/(word*) bsearch16u::items#1 )
  (byte) bsearch16u::num#7 ← phi( sqrt/(byte) bsearch16u::num#2 )
  to:bsearch16u::@6
bsearch16u::@6: scope:[bsearch16u]  from bsearch16u bsearch16u::@10
  (word) bsearch16u::key#3 ← phi( bsearch16u/(word) bsearch16u::key#4 bsearch16u::@10/(word) bsearch16u::key#5 )
  (word*) bsearch16u::items#6 ← phi( bsearch16u/(word*) bsearch16u::items#7 bsearch16u::@10/(word*) bsearch16u::items#8 )
  (byte) bsearch16u::num#3 ← phi( bsearch16u/(byte) bsearch16u::num#7 bsearch16u::@10/(byte) bsearch16u::num#0 )
  (bool~) bsearch16u::$5 ← (byte) bsearch16u::num#3 > (number) 0
  if((bool~) bsearch16u::$5) goto bsearch16u::@7
  to:bsearch16u::@8
bsearch16u::@7: scope:[bsearch16u]  from bsearch16u::@6
  (word) bsearch16u::key#1 ← phi( bsearch16u::@6/(word) bsearch16u::key#3 )
  (word*) bsearch16u::items#2 ← phi( bsearch16u::@6/(word*) bsearch16u::items#6 )
  (byte) bsearch16u::num#4 ← phi( bsearch16u::@6/(byte) bsearch16u::num#3 )
  (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#4 >> (number) 1
  (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 * (const byte) SIZEOF_WORD
  (word*~) bsearch16u::$7 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16
  (word*) bsearch16u::pivot#0 ← (word*~) bsearch16u::$7
  (signed word~) bsearch16u::$8 ← ((signed word)) (word) bsearch16u::key#1
  (signed word~) bsearch16u::$9 ← ((signed word)) *((word*) bsearch16u::pivot#0)
  (signed word~) bsearch16u::$10 ← (signed word~) bsearch16u::$8 - (signed word~) bsearch16u::$9
  (signed word) bsearch16u::result#0 ← (signed word~) bsearch16u::$10
  (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#0 == (number) 0
  (bool~) bsearch16u::$12 ← ! (bool~) bsearch16u::$11
  if((bool~) bsearch16u::$12) goto bsearch16u::@9
  to:bsearch16u::@13
bsearch16u::@8: scope:[bsearch16u]  from bsearch16u::@6
  (word) bsearch16u::key#2 ← phi( bsearch16u::@6/(word) bsearch16u::key#3 )
  (word*) bsearch16u::items#3 ← phi( bsearch16u::@6/(word*) bsearch16u::items#6 )
  (bool~) bsearch16u::$0 ← *((word*) bsearch16u::items#3) <= (word) bsearch16u::key#2
  if((bool~) bsearch16u::$0) goto bsearch16u::@1
  to:bsearch16u::@2
bsearch16u::@9: scope:[bsearch16u]  from bsearch16u::@7
  (word) bsearch16u::key#7 ← phi( bsearch16u::@7/(word) bsearch16u::key#1 )
  (word*) bsearch16u::items#9 ← phi( bsearch16u::@7/(word*) bsearch16u::items#2 )
  (word*) bsearch16u::pivot#3 ← phi( bsearch16u::@7/(word*) bsearch16u::pivot#0 )
  (byte) bsearch16u::num#8 ← phi( bsearch16u::@7/(byte) bsearch16u::num#4 )
  (signed word) bsearch16u::result#1 ← phi( bsearch16u::@7/(signed word) bsearch16u::result#0 )
  (bool~) bsearch16u::$13 ← (signed word) bsearch16u::result#1 > (number) 0
  (bool~) bsearch16u::$14 ← ! (bool~) bsearch16u::$13
  if((bool~) bsearch16u::$14) goto bsearch16u::@10
  to:bsearch16u::@15
bsearch16u::@13: scope:[bsearch16u]  from bsearch16u::@7
  (word*) bsearch16u::pivot#1 ← phi( bsearch16u::@7/(word*) bsearch16u::pivot#0 )
  (word*) bsearch16u::return#0 ← (word*) bsearch16u::pivot#1
  to:bsearch16u::@return
bsearch16u::@return: scope:[bsearch16u]  from bsearch16u::@13 bsearch16u::@3
  (word*) bsearch16u::return#4 ← phi( bsearch16u::@13/(word*) bsearch16u::return#0 bsearch16u::@3/(word*) bsearch16u::return#2 )
  (word*) bsearch16u::return#1 ← (word*) bsearch16u::return#4
  return 
  to:@return
bsearch16u::@10: scope:[bsearch16u]  from bsearch16u::@15 bsearch16u::@9
  (word) bsearch16u::key#5 ← phi( bsearch16u::@15/(word) bsearch16u::key#6 bsearch16u::@9/(word) bsearch16u::key#7 )
  (word*) bsearch16u::items#8 ← phi( bsearch16u::@15/(word*) bsearch16u::items#0 bsearch16u::@9/(word*) bsearch16u::items#9 )
  (byte) bsearch16u::num#5 ← phi( bsearch16u::@15/(byte) bsearch16u::num#1 bsearch16u::@9/(byte) bsearch16u::num#8 )
  (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (number) 1
  to:bsearch16u::@6
bsearch16u::@15: scope:[bsearch16u]  from bsearch16u::@9
  (word) bsearch16u::key#6 ← phi( bsearch16u::@9/(word) bsearch16u::key#7 )
  (byte) bsearch16u::num#6 ← phi( bsearch16u::@9/(byte) bsearch16u::num#8 )
  (word*) bsearch16u::pivot#2 ← phi( bsearch16u::@9/(word*) bsearch16u::pivot#3 )
  (number~) bsearch16u::$17 ← (number) 1 * (const byte) SIZEOF_WORD
  (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot#2 + (number~) bsearch16u::$17
  (word*) bsearch16u::items#0 ← (word*~) bsearch16u::$15
  (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#6
  to:bsearch16u::@10
bsearch16u::@1: scope:[bsearch16u]  from bsearch16u::@8
  (word*) bsearch16u::items#4 ← phi( bsearch16u::@8/(word*) bsearch16u::items#3 )
  (word*~) bsearch16u::$3 ← (word*) bsearch16u::items#4
  to:bsearch16u::@3
bsearch16u::@2: scope:[bsearch16u]  from bsearch16u::@8
  (word*) bsearch16u::items#5 ← phi( bsearch16u::@8/(word*) bsearch16u::items#3 )
  (number~) bsearch16u::$18 ← (number) 1 * (const byte) SIZEOF_WORD
  (word*~) bsearch16u::$1 ← (word*) bsearch16u::items#5 - (number~) bsearch16u::$18
  (word*~) bsearch16u::$2 ← (word*~) bsearch16u::$1
  to:bsearch16u::@3
bsearch16u::@3: scope:[bsearch16u]  from bsearch16u::@1 bsearch16u::@2
  (word*~) bsearch16u::$4 ← phi( bsearch16u::@1/(word*~) bsearch16u::$3 bsearch16u::@2/(word*~) bsearch16u::$2 )
  (word*) bsearch16u::return#2 ← (word*~) bsearch16u::$4
  to:bsearch16u::@return
@17: scope:[]  from @9
  (byte*) heap_head#37 ← phi( @9/(byte*) heap_head#0 )
  (byte) NUM_SQUARES#0 ← (byte) $ff
  (word*) SQUARES#0 ← (word*) 0
  to:@22

(void()) init_squares()
init_squares: scope:[init_squares]  from init_dist_screen
  (byte*) heap_head#24 ← phi( init_dist_screen/(byte*) heap_head#28 )
  (byte) NUM_SQUARES#6 ← phi( init_dist_screen/(byte) NUM_SQUARES#3 )
  (byte~) init_squares::$0 ← (byte) NUM_SQUARES#6 * (const byte) SIZEOF_WORD
  (word) malloc::size#0 ← (byte~) init_squares::$0
  call malloc 
  (void*) malloc::return#2 ← (void*) malloc::return#1
  to:init_squares::@7
init_squares::@7: scope:[init_squares]  from init_squares
  (byte) NUM_SQUARES#14 ← phi( init_squares/(byte) NUM_SQUARES#6 )
  (byte*) heap_head#14 ← phi( init_squares/(byte*) heap_head#2 )
  (void*) malloc::return#6 ← phi( init_squares/(void*) malloc::return#2 )
  (void*~) init_squares::$1 ← (void*) malloc::return#6
  (byte*) heap_head#3 ← (byte*) heap_head#14
  (word*) SQUARES#1 ← ((word*)) (void*~) init_squares::$1
  (word*) init_squares::squares#0 ← (word*) SQUARES#1
  (word) init_squares::sqr#0 ← (word) 0
  (byte) init_squares::i#0 ← (byte) 0
  to:init_squares::@1
init_squares::@1: scope:[init_squares]  from init_squares::@2 init_squares::@7
  (word*) SQUARES#17 ← phi( init_squares::@2/(word*) SQUARES#26 init_squares::@7/(word*) SQUARES#1 )
  (byte*) heap_head#25 ← phi( init_squares::@2/(byte*) heap_head#31 init_squares::@7/(byte*) heap_head#3 )
  (word*) init_squares::squares#3 ← phi( init_squares::@2/(word*) init_squares::squares#1 init_squares::@7/(word*) init_squares::squares#0 )
  (word) init_squares::sqr#3 ← phi( init_squares::@2/(word) init_squares::sqr#1 init_squares::@7/(word) init_squares::sqr#0 )
  (byte) NUM_SQUARES#7 ← phi( init_squares::@2/(byte) NUM_SQUARES#13 init_squares::@7/(byte) NUM_SQUARES#14 )
  (byte) init_squares::i#2 ← phi( init_squares::@2/(byte) init_squares::i#1 init_squares::@7/(byte) init_squares::i#0 )
  (bool~) init_squares::$2 ← (byte) init_squares::i#2 < (byte) NUM_SQUARES#7
  if((bool~) init_squares::$2) goto init_squares::@2
  to:init_squares::@return
init_squares::@2: scope:[init_squares]  from init_squares::@1
  (word*) SQUARES#26 ← phi( init_squares::@1/(word*) SQUARES#17 )
  (byte*) heap_head#31 ← phi( init_squares::@1/(byte*) heap_head#25 )
  (byte) NUM_SQUARES#13 ← phi( init_squares::@1/(byte) NUM_SQUARES#7 )
  (byte) init_squares::i#3 ← phi( init_squares::@1/(byte) init_squares::i#2 )
  (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#3 )
  (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#3 )
  *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2
  (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD
  (number~) init_squares::$3 ← (byte) init_squares::i#3 * (number) 2
  (number~) init_squares::$4 ← (number~) init_squares::$3 + (number) 1
  (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (number~) init_squares::$4
  (byte) init_squares::i#1 ← ++ (byte) init_squares::i#3
  to:init_squares::@1
init_squares::@return: scope:[init_squares]  from init_squares::@1
  (word*) SQUARES#8 ← phi( init_squares::@1/(word*) SQUARES#17 )
  (byte*) heap_head#15 ← phi( init_squares::@1/(byte*) heap_head#25 )
  (byte*) heap_head#4 ← (byte*) heap_head#15
  (word*) SQUARES#2 ← (word*) SQUARES#8
  return 
  to:@return

(word()) sqr((byte) sqr::val)
sqr: scope:[sqr]  from init_dist_screen::@10 init_dist_screen::@4
  (word*) SQUARES#9 ← phi( init_dist_screen::@10/(word*) SQUARES#18 init_dist_screen::@4/(word*) SQUARES#19 )
  (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 )
  (byte~) sqr::$0 ← (byte) sqr::val#2 * (const byte) SIZEOF_WORD
  (word) sqr::return#0 ← *((word*) SQUARES#9 + (byte~) sqr::$0)
  to:sqr::@return
sqr::@return: scope:[sqr]  from sqr
  (word) sqr::return#4 ← phi( sqr/(word) sqr::return#0 )
  (word) sqr::return#1 ← (word) sqr::return#4
  return 
  to:@return

(byte()) sqrt((word) sqrt::val)
sqrt: scope:[sqrt]  from init_dist_screen::@21
  (byte) NUM_SQUARES#8 ← phi( init_dist_screen::@21/(byte) NUM_SQUARES#15 )
  (word*) SQUARES#10 ← phi( init_dist_screen::@21/(word*) SQUARES#20 )
  (word) sqrt::val#1 ← phi( init_dist_screen::@21/(word) sqrt::val#0 )
  (word) bsearch16u::key#0 ← (word) sqrt::val#1
  (word*) bsearch16u::items#1 ← (word*) SQUARES#10
  (byte) bsearch16u::num#2 ← (byte) NUM_SQUARES#8
  call bsearch16u 
  (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
  to:sqrt::@2
sqrt::@2: scope:[sqrt]  from sqrt
  (word*) SQUARES#11 ← phi( sqrt/(word*) SQUARES#10 )
  (word*) bsearch16u::return#5 ← phi( sqrt/(word*) bsearch16u::return#3 )
  (word*~) sqrt::$0 ← (word*) bsearch16u::return#5
  (word*) sqrt::found#0 ← (word*~) sqrt::$0
  (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*) SQUARES#11
  (word~) sqrt::$1 ← (word~) sqrt::$3 / (const byte) SIZEOF_WORD
  (byte~) sqrt::$2 ← ((byte)) (word~) sqrt::$1
  (byte) sqrt::sq#0 ← (byte~) sqrt::$2
  (byte) sqrt::return#0 ← (byte) sqrt::sq#0
  to:sqrt::@return
sqrt::@return: scope:[sqrt]  from sqrt::@2
  (byte) sqrt::return#3 ← phi( sqrt::@2/(byte) sqrt::return#0 )
  (byte) sqrt::return#1 ← (byte) sqrt::return#3
  return 
  to:@return

(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
atan2_16: scope:[atan2_16]  from init_angle_screen::@3
  (signed word) atan2_16::x#9 ← phi( init_angle_screen::@3/(signed word) atan2_16::x#0 )
  (signed word) atan2_16::y#1 ← phi( init_angle_screen::@3/(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::@15
atan2_16::@15: scope:[atan2_16]  from atan2_16::@27 atan2_16::@6
  (signed word) atan2_16::y#7 ← phi( atan2_16::@27/(signed word) atan2_16::y#8 atan2_16::@6/(signed word) atan2_16::y#9 )
  (signed word) atan2_16::x#7 ← phi( atan2_16::@27/(signed word) atan2_16::x#8 atan2_16::@6/(signed word) atan2_16::x#10 )
  (word) atan2_16::angle#12 ← phi( atan2_16::@27/(word) atan2_16::angle#13 atan2_16::@6/(word) atan2_16::angle#0 )
  (byte) atan2_16::i#6 ← phi( atan2_16::@27/(byte) atan2_16::i#1 atan2_16::@6/(byte) atan2_16::i#0 )
  (signed word) atan2_16::xi#6 ← phi( atan2_16::@27/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 )
  (signed word) atan2_16::yi#3 ← phi( atan2_16::@27/(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::@16
  to:atan2_16::@17
atan2_16::@16: scope:[atan2_16]  from atan2_16::@15
  (signed word) atan2_16::y#19 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 )
  (signed word) atan2_16::x#17 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 )
  (word) atan2_16::angle#19 ← phi( atan2_16::@15/(word) atan2_16::angle#12 )
  (byte) atan2_16::i#2 ← phi( atan2_16::@15/(byte) atan2_16::i#6 )
  (signed word) atan2_16::yi#4 ← phi( atan2_16::@15/(signed word) atan2_16::yi#3 )
  (signed word) atan2_16::xi#3 ← phi( atan2_16::@15/(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::@18
atan2_16::@17: scope:[atan2_16]  from atan2_16::@15 atan2_16::@27
  (signed word) atan2_16::y#5 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 atan2_16::@27/(signed word) atan2_16::y#8 )
  (signed word) atan2_16::x#4 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 atan2_16::@27/(signed word) atan2_16::x#8 )
  (word) atan2_16::angle#6 ← phi( atan2_16::@15/(word) atan2_16::angle#12 atan2_16::@27/(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::@33
atan2_16::@18: scope:[atan2_16]  from atan2_16::@16 atan2_16::@19
  (signed word) atan2_16::y#18 ← phi( atan2_16::@16/(signed word) atan2_16::y#19 atan2_16::@19/(signed word) atan2_16::y#20 )
  (signed word) atan2_16::x#16 ← phi( atan2_16::@16/(signed word) atan2_16::x#17 atan2_16::@19/(signed word) atan2_16::x#18 )
  (word) atan2_16::angle#18 ← phi( atan2_16::@16/(word) atan2_16::angle#19 atan2_16::@19/(word) atan2_16::angle#20 )
  (byte) atan2_16::i#10 ← phi( atan2_16::@16/(byte) atan2_16::i#2 atan2_16::@19/(byte) atan2_16::i#11 )
  (signed word) atan2_16::xi#11 ← phi( atan2_16::@16/(signed word) atan2_16::xi#3 atan2_16::@19/(signed word) atan2_16::xi#12 )
  (signed word) atan2_16::yi#14 ← phi( atan2_16::@16/(signed word) atan2_16::yi#4 atan2_16::@19/(signed word) atan2_16::yi#15 )
  (signed word) atan2_16::yd#7 ← phi( atan2_16::@16/(signed word) atan2_16::yd#0 atan2_16::@19/(signed word) atan2_16::yd#1 )
  (signed word) atan2_16::xd#7 ← phi( atan2_16::@16/(signed word) atan2_16::xd#0 atan2_16::@19/(signed word) atan2_16::xd#1 )
  (byte) atan2_16::shift#2 ← phi( atan2_16::@16/(byte) atan2_16::shift#0 atan2_16::@19/(byte) atan2_16::shift#1 )
  (bool~) atan2_16::$18 ← (byte) atan2_16::shift#2 >= (number) 2
  if((bool~) atan2_16::$18) goto atan2_16::@19
  to:atan2_16::@20
atan2_16::@19: scope:[atan2_16]  from atan2_16::@18
  (signed word) atan2_16::y#20 ← phi( atan2_16::@18/(signed word) atan2_16::y#18 )
  (signed word) atan2_16::x#18 ← phi( atan2_16::@18/(signed word) atan2_16::x#16 )
  (word) atan2_16::angle#20 ← phi( atan2_16::@18/(word) atan2_16::angle#18 )
  (byte) atan2_16::i#11 ← phi( atan2_16::@18/(byte) atan2_16::i#10 )
  (signed word) atan2_16::xi#12 ← phi( atan2_16::@18/(signed word) atan2_16::xi#11 )
  (signed word) atan2_16::yi#15 ← phi( atan2_16::@18/(signed word) atan2_16::yi#14 )
  (byte) atan2_16::shift#3 ← phi( atan2_16::@18/(byte) atan2_16::shift#2 )
  (signed word) atan2_16::yd#3 ← phi( atan2_16::@18/(signed word) atan2_16::yd#7 )
  (signed word) atan2_16::xd#3 ← phi( atan2_16::@18/(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::@18
atan2_16::@20: scope:[atan2_16]  from atan2_16::@18
  (signed word) atan2_16::y#16 ← phi( atan2_16::@18/(signed word) atan2_16::y#18 )
  (signed word) atan2_16::x#14 ← phi( atan2_16::@18/(signed word) atan2_16::x#16 )
  (word) atan2_16::angle#16 ← phi( atan2_16::@18/(word) atan2_16::angle#18 )
  (byte) atan2_16::i#8 ← phi( atan2_16::@18/(byte) atan2_16::i#10 )
  (signed word) atan2_16::xi#9 ← phi( atan2_16::@18/(signed word) atan2_16::xi#11 )
  (signed word) atan2_16::yd#8 ← phi( atan2_16::@18/(signed word) atan2_16::yd#7 )
  (signed word) atan2_16::xd#8 ← phi( atan2_16::@18/(signed word) atan2_16::xd#7 )
  (signed word) atan2_16::yi#10 ← phi( atan2_16::@18/(signed word) atan2_16::yi#14 )
  (byte) atan2_16::shift#4 ← phi( atan2_16::@18/(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::@25
  to:atan2_16::@24
atan2_16::@25: scope:[atan2_16]  from atan2_16::@20 atan2_16::@24
  (signed word) atan2_16::y#14 ← phi( atan2_16::@20/(signed word) atan2_16::y#16 atan2_16::@24/(signed word) atan2_16::y#17 )
  (signed word) atan2_16::x#13 ← phi( atan2_16::@20/(signed word) atan2_16::x#14 atan2_16::@24/(signed word) atan2_16::x#15 )
  (word) atan2_16::angle#14 ← phi( atan2_16::@20/(word) atan2_16::angle#16 atan2_16::@24/(word) atan2_16::angle#17 )
  (byte) atan2_16::i#7 ← phi( atan2_16::@20/(byte) atan2_16::i#8 atan2_16::@24/(byte) atan2_16::i#9 )
  (signed word) atan2_16::xd#9 ← phi( atan2_16::@20/(signed word) atan2_16::xd#8 atan2_16::@24/(signed word) atan2_16::xd#2 )
  (signed word) atan2_16::yd#9 ← phi( atan2_16::@20/(signed word) atan2_16::yd#8 atan2_16::@24/(signed word) atan2_16::yd#2 )
  (signed word) atan2_16::xi#7 ← phi( atan2_16::@20/(signed word) atan2_16::xi#9 atan2_16::@24/(signed word) atan2_16::xi#10 )
  (signed word) atan2_16::yi#5 ← phi( atan2_16::@20/(signed word) atan2_16::yi#10 atan2_16::@24/(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::@26
  to:atan2_16::@30
atan2_16::@24: scope:[atan2_16]  from atan2_16::@20
  (signed word) atan2_16::y#17 ← phi( atan2_16::@20/(signed word) atan2_16::y#16 )
  (signed word) atan2_16::x#15 ← phi( atan2_16::@20/(signed word) atan2_16::x#14 )
  (word) atan2_16::angle#17 ← phi( atan2_16::@20/(word) atan2_16::angle#16 )
  (byte) atan2_16::i#9 ← phi( atan2_16::@20/(byte) atan2_16::i#8 )
  (signed word) atan2_16::xi#10 ← phi( atan2_16::@20/(signed word) atan2_16::xi#9 )
  (signed word) atan2_16::yi#11 ← phi( atan2_16::@20/(signed word) atan2_16::yi#10 )
  (signed word) atan2_16::yd#4 ← phi( atan2_16::@20/(signed word) atan2_16::yd#8 )
  (signed word) atan2_16::xd#4 ← phi( atan2_16::@20/(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::@25
atan2_16::@26: scope:[atan2_16]  from atan2_16::@25
  (signed word) atan2_16::y#10 ← phi( atan2_16::@25/(signed word) atan2_16::y#14 )
  (signed word) atan2_16::x#11 ← phi( atan2_16::@25/(signed word) atan2_16::x#13 )
  (word) atan2_16::angle#7 ← phi( atan2_16::@25/(word) atan2_16::angle#14 )
  (byte) atan2_16::i#3 ← phi( atan2_16::@25/(byte) atan2_16::i#7 )
  (signed word) atan2_16::xd#5 ← phi( atan2_16::@25/(signed word) atan2_16::xd#9 )
  (signed word) atan2_16::yi#6 ← phi( atan2_16::@25/(signed word) atan2_16::yi#5 )
  (signed word) atan2_16::yd#5 ← phi( atan2_16::@25/(signed word) atan2_16::yd#9 )
  (signed word) atan2_16::xi#4 ← phi( atan2_16::@25/(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::@27
atan2_16::@30: scope:[atan2_16]  from atan2_16::@25
  (signed word) atan2_16::y#11 ← phi( atan2_16::@25/(signed word) atan2_16::y#14 )
  (signed word) atan2_16::x#12 ← phi( atan2_16::@25/(signed word) atan2_16::x#13 )
  (word) atan2_16::angle#8 ← phi( atan2_16::@25/(word) atan2_16::angle#14 )
  (byte) atan2_16::i#4 ← phi( atan2_16::@25/(byte) atan2_16::i#7 )
  (signed word) atan2_16::xd#6 ← phi( atan2_16::@25/(signed word) atan2_16::xd#9 )
  (signed word) atan2_16::yi#7 ← phi( atan2_16::@25/(signed word) atan2_16::yi#5 )
  (signed word) atan2_16::yd#6 ← phi( atan2_16::@25/(signed word) atan2_16::yd#9 )
  (signed word) atan2_16::xi#5 ← phi( atan2_16::@25/(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::@27
atan2_16::@27: scope:[atan2_16]  from atan2_16::@26 atan2_16::@30
  (signed word) atan2_16::y#8 ← phi( atan2_16::@26/(signed word) atan2_16::y#10 atan2_16::@30/(signed word) atan2_16::y#11 )
  (signed word) atan2_16::xi#8 ← phi( atan2_16::@26/(signed word) atan2_16::xi#1 atan2_16::@30/(signed word) atan2_16::xi#2 )
  (signed word) atan2_16::x#8 ← phi( atan2_16::@26/(signed word) atan2_16::x#11 atan2_16::@30/(signed word) atan2_16::x#12 )
  (word) atan2_16::angle#13 ← phi( atan2_16::@26/(word) atan2_16::angle#2 atan2_16::@30/(word) atan2_16::angle#3 )
  (signed word) atan2_16::yi#8 ← phi( atan2_16::@26/(signed word) atan2_16::yi#1 atan2_16::@30/(signed word) atan2_16::yi#2 )
  (byte) atan2_16::i#5 ← phi( atan2_16::@26/(byte) atan2_16::i#3 atan2_16::@30/(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::@15
  to:atan2_16::@17
atan2_16::@7: scope:[atan2_16]  from atan2_16::@17 atan2_16::@33
  (word) atan2_16::angle#15 ← phi( atan2_16::@17/(word) atan2_16::angle#1 atan2_16::@33/(word) atan2_16::angle#4 )
  (signed word) atan2_16::y#4 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 atan2_16::@33/(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::@13
atan2_16::@33: scope:[atan2_16]  from atan2_16::@17
  (signed word) atan2_16::y#6 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 )
  (word) atan2_16::angle#9 ← phi( atan2_16::@17/(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::@13 atan2_16::@7
  (word) atan2_16::angle#10 ← phi( atan2_16::@13/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#15 )
  (word) atan2_16::return#0 ← (word) atan2_16::angle#10
  to:atan2_16::@return
atan2_16::@13: 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
@22: scope:[]  from @17
  (word*) SQUARES#47 ← phi( @17/(word*) SQUARES#0 )
  (byte) NUM_SQUARES#41 ← phi( @17/(byte) NUM_SQUARES#0 )
  (byte*) heap_head#32 ← phi( @17/(byte*) heap_head#37 )
  (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:@48

(void()) print_char((byte) print_char::ch)
print_char: scope:[print_char]  from make_plasma_charset::@18
  (byte*) print_char_cursor#11 ← phi( make_plasma_charset::@18/(byte*) print_char_cursor#20 )
  (byte) print_char::ch#1 ← phi( make_plasma_charset::@18/(byte) print_char::ch#0 )
  *((byte*) print_char_cursor#11) ← (byte) print_char::ch#1
  (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#11
  to:print_char::@return
print_char::@return: scope:[print_char]  from print_char
  (byte*) print_char_cursor#12 ← phi( print_char/(byte*) print_char_cursor#1 )
  (byte*) print_char_cursor#2 ← (byte*) print_char_cursor#12
  return 
  to:@return

(void()) print_cls()
print_cls: scope:[print_cls]  from make_plasma_charset::@23
  (byte*) print_screen#1 ← phi( make_plasma_charset::@23/(byte*) print_screen#3 )
  (void*) memset::str#0 ← (void*)(byte*) print_screen#1
  (byte) memset::c#0 ← (byte) ' '
  (word) memset::num#0 ← (number) $3e8
  call memset 
  (void*) memset::return#2 ← (void*) memset::return#1
  to:print_cls::@1
print_cls::@1: scope:[print_cls]  from print_cls
  (byte*) print_screen#2 ← phi( print_cls/(byte*) print_screen#1 )
  (byte*) print_line_cursor#1 ← (byte*) print_screen#2
  (byte*) print_char_cursor#3 ← (byte*) print_line_cursor#1
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls::@1
  (byte*) print_char_cursor#13 ← phi( print_cls::@1/(byte*) print_char_cursor#3 )
  (byte*) print_line_cursor#8 ← phi( print_cls::@1/(byte*) print_line_cursor#1 )
  (byte*) print_line_cursor#2 ← (byte*) print_line_cursor#8
  (byte*) print_char_cursor#4 ← (byte*) print_char_cursor#13
  return 
  to:@return

(void()) sid_rnd_init()
sid_rnd_init: scope:[sid_rnd_init]  from make_plasma_charset
  *((const word*) SID_VOICE3_FREQ) ← (number) $ffff
  *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE
  to:sid_rnd_init::@return
sid_rnd_init::@return: scope:[sid_rnd_init]  from sid_rnd_init
  return 
  to:@return

(byte()) sid_rnd()
sid_rnd: scope:[sid_rnd]  from make_plasma_charset::@8
  (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC)
  to:sid_rnd::@return
sid_rnd::@return: scope:[sid_rnd]  from sid_rnd
  (byte) sid_rnd::return#3 ← phi( sid_rnd/(byte) sid_rnd::return#0 )
  (byte) sid_rnd::return#1 ← (byte) sid_rnd::return#3
  return 
  to:@return
@48: scope:[]  from @22
  (byte*) print_screen#12 ← phi( @22/(byte*) print_screen#0 )
  (byte*) print_char_cursor#41 ← phi( @22/(byte*) print_char_cursor#0 )
  (byte*) print_line_cursor#34 ← phi( @22/(byte*) print_line_cursor#0 )
  (word*) SQUARES#45 ← phi( @22/(word*) SQUARES#47 )
  (byte) NUM_SQUARES#37 ← phi( @22/(byte) NUM_SQUARES#41 )
  (byte*) heap_head#23 ← phi( @22/(byte*) heap_head#32 )
  (word) malloc::size#1 ← (number) $3e8
  call malloc 
  (void*) malloc::return#3 ← (void*) malloc::return#1
  to:@54
@54: scope:[]  from @48
  (byte*) print_screen#11 ← phi( @48/(byte*) print_screen#12 )
  (byte*) print_char_cursor#37 ← phi( @48/(byte*) print_char_cursor#41 )
  (byte*) print_line_cursor#30 ← phi( @48/(byte*) print_line_cursor#34 )
  (word*) SQUARES#42 ← phi( @48/(word*) SQUARES#45 )
  (byte) NUM_SQUARES#32 ← phi( @48/(byte) NUM_SQUARES#37 )
  (byte*) heap_head#16 ← phi( @48/(byte*) heap_head#2 )
  (void*) malloc::return#7 ← phi( @48/(void*) malloc::return#3 )
  (void*~) $0 ← (void*) malloc::return#7
  (byte*) heap_head#5 ← (byte*) heap_head#16
  (byte*) SCREEN_DIST#0 ← ((byte*)) (void*~) $0
  (word) malloc::size#2 ← (number) $3e8
  call malloc 
  (void*) malloc::return#4 ← (void*) malloc::return#1
  to:@55
@55: scope:[]  from @54
  (byte*) print_screen#10 ← phi( @54/(byte*) print_screen#11 )
  (byte*) print_char_cursor#35 ← phi( @54/(byte*) print_char_cursor#37 )
  (byte*) print_line_cursor#27 ← phi( @54/(byte*) print_line_cursor#30 )
  (word*) SQUARES#37 ← phi( @54/(word*) SQUARES#42 )
  (byte) NUM_SQUARES#27 ← phi( @54/(byte) NUM_SQUARES#32 )
  (byte*) SCREEN_DIST#12 ← phi( @54/(byte*) SCREEN_DIST#0 )
  (byte*) heap_head#17 ← phi( @54/(byte*) heap_head#2 )
  (void*) malloc::return#8 ← phi( @54/(void*) malloc::return#4 )
  (void*~) $1 ← (void*) malloc::return#8
  (byte*) heap_head#6 ← (byte*) heap_head#17
  (byte*) SCREEN_ANGLE#0 ← ((byte*)) (void*~) $1
  to:@49

(void()) main()
main: scope:[main]  from @53
  (byte) sin_offset_y#30 ← phi( @53/(byte) sin_offset_y#18 )
  (byte) sin_offset_x#30 ← phi( @53/(byte) sin_offset_x#18 )
  (byte*) print_screen#7 ← phi( @53/(byte*) print_screen#8 )
  (byte*) print_char_cursor#33 ← phi( @53/(byte*) print_char_cursor#25 )
  (byte*) print_line_cursor#25 ← phi( @53/(byte*) print_line_cursor#18 )
  (byte*) SCREEN_ANGLE#3 ← phi( @53/(byte*) SCREEN_ANGLE#6 )
  (word*) SQUARES#21 ← phi( @53/(word*) SQUARES#25 )
  (byte*) heap_head#26 ← phi( @53/(byte*) heap_head#30 )
  (byte) NUM_SQUARES#16 ← phi( @53/(byte) NUM_SQUARES#19 )
  (byte*) SCREEN_DIST#1 ← phi( @53/(byte*) SCREEN_DIST#3 )
  (byte*) init_dist_screen::screen#0 ← (byte*) SCREEN_DIST#1
  call init_dist_screen 
  to:main::@9
main::@9: scope:[main]  from main
  (byte*) SCREEN_DIST#18 ← phi( main/(byte*) SCREEN_DIST#1 )
  (byte) sin_offset_y#29 ← phi( main/(byte) sin_offset_y#30 )
  (byte) sin_offset_x#29 ← phi( main/(byte) sin_offset_x#30 )
  (byte*) print_screen#6 ← phi( main/(byte*) print_screen#7 )
  (byte*) print_char_cursor#26 ← phi( main/(byte*) print_char_cursor#33 )
  (byte*) print_line_cursor#19 ← phi( main/(byte*) print_line_cursor#25 )
  (byte*) SCREEN_ANGLE#1 ← phi( main/(byte*) SCREEN_ANGLE#3 )
  (word*) SQUARES#12 ← phi( main/(word*) SQUARES#6 )
  (byte*) heap_head#18 ← phi( main/(byte*) heap_head#10 )
  (byte) NUM_SQUARES#9 ← phi( main/(byte) NUM_SQUARES#4 )
  (byte) NUM_SQUARES#1 ← (byte) NUM_SQUARES#9
  (byte*) heap_head#7 ← (byte*) heap_head#18
  (word*) SQUARES#3 ← (word*) SQUARES#12
  (byte*) init_angle_screen::screen#0 ← (byte*) SCREEN_ANGLE#1
  call init_angle_screen 
  to:main::@10
main::@10: scope:[main]  from main::@9
  (byte*) SCREEN_DIST#16 ← phi( main::@9/(byte*) SCREEN_DIST#18 )
  (byte*) SCREEN_ANGLE#16 ← phi( main::@9/(byte*) SCREEN_ANGLE#1 )
  (byte) sin_offset_y#27 ← phi( main::@9/(byte) sin_offset_y#29 )
  (byte) sin_offset_x#27 ← phi( main::@9/(byte) sin_offset_x#29 )
  (word*) SQUARES#43 ← phi( main::@9/(word*) SQUARES#3 )
  (byte*) heap_head#42 ← phi( main::@9/(byte*) heap_head#7 )
  (byte) NUM_SQUARES#33 ← phi( main::@9/(byte) NUM_SQUARES#1 )
  (byte*) print_screen#5 ← phi( main::@9/(byte*) print_screen#6 )
  (byte*) print_char_cursor#21 ← phi( main::@9/(byte*) print_char_cursor#26 )
  (byte*) print_line_cursor#14 ← phi( main::@9/(byte*) print_line_cursor#19 )
  (byte*) make_plasma_charset::charset#0 ← (const byte*) CHARSET
  call make_plasma_charset 
  to:main::@11
main::@11: scope:[main]  from main::@10
  (byte*) SCREEN_DIST#13 ← phi( main::@10/(byte*) SCREEN_DIST#16 )
  (byte*) SCREEN_ANGLE#13 ← phi( main::@10/(byte*) SCREEN_ANGLE#16 )
  (byte) sin_offset_y#23 ← phi( main::@10/(byte) sin_offset_y#27 )
  (byte) sin_offset_x#23 ← phi( main::@10/(byte) sin_offset_x#27 )
  (word*) SQUARES#35 ← phi( main::@10/(word*) SQUARES#43 )
  (byte*) heap_head#38 ← phi( main::@10/(byte*) heap_head#42 )
  (byte) NUM_SQUARES#25 ← phi( main::@10/(byte) NUM_SQUARES#33 )
  (byte*) print_char_cursor#14 ← phi( main::@10/(byte*) print_char_cursor#9 )
  (byte*) print_line_cursor#9 ← phi( main::@10/(byte*) print_line_cursor#6 )
  (byte*) print_line_cursor#3 ← (byte*) print_line_cursor#9
  (byte*) print_char_cursor#5 ← (byte*) print_char_cursor#14
  (void*) memset::str#1 ← (void*)(const byte*) COLS
  (byte) memset::c#1 ← (const byte) BLACK
  (word) memset::num#1 ← (number) $3e8
  call memset 
  (void*) memset::return#3 ← (void*) memset::return#1
  to:main::@12
main::@12: scope:[main]  from main::@11
  (byte*) SCREEN_DIST#9 ← phi( main::@11/(byte*) SCREEN_DIST#13 )
  (byte*) SCREEN_ANGLE#9 ← phi( main::@11/(byte*) SCREEN_ANGLE#13 )
  (byte) sin_offset_y#19 ← phi( main::@11/(byte) sin_offset_y#23 )
  (byte) sin_offset_x#19 ← phi( main::@11/(byte) sin_offset_x#23 )
  (byte*) print_char_cursor#27 ← phi( main::@11/(byte*) print_char_cursor#5 )
  (byte*) print_line_cursor#20 ← phi( main::@11/(byte*) print_line_cursor#3 )
  (word*) SQUARES#27 ← phi( main::@11/(word*) SQUARES#35 )
  (byte*) heap_head#33 ← phi( main::@11/(byte*) heap_head#38 )
  (byte) NUM_SQUARES#20 ← phi( main::@11/(byte) NUM_SQUARES#25 )
  to:main::@1
main::@1: scope:[main]  from main::@12 main::@8
  (byte*) SCREEN_DIST#6 ← phi( main::@12/(byte*) SCREEN_DIST#9 main::@8/(byte*) SCREEN_DIST#10 )
  (byte*) SCREEN_ANGLE#7 ← phi( main::@12/(byte*) SCREEN_ANGLE#9 main::@8/(byte*) SCREEN_ANGLE#10 )
  (byte) sin_offset_y#16 ← phi( main::@12/(byte) sin_offset_y#19 main::@8/(byte) sin_offset_y#20 )
  (byte) sin_offset_x#16 ← phi( main::@12/(byte) sin_offset_x#19 main::@8/(byte) sin_offset_x#20 )
  (byte*) print_char_cursor#22 ← phi( main::@12/(byte*) print_char_cursor#27 main::@8/(byte*) print_char_cursor#28 )
  (byte*) print_line_cursor#15 ← phi( main::@12/(byte*) print_line_cursor#20 main::@8/(byte*) print_line_cursor#21 )
  (word*) SQUARES#22 ← phi( main::@12/(word*) SQUARES#27 main::@8/(word*) SQUARES#28 )
  (byte*) heap_head#27 ← phi( main::@12/(byte*) heap_head#33 main::@8/(byte*) heap_head#34 )
  (byte) NUM_SQUARES#17 ← phi( main::@12/(byte) NUM_SQUARES#20 main::@8/(byte) NUM_SQUARES#21 )
  if(true) goto main::@2
  to:main::@return
main::@2: scope:[main]  from main::@1
  (byte*) print_char_cursor#53 ← phi( main::@1/(byte*) print_char_cursor#22 )
  (byte*) print_line_cursor#48 ← phi( main::@1/(byte*) print_line_cursor#15 )
  (word*) SQUARES#52 ← phi( main::@1/(word*) SQUARES#22 )
  (byte*) heap_head#58 ← phi( main::@1/(byte*) heap_head#27 )
  (byte) NUM_SQUARES#48 ← phi( main::@1/(byte) NUM_SQUARES#17 )
  (byte*) SCREEN_DIST#4 ← phi( main::@1/(byte*) SCREEN_DIST#6 )
  (byte*) SCREEN_ANGLE#4 ← phi( main::@1/(byte*) SCREEN_ANGLE#7 )
  (byte) sin_offset_y#14 ← phi( main::@1/(byte) sin_offset_y#16 )
  (byte) sin_offset_x#14 ← phi( main::@1/(byte) sin_offset_x#16 )
  (byte*) doplasma::screen#0 ← (const byte*) SCREEN1
  call doplasma 
  to:main::@13
main::@13: scope:[main]  from main::@2
  (byte*) print_char_cursor#52 ← phi( main::@2/(byte*) print_char_cursor#53 )
  (byte*) print_line_cursor#46 ← phi( main::@2/(byte*) print_line_cursor#48 )
  (word*) SQUARES#51 ← phi( main::@2/(word*) SQUARES#52 )
  (byte*) heap_head#57 ← phi( main::@2/(byte*) heap_head#58 )
  (byte) NUM_SQUARES#47 ← phi( main::@2/(byte) NUM_SQUARES#48 )
  (byte*) SCREEN_DIST#14 ← phi( main::@2/(byte*) SCREEN_DIST#4 )
  (byte*) SCREEN_ANGLE#14 ← phi( main::@2/(byte*) SCREEN_ANGLE#4 )
  (byte) sin_offset_y#7 ← phi( main::@2/(byte) sin_offset_y#5 )
  (byte) sin_offset_x#7 ← phi( main::@2/(byte) sin_offset_x#5 )
  (byte) sin_offset_x#0 ← (byte) sin_offset_x#7
  (byte) sin_offset_y#0 ← (byte) sin_offset_y#7
  (byte*) main::toD0181_screen#0 ← (const byte*) SCREEN1
  (byte*) main::toD0181_gfx#0 ← (const byte*) CHARSET
  to:main::toD0181
main::toD0181: scope:[main]  from main::@13
  (byte*) print_char_cursor#50 ← phi( main::@13/(byte*) print_char_cursor#52 )
  (byte*) print_line_cursor#43 ← phi( main::@13/(byte*) print_line_cursor#46 )
  (word*) SQUARES#50 ← phi( main::@13/(word*) SQUARES#51 )
  (byte*) heap_head#56 ← phi( main::@13/(byte*) heap_head#57 )
  (byte) NUM_SQUARES#46 ← phi( main::@13/(byte) NUM_SQUARES#47 )
  (byte*) SCREEN_DIST#11 ← phi( main::@13/(byte*) SCREEN_DIST#14 )
  (byte*) SCREEN_ANGLE#11 ← phi( main::@13/(byte*) SCREEN_ANGLE#14 )
  (byte) sin_offset_y#24 ← phi( main::@13/(byte) sin_offset_y#0 )
  (byte) sin_offset_x#24 ← phi( main::@13/(byte) sin_offset_x#0 )
  (byte*) main::toD0181_gfx#1 ← phi( main::@13/(byte*) main::toD0181_gfx#0 )
  (byte*) main::toD0181_screen#1 ← phi( main::@13/(byte*) main::toD0181_screen#0 )
  (word~) main::toD0181_$0 ← ((word)) (byte*) main::toD0181_screen#1
  (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (number) $3fff
  (number~) main::toD0181_$2 ← (number~) main::toD0181_$1 * (number) 4
  (number~) main::toD0181_$3 ← > (number~) main::toD0181_$2
  (word~) main::toD0181_$4 ← ((word)) (byte*) main::toD0181_gfx#1
  (byte~) main::toD0181_$5 ← > (word~) main::toD0181_$4
  (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (number) 4
  (number~) main::toD0181_$7 ← (number~) main::toD0181_$6 & (number) $f
  (number~) main::toD0181_$8 ← (number~) main::toD0181_$3 | (number~) main::toD0181_$7
  (byte) main::toD0181_return#0 ← (number~) main::toD0181_$8
  to:main::toD0181_@return
main::toD0181_@return: scope:[main]  from main::toD0181
  (byte*) print_char_cursor#47 ← phi( main::toD0181/(byte*) print_char_cursor#50 )
  (byte*) print_line_cursor#40 ← phi( main::toD0181/(byte*) print_line_cursor#43 )
  (word*) SQUARES#49 ← phi( main::toD0181/(word*) SQUARES#50 )
  (byte*) heap_head#54 ← phi( main::toD0181/(byte*) heap_head#56 )
  (byte) NUM_SQUARES#44 ← phi( main::toD0181/(byte) NUM_SQUARES#46 )
  (byte*) SCREEN_DIST#7 ← phi( main::toD0181/(byte*) SCREEN_DIST#11 )
  (byte*) SCREEN_ANGLE#8 ← phi( main::toD0181/(byte*) SCREEN_ANGLE#11 )
  (byte) sin_offset_y#21 ← phi( main::toD0181/(byte) sin_offset_y#24 )
  (byte) sin_offset_x#21 ← phi( main::toD0181/(byte) sin_offset_x#24 )
  (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#44 ← phi( main::toD0181_@return/(byte*) print_char_cursor#47 )
  (byte*) print_line_cursor#38 ← phi( main::toD0181_@return/(byte*) print_line_cursor#40 )
  (word*) SQUARES#48 ← phi( main::toD0181_@return/(word*) SQUARES#49 )
  (byte*) heap_head#50 ← phi( main::toD0181_@return/(byte*) heap_head#54 )
  (byte) NUM_SQUARES#42 ← phi( main::toD0181_@return/(byte) NUM_SQUARES#44 )
  (byte*) SCREEN_DIST#5 ← phi( main::toD0181_@return/(byte*) SCREEN_DIST#7 )
  (byte*) SCREEN_ANGLE#5 ← phi( main::toD0181_@return/(byte*) SCREEN_ANGLE#8 )
  (byte) sin_offset_y#15 ← phi( main::toD0181_@return/(byte) sin_offset_y#21 )
  (byte) sin_offset_x#15 ← phi( main::toD0181_@return/(byte) sin_offset_x#21 )
  (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 )
  (byte~) main::$5 ← (byte) main::toD0181_return#3
  *((const byte*) D018) ← (byte~) main::$5
  (byte*) doplasma::screen#1 ← (const byte*) SCREEN2
  call doplasma 
  to:main::@14
main::@14: scope:[main]  from main::@7
  (byte*) SCREEN_DIST#19 ← phi( main::@7/(byte*) SCREEN_DIST#5 )
  (byte*) SCREEN_ANGLE#18 ← phi( main::@7/(byte*) SCREEN_ANGLE#5 )
  (byte*) print_char_cursor#42 ← phi( main::@7/(byte*) print_char_cursor#44 )
  (byte*) print_line_cursor#35 ← phi( main::@7/(byte*) print_line_cursor#38 )
  (word*) SQUARES#46 ← phi( main::@7/(word*) SQUARES#48 )
  (byte*) heap_head#46 ← phi( main::@7/(byte*) heap_head#50 )
  (byte) NUM_SQUARES#38 ← phi( main::@7/(byte) NUM_SQUARES#42 )
  (byte) sin_offset_y#8 ← phi( main::@7/(byte) sin_offset_y#5 )
  (byte) sin_offset_x#8 ← phi( main::@7/(byte) sin_offset_x#5 )
  (byte) sin_offset_x#1 ← (byte) sin_offset_x#8
  (byte) sin_offset_y#1 ← (byte) sin_offset_y#8
  (byte*) main::toD0182_screen#0 ← (const byte*) SCREEN2
  (byte*) main::toD0182_gfx#0 ← (const byte*) CHARSET
  to:main::toD0182
main::toD0182: scope:[main]  from main::@14
  (byte*) SCREEN_DIST#17 ← phi( main::@14/(byte*) SCREEN_DIST#19 )
  (byte*) SCREEN_ANGLE#17 ← phi( main::@14/(byte*) SCREEN_ANGLE#18 )
  (byte) sin_offset_y#28 ← phi( main::@14/(byte) sin_offset_y#1 )
  (byte) sin_offset_x#28 ← phi( main::@14/(byte) sin_offset_x#1 )
  (byte*) print_char_cursor#38 ← phi( main::@14/(byte*) print_char_cursor#42 )
  (byte*) print_line_cursor#31 ← phi( main::@14/(byte*) print_line_cursor#35 )
  (word*) SQUARES#44 ← phi( main::@14/(word*) SQUARES#46 )
  (byte*) heap_head#43 ← phi( main::@14/(byte*) heap_head#46 )
  (byte) NUM_SQUARES#34 ← phi( main::@14/(byte) NUM_SQUARES#38 )
  (byte*) main::toD0182_gfx#1 ← phi( main::@14/(byte*) main::toD0182_gfx#0 )
  (byte*) main::toD0182_screen#1 ← phi( main::@14/(byte*) main::toD0182_screen#0 )
  (word~) main::toD0182_$0 ← ((word)) (byte*) main::toD0182_screen#1
  (number~) main::toD0182_$1 ← (word~) main::toD0182_$0 & (number) $3fff
  (number~) main::toD0182_$2 ← (number~) main::toD0182_$1 * (number) 4
  (number~) main::toD0182_$3 ← > (number~) main::toD0182_$2
  (word~) main::toD0182_$4 ← ((word)) (byte*) main::toD0182_gfx#1
  (byte~) main::toD0182_$5 ← > (word~) main::toD0182_$4
  (number~) main::toD0182_$6 ← (byte~) main::toD0182_$5 / (number) 4
  (number~) main::toD0182_$7 ← (number~) main::toD0182_$6 & (number) $f
  (number~) main::toD0182_$8 ← (number~) main::toD0182_$3 | (number~) main::toD0182_$7
  (byte) main::toD0182_return#0 ← (number~) main::toD0182_$8
  to:main::toD0182_@return
main::toD0182_@return: scope:[main]  from main::toD0182
  (byte*) SCREEN_DIST#15 ← phi( main::toD0182/(byte*) SCREEN_DIST#17 )
  (byte*) SCREEN_ANGLE#15 ← phi( main::toD0182/(byte*) SCREEN_ANGLE#17 )
  (byte) sin_offset_y#25 ← phi( main::toD0182/(byte) sin_offset_y#28 )
  (byte) sin_offset_x#25 ← phi( main::toD0182/(byte) sin_offset_x#28 )
  (byte*) print_char_cursor#34 ← phi( main::toD0182/(byte*) print_char_cursor#38 )
  (byte*) print_line_cursor#26 ← phi( main::toD0182/(byte*) print_line_cursor#31 )
  (word*) SQUARES#36 ← phi( main::toD0182/(word*) SQUARES#44 )
  (byte*) heap_head#39 ← phi( main::toD0182/(byte*) heap_head#43 )
  (byte) NUM_SQUARES#26 ← phi( main::toD0182/(byte) NUM_SQUARES#34 )
  (byte) main::toD0182_return#2 ← phi( main::toD0182/(byte) main::toD0182_return#0 )
  (byte) main::toD0182_return#1 ← (byte) main::toD0182_return#2
  to:main::@8
main::@8: scope:[main]  from main::toD0182_@return
  (byte*) SCREEN_DIST#10 ← phi( main::toD0182_@return/(byte*) SCREEN_DIST#15 )
  (byte*) SCREEN_ANGLE#10 ← phi( main::toD0182_@return/(byte*) SCREEN_ANGLE#15 )
  (byte) sin_offset_y#20 ← phi( main::toD0182_@return/(byte) sin_offset_y#25 )
  (byte) sin_offset_x#20 ← phi( main::toD0182_@return/(byte) sin_offset_x#25 )
  (byte*) print_char_cursor#28 ← phi( main::toD0182_@return/(byte*) print_char_cursor#34 )
  (byte*) print_line_cursor#21 ← phi( main::toD0182_@return/(byte*) print_line_cursor#26 )
  (word*) SQUARES#28 ← phi( main::toD0182_@return/(word*) SQUARES#36 )
  (byte*) heap_head#34 ← phi( main::toD0182_@return/(byte*) heap_head#39 )
  (byte) NUM_SQUARES#21 ← phi( main::toD0182_@return/(byte) NUM_SQUARES#26 )
  (byte) main::toD0182_return#3 ← phi( main::toD0182_@return/(byte) main::toD0182_return#1 )
  (byte~) main::$7 ← (byte) main::toD0182_return#3
  *((const byte*) D018) ← (byte~) main::$7
  to:main::@1
main::@return: scope:[main]  from main::@1
  (byte) sin_offset_y#9 ← phi( main::@1/(byte) sin_offset_y#16 )
  (byte) sin_offset_x#9 ← phi( main::@1/(byte) sin_offset_x#16 )
  (byte*) print_char_cursor#15 ← phi( main::@1/(byte*) print_char_cursor#22 )
  (byte*) print_line_cursor#10 ← phi( main::@1/(byte*) print_line_cursor#15 )
  (word*) SQUARES#13 ← phi( main::@1/(word*) SQUARES#22 )
  (byte*) heap_head#19 ← phi( main::@1/(byte*) heap_head#27 )
  (byte) NUM_SQUARES#10 ← phi( main::@1/(byte) NUM_SQUARES#17 )
  (byte) NUM_SQUARES#2 ← (byte) NUM_SQUARES#10
  (byte*) heap_head#8 ← (byte*) heap_head#19
  (word*) SQUARES#4 ← (word*) SQUARES#13
  (byte*) print_line_cursor#4 ← (byte*) print_line_cursor#10
  (byte*) print_char_cursor#6 ← (byte*) print_char_cursor#15
  (byte) sin_offset_x#2 ← (byte) sin_offset_x#9
  (byte) sin_offset_y#2 ← (byte) sin_offset_y#9
  return 
  to:@return
@49: scope:[]  from @55
  (byte*) print_screen#9 ← phi( @55/(byte*) print_screen#10 )
  (byte*) SCREEN_ANGLE#12 ← phi( @55/(byte*) SCREEN_ANGLE#0 )
  (byte*) print_char_cursor#32 ← phi( @55/(byte*) print_char_cursor#35 )
  (byte*) print_line_cursor#24 ← phi( @55/(byte*) print_line_cursor#27 )
  (word*) SQUARES#34 ← phi( @55/(word*) SQUARES#37 )
  (byte*) heap_head#36 ← phi( @55/(byte*) heap_head#6 )
  (byte) NUM_SQUARES#24 ← phi( @55/(byte) NUM_SQUARES#27 )
  (byte*) SCREEN_DIST#8 ← phi( @55/(byte*) SCREEN_DIST#12 )
  (byte) sin_offset_x#3 ← (byte) 0
  (byte) sin_offset_y#3 ← (byte) 0
  to:@53

(void()) doplasma((byte*) doplasma::screen)
doplasma: scope:[doplasma]  from main::@2 main::@7
  (byte*) doplasma::screen#6 ← phi( main::@2/(byte*) doplasma::screen#0 main::@7/(byte*) doplasma::screen#1 )
  (byte) sin_offset_y#10 ← phi( main::@2/(byte) sin_offset_y#14 main::@7/(byte) sin_offset_y#15 )
  (byte) sin_offset_x#10 ← phi( main::@2/(byte) sin_offset_x#14 main::@7/(byte) sin_offset_x#15 )
  (byte*) SCREEN_DIST#2 ← phi( main::@2/(byte*) SCREEN_DIST#4 main::@7/(byte*) SCREEN_DIST#5 )
  (byte*) SCREEN_ANGLE#2 ← phi( main::@2/(byte*) SCREEN_ANGLE#4 main::@7/(byte*) SCREEN_ANGLE#5 )
  (byte*) doplasma::angle#0 ← (byte*) SCREEN_ANGLE#2
  (byte*) doplasma::dist#0 ← (byte*) SCREEN_DIST#2
  (byte*~) doplasma::$0 ← (const byte*) SINTABLE + (byte) sin_offset_x#10
  (byte*) doplasma::sin_x#0 ← (byte*~) doplasma::$0
  (byte*~) doplasma::$1 ← (const byte*) SINTABLE + (byte) sin_offset_y#10
  (byte*) doplasma::sin_y#0 ← (byte*~) doplasma::$1
  (byte) doplasma::y#0 ← (byte) 0
  to:doplasma::@1
doplasma::@1: scope:[doplasma]  from doplasma doplasma::@3
  (byte) sin_offset_y#26 ← phi( doplasma/(byte) sin_offset_y#10 doplasma::@3/(byte) sin_offset_y#17 )
  (byte) sin_offset_x#26 ← phi( doplasma/(byte) sin_offset_x#10 doplasma::@3/(byte) sin_offset_x#17 )
  (byte) doplasma::y#4 ← phi( doplasma/(byte) doplasma::y#0 doplasma::@3/(byte) doplasma::y#1 )
  (byte*) doplasma::screen#5 ← phi( doplasma/(byte*) doplasma::screen#6 doplasma::@3/(byte*) doplasma::screen#2 )
  (byte*) doplasma::dist#4 ← phi( doplasma/(byte*) doplasma::dist#0 doplasma::@3/(byte*) doplasma::dist#1 )
  (byte*) doplasma::sin_y#2 ← phi( doplasma/(byte*) doplasma::sin_y#0 doplasma::@3/(byte*) doplasma::sin_y#3 )
  (byte*) doplasma::angle#4 ← phi( doplasma/(byte*) doplasma::angle#0 doplasma::@3/(byte*) doplasma::angle#1 )
  (byte*) doplasma::sin_x#2 ← phi( doplasma/(byte*) doplasma::sin_x#0 doplasma::@3/(byte*) doplasma::sin_x#3 )
  (byte) doplasma::x#0 ← (byte) 0
  to:doplasma::@2
doplasma::@2: scope:[doplasma]  from doplasma::@1 doplasma::@2
  (byte) sin_offset_y#22 ← phi( doplasma::@1/(byte) sin_offset_y#26 doplasma::@2/(byte) sin_offset_y#22 )
  (byte) sin_offset_x#22 ← phi( doplasma::@1/(byte) sin_offset_x#26 doplasma::@2/(byte) sin_offset_x#22 )
  (byte) doplasma::y#3 ← phi( doplasma::@1/(byte) doplasma::y#4 doplasma::@2/(byte) doplasma::y#3 )
  (byte*) doplasma::screen#3 ← phi( doplasma::@1/(byte*) doplasma::screen#5 doplasma::@2/(byte*) doplasma::screen#3 )
  (byte*) doplasma::dist#2 ← phi( doplasma::@1/(byte*) doplasma::dist#4 doplasma::@2/(byte*) doplasma::dist#2 )
  (byte*) doplasma::sin_y#1 ← phi( doplasma::@1/(byte*) doplasma::sin_y#2 doplasma::@2/(byte*) doplasma::sin_y#1 )
  (byte) doplasma::x#2 ← phi( doplasma::@1/(byte) doplasma::x#0 doplasma::@2/(byte) doplasma::x#1 )
  (byte*) doplasma::angle#2 ← phi( doplasma::@1/(byte*) doplasma::angle#4 doplasma::@2/(byte*) doplasma::angle#2 )
  (byte*) doplasma::sin_x#1 ← phi( doplasma::@1/(byte*) doplasma::sin_x#2 doplasma::@2/(byte*) doplasma::sin_x#1 )
  (byte~) doplasma::$2 ← *((byte*) doplasma::sin_x#1 + *((byte*) doplasma::angle#2 + (byte) doplasma::x#2)) + *((byte*) doplasma::sin_y#1 + *((byte*) doplasma::dist#2 + (byte) doplasma::x#2))
  *((byte*) doplasma::screen#3 + (byte) doplasma::x#2) ← (byte~) doplasma::$2
  (byte) doplasma::x#1 ← (byte) doplasma::x#2 + rangenext(0,$27)
  (bool~) doplasma::$3 ← (byte) doplasma::x#1 != rangelast(0,$27)
  if((bool~) doplasma::$3) goto doplasma::@2
  to:doplasma::@3
doplasma::@3: scope:[doplasma]  from doplasma::@2
  (byte*) doplasma::sin_y#3 ← phi( doplasma::@2/(byte*) doplasma::sin_y#1 )
  (byte*) doplasma::sin_x#3 ← phi( doplasma::@2/(byte*) doplasma::sin_x#1 )
  (byte) sin_offset_y#17 ← phi( doplasma::@2/(byte) sin_offset_y#22 )
  (byte) sin_offset_x#17 ← phi( doplasma::@2/(byte) sin_offset_x#22 )
  (byte) doplasma::y#2 ← phi( doplasma::@2/(byte) doplasma::y#3 )
  (byte*) doplasma::dist#3 ← phi( doplasma::@2/(byte*) doplasma::dist#2 )
  (byte*) doplasma::angle#3 ← phi( doplasma::@2/(byte*) doplasma::angle#2 )
  (byte*) doplasma::screen#4 ← phi( doplasma::@2/(byte*) doplasma::screen#3 )
  (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#4 + (number) $28
  (byte*) doplasma::angle#1 ← (byte*) doplasma::angle#3 + (number) $28
  (byte*) doplasma::dist#1 ← (byte*) doplasma::dist#3 + (number) $28
  (byte) doplasma::y#1 ← (byte) doplasma::y#2 + rangenext(0,$19)
  (bool~) doplasma::$4 ← (byte) doplasma::y#1 != rangelast(0,$19)
  if((bool~) doplasma::$4) goto doplasma::@1
  to:doplasma::@4
doplasma::@4: scope:[doplasma]  from doplasma::@3
  (byte) sin_offset_y#11 ← phi( doplasma::@3/(byte) sin_offset_y#17 )
  (byte) sin_offset_x#11 ← phi( doplasma::@3/(byte) sin_offset_x#17 )
  (byte) sin_offset_x#4 ← (byte) sin_offset_x#11 - (number) 3
  (byte) sin_offset_y#4 ← (byte) sin_offset_y#11 - (number) 7
  to:doplasma::@return
doplasma::@return: scope:[doplasma]  from doplasma::@4
  (byte) sin_offset_y#12 ← phi( doplasma::@4/(byte) sin_offset_y#4 )
  (byte) sin_offset_x#12 ← phi( doplasma::@4/(byte) sin_offset_x#4 )
  (byte) sin_offset_x#5 ← (byte) sin_offset_x#12
  (byte) sin_offset_y#5 ← (byte) sin_offset_y#12
  return 
  to:@return

(void()) init_angle_screen((byte*) init_angle_screen::screen)
init_angle_screen: scope:[init_angle_screen]  from main::@9
  (byte*) init_angle_screen::screen#1 ← phi( main::@9/(byte*) init_angle_screen::screen#0 )
  (byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
  (byte*) init_angle_screen::screen_topline#0 ← (byte*~) init_angle_screen::$0
  (byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
  (byte*) init_angle_screen::screen_bottomline#0 ← (byte*~) init_angle_screen::$1
  (byte) init_angle_screen::y#0 ← (byte) 0
  to:init_angle_screen::@1
init_angle_screen::@1: scope:[init_angle_screen]  from init_angle_screen init_angle_screen::@4
  (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 )
  (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 )
  (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) init_angle_screen::y#0 init_angle_screen::@4/(byte) init_angle_screen::y#1 )
  (byte) init_angle_screen::x#0 ← (byte) 0
  (byte) init_angle_screen::xb#0 ← (byte) $27
  to:init_angle_screen::@2
init_angle_screen::@2: scope:[init_angle_screen]  from init_angle_screen::@1 init_angle_screen::@9
  (byte) init_angle_screen::xb#4 ← phi( init_angle_screen::@1/(byte) init_angle_screen::xb#0 init_angle_screen::@9/(byte) init_angle_screen::xb#1 )
  (byte*) init_angle_screen::screen_bottomline#5 ← phi( init_angle_screen::@1/(byte*) init_angle_screen::screen_bottomline#6 init_angle_screen::@9/(byte*) init_angle_screen::screen_bottomline#2 )
  (byte*) init_angle_screen::screen_topline#5 ← phi( init_angle_screen::@1/(byte*) init_angle_screen::screen_topline#6 init_angle_screen::@9/(byte*) init_angle_screen::screen_topline#2 )
  (byte) init_angle_screen::y#4 ← phi( init_angle_screen::@1/(byte) init_angle_screen::y#5 init_angle_screen::@9/(byte) init_angle_screen::y#6 )
  (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) init_angle_screen::x#0 init_angle_screen::@9/(byte) init_angle_screen::x#1 )
  (bool~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 <= (number) $13
  if((bool~) init_angle_screen::$2) goto init_angle_screen::@3
  to:init_angle_screen::@4
init_angle_screen::@3: scope:[init_angle_screen]  from init_angle_screen::@2
  (byte*) init_angle_screen::screen_topline#4 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_topline#5 )
  (byte) init_angle_screen::xb#3 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#4 )
  (byte*) init_angle_screen::screen_bottomline#4 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_bottomline#5 )
  (byte) init_angle_screen::y#2 ← phi( init_angle_screen::@2/(byte) init_angle_screen::y#4 )
  (byte) init_angle_screen::x#3 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#2 )
  (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (number) 2
  (number~) init_angle_screen::$4 ← (number) $27 - (number~) init_angle_screen::$3
  (word~) init_angle_screen::$5 ← ((word)) { (number~) init_angle_screen::$4, (number) 0 }
  (signed word~) init_angle_screen::$6 ← ((signed word)) (word~) init_angle_screen::$5
  (signed word) init_angle_screen::xw#0 ← (signed word~) init_angle_screen::$6
  (number~) init_angle_screen::$7 ← (byte) init_angle_screen::y#2 * (number) 2
  (word~) init_angle_screen::$8 ← ((word)) { (number~) init_angle_screen::$7, (number) 0 }
  (signed word~) init_angle_screen::$9 ← ((signed word)) (word~) init_angle_screen::$8
  (signed word) init_angle_screen::yw#0 ← (signed word~) init_angle_screen::$9
  (signed word) atan2_16::x#0 ← (signed word) init_angle_screen::xw#0
  (signed word) atan2_16::y#0 ← (signed word) init_angle_screen::yw#0
  call atan2_16 
  (word) atan2_16::return#2 ← (word) atan2_16::return#1
  to:init_angle_screen::@9
init_angle_screen::@9: scope:[init_angle_screen]  from init_angle_screen::@3
  (byte) init_angle_screen::y#6 ← phi( init_angle_screen::@3/(byte) init_angle_screen::y#2 )
  (byte) init_angle_screen::x#4 ← phi( init_angle_screen::@3/(byte) init_angle_screen::x#3 )
  (byte*) init_angle_screen::screen_topline#2 ← phi( init_angle_screen::@3/(byte*) init_angle_screen::screen_topline#4 )
  (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@3/(byte) init_angle_screen::xb#3 )
  (byte*) init_angle_screen::screen_bottomline#2 ← phi( init_angle_screen::@3/(byte*) init_angle_screen::screen_bottomline#4 )
  (word) atan2_16::return#4 ← phi( init_angle_screen::@3/(word) atan2_16::return#2 )
  (word~) init_angle_screen::$10 ← (word) atan2_16::return#4
  (word) init_angle_screen::angle_w#0 ← (word~) init_angle_screen::$10
  (number~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (number) $80
  (number~) init_angle_screen::$12 ← > (number~) init_angle_screen::$11
  (byte) init_angle_screen::ang_w#0 ← (number~) init_angle_screen::$12
  *((byte*) init_angle_screen::screen_bottomline#2 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0
  (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0
  *((byte*) init_angle_screen::screen_topline#2 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13
  (number~) init_angle_screen::$14 ← (number) $80 + (byte) init_angle_screen::ang_w#0
  *((byte*) init_angle_screen::screen_topline#2 + (byte) init_angle_screen::x#4) ← (number~) init_angle_screen::$14
  (number~) init_angle_screen::$15 ← (number) $80 - (byte) init_angle_screen::ang_w#0
  *((byte*) init_angle_screen::screen_bottomline#2 + (byte) init_angle_screen::x#4) ← (number~) init_angle_screen::$15
  (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#4
  (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2
  to:init_angle_screen::@2
init_angle_screen::@4: scope:[init_angle_screen]  from init_angle_screen::@2
  (byte) init_angle_screen::y#3 ← phi( init_angle_screen::@2/(byte) init_angle_screen::y#4 )
  (byte*) init_angle_screen::screen_bottomline#3 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_bottomline#5 )
  (byte*) init_angle_screen::screen_topline#3 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_topline#5 )
  (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#3 - (number) $28
  (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#3 + (number) $28
  (byte) init_angle_screen::y#1 ← (byte) init_angle_screen::y#3 + rangenext(0,$c)
  (bool~) init_angle_screen::$16 ← (byte) init_angle_screen::y#1 != rangelast(0,$c)
  if((bool~) init_angle_screen::$16) goto init_angle_screen::@1
  to:init_angle_screen::@return
init_angle_screen::@return: scope:[init_angle_screen]  from init_angle_screen::@4
  return 
  to:@return

(void()) init_dist_screen((byte*) init_dist_screen::screen)
init_dist_screen: scope:[init_dist_screen]  from main
  (byte*) init_dist_screen::screen#2 ← phi( main/(byte*) init_dist_screen::screen#0 )
  (word*) SQUARES#23 ← phi( main/(word*) SQUARES#21 )
  (byte*) heap_head#28 ← phi( main/(byte*) heap_head#26 )
  (byte) NUM_SQUARES#3 ← (number) $30
  call init_squares 
  to:init_dist_screen::@19
init_dist_screen::@19: scope:[init_dist_screen]  from init_dist_screen
  (byte) NUM_SQUARES#45 ← phi( init_dist_screen/(byte) NUM_SQUARES#3 )
  (byte*) init_dist_screen::screen#1 ← phi( init_dist_screen/(byte*) init_dist_screen::screen#2 )
  (word*) SQUARES#14 ← phi( init_dist_screen/(word*) SQUARES#2 )
  (byte*) heap_head#20 ← phi( init_dist_screen/(byte*) heap_head#4 )
  (byte*) heap_head#9 ← (byte*) heap_head#20
  (word*) SQUARES#5 ← (word*) SQUARES#14
  (byte*) init_dist_screen::screen_topline#0 ← (byte*) init_dist_screen::screen#1
  (byte*~) init_dist_screen::$1 ← (byte*) init_dist_screen::screen#1 + (number) $28*(number) $18
  (byte*) init_dist_screen::screen_bottomline#0 ← (byte*~) init_dist_screen::$1
  (byte) init_dist_screen::y#0 ← (byte) 0
  to:init_dist_screen::@1
init_dist_screen::@1: scope:[init_dist_screen]  from init_dist_screen::@19 init_dist_screen::@7
  (byte*) heap_head#51 ← phi( init_dist_screen::@19/(byte*) heap_head#9 init_dist_screen::@7/(byte*) heap_head#29 )
  (byte) NUM_SQUARES#43 ← phi( init_dist_screen::@19/(byte) NUM_SQUARES#45 init_dist_screen::@7/(byte) NUM_SQUARES#18 )
  (byte*) init_dist_screen::screen_bottomline#14 ← phi( init_dist_screen::@19/(byte*) init_dist_screen::screen_bottomline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#1 )
  (byte*) init_dist_screen::screen_topline#14 ← phi( init_dist_screen::@19/(byte*) init_dist_screen::screen_topline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 )
  (word*) SQUARES#38 ← phi( init_dist_screen::@19/(word*) SQUARES#5 init_dist_screen::@7/(word*) SQUARES#24 )
  (byte) init_dist_screen::y#2 ← phi( init_dist_screen::@19/(byte) init_dist_screen::y#0 init_dist_screen::@7/(byte) init_dist_screen::y#1 )
  (number~) init_dist_screen::$2 ← (byte) init_dist_screen::y#2 * (number) 2
  (byte) init_dist_screen::y2#0 ← (number~) init_dist_screen::$2
  (bool~) init_dist_screen::$3 ← (byte) init_dist_screen::y2#0 >= (number) $18
  if((bool~) init_dist_screen::$3) goto init_dist_screen::@2
  to:init_dist_screen::@3
init_dist_screen::@2: scope:[init_dist_screen]  from init_dist_screen::@1
  (byte*) heap_head#47 ← phi( init_dist_screen::@1/(byte*) heap_head#51 )
  (byte) NUM_SQUARES#39 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#43 )
  (byte) init_dist_screen::y#9 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y#2 )
  (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_bottomline#14 )
  (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_topline#14 )
  (word*) SQUARES#29 ← phi( init_dist_screen::@1/(word*) SQUARES#38 )
  (byte) init_dist_screen::y2#1 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y2#0 )
  (number~) init_dist_screen::$6 ← (byte) init_dist_screen::y2#1 - (number) $18
  (number~) init_dist_screen::$7 ← (number~) init_dist_screen::$6
  to:init_dist_screen::@4
init_dist_screen::@3: scope:[init_dist_screen]  from init_dist_screen::@1
  (byte*) heap_head#48 ← phi( init_dist_screen::@1/(byte*) heap_head#51 )
  (byte) NUM_SQUARES#40 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#43 )
  (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y#2 )
  (byte*) init_dist_screen::screen_bottomline#12 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_bottomline#14 )
  (byte*) init_dist_screen::screen_topline#12 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_topline#14 )
  (word*) SQUARES#30 ← phi( init_dist_screen::@1/(word*) SQUARES#38 )
  (byte) init_dist_screen::y2#2 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y2#0 )
  (number~) init_dist_screen::$4 ← (number) $18 - (byte) init_dist_screen::y2#2
  (number~) init_dist_screen::$5 ← (number~) init_dist_screen::$4
  to:init_dist_screen::@4
init_dist_screen::@4: scope:[init_dist_screen]  from init_dist_screen::@2 init_dist_screen::@3
  (byte*) heap_head#44 ← phi( init_dist_screen::@2/(byte*) heap_head#47 init_dist_screen::@3/(byte*) heap_head#48 )
  (byte) NUM_SQUARES#35 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#39 init_dist_screen::@3/(byte) NUM_SQUARES#40 )
  (byte) init_dist_screen::y#7 ← phi( init_dist_screen::@2/(byte) init_dist_screen::y#9 init_dist_screen::@3/(byte) init_dist_screen::y#10 )
  (byte*) init_dist_screen::screen_bottomline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_bottomline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_bottomline#12 )
  (byte*) init_dist_screen::screen_topline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 )
  (word*) SQUARES#19 ← phi( init_dist_screen::@2/(word*) SQUARES#29 init_dist_screen::@3/(word*) SQUARES#30 )
  (number~) init_dist_screen::$8 ← phi( init_dist_screen::@2/(number~) init_dist_screen::$7 init_dist_screen::@3/(number~) init_dist_screen::$5 )
  (byte) init_dist_screen::yd#0 ← (number~) init_dist_screen::$8
  (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
  call sqr 
  (word) sqr::return#2 ← (word) sqr::return#1
  to:init_dist_screen::@20
init_dist_screen::@20: scope:[init_dist_screen]  from init_dist_screen::@4
  (word*) SQUARES#39 ← phi( init_dist_screen::@4/(word*) SQUARES#19 )
  (byte*) heap_head#40 ← phi( init_dist_screen::@4/(byte*) heap_head#44 )
  (byte) NUM_SQUARES#28 ← phi( init_dist_screen::@4/(byte) NUM_SQUARES#35 )
  (byte) init_dist_screen::y#5 ← phi( init_dist_screen::@4/(byte) init_dist_screen::y#7 )
  (byte*) init_dist_screen::screen_bottomline#6 ← phi( init_dist_screen::@4/(byte*) init_dist_screen::screen_bottomline#8 )
  (byte*) init_dist_screen::screen_topline#6 ← phi( init_dist_screen::@4/(byte*) init_dist_screen::screen_topline#8 )
  (word) sqr::return#5 ← phi( init_dist_screen::@4/(word) sqr::return#2 )
  (word~) init_dist_screen::$9 ← (word) sqr::return#5
  (word) init_dist_screen::yds#0 ← (word~) init_dist_screen::$9
  (byte) init_dist_screen::x#0 ← (byte) 0
  (byte) init_dist_screen::xb#0 ← (byte) $27
  to:init_dist_screen::@5
init_dist_screen::@5: scope:[init_dist_screen]  from init_dist_screen::@20 init_dist_screen::@22
  (byte) init_dist_screen::xb#8 ← phi( init_dist_screen::@20/(byte) init_dist_screen::xb#0 init_dist_screen::@22/(byte) init_dist_screen::xb#1 )
  (word) init_dist_screen::yds#6 ← phi( init_dist_screen::@20/(word) init_dist_screen::yds#0 init_dist_screen::@22/(word) init_dist_screen::yds#7 )
  (word*) SQUARES#31 ← phi( init_dist_screen::@20/(word*) SQUARES#39 init_dist_screen::@22/(word*) SQUARES#40 )
  (byte*) heap_head#35 ← phi( init_dist_screen::@20/(byte*) heap_head#40 init_dist_screen::@22/(byte*) heap_head#41 )
  (byte) NUM_SQUARES#22 ← phi( init_dist_screen::@20/(byte) NUM_SQUARES#28 init_dist_screen::@22/(byte) NUM_SQUARES#29 )
  (byte) init_dist_screen::y#4 ← phi( init_dist_screen::@20/(byte) init_dist_screen::y#5 init_dist_screen::@22/(byte) init_dist_screen::y#6 )
  (byte*) init_dist_screen::screen_bottomline#4 ← phi( init_dist_screen::@20/(byte*) init_dist_screen::screen_bottomline#6 init_dist_screen::@22/(byte*) init_dist_screen::screen_bottomline#3 )
  (byte*) init_dist_screen::screen_topline#4 ← phi( init_dist_screen::@20/(byte*) init_dist_screen::screen_topline#6 init_dist_screen::@22/(byte*) init_dist_screen::screen_topline#3 )
  (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@20/(byte) init_dist_screen::x#0 init_dist_screen::@22/(byte) init_dist_screen::x#1 )
  (bool~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 <= (number) $13
  if((bool~) init_dist_screen::$10) goto init_dist_screen::@6
  to:init_dist_screen::@7
init_dist_screen::@6: scope:[init_dist_screen]  from init_dist_screen::@5
  (byte*) heap_head#55 ← phi( init_dist_screen::@5/(byte*) heap_head#35 )
  (byte) init_dist_screen::y#14 ← phi( init_dist_screen::@5/(byte) init_dist_screen::y#4 )
  (byte) init_dist_screen::xb#7 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#8 )
  (byte*) init_dist_screen::screen_bottomline#13 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_bottomline#4 )
  (byte*) init_dist_screen::screen_topline#13 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_topline#4 )
  (byte) NUM_SQUARES#36 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#22 )
  (word) init_dist_screen::yds#5 ← phi( init_dist_screen::@5/(word) init_dist_screen::yds#6 )
  (word*) SQUARES#41 ← phi( init_dist_screen::@5/(word*) SQUARES#31 )
  (byte) init_dist_screen::x#3 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#2 )
  (number~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (number) 2
  (byte) init_dist_screen::x2#0 ← (number~) init_dist_screen::$11
  (bool~) init_dist_screen::$12 ← (byte) init_dist_screen::x2#0 >= (number) $27
  if((bool~) init_dist_screen::$12) goto init_dist_screen::@8
  to:init_dist_screen::@9
init_dist_screen::@7: scope:[init_dist_screen]  from init_dist_screen::@5
  (word*) SQUARES#24 ← phi( init_dist_screen::@5/(word*) SQUARES#31 )
  (byte*) heap_head#29 ← phi( init_dist_screen::@5/(byte*) heap_head#35 )
  (byte) NUM_SQUARES#18 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#22 )
  (byte) init_dist_screen::y#3 ← phi( init_dist_screen::@5/(byte) init_dist_screen::y#4 )
  (byte*) init_dist_screen::screen_bottomline#2 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_bottomline#4 )
  (byte*) init_dist_screen::screen_topline#2 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_topline#4 )
  (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#2 + (number) $28
  (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#2 - (number) $28
  (byte) init_dist_screen::y#1 ← (byte) init_dist_screen::y#3 + rangenext(0,$c)
  (bool~) init_dist_screen::$21 ← (byte) init_dist_screen::y#1 != rangelast(0,$c)
  if((bool~) init_dist_screen::$21) goto init_dist_screen::@1
  to:init_dist_screen::@return
init_dist_screen::@8: scope:[init_dist_screen]  from init_dist_screen::@6
  (byte*) heap_head#52 ← phi( init_dist_screen::@6/(byte*) heap_head#55 )
  (byte) init_dist_screen::y#12 ← phi( init_dist_screen::@6/(byte) init_dist_screen::y#14 )
  (byte) init_dist_screen::xb#5 ← phi( init_dist_screen::@6/(byte) init_dist_screen::xb#7 )
  (byte*) init_dist_screen::screen_bottomline#9 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_bottomline#13 )
  (byte) init_dist_screen::x#7 ← phi( init_dist_screen::@6/(byte) init_dist_screen::x#3 )
  (byte*) init_dist_screen::screen_topline#9 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_topline#13 )
  (byte) NUM_SQUARES#30 ← phi( init_dist_screen::@6/(byte) NUM_SQUARES#36 )
  (word) init_dist_screen::yds#3 ← phi( init_dist_screen::@6/(word) init_dist_screen::yds#5 )
  (word*) SQUARES#32 ← phi( init_dist_screen::@6/(word*) SQUARES#41 )
  (byte) init_dist_screen::x2#1 ← phi( init_dist_screen::@6/(byte) init_dist_screen::x2#0 )
  (number~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#1 - (number) $27
  (number~) init_dist_screen::$16 ← (number~) init_dist_screen::$15
  to:init_dist_screen::@10
init_dist_screen::@9: scope:[init_dist_screen]  from init_dist_screen::@6
  (byte*) heap_head#53 ← phi( init_dist_screen::@6/(byte*) heap_head#55 )
  (byte) init_dist_screen::y#13 ← phi( init_dist_screen::@6/(byte) init_dist_screen::y#14 )
  (byte) init_dist_screen::xb#6 ← phi( init_dist_screen::@6/(byte) init_dist_screen::xb#7 )
  (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_bottomline#13 )
  (byte) init_dist_screen::x#8 ← phi( init_dist_screen::@6/(byte) init_dist_screen::x#3 )
  (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_topline#13 )
  (byte) NUM_SQUARES#31 ← phi( init_dist_screen::@6/(byte) NUM_SQUARES#36 )
  (word) init_dist_screen::yds#4 ← phi( init_dist_screen::@6/(word) init_dist_screen::yds#5 )
  (word*) SQUARES#33 ← phi( init_dist_screen::@6/(word*) SQUARES#41 )
  (byte) init_dist_screen::x2#2 ← phi( init_dist_screen::@6/(byte) init_dist_screen::x2#0 )
  (number~) init_dist_screen::$13 ← (number) $27 - (byte) init_dist_screen::x2#2
  (number~) init_dist_screen::$14 ← (number~) init_dist_screen::$13
  to:init_dist_screen::@10
init_dist_screen::@10: scope:[init_dist_screen]  from init_dist_screen::@8 init_dist_screen::@9
  (byte*) heap_head#49 ← phi( init_dist_screen::@8/(byte*) heap_head#52 init_dist_screen::@9/(byte*) heap_head#53 )
  (byte) init_dist_screen::y#11 ← phi( init_dist_screen::@8/(byte) init_dist_screen::y#12 init_dist_screen::@9/(byte) init_dist_screen::y#13 )
  (byte) init_dist_screen::xb#4 ← phi( init_dist_screen::@8/(byte) init_dist_screen::xb#5 init_dist_screen::@9/(byte) init_dist_screen::xb#6 )
  (byte*) init_dist_screen::screen_bottomline#7 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_bottomline#9 init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#10 )
  (byte) init_dist_screen::x#6 ← phi( init_dist_screen::@8/(byte) init_dist_screen::x#7 init_dist_screen::@9/(byte) init_dist_screen::x#8 )
  (byte*) init_dist_screen::screen_topline#7 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_topline#9 init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#10 )
  (byte) NUM_SQUARES#23 ← phi( init_dist_screen::@8/(byte) NUM_SQUARES#30 init_dist_screen::@9/(byte) NUM_SQUARES#31 )
  (word) init_dist_screen::yds#2 ← phi( init_dist_screen::@8/(word) init_dist_screen::yds#3 init_dist_screen::@9/(word) init_dist_screen::yds#4 )
  (word*) SQUARES#18 ← phi( init_dist_screen::@8/(word*) SQUARES#32 init_dist_screen::@9/(word*) SQUARES#33 )
  (number~) init_dist_screen::$17 ← phi( init_dist_screen::@8/(number~) init_dist_screen::$16 init_dist_screen::@9/(number~) init_dist_screen::$14 )
  (byte) init_dist_screen::xd#0 ← (number~) init_dist_screen::$17
  (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
  call sqr 
  (word) sqr::return#3 ← (word) sqr::return#1
  to:init_dist_screen::@21
init_dist_screen::@21: scope:[init_dist_screen]  from init_dist_screen::@10
  (byte*) heap_head#45 ← phi( init_dist_screen::@10/(byte*) heap_head#49 )
  (byte) init_dist_screen::y#8 ← phi( init_dist_screen::@10/(byte) init_dist_screen::y#11 )
  (byte) init_dist_screen::xb#3 ← phi( init_dist_screen::@10/(byte) init_dist_screen::xb#4 )
  (byte*) init_dist_screen::screen_bottomline#5 ← phi( init_dist_screen::@10/(byte*) init_dist_screen::screen_bottomline#7 )
  (byte) init_dist_screen::x#5 ← phi( init_dist_screen::@10/(byte) init_dist_screen::x#6 )
  (byte*) init_dist_screen::screen_topline#5 ← phi( init_dist_screen::@10/(byte*) init_dist_screen::screen_topline#7 )
  (byte) NUM_SQUARES#15 ← phi( init_dist_screen::@10/(byte) NUM_SQUARES#23 )
  (word*) SQUARES#20 ← phi( init_dist_screen::@10/(word*) SQUARES#18 )
  (word) init_dist_screen::yds#1 ← phi( init_dist_screen::@10/(word) init_dist_screen::yds#2 )
  (word) sqr::return#6 ← phi( init_dist_screen::@10/(word) sqr::return#3 )
  (word~) init_dist_screen::$18 ← (word) sqr::return#6
  (word) init_dist_screen::xds#0 ← (word~) init_dist_screen::$18
  (word~) init_dist_screen::$19 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#1
  (word) init_dist_screen::ds#0 ← (word~) init_dist_screen::$19
  (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
  call sqrt 
  (byte) sqrt::return#2 ← (byte) sqrt::return#1
  to:init_dist_screen::@22
init_dist_screen::@22: scope:[init_dist_screen]  from init_dist_screen::@21
  (word) init_dist_screen::yds#7 ← phi( init_dist_screen::@21/(word) init_dist_screen::yds#1 )
  (word*) SQUARES#40 ← phi( init_dist_screen::@21/(word*) SQUARES#20 )
  (byte*) heap_head#41 ← phi( init_dist_screen::@21/(byte*) heap_head#45 )
  (byte) NUM_SQUARES#29 ← phi( init_dist_screen::@21/(byte) NUM_SQUARES#15 )
  (byte) init_dist_screen::y#6 ← phi( init_dist_screen::@21/(byte) init_dist_screen::y#8 )
  (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@21/(byte) init_dist_screen::xb#3 )
  (byte*) init_dist_screen::screen_bottomline#3 ← phi( init_dist_screen::@21/(byte*) init_dist_screen::screen_bottomline#5 )
  (byte) init_dist_screen::x#4 ← phi( init_dist_screen::@21/(byte) init_dist_screen::x#5 )
  (byte*) init_dist_screen::screen_topline#3 ← phi( init_dist_screen::@21/(byte*) init_dist_screen::screen_topline#5 )
  (byte) sqrt::return#4 ← phi( init_dist_screen::@21/(byte) sqrt::return#2 )
  (byte~) init_dist_screen::$20 ← (byte) sqrt::return#4
  (byte) init_dist_screen::d#0 ← (byte~) init_dist_screen::$20
  *((byte*) init_dist_screen::screen_topline#3 + (byte) init_dist_screen::x#4) ← (byte) init_dist_screen::d#0
  *((byte*) init_dist_screen::screen_bottomline#3 + (byte) init_dist_screen::x#4) ← (byte) init_dist_screen::d#0
  *((byte*) init_dist_screen::screen_topline#3 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
  *((byte*) init_dist_screen::screen_bottomline#3 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
  (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#4
  (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2
  to:init_dist_screen::@5
init_dist_screen::@return: scope:[init_dist_screen]  from init_dist_screen::@7
  (word*) SQUARES#15 ← phi( init_dist_screen::@7/(word*) SQUARES#24 )
  (byte*) heap_head#21 ← phi( init_dist_screen::@7/(byte*) heap_head#29 )
  (byte) NUM_SQUARES#11 ← phi( init_dist_screen::@7/(byte) NUM_SQUARES#18 )
  (byte) NUM_SQUARES#4 ← (byte) NUM_SQUARES#11
  (byte*) heap_head#10 ← (byte*) heap_head#21
  (word*) SQUARES#6 ← (word*) SQUARES#15
  return 
  to:@return

(void()) make_plasma_charset((byte*) make_plasma_charset::charset)
make_plasma_charset: scope:[make_plasma_charset]  from main::@10
  (byte*) make_plasma_charset::charset#16 ← phi( main::@10/(byte*) make_plasma_charset::charset#0 )
  (byte*) print_char_cursor#29 ← phi( main::@10/(byte*) print_char_cursor#21 )
  (byte*) print_line_cursor#22 ← phi( main::@10/(byte*) print_line_cursor#14 )
  (byte*) print_screen#4 ← phi( main::@10/(byte*) print_screen#5 )
  call sid_rnd_init 
  to:make_plasma_charset::@23
make_plasma_charset::@23: scope:[make_plasma_charset]  from make_plasma_charset
  (byte*) make_plasma_charset::charset#13 ← phi( make_plasma_charset/(byte*) make_plasma_charset::charset#16 )
  (byte*) print_char_cursor#23 ← phi( make_plasma_charset/(byte*) print_char_cursor#29 )
  (byte*) print_line_cursor#16 ← phi( make_plasma_charset/(byte*) print_line_cursor#22 )
  (byte*) print_screen#3 ← phi( make_plasma_charset/(byte*) print_screen#4 )
  call print_cls 
  to:make_plasma_charset::@24
make_plasma_charset::@24: scope:[make_plasma_charset]  from make_plasma_charset::@23
  (byte*) make_plasma_charset::charset#12 ← phi( make_plasma_charset::@23/(byte*) make_plasma_charset::charset#13 )
  (byte*) print_char_cursor#16 ← phi( make_plasma_charset::@23/(byte*) print_char_cursor#4 )
  (byte*) print_line_cursor#11 ← phi( make_plasma_charset::@23/(byte*) print_line_cursor#2 )
  (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#11
  (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#16
  (word) make_plasma_charset::c#0 ← (word) 0
  to:make_plasma_charset::@1
make_plasma_charset::@1: scope:[make_plasma_charset]  from make_plasma_charset::@19 make_plasma_charset::@24
  (byte*) make_plasma_charset::charset#10 ← phi( make_plasma_charset::@19/(byte*) make_plasma_charset::charset#11 make_plasma_charset::@24/(byte*) make_plasma_charset::charset#12 )
  (byte*) print_char_cursor#24 ← phi( make_plasma_charset::@19/(byte*) print_char_cursor#30 make_plasma_charset::@24/(byte*) print_char_cursor#7 )
  (byte*) print_line_cursor#17 ← phi( make_plasma_charset::@19/(byte*) print_line_cursor#23 make_plasma_charset::@24/(byte*) print_line_cursor#5 )
  (word) make_plasma_charset::c#2 ← phi( make_plasma_charset::@19/(word) make_plasma_charset::c#1 make_plasma_charset::@24/(word) make_plasma_charset::c#0 )
  (bool~) make_plasma_charset::$2 ← (word) make_plasma_charset::c#2 < (number) $100
  if((bool~) make_plasma_charset::$2) goto make_plasma_charset::@2
  to:make_plasma_charset::@return
make_plasma_charset::@2: scope:[make_plasma_charset]  from make_plasma_charset::@1
  (byte*) print_line_cursor#36 ← phi( make_plasma_charset::@1/(byte*) print_line_cursor#17 )
  (byte*) print_char_cursor#39 ← phi( make_plasma_charset::@1/(byte*) print_char_cursor#24 )
  (byte*) make_plasma_charset::charset#8 ← phi( make_plasma_charset::@1/(byte*) make_plasma_charset::charset#10 )
  (word) make_plasma_charset::c#3 ← phi( make_plasma_charset::@1/(word) make_plasma_charset::c#2 )
  (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#3
  (byte) make_plasma_charset::s#0 ← *((const byte*) SINTABLE + (byte~) make_plasma_charset::$3)
  (byte) make_plasma_charset::i#0 ← (byte) 0
  to:make_plasma_charset::@4
make_plasma_charset::@4: scope:[make_plasma_charset]  from make_plasma_charset::@2 make_plasma_charset::@9
  (byte*) print_line_cursor#32 ← phi( make_plasma_charset::@2/(byte*) print_line_cursor#36 make_plasma_charset::@9/(byte*) print_line_cursor#37 )
  (byte) make_plasma_charset::s#6 ← phi( make_plasma_charset::@2/(byte) make_plasma_charset::s#0 make_plasma_charset::@9/(byte) make_plasma_charset::s#8 )
  (byte*) print_char_cursor#36 ← phi( make_plasma_charset::@2/(byte*) print_char_cursor#39 make_plasma_charset::@9/(byte*) print_char_cursor#40 )
  (byte*) make_plasma_charset::charset#5 ← phi( make_plasma_charset::@2/(byte*) make_plasma_charset::charset#8 make_plasma_charset::@9/(byte*) make_plasma_charset::charset#1 )
  (word) make_plasma_charset::c#7 ← phi( make_plasma_charset::@2/(word) make_plasma_charset::c#3 make_plasma_charset::@9/(word) make_plasma_charset::c#5 )
  (byte) make_plasma_charset::i#2 ← phi( make_plasma_charset::@2/(byte) make_plasma_charset::i#0 make_plasma_charset::@9/(byte) make_plasma_charset::i#1 )
  (bool~) make_plasma_charset::$4 ← (byte) make_plasma_charset::i#2 < (number) 8
  if((bool~) make_plasma_charset::$4) goto make_plasma_charset::@5
  to:make_plasma_charset::@6
make_plasma_charset::@5: scope:[make_plasma_charset]  from make_plasma_charset::@4
  (byte*) print_line_cursor#42 ← phi( make_plasma_charset::@4/(byte*) print_line_cursor#32 )
  (byte*) print_char_cursor#46 ← phi( make_plasma_charset::@4/(byte*) print_char_cursor#36 )
  (byte) make_plasma_charset::s#5 ← phi( make_plasma_charset::@4/(byte) make_plasma_charset::s#6 )
  (byte*) make_plasma_charset::charset#4 ← phi( make_plasma_charset::@4/(byte*) make_plasma_charset::charset#5 )
  (byte) make_plasma_charset::i#6 ← phi( make_plasma_charset::@4/(byte) make_plasma_charset::i#2 )
  (word) make_plasma_charset::c#11 ← phi( make_plasma_charset::@4/(word) make_plasma_charset::c#7 )
  (byte) make_plasma_charset::b#0 ← (byte) 0
  (byte) make_plasma_charset::ii#0 ← (byte) 0
  to:make_plasma_charset::@7
make_plasma_charset::@6: scope:[make_plasma_charset]  from make_plasma_charset::@4
  (byte*) make_plasma_charset::charset#15 ← phi( make_plasma_charset::@4/(byte*) make_plasma_charset::charset#5 )
  (byte*) print_line_cursor#29 ← phi( make_plasma_charset::@4/(byte*) print_line_cursor#32 )
  (byte*) print_char_cursor#31 ← phi( make_plasma_charset::@4/(byte*) print_char_cursor#36 )
  (word) make_plasma_charset::c#4 ← phi( make_plasma_charset::@4/(word) make_plasma_charset::c#7 )
  (number~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#4 & (number) 7
  (bool~) make_plasma_charset::$13 ← (number~) make_plasma_charset::$12 == (number) 0
  (bool~) make_plasma_charset::$14 ← ! (bool~) make_plasma_charset::$13
  if((bool~) make_plasma_charset::$14) goto make_plasma_charset::@19
  to:make_plasma_charset::@18
make_plasma_charset::@7: scope:[make_plasma_charset]  from make_plasma_charset::@10 make_plasma_charset::@5
  (byte*) print_line_cursor#39 ← phi( make_plasma_charset::@10/(byte*) print_line_cursor#41 make_plasma_charset::@5/(byte*) print_line_cursor#42 )
  (byte*) print_char_cursor#43 ← phi( make_plasma_charset::@10/(byte*) print_char_cursor#45 make_plasma_charset::@5/(byte*) print_char_cursor#46 )
  (byte) make_plasma_charset::s#3 ← phi( make_plasma_charset::@10/(byte) make_plasma_charset::s#4 make_plasma_charset::@5/(byte) make_plasma_charset::s#5 )
  (byte*) make_plasma_charset::charset#2 ← phi( make_plasma_charset::@10/(byte*) make_plasma_charset::charset#3 make_plasma_charset::@5/(byte*) make_plasma_charset::charset#4 )
  (byte) make_plasma_charset::b#4 ← phi( make_plasma_charset::@10/(byte) make_plasma_charset::b#6 make_plasma_charset::@5/(byte) make_plasma_charset::b#0 )
  (byte) make_plasma_charset::i#4 ← phi( make_plasma_charset::@10/(byte) make_plasma_charset::i#5 make_plasma_charset::@5/(byte) make_plasma_charset::i#6 )
  (word) make_plasma_charset::c#8 ← phi( make_plasma_charset::@10/(word) make_plasma_charset::c#10 make_plasma_charset::@5/(word) make_plasma_charset::c#11 )
  (byte) make_plasma_charset::ii#2 ← phi( make_plasma_charset::@10/(byte) make_plasma_charset::ii#1 make_plasma_charset::@5/(byte) make_plasma_charset::ii#0 )
  (bool~) make_plasma_charset::$5 ← (byte) make_plasma_charset::ii#2 < (number) 8
  if((bool~) make_plasma_charset::$5) goto make_plasma_charset::@8
  to:make_plasma_charset::@9
make_plasma_charset::@8: scope:[make_plasma_charset]  from make_plasma_charset::@7
  (byte*) print_line_cursor#47 ← phi( make_plasma_charset::@7/(byte*) print_line_cursor#39 )
  (byte*) print_char_cursor#51 ← phi( make_plasma_charset::@7/(byte*) print_char_cursor#43 )
  (byte*) make_plasma_charset::charset#9 ← phi( make_plasma_charset::@7/(byte*) make_plasma_charset::charset#2 )
  (byte) make_plasma_charset::i#9 ← phi( make_plasma_charset::@7/(byte) make_plasma_charset::i#4 )
  (word) make_plasma_charset::c#15 ← phi( make_plasma_charset::@7/(word) make_plasma_charset::c#8 )
  (byte) make_plasma_charset::b#7 ← phi( make_plasma_charset::@7/(byte) make_plasma_charset::b#4 )
  (byte) make_plasma_charset::ii#6 ← phi( make_plasma_charset::@7/(byte) make_plasma_charset::ii#2 )
  (byte) make_plasma_charset::s#2 ← phi( make_plasma_charset::@7/(byte) make_plasma_charset::s#3 )
  call sid_rnd 
  (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#1
  to:make_plasma_charset::@25
make_plasma_charset::@25: scope:[make_plasma_charset]  from make_plasma_charset::@8
  (byte*) print_line_cursor#45 ← phi( make_plasma_charset::@8/(byte*) print_line_cursor#47 )
  (byte*) print_char_cursor#49 ← phi( make_plasma_charset::@8/(byte*) print_char_cursor#51 )
  (byte*) make_plasma_charset::charset#7 ← phi( make_plasma_charset::@8/(byte*) make_plasma_charset::charset#9 )
  (byte) make_plasma_charset::i#8 ← phi( make_plasma_charset::@8/(byte) make_plasma_charset::i#9 )
  (word) make_plasma_charset::c#14 ← phi( make_plasma_charset::@8/(word) make_plasma_charset::c#15 )
  (byte) make_plasma_charset::b#5 ← phi( make_plasma_charset::@8/(byte) make_plasma_charset::b#7 )
  (byte) make_plasma_charset::ii#5 ← phi( make_plasma_charset::@8/(byte) make_plasma_charset::ii#6 )
  (byte) make_plasma_charset::s#1 ← phi( make_plasma_charset::@8/(byte) make_plasma_charset::s#2 )
  (byte) sid_rnd::return#4 ← phi( make_plasma_charset::@8/(byte) sid_rnd::return#2 )
  (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#4
  (number~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (number) $ff
  (bool~) make_plasma_charset::$8 ← (number~) make_plasma_charset::$7 > (byte) make_plasma_charset::s#1
  (bool~) make_plasma_charset::$9 ← ! (bool~) make_plasma_charset::$8
  if((bool~) make_plasma_charset::$9) goto make_plasma_charset::@10
  to:make_plasma_charset::@13
make_plasma_charset::@9: scope:[make_plasma_charset]  from make_plasma_charset::@7
  (byte*) print_line_cursor#37 ← phi( make_plasma_charset::@7/(byte*) print_line_cursor#39 )
  (byte) make_plasma_charset::s#8 ← phi( make_plasma_charset::@7/(byte) make_plasma_charset::s#3 )
  (byte*) print_char_cursor#40 ← phi( make_plasma_charset::@7/(byte*) print_char_cursor#43 )
  (byte*) make_plasma_charset::charset#1 ← phi( make_plasma_charset::@7/(byte*) make_plasma_charset::charset#2 )
  (byte) make_plasma_charset::b#2 ← phi( make_plasma_charset::@7/(byte) make_plasma_charset::b#4 )
  (byte) make_plasma_charset::i#3 ← phi( make_plasma_charset::@7/(byte) make_plasma_charset::i#4 )
  (word) make_plasma_charset::c#5 ← phi( make_plasma_charset::@7/(word) make_plasma_charset::c#8 )
  (number~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#5 * (number) 8
  (number~) make_plasma_charset::$11 ← (number~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#3
  *((byte*) make_plasma_charset::charset#1 + (number~) make_plasma_charset::$11) ← (byte) make_plasma_charset::b#2
  (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#3
  to:make_plasma_charset::@4
make_plasma_charset::@10: scope:[make_plasma_charset]  from make_plasma_charset::@13 make_plasma_charset::@25
  (byte*) print_line_cursor#41 ← phi( make_plasma_charset::@13/(byte*) print_line_cursor#44 make_plasma_charset::@25/(byte*) print_line_cursor#45 )
  (byte*) print_char_cursor#45 ← phi( make_plasma_charset::@13/(byte*) print_char_cursor#48 make_plasma_charset::@25/(byte*) print_char_cursor#49 )
  (byte) make_plasma_charset::s#4 ← phi( make_plasma_charset::@13/(byte) make_plasma_charset::s#7 make_plasma_charset::@25/(byte) make_plasma_charset::s#1 )
  (byte*) make_plasma_charset::charset#3 ← phi( make_plasma_charset::@13/(byte*) make_plasma_charset::charset#6 make_plasma_charset::@25/(byte*) make_plasma_charset::charset#7 )
  (byte) make_plasma_charset::b#6 ← phi( make_plasma_charset::@13/(byte) make_plasma_charset::b#1 make_plasma_charset::@25/(byte) make_plasma_charset::b#5 )
  (byte) make_plasma_charset::i#5 ← phi( make_plasma_charset::@13/(byte) make_plasma_charset::i#7 make_plasma_charset::@25/(byte) make_plasma_charset::i#8 )
  (word) make_plasma_charset::c#10 ← phi( make_plasma_charset::@13/(word) make_plasma_charset::c#13 make_plasma_charset::@25/(word) make_plasma_charset::c#14 )
  (byte) make_plasma_charset::ii#3 ← phi( make_plasma_charset::@13/(byte) make_plasma_charset::ii#4 make_plasma_charset::@25/(byte) make_plasma_charset::ii#5 )
  (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#3
  to:make_plasma_charset::@7
make_plasma_charset::@13: scope:[make_plasma_charset]  from make_plasma_charset::@25
  (byte*) print_line_cursor#44 ← phi( make_plasma_charset::@25/(byte*) print_line_cursor#45 )
  (byte*) print_char_cursor#48 ← phi( make_plasma_charset::@25/(byte*) print_char_cursor#49 )
  (byte) make_plasma_charset::s#7 ← phi( make_plasma_charset::@25/(byte) make_plasma_charset::s#1 )
  (byte*) make_plasma_charset::charset#6 ← phi( make_plasma_charset::@25/(byte*) make_plasma_charset::charset#7 )
  (byte) make_plasma_charset::i#7 ← phi( make_plasma_charset::@25/(byte) make_plasma_charset::i#8 )
  (word) make_plasma_charset::c#13 ← phi( make_plasma_charset::@25/(word) make_plasma_charset::c#14 )
  (byte) make_plasma_charset::ii#4 ← phi( make_plasma_charset::@25/(byte) make_plasma_charset::ii#5 )
  (byte) make_plasma_charset::b#3 ← phi( make_plasma_charset::@25/(byte) make_plasma_charset::b#5 )
  (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#3 | *((const byte*) make_plasma_charset::bittab + (byte) make_plasma_charset::ii#4)
  to:make_plasma_charset::@10
make_plasma_charset::@19: scope:[make_plasma_charset]  from make_plasma_charset::@26 make_plasma_charset::@6
  (byte*) make_plasma_charset::charset#11 ← phi( make_plasma_charset::@26/(byte*) make_plasma_charset::charset#14 make_plasma_charset::@6/(byte*) make_plasma_charset::charset#15 )
  (byte*) print_char_cursor#30 ← phi( make_plasma_charset::@26/(byte*) print_char_cursor#8 make_plasma_charset::@6/(byte*) print_char_cursor#31 )
  (byte*) print_line_cursor#23 ← phi( make_plasma_charset::@26/(byte*) print_line_cursor#28 make_plasma_charset::@6/(byte*) print_line_cursor#29 )
  (word) make_plasma_charset::c#6 ← phi( make_plasma_charset::@26/(word) make_plasma_charset::c#9 make_plasma_charset::@6/(word) make_plasma_charset::c#4 )
  (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#6
  to:make_plasma_charset::@1
make_plasma_charset::@18: scope:[make_plasma_charset]  from make_plasma_charset::@6
  (byte*) make_plasma_charset::charset#17 ← phi( make_plasma_charset::@6/(byte*) make_plasma_charset::charset#15 )
  (byte*) print_line_cursor#33 ← phi( make_plasma_charset::@6/(byte*) print_line_cursor#29 )
  (word) make_plasma_charset::c#12 ← phi( make_plasma_charset::@6/(word) make_plasma_charset::c#4 )
  (byte*) print_char_cursor#20 ← phi( make_plasma_charset::@6/(byte*) print_char_cursor#31 )
  (byte) print_char::ch#0 ← (byte) '.'
  call print_char 
  to:make_plasma_charset::@26
make_plasma_charset::@26: scope:[make_plasma_charset]  from make_plasma_charset::@18
  (byte*) make_plasma_charset::charset#14 ← phi( make_plasma_charset::@18/(byte*) make_plasma_charset::charset#17 )
  (byte*) print_line_cursor#28 ← phi( make_plasma_charset::@18/(byte*) print_line_cursor#33 )
  (word) make_plasma_charset::c#9 ← phi( make_plasma_charset::@18/(word) make_plasma_charset::c#12 )
  (byte*) print_char_cursor#17 ← phi( make_plasma_charset::@18/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#8 ← (byte*) print_char_cursor#17
  to:make_plasma_charset::@19
make_plasma_charset::@return: scope:[make_plasma_charset]  from make_plasma_charset::@1
  (byte*) print_char_cursor#18 ← phi( make_plasma_charset::@1/(byte*) print_char_cursor#24 )
  (byte*) print_line_cursor#12 ← phi( make_plasma_charset::@1/(byte*) print_line_cursor#17 )
  (byte*) print_line_cursor#6 ← (byte*) print_line_cursor#12
  (byte*) print_char_cursor#9 ← (byte*) print_char_cursor#18
  return 
  to:@return
@53: scope:[]  from @49
  (byte*) print_screen#8 ← phi( @49/(byte*) print_screen#9 )
  (byte*) SCREEN_ANGLE#6 ← phi( @49/(byte*) SCREEN_ANGLE#12 )
  (byte) sin_offset_y#18 ← phi( @49/(byte) sin_offset_y#3 )
  (byte) sin_offset_x#18 ← phi( @49/(byte) sin_offset_x#3 )
  (byte*) print_char_cursor#25 ← phi( @49/(byte*) print_char_cursor#32 )
  (byte*) print_line_cursor#18 ← phi( @49/(byte*) print_line_cursor#24 )
  (word*) SQUARES#25 ← phi( @49/(word*) SQUARES#34 )
  (byte*) heap_head#30 ← phi( @49/(byte*) heap_head#36 )
  (byte) NUM_SQUARES#19 ← phi( @49/(byte) NUM_SQUARES#24 )
  (byte*) SCREEN_DIST#3 ← phi( @49/(byte*) SCREEN_DIST#8 )
  call main 
  to:@56
@56: scope:[]  from @53
  (byte) sin_offset_y#13 ← phi( @53/(byte) sin_offset_y#2 )
  (byte) sin_offset_x#13 ← phi( @53/(byte) sin_offset_x#2 )
  (byte*) print_char_cursor#19 ← phi( @53/(byte*) print_char_cursor#6 )
  (byte*) print_line_cursor#13 ← phi( @53/(byte*) print_line_cursor#4 )
  (word*) SQUARES#16 ← phi( @53/(word*) SQUARES#4 )
  (byte*) heap_head#22 ← phi( @53/(byte*) heap_head#8 )
  (byte) NUM_SQUARES#12 ← phi( @53/(byte) NUM_SQUARES#2 )
  (byte) NUM_SQUARES#5 ← (byte) NUM_SQUARES#12
  (byte*) heap_head#11 ← (byte*) heap_head#22
  (word*) SQUARES#7 ← (word*) SQUARES#16
  (byte*) print_line_cursor#7 ← (byte*) print_line_cursor#13
  (byte*) print_char_cursor#10 ← (byte*) print_char_cursor#19
  (byte) sin_offset_x#6 ← (byte) sin_offset_x#13
  (byte) sin_offset_y#6 ← (byte) sin_offset_y#13
  to:@end
@end: scope:[]  from @56

SYMBOL TABLE SSA
(void*~) $0
(void*~) $1
(label) @17
(label) @22
(label) @48
(label) @49
(label) @53
(label) @54
(label) @55
(label) @56
(label) @9
(label) @begin
(label) @end
(const byte) BLACK = (byte) 0
(const byte*) CHARSET = (byte*)(number) $2000
(const byte*) COLS = (byte*)(number) $d800
(const word*) CORDIC_ATAN2_ANGLES_16[(const 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 byte) CORDIC_ITERATIONS_16 = (byte) $f
(const byte*) D018 = (byte*)(number) $d018
(const byte*) HEAP_TOP = (byte*)(number) $a000
(byte) NUM_SQUARES
(byte) NUM_SQUARES#0
(byte) NUM_SQUARES#1
(byte) NUM_SQUARES#10
(byte) NUM_SQUARES#11
(byte) NUM_SQUARES#12
(byte) NUM_SQUARES#13
(byte) NUM_SQUARES#14
(byte) NUM_SQUARES#15
(byte) NUM_SQUARES#16
(byte) NUM_SQUARES#17
(byte) NUM_SQUARES#18
(byte) NUM_SQUARES#19
(byte) NUM_SQUARES#2
(byte) NUM_SQUARES#20
(byte) NUM_SQUARES#21
(byte) NUM_SQUARES#22
(byte) NUM_SQUARES#23
(byte) NUM_SQUARES#24
(byte) NUM_SQUARES#25
(byte) NUM_SQUARES#26
(byte) NUM_SQUARES#27
(byte) NUM_SQUARES#28
(byte) NUM_SQUARES#29
(byte) NUM_SQUARES#3
(byte) NUM_SQUARES#30
(byte) NUM_SQUARES#31
(byte) NUM_SQUARES#32
(byte) NUM_SQUARES#33
(byte) NUM_SQUARES#34
(byte) NUM_SQUARES#35
(byte) NUM_SQUARES#36
(byte) NUM_SQUARES#37
(byte) NUM_SQUARES#38
(byte) NUM_SQUARES#39
(byte) NUM_SQUARES#4
(byte) NUM_SQUARES#40
(byte) NUM_SQUARES#41
(byte) NUM_SQUARES#42
(byte) NUM_SQUARES#43
(byte) NUM_SQUARES#44
(byte) NUM_SQUARES#45
(byte) NUM_SQUARES#46
(byte) NUM_SQUARES#47
(byte) NUM_SQUARES#48
(byte) NUM_SQUARES#5
(byte) NUM_SQUARES#6
(byte) NUM_SQUARES#7
(byte) NUM_SQUARES#8
(byte) NUM_SQUARES#9
(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 byte*) SCREEN1 = (byte*)(number) $2800
(const byte*) SCREEN2 = (byte*)(number) $2c00
(byte*) SCREEN_ANGLE
(byte*) SCREEN_ANGLE#0
(byte*) SCREEN_ANGLE#1
(byte*) SCREEN_ANGLE#10
(byte*) SCREEN_ANGLE#11
(byte*) SCREEN_ANGLE#12
(byte*) SCREEN_ANGLE#13
(byte*) SCREEN_ANGLE#14
(byte*) SCREEN_ANGLE#15
(byte*) SCREEN_ANGLE#16
(byte*) SCREEN_ANGLE#17
(byte*) SCREEN_ANGLE#18
(byte*) SCREEN_ANGLE#2
(byte*) SCREEN_ANGLE#3
(byte*) SCREEN_ANGLE#4
(byte*) SCREEN_ANGLE#5
(byte*) SCREEN_ANGLE#6
(byte*) SCREEN_ANGLE#7
(byte*) SCREEN_ANGLE#8
(byte*) SCREEN_ANGLE#9
(byte*) SCREEN_DIST
(byte*) SCREEN_DIST#0
(byte*) SCREEN_DIST#1
(byte*) SCREEN_DIST#10
(byte*) SCREEN_DIST#11
(byte*) SCREEN_DIST#12
(byte*) SCREEN_DIST#13
(byte*) SCREEN_DIST#14
(byte*) SCREEN_DIST#15
(byte*) SCREEN_DIST#16
(byte*) SCREEN_DIST#17
(byte*) SCREEN_DIST#18
(byte*) SCREEN_DIST#19
(byte*) SCREEN_DIST#2
(byte*) SCREEN_DIST#3
(byte*) SCREEN_DIST#4
(byte*) SCREEN_DIST#5
(byte*) SCREEN_DIST#6
(byte*) SCREEN_DIST#7
(byte*) SCREEN_DIST#8
(byte*) SCREEN_DIST#9
(const byte) SID_CONTROL_NOISE = (byte) $80
(const byte*) SID_VOICE3_CONTROL = (byte*)(number) $d412
(const word*) SID_VOICE3_FREQ = (word*)(number) $d40e
(const byte*) SID_VOICE3_OSC = (byte*)(number) $d41b
(const byte*) SINTABLE[(number) $200]  = kickasm {{ .for(var i=0;i<$200;i++)
        .byte round(127.5+127.5*sin(2*PI*i/256))
 }}
(const byte) SIZEOF_WORD = (byte) 2
(word*) SQUARES
(word*) SQUARES#0
(word*) SQUARES#1
(word*) SQUARES#10
(word*) SQUARES#11
(word*) SQUARES#12
(word*) SQUARES#13
(word*) SQUARES#14
(word*) SQUARES#15
(word*) SQUARES#16
(word*) SQUARES#17
(word*) SQUARES#18
(word*) SQUARES#19
(word*) SQUARES#2
(word*) SQUARES#20
(word*) SQUARES#21
(word*) SQUARES#22
(word*) SQUARES#23
(word*) SQUARES#24
(word*) SQUARES#25
(word*) SQUARES#26
(word*) SQUARES#27
(word*) SQUARES#28
(word*) SQUARES#29
(word*) SQUARES#3
(word*) SQUARES#30
(word*) SQUARES#31
(word*) SQUARES#32
(word*) SQUARES#33
(word*) SQUARES#34
(word*) SQUARES#35
(word*) SQUARES#36
(word*) SQUARES#37
(word*) SQUARES#38
(word*) SQUARES#39
(word*) SQUARES#4
(word*) SQUARES#40
(word*) SQUARES#41
(word*) SQUARES#42
(word*) SQUARES#43
(word*) SQUARES#44
(word*) SQUARES#45
(word*) SQUARES#46
(word*) SQUARES#47
(word*) SQUARES#48
(word*) SQUARES#49
(word*) SQUARES#5
(word*) SQUARES#50
(word*) SQUARES#51
(word*) SQUARES#52
(word*) SQUARES#6
(word*) SQUARES#7
(word*) SQUARES#8
(word*) SQUARES#9
(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::@13
(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::@24
(label) atan2_16::@25
(label) atan2_16::@26
(label) atan2_16::@27
(label) atan2_16::@3
(label) atan2_16::@30
(label) atan2_16::@33
(label) atan2_16::@4
(label) atan2_16::@5
(label) atan2_16::@6
(label) atan2_16::@7
(label) atan2_16::@8
(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
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
(bool~) bsearch16u::$0
(word*~) bsearch16u::$1
(signed word~) bsearch16u::$10
(bool~) bsearch16u::$11
(bool~) bsearch16u::$12
(bool~) bsearch16u::$13
(bool~) bsearch16u::$14
(word*~) bsearch16u::$15
(byte~) bsearch16u::$16
(number~) bsearch16u::$17
(number~) bsearch16u::$18
(word*~) bsearch16u::$2
(word*~) bsearch16u::$3
(word*~) bsearch16u::$4
(bool~) bsearch16u::$5
(byte~) bsearch16u::$6
(word*~) bsearch16u::$7
(signed word~) bsearch16u::$8
(signed word~) bsearch16u::$9
(label) bsearch16u::@1
(label) bsearch16u::@10
(label) bsearch16u::@13
(label) bsearch16u::@15
(label) bsearch16u::@2
(label) bsearch16u::@3
(label) bsearch16u::@6
(label) bsearch16u::@7
(label) bsearch16u::@8
(label) bsearch16u::@9
(label) bsearch16u::@return
(word*) bsearch16u::items
(word*) bsearch16u::items#0
(word*) bsearch16u::items#1
(word*) bsearch16u::items#2
(word*) bsearch16u::items#3
(word*) bsearch16u::items#4
(word*) bsearch16u::items#5
(word*) bsearch16u::items#6
(word*) bsearch16u::items#7
(word*) bsearch16u::items#8
(word*) bsearch16u::items#9
(word) bsearch16u::key
(word) bsearch16u::key#0
(word) bsearch16u::key#1
(word) bsearch16u::key#2
(word) bsearch16u::key#3
(word) bsearch16u::key#4
(word) bsearch16u::key#5
(word) bsearch16u::key#6
(word) bsearch16u::key#7
(byte) bsearch16u::num
(byte) bsearch16u::num#0
(byte) bsearch16u::num#1
(byte) bsearch16u::num#2
(byte) bsearch16u::num#3
(byte) bsearch16u::num#4
(byte) bsearch16u::num#5
(byte) bsearch16u::num#6
(byte) bsearch16u::num#7
(byte) bsearch16u::num#8
(word*) bsearch16u::pivot
(word*) bsearch16u::pivot#0
(word*) bsearch16u::pivot#1
(word*) bsearch16u::pivot#2
(word*) bsearch16u::pivot#3
(signed word) bsearch16u::result
(signed word) bsearch16u::result#0
(signed word) bsearch16u::result#1
(word*) bsearch16u::return
(word*) bsearch16u::return#0
(word*) bsearch16u::return#1
(word*) bsearch16u::return#2
(word*) bsearch16u::return#3
(word*) bsearch16u::return#4
(word*) bsearch16u::return#5
(void()) doplasma((byte*) doplasma::screen)
(byte*~) doplasma::$0
(byte*~) doplasma::$1
(byte~) doplasma::$2
(bool~) doplasma::$3
(bool~) doplasma::$4
(label) doplasma::@1
(label) doplasma::@2
(label) doplasma::@3
(label) doplasma::@4
(label) doplasma::@return
(byte*) doplasma::angle
(byte*) doplasma::angle#0
(byte*) doplasma::angle#1
(byte*) doplasma::angle#2
(byte*) doplasma::angle#3
(byte*) doplasma::angle#4
(byte*) doplasma::dist
(byte*) doplasma::dist#0
(byte*) doplasma::dist#1
(byte*) doplasma::dist#2
(byte*) doplasma::dist#3
(byte*) doplasma::dist#4
(byte*) doplasma::screen
(byte*) doplasma::screen#0
(byte*) doplasma::screen#1
(byte*) doplasma::screen#2
(byte*) doplasma::screen#3
(byte*) doplasma::screen#4
(byte*) doplasma::screen#5
(byte*) doplasma::screen#6
(byte*) doplasma::sin_x
(byte*) doplasma::sin_x#0
(byte*) doplasma::sin_x#1
(byte*) doplasma::sin_x#2
(byte*) doplasma::sin_x#3
(byte*) doplasma::sin_y
(byte*) doplasma::sin_y#0
(byte*) doplasma::sin_y#1
(byte*) doplasma::sin_y#2
(byte*) doplasma::sin_y#3
(byte) doplasma::x
(byte) doplasma::x#0
(byte) doplasma::x#1
(byte) doplasma::x#2
(byte) doplasma::y
(byte) doplasma::y#0
(byte) doplasma::y#1
(byte) doplasma::y#2
(byte) doplasma::y#3
(byte) doplasma::y#4
(byte*) heap_head
(byte*) heap_head#0
(byte*) heap_head#1
(byte*) heap_head#10
(byte*) heap_head#11
(byte*) heap_head#12
(byte*) heap_head#13
(byte*) heap_head#14
(byte*) heap_head#15
(byte*) heap_head#16
(byte*) heap_head#17
(byte*) heap_head#18
(byte*) heap_head#19
(byte*) heap_head#2
(byte*) heap_head#20
(byte*) heap_head#21
(byte*) heap_head#22
(byte*) heap_head#23
(byte*) heap_head#24
(byte*) heap_head#25
(byte*) heap_head#26
(byte*) heap_head#27
(byte*) heap_head#28
(byte*) heap_head#29
(byte*) heap_head#3
(byte*) heap_head#30
(byte*) heap_head#31
(byte*) heap_head#32
(byte*) heap_head#33
(byte*) heap_head#34
(byte*) heap_head#35
(byte*) heap_head#36
(byte*) heap_head#37
(byte*) heap_head#38
(byte*) heap_head#39
(byte*) heap_head#4
(byte*) heap_head#40
(byte*) heap_head#41
(byte*) heap_head#42
(byte*) heap_head#43
(byte*) heap_head#44
(byte*) heap_head#45
(byte*) heap_head#46
(byte*) heap_head#47
(byte*) heap_head#48
(byte*) heap_head#49
(byte*) heap_head#5
(byte*) heap_head#50
(byte*) heap_head#51
(byte*) heap_head#52
(byte*) heap_head#53
(byte*) heap_head#54
(byte*) heap_head#55
(byte*) heap_head#56
(byte*) heap_head#57
(byte*) heap_head#58
(byte*) heap_head#6
(byte*) heap_head#7
(byte*) heap_head#8
(byte*) heap_head#9
(void()) init_angle_screen((byte*) init_angle_screen::screen)
(byte*~) init_angle_screen::$0
(byte*~) init_angle_screen::$1
(word~) init_angle_screen::$10
(number~) init_angle_screen::$11
(number~) init_angle_screen::$12
(byte~) init_angle_screen::$13
(number~) init_angle_screen::$14
(number~) init_angle_screen::$15
(bool~) init_angle_screen::$16
(bool~) init_angle_screen::$2
(number~) init_angle_screen::$3
(number~) init_angle_screen::$4
(word~) init_angle_screen::$5
(signed word~) init_angle_screen::$6
(number~) init_angle_screen::$7
(word~) init_angle_screen::$8
(signed word~) init_angle_screen::$9
(label) init_angle_screen::@1
(label) init_angle_screen::@2
(label) init_angle_screen::@3
(label) init_angle_screen::@4
(label) init_angle_screen::@9
(label) init_angle_screen::@return
(byte) init_angle_screen::ang_w
(byte) init_angle_screen::ang_w#0
(word) init_angle_screen::angle_w
(word) init_angle_screen::angle_w#0
(byte*) init_angle_screen::screen
(byte*) init_angle_screen::screen#0
(byte*) init_angle_screen::screen#1
(byte*) init_angle_screen::screen_bottomline
(byte*) init_angle_screen::screen_bottomline#0
(byte*) init_angle_screen::screen_bottomline#1
(byte*) init_angle_screen::screen_bottomline#2
(byte*) init_angle_screen::screen_bottomline#3
(byte*) init_angle_screen::screen_bottomline#4
(byte*) init_angle_screen::screen_bottomline#5
(byte*) init_angle_screen::screen_bottomline#6
(byte*) init_angle_screen::screen_topline
(byte*) init_angle_screen::screen_topline#0
(byte*) init_angle_screen::screen_topline#1
(byte*) init_angle_screen::screen_topline#2
(byte*) init_angle_screen::screen_topline#3
(byte*) init_angle_screen::screen_topline#4
(byte*) init_angle_screen::screen_topline#5
(byte*) init_angle_screen::screen_topline#6
(byte) init_angle_screen::x
(byte) init_angle_screen::x#0
(byte) init_angle_screen::x#1
(byte) init_angle_screen::x#2
(byte) init_angle_screen::x#3
(byte) init_angle_screen::x#4
(byte) init_angle_screen::xb
(byte) init_angle_screen::xb#0
(byte) init_angle_screen::xb#1
(byte) init_angle_screen::xb#2
(byte) init_angle_screen::xb#3
(byte) init_angle_screen::xb#4
(signed word) init_angle_screen::xw
(signed word) init_angle_screen::xw#0
(byte) init_angle_screen::y
(byte) init_angle_screen::y#0
(byte) init_angle_screen::y#1
(byte) init_angle_screen::y#2
(byte) init_angle_screen::y#3
(byte) init_angle_screen::y#4
(byte) init_angle_screen::y#5
(byte) init_angle_screen::y#6
(signed word) init_angle_screen::yw
(signed word) init_angle_screen::yw#0
(void()) init_dist_screen((byte*) init_dist_screen::screen)
(byte*~) init_dist_screen::$1
(bool~) init_dist_screen::$10
(number~) init_dist_screen::$11
(bool~) init_dist_screen::$12
(number~) init_dist_screen::$13
(number~) init_dist_screen::$14
(number~) init_dist_screen::$15
(number~) init_dist_screen::$16
(number~) init_dist_screen::$17
(word~) init_dist_screen::$18
(word~) init_dist_screen::$19
(number~) init_dist_screen::$2
(byte~) init_dist_screen::$20
(bool~) init_dist_screen::$21
(bool~) init_dist_screen::$3
(number~) init_dist_screen::$4
(number~) init_dist_screen::$5
(number~) init_dist_screen::$6
(number~) init_dist_screen::$7
(number~) init_dist_screen::$8
(word~) init_dist_screen::$9
(label) init_dist_screen::@1
(label) init_dist_screen::@10
(label) init_dist_screen::@19
(label) init_dist_screen::@2
(label) init_dist_screen::@20
(label) init_dist_screen::@21
(label) init_dist_screen::@22
(label) init_dist_screen::@3
(label) init_dist_screen::@4
(label) init_dist_screen::@5
(label) init_dist_screen::@6
(label) init_dist_screen::@7
(label) init_dist_screen::@8
(label) init_dist_screen::@9
(label) init_dist_screen::@return
(byte) init_dist_screen::d
(byte) init_dist_screen::d#0
(word) init_dist_screen::ds
(word) init_dist_screen::ds#0
(byte*) init_dist_screen::screen
(byte*) init_dist_screen::screen#0
(byte*) init_dist_screen::screen#1
(byte*) init_dist_screen::screen#2
(byte*) init_dist_screen::screen_bottomline
(byte*) init_dist_screen::screen_bottomline#0
(byte*) init_dist_screen::screen_bottomline#1
(byte*) init_dist_screen::screen_bottomline#10
(byte*) init_dist_screen::screen_bottomline#11
(byte*) init_dist_screen::screen_bottomline#12
(byte*) init_dist_screen::screen_bottomline#13
(byte*) init_dist_screen::screen_bottomline#14
(byte*) init_dist_screen::screen_bottomline#2
(byte*) init_dist_screen::screen_bottomline#3
(byte*) init_dist_screen::screen_bottomline#4
(byte*) init_dist_screen::screen_bottomline#5
(byte*) init_dist_screen::screen_bottomline#6
(byte*) init_dist_screen::screen_bottomline#7
(byte*) init_dist_screen::screen_bottomline#8
(byte*) init_dist_screen::screen_bottomline#9
(byte*) init_dist_screen::screen_topline
(byte*) init_dist_screen::screen_topline#0
(byte*) init_dist_screen::screen_topline#1
(byte*) init_dist_screen::screen_topline#10
(byte*) init_dist_screen::screen_topline#11
(byte*) init_dist_screen::screen_topline#12
(byte*) init_dist_screen::screen_topline#13
(byte*) init_dist_screen::screen_topline#14
(byte*) init_dist_screen::screen_topline#2
(byte*) init_dist_screen::screen_topline#3
(byte*) init_dist_screen::screen_topline#4
(byte*) init_dist_screen::screen_topline#5
(byte*) init_dist_screen::screen_topline#6
(byte*) init_dist_screen::screen_topline#7
(byte*) init_dist_screen::screen_topline#8
(byte*) init_dist_screen::screen_topline#9
(byte) init_dist_screen::x
(byte) init_dist_screen::x#0
(byte) init_dist_screen::x#1
(byte) init_dist_screen::x#2
(byte) init_dist_screen::x#3
(byte) init_dist_screen::x#4
(byte) init_dist_screen::x#5
(byte) init_dist_screen::x#6
(byte) init_dist_screen::x#7
(byte) init_dist_screen::x#8
(byte) init_dist_screen::x2
(byte) init_dist_screen::x2#0
(byte) init_dist_screen::x2#1
(byte) init_dist_screen::x2#2
(byte) init_dist_screen::xb
(byte) init_dist_screen::xb#0
(byte) init_dist_screen::xb#1
(byte) init_dist_screen::xb#2
(byte) init_dist_screen::xb#3
(byte) init_dist_screen::xb#4
(byte) init_dist_screen::xb#5
(byte) init_dist_screen::xb#6
(byte) init_dist_screen::xb#7
(byte) init_dist_screen::xb#8
(byte) init_dist_screen::xd
(byte) init_dist_screen::xd#0
(word) init_dist_screen::xds
(word) init_dist_screen::xds#0
(byte) init_dist_screen::y
(byte) init_dist_screen::y#0
(byte) init_dist_screen::y#1
(byte) init_dist_screen::y#10
(byte) init_dist_screen::y#11
(byte) init_dist_screen::y#12
(byte) init_dist_screen::y#13
(byte) init_dist_screen::y#14
(byte) init_dist_screen::y#2
(byte) init_dist_screen::y#3
(byte) init_dist_screen::y#4
(byte) init_dist_screen::y#5
(byte) init_dist_screen::y#6
(byte) init_dist_screen::y#7
(byte) init_dist_screen::y#8
(byte) init_dist_screen::y#9
(byte) init_dist_screen::y2
(byte) init_dist_screen::y2#0
(byte) init_dist_screen::y2#1
(byte) init_dist_screen::y2#2
(byte) init_dist_screen::yd
(byte) init_dist_screen::yd#0
(word) init_dist_screen::yds
(word) init_dist_screen::yds#0
(word) init_dist_screen::yds#1
(word) init_dist_screen::yds#2
(word) init_dist_screen::yds#3
(word) init_dist_screen::yds#4
(word) init_dist_screen::yds#5
(word) init_dist_screen::yds#6
(word) init_dist_screen::yds#7
(void()) init_squares()
(byte~) init_squares::$0
(void*~) init_squares::$1
(bool~) init_squares::$2
(number~) init_squares::$3
(number~) init_squares::$4
(label) init_squares::@1
(label) init_squares::@2
(label) init_squares::@7
(label) init_squares::@return
(byte) init_squares::i
(byte) init_squares::i#0
(byte) init_squares::i#1
(byte) init_squares::i#2
(byte) init_squares::i#3
(word) init_squares::sqr
(word) init_squares::sqr#0
(word) init_squares::sqr#1
(word) init_squares::sqr#2
(word) init_squares::sqr#3
(word*) init_squares::squares
(word*) init_squares::squares#0
(word*) init_squares::squares#1
(word*) init_squares::squares#2
(word*) init_squares::squares#3
(void()) main()
(byte~) main::$5
(byte~) main::$7
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@13
(label) main::@14
(label) main::@2
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
(label) main::toD0181
(word~) main::toD0181_$0
(number~) main::toD0181_$1
(number~) main::toD0181_$2
(number~) main::toD0181_$3
(word~) main::toD0181_$4
(byte~) main::toD0181_$5
(number~) main::toD0181_$6
(number~) main::toD0181_$7
(number~) main::toD0181_$8
(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
(label) main::toD0182
(word~) main::toD0182_$0
(number~) main::toD0182_$1
(number~) main::toD0182_$2
(number~) main::toD0182_$3
(word~) main::toD0182_$4
(byte~) main::toD0182_$5
(number~) main::toD0182_$6
(number~) main::toD0182_$7
(number~) main::toD0182_$8
(label) main::toD0182_@return
(byte*) main::toD0182_gfx
(byte*) main::toD0182_gfx#0
(byte*) main::toD0182_gfx#1
(byte) main::toD0182_return
(byte) main::toD0182_return#0
(byte) main::toD0182_return#1
(byte) main::toD0182_return#2
(byte) main::toD0182_return#3
(byte*) main::toD0182_screen
(byte*) main::toD0182_screen#0
(byte*) main::toD0182_screen#1
(void()) make_plasma_charset((byte*) make_plasma_charset::charset)
(number~) make_plasma_charset::$10
(number~) make_plasma_charset::$11
(number~) make_plasma_charset::$12
(bool~) make_plasma_charset::$13
(bool~) make_plasma_charset::$14
(bool~) make_plasma_charset::$2
(byte~) make_plasma_charset::$3
(bool~) make_plasma_charset::$4
(bool~) make_plasma_charset::$5
(byte~) make_plasma_charset::$6
(number~) make_plasma_charset::$7
(bool~) make_plasma_charset::$8
(bool~) make_plasma_charset::$9
(label) make_plasma_charset::@1
(label) make_plasma_charset::@10
(label) make_plasma_charset::@13
(label) make_plasma_charset::@18
(label) make_plasma_charset::@19
(label) make_plasma_charset::@2
(label) make_plasma_charset::@23
(label) make_plasma_charset::@24
(label) make_plasma_charset::@25
(label) make_plasma_charset::@26
(label) make_plasma_charset::@4
(label) make_plasma_charset::@5
(label) make_plasma_charset::@6
(label) make_plasma_charset::@7
(label) make_plasma_charset::@8
(label) make_plasma_charset::@9
(label) make_plasma_charset::@return
(byte) make_plasma_charset::b
(byte) make_plasma_charset::b#0
(byte) make_plasma_charset::b#1
(byte) make_plasma_charset::b#2
(byte) make_plasma_charset::b#3
(byte) make_plasma_charset::b#4
(byte) make_plasma_charset::b#5
(byte) make_plasma_charset::b#6
(byte) make_plasma_charset::b#7
(const byte*) make_plasma_charset::bittab[(number) 8]  = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 }
(word) make_plasma_charset::c
(word) make_plasma_charset::c#0
(word) make_plasma_charset::c#1
(word) make_plasma_charset::c#10
(word) make_plasma_charset::c#11
(word) make_plasma_charset::c#12
(word) make_plasma_charset::c#13
(word) make_plasma_charset::c#14
(word) make_plasma_charset::c#15
(word) make_plasma_charset::c#2
(word) make_plasma_charset::c#3
(word) make_plasma_charset::c#4
(word) make_plasma_charset::c#5
(word) make_plasma_charset::c#6
(word) make_plasma_charset::c#7
(word) make_plasma_charset::c#8
(word) make_plasma_charset::c#9
(byte*) make_plasma_charset::charset
(byte*) make_plasma_charset::charset#0
(byte*) make_plasma_charset::charset#1
(byte*) make_plasma_charset::charset#10
(byte*) make_plasma_charset::charset#11
(byte*) make_plasma_charset::charset#12
(byte*) make_plasma_charset::charset#13
(byte*) make_plasma_charset::charset#14
(byte*) make_plasma_charset::charset#15
(byte*) make_plasma_charset::charset#16
(byte*) make_plasma_charset::charset#17
(byte*) make_plasma_charset::charset#2
(byte*) make_plasma_charset::charset#3
(byte*) make_plasma_charset::charset#4
(byte*) make_plasma_charset::charset#5
(byte*) make_plasma_charset::charset#6
(byte*) make_plasma_charset::charset#7
(byte*) make_plasma_charset::charset#8
(byte*) make_plasma_charset::charset#9
(byte) make_plasma_charset::i
(byte) make_plasma_charset::i#0
(byte) make_plasma_charset::i#1
(byte) make_plasma_charset::i#2
(byte) make_plasma_charset::i#3
(byte) make_plasma_charset::i#4
(byte) make_plasma_charset::i#5
(byte) make_plasma_charset::i#6
(byte) make_plasma_charset::i#7
(byte) make_plasma_charset::i#8
(byte) make_plasma_charset::i#9
(byte) make_plasma_charset::ii
(byte) make_plasma_charset::ii#0
(byte) make_plasma_charset::ii#1
(byte) make_plasma_charset::ii#2
(byte) make_plasma_charset::ii#3
(byte) make_plasma_charset::ii#4
(byte) make_plasma_charset::ii#5
(byte) make_plasma_charset::ii#6
(byte) make_plasma_charset::s
(byte) make_plasma_charset::s#0
(byte) make_plasma_charset::s#1
(byte) make_plasma_charset::s#2
(byte) make_plasma_charset::s#3
(byte) make_plasma_charset::s#4
(byte) make_plasma_charset::s#5
(byte) make_plasma_charset::s#6
(byte) make_plasma_charset::s#7
(byte) make_plasma_charset::s#8
(void*()) malloc((word) malloc::size)
(byte*~) malloc::$0
(label) malloc::@return
(byte*) malloc::mem
(byte*) malloc::mem#0
(void*) malloc::return
(void*) malloc::return#0
(void*) malloc::return#1
(void*) malloc::return#2
(void*) malloc::return#3
(void*) malloc::return#4
(void*) malloc::return#5
(void*) malloc::return#6
(void*) malloc::return#7
(void*) malloc::return#8
(word) malloc::size
(word) malloc::size#0
(word) malloc::size#1
(word) malloc::size#2
(word) malloc::size#3
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(bool~) memset::$0
(bool~) memset::$1
(byte*~) memset::$2
(byte*~) memset::$3
(bool~) memset::$4
(label) memset::@1
(label) memset::@2
(label) memset::@4
(label) memset::@5
(label) memset::@return
(byte) memset::c
(byte) memset::c#0
(byte) memset::c#1
(byte) memset::c#2
(byte) memset::c#3
(byte) memset::c#4
(byte) memset::c#5
(byte*) memset::dst
(byte*) memset::dst#0
(byte*) memset::dst#1
(byte*) memset::dst#2
(byte*) memset::dst#3
(byte*) memset::end
(byte*) memset::end#0
(byte*) memset::end#1
(byte*) memset::end#2
(word) memset::num
(word) memset::num#0
(word) memset::num#1
(word) memset::num#2
(word) memset::num#3
(void*) memset::return
(void*) memset::return#0
(void*) memset::return#1
(void*) memset::return#2
(void*) memset::return#3
(void*) memset::return#4
(void*) memset::str
(void*) memset::str#0
(void*) memset::str#1
(void*) memset::str#2
(void*) memset::str#3
(void*) memset::str#4
(void*) memset::str#5
(void*) memset::str#6
(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_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#39
(byte*) print_char_cursor#4
(byte*) print_char_cursor#40
(byte*) print_char_cursor#41
(byte*) print_char_cursor#42
(byte*) print_char_cursor#43
(byte*) print_char_cursor#44
(byte*) print_char_cursor#45
(byte*) print_char_cursor#46
(byte*) print_char_cursor#47
(byte*) print_char_cursor#48
(byte*) print_char_cursor#49
(byte*) print_char_cursor#5
(byte*) print_char_cursor#50
(byte*) print_char_cursor#51
(byte*) print_char_cursor#52
(byte*) print_char_cursor#53
(byte*) print_char_cursor#6
(byte*) print_char_cursor#7
(byte*) print_char_cursor#8
(byte*) print_char_cursor#9
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_line_cursor
(byte*) print_line_cursor#0
(byte*) print_line_cursor#1
(byte*) print_line_cursor#10
(byte*) print_line_cursor#11
(byte*) print_line_cursor#12
(byte*) print_line_cursor#13
(byte*) print_line_cursor#14
(byte*) print_line_cursor#15
(byte*) print_line_cursor#16
(byte*) print_line_cursor#17
(byte*) print_line_cursor#18
(byte*) print_line_cursor#19
(byte*) print_line_cursor#2
(byte*) print_line_cursor#20
(byte*) print_line_cursor#21
(byte*) print_line_cursor#22
(byte*) print_line_cursor#23
(byte*) print_line_cursor#24
(byte*) print_line_cursor#25
(byte*) print_line_cursor#26
(byte*) print_line_cursor#27
(byte*) print_line_cursor#28
(byte*) print_line_cursor#29
(byte*) print_line_cursor#3
(byte*) print_line_cursor#30
(byte*) print_line_cursor#31
(byte*) print_line_cursor#32
(byte*) print_line_cursor#33
(byte*) print_line_cursor#34
(byte*) print_line_cursor#35
(byte*) print_line_cursor#36
(byte*) print_line_cursor#37
(byte*) print_line_cursor#38
(byte*) print_line_cursor#39
(byte*) print_line_cursor#4
(byte*) print_line_cursor#40
(byte*) print_line_cursor#41
(byte*) print_line_cursor#42
(byte*) print_line_cursor#43
(byte*) print_line_cursor#44
(byte*) print_line_cursor#45
(byte*) print_line_cursor#46
(byte*) print_line_cursor#47
(byte*) print_line_cursor#48
(byte*) print_line_cursor#5
(byte*) print_line_cursor#6
(byte*) print_line_cursor#7
(byte*) print_line_cursor#8
(byte*) print_line_cursor#9
(byte*) print_screen
(byte*) print_screen#0
(byte*) print_screen#1
(byte*) print_screen#10
(byte*) print_screen#11
(byte*) print_screen#12
(byte*) print_screen#2
(byte*) print_screen#3
(byte*) print_screen#4
(byte*) print_screen#5
(byte*) print_screen#6
(byte*) print_screen#7
(byte*) print_screen#8
(byte*) print_screen#9
(byte()) sid_rnd()
(label) sid_rnd::@return
(byte) sid_rnd::return
(byte) sid_rnd::return#0
(byte) sid_rnd::return#1
(byte) sid_rnd::return#2
(byte) sid_rnd::return#3
(byte) sid_rnd::return#4
(void()) sid_rnd_init()
(label) sid_rnd_init::@return
(byte) sin_offset_x
(byte) sin_offset_x#0
(byte) sin_offset_x#1
(byte) sin_offset_x#10
(byte) sin_offset_x#11
(byte) sin_offset_x#12
(byte) sin_offset_x#13
(byte) sin_offset_x#14
(byte) sin_offset_x#15
(byte) sin_offset_x#16
(byte) sin_offset_x#17
(byte) sin_offset_x#18
(byte) sin_offset_x#19
(byte) sin_offset_x#2
(byte) sin_offset_x#20
(byte) sin_offset_x#21
(byte) sin_offset_x#22
(byte) sin_offset_x#23
(byte) sin_offset_x#24
(byte) sin_offset_x#25
(byte) sin_offset_x#26
(byte) sin_offset_x#27
(byte) sin_offset_x#28
(byte) sin_offset_x#29
(byte) sin_offset_x#3
(byte) sin_offset_x#30
(byte) sin_offset_x#4
(byte) sin_offset_x#5
(byte) sin_offset_x#6
(byte) sin_offset_x#7
(byte) sin_offset_x#8
(byte) sin_offset_x#9
(byte) sin_offset_y
(byte) sin_offset_y#0
(byte) sin_offset_y#1
(byte) sin_offset_y#10
(byte) sin_offset_y#11
(byte) sin_offset_y#12
(byte) sin_offset_y#13
(byte) sin_offset_y#14
(byte) sin_offset_y#15
(byte) sin_offset_y#16
(byte) sin_offset_y#17
(byte) sin_offset_y#18
(byte) sin_offset_y#19
(byte) sin_offset_y#2
(byte) sin_offset_y#20
(byte) sin_offset_y#21
(byte) sin_offset_y#22
(byte) sin_offset_y#23
(byte) sin_offset_y#24
(byte) sin_offset_y#25
(byte) sin_offset_y#26
(byte) sin_offset_y#27
(byte) sin_offset_y#28
(byte) sin_offset_y#29
(byte) sin_offset_y#3
(byte) sin_offset_y#30
(byte) sin_offset_y#4
(byte) sin_offset_y#5
(byte) sin_offset_y#6
(byte) sin_offset_y#7
(byte) sin_offset_y#8
(byte) sin_offset_y#9
(word()) sqr((byte) sqr::val)
(byte~) sqr::$0
(label) sqr::@return
(word) sqr::return
(word) sqr::return#0
(word) sqr::return#1
(word) sqr::return#2
(word) sqr::return#3
(word) sqr::return#4
(word) sqr::return#5
(word) sqr::return#6
(byte) sqr::val
(byte) sqr::val#0
(byte) sqr::val#1
(byte) sqr::val#2
(byte()) sqrt((word) sqrt::val)
(word*~) sqrt::$0
(word~) sqrt::$1
(byte~) sqrt::$2
(word~) sqrt::$3
(label) sqrt::@2
(label) sqrt::@return
(word*) sqrt::found
(word*) sqrt::found#0
(byte) sqrt::return
(byte) sqrt::return#0
(byte) sqrt::return#1
(byte) sqrt::return#2
(byte) sqrt::return#3
(byte) sqrt::return#4
(byte) sqrt::sq
(byte) sqrt::sq#0
(word) sqrt::val
(word) sqrt::val#0
(word) sqrt::val#1

Fixing inline constructor with init_angle_screen::$17 ← (byte)init_angle_screen::$4 w= (byte)0
Fixing inline constructor with init_angle_screen::$18 ← (byte)init_angle_screen::$7 w= (byte)0
Successful SSA optimization Pass2FixInlineConstructors
Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0
Adding number conversion cast (unumber) 0 in (bool~) bsearch16u::$5 ← (byte) bsearch16u::num#3 > (number) 0
Adding number conversion cast (unumber) 1 in (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#4 >> (number) 1
Adding number conversion cast (snumber) 0 in (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#0 == (number) 0
Adding number conversion cast (snumber) 0 in (bool~) bsearch16u::$13 ← (signed word) bsearch16u::result#1 > (number) 0
Adding number conversion cast (unumber) 1 in (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (number) 1
Adding number conversion cast (unumber) 1 in (number~) bsearch16u::$17 ← (number) 1 * (const byte) SIZEOF_WORD
Adding number conversion cast (unumber) bsearch16u::$17 in (number~) bsearch16u::$17 ← (unumber)(number) 1 * (const byte) SIZEOF_WORD
Adding number conversion cast (unumber) 1 in (number~) bsearch16u::$18 ← (number) 1 * (const byte) SIZEOF_WORD
Adding number conversion cast (unumber) bsearch16u::$18 in (number~) bsearch16u::$18 ← (unumber)(number) 1 * (const byte) SIZEOF_WORD
Adding number conversion cast (unumber) 2 in (number~) init_squares::$3 ← (byte) init_squares::i#3 * (number) 2
Adding number conversion cast (unumber) init_squares::$3 in (number~) init_squares::$3 ← (byte) init_squares::i#3 * (unumber)(number) 2
Adding number conversion cast (unumber) 1 in (number~) init_squares::$4 ← (unumber~) init_squares::$3 + (number) 1
Adding number conversion cast (unumber) init_squares::$4 in (number~) init_squares::$4 ← (unumber~) init_squares::$3 + (unumber)(number) 1
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) $3e8 in (word) memset::num#0 ← (number) $3e8
Adding number conversion cast (unumber) $ffff in *((const word*) SID_VOICE3_FREQ) ← (number) $ffff
Adding number conversion cast (unumber) $3e8 in (word) malloc::size#1 ← (number) $3e8
Adding number conversion cast (unumber) $3e8 in (word) malloc::size#2 ← (number) $3e8
Adding number conversion cast (unumber) $3e8 in (word) memset::num#1 ← (number) $3e8
Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (number) $3fff
Adding number conversion cast (unumber) main::toD0181_$1 in (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (unumber)(number) $3fff
Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$2 ← (unumber~) main::toD0181_$1 * (number) 4
Adding number conversion cast (unumber) main::toD0181_$2 in (number~) main::toD0181_$2 ← (unumber~) main::toD0181_$1 * (unumber)(number) 4
Adding number conversion cast (unumber) main::toD0181_$3 in (number~) main::toD0181_$3 ← > (unumber~) main::toD0181_$2
Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (number) 4
Adding number conversion cast (unumber) main::toD0181_$6 in (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (unumber)(number) 4
Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (number) $f
Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f
Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7
Adding number conversion cast (unumber) $3fff in (number~) main::toD0182_$1 ← (word~) main::toD0182_$0 & (number) $3fff
Adding number conversion cast (unumber) main::toD0182_$1 in (number~) main::toD0182_$1 ← (word~) main::toD0182_$0 & (unumber)(number) $3fff
Adding number conversion cast (unumber) 4 in (number~) main::toD0182_$2 ← (unumber~) main::toD0182_$1 * (number) 4
Adding number conversion cast (unumber) main::toD0182_$2 in (number~) main::toD0182_$2 ← (unumber~) main::toD0182_$1 * (unumber)(number) 4
Adding number conversion cast (unumber) main::toD0182_$3 in (number~) main::toD0182_$3 ← > (unumber~) main::toD0182_$2
Adding number conversion cast (unumber) 4 in (number~) main::toD0182_$6 ← (byte~) main::toD0182_$5 / (number) 4
Adding number conversion cast (unumber) main::toD0182_$6 in (number~) main::toD0182_$6 ← (byte~) main::toD0182_$5 / (unumber)(number) 4
Adding number conversion cast (unumber) $f in (number~) main::toD0182_$7 ← (unumber~) main::toD0182_$6 & (number) $f
Adding number conversion cast (unumber) main::toD0182_$7 in (number~) main::toD0182_$7 ← (unumber~) main::toD0182_$6 & (unumber)(number) $f
Adding number conversion cast (unumber) main::toD0182_$8 in (number~) main::toD0182_$8 ← (unumber~) main::toD0182_$3 | (unumber~) main::toD0182_$7
Adding number conversion cast (unumber) $28 in (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#4 + (number) $28
Adding number conversion cast (unumber) $28 in (byte*) doplasma::angle#1 ← (byte*) doplasma::angle#3 + (number) $28
Adding number conversion cast (unumber) $28 in (byte*) doplasma::dist#1 ← (byte*) doplasma::dist#3 + (number) $28
Adding number conversion cast (unumber) 3 in (byte) sin_offset_x#4 ← (byte) sin_offset_x#11 - (number) 3
Adding number conversion cast (unumber) 7 in (byte) sin_offset_y#4 ← (byte) sin_offset_y#11 - (number) 7
Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
Adding number conversion cast (unumber) $13 in (bool~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 <= (number) $13
Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (number) 2
Adding number conversion cast (unumber) init_angle_screen::$3 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (unumber)(number) 2
Adding number conversion cast (unumber) $27 in (number~) init_angle_screen::$4 ← (number) $27 - (unumber~) init_angle_screen::$3
Adding number conversion cast (unumber) init_angle_screen::$4 in (number~) init_angle_screen::$4 ← (unumber)(number) $27 - (unumber~) init_angle_screen::$3
Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$7 ← (byte) init_angle_screen::y#2 * (number) 2
Adding number conversion cast (unumber) init_angle_screen::$7 in (number~) init_angle_screen::$7 ← (byte) init_angle_screen::y#2 * (unumber)(number) 2
Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (number) $80
Adding number conversion cast (unumber) init_angle_screen::$11 in (number~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (unumber)(number) $80
Adding number conversion cast (unumber) init_angle_screen::$12 in (number~) init_angle_screen::$12 ← > (unumber~) init_angle_screen::$11
Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$14 ← (number) $80 + (byte) init_angle_screen::ang_w#0
Adding number conversion cast (unumber) init_angle_screen::$14 in (number~) init_angle_screen::$14 ← (unumber)(number) $80 + (byte) init_angle_screen::ang_w#0
Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$15 ← (number) $80 - (byte) init_angle_screen::ang_w#0
Adding number conversion cast (unumber) init_angle_screen::$15 in (number~) init_angle_screen::$15 ← (unumber)(number) $80 - (byte) init_angle_screen::ang_w#0
Adding number conversion cast (unumber) $28 in (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#3 - (number) $28
Adding number conversion cast (unumber) $28 in (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#3 + (number) $28
Adding number conversion cast (unumber) $30 in (byte) NUM_SQUARES#3 ← (number) $30
Adding number conversion cast (unumber) $28*$18 in (byte*~) init_dist_screen::$1 ← (byte*) init_dist_screen::screen#1 + (number) $28*(number) $18
Adding number conversion cast (unumber) 2 in (number~) init_dist_screen::$2 ← (byte) init_dist_screen::y#2 * (number) 2
Adding number conversion cast (unumber) init_dist_screen::$2 in (number~) init_dist_screen::$2 ← (byte) init_dist_screen::y#2 * (unumber)(number) 2
Adding number conversion cast (unumber) $18 in (bool~) init_dist_screen::$3 ← (byte) init_dist_screen::y2#0 >= (number) $18
Adding number conversion cast (unumber) $18 in (number~) init_dist_screen::$6 ← (byte) init_dist_screen::y2#1 - (number) $18
Adding number conversion cast (unumber) init_dist_screen::$6 in (number~) init_dist_screen::$6 ← (byte) init_dist_screen::y2#1 - (unumber)(number) $18
Adding number conversion cast (unumber) init_dist_screen::$7 in (number~) init_dist_screen::$7 ← (unumber~) init_dist_screen::$6
Adding number conversion cast (unumber) $18 in (number~) init_dist_screen::$4 ← (number) $18 - (byte) init_dist_screen::y2#2
Adding number conversion cast (unumber) init_dist_screen::$4 in (number~) init_dist_screen::$4 ← (unumber)(number) $18 - (byte) init_dist_screen::y2#2
Adding number conversion cast (unumber) init_dist_screen::$5 in (number~) init_dist_screen::$5 ← (unumber~) init_dist_screen::$4
Adding number conversion cast (unumber) init_dist_screen::$8 in (byte*) heap_head#44 ← phi( init_dist_screen::@2/(byte*) heap_head#47 init_dist_screen::@3/(byte*) heap_head#48 )
  (byte) NUM_SQUARES#35 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#39 init_dist_screen::@3/(byte) NUM_SQUARES#40 )
  (byte) init_dist_screen::y#7 ← phi( init_dist_screen::@2/(byte) init_dist_screen::y#9 init_dist_screen::@3/(byte) init_dist_screen::y#10 )
  (byte*) init_dist_screen::screen_bottomline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_bottomline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_bottomline#12 )
  (byte*) init_dist_screen::screen_topline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 )
  (word*) SQUARES#19 ← phi( init_dist_screen::@2/(word*) SQUARES#29 init_dist_screen::@3/(word*) SQUARES#30 )
  (number~) init_dist_screen::$8 ← phi( init_dist_screen::@2/(unumber~) init_dist_screen::$7 init_dist_screen::@3/(unumber~) init_dist_screen::$5 )
Adding number conversion cast (unumber) $13 in (bool~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 <= (number) $13
Adding number conversion cast (unumber) 2 in (number~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (number) 2
Adding number conversion cast (unumber) init_dist_screen::$11 in (number~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (unumber)(number) 2
Adding number conversion cast (unumber) $27 in (bool~) init_dist_screen::$12 ← (byte) init_dist_screen::x2#0 >= (number) $27
Adding number conversion cast (unumber) $28 in (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#2 + (number) $28
Adding number conversion cast (unumber) $28 in (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#2 - (number) $28
Adding number conversion cast (unumber) $27 in (number~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#1 - (number) $27
Adding number conversion cast (unumber) init_dist_screen::$15 in (number~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#1 - (unumber)(number) $27
Adding number conversion cast (unumber) init_dist_screen::$16 in (number~) init_dist_screen::$16 ← (unumber~) init_dist_screen::$15
Adding number conversion cast (unumber) $27 in (number~) init_dist_screen::$13 ← (number) $27 - (byte) init_dist_screen::x2#2
Adding number conversion cast (unumber) init_dist_screen::$13 in (number~) init_dist_screen::$13 ← (unumber)(number) $27 - (byte) init_dist_screen::x2#2
Adding number conversion cast (unumber) init_dist_screen::$14 in (number~) init_dist_screen::$14 ← (unumber~) init_dist_screen::$13
Adding number conversion cast (unumber) init_dist_screen::$17 in (byte*) heap_head#49 ← phi( init_dist_screen::@8/(byte*) heap_head#52 init_dist_screen::@9/(byte*) heap_head#53 )
  (byte) init_dist_screen::y#11 ← phi( init_dist_screen::@8/(byte) init_dist_screen::y#12 init_dist_screen::@9/(byte) init_dist_screen::y#13 )
  (byte) init_dist_screen::xb#4 ← phi( init_dist_screen::@8/(byte) init_dist_screen::xb#5 init_dist_screen::@9/(byte) init_dist_screen::xb#6 )
  (byte*) init_dist_screen::screen_bottomline#7 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_bottomline#9 init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#10 )
  (byte) init_dist_screen::x#6 ← phi( init_dist_screen::@8/(byte) init_dist_screen::x#7 init_dist_screen::@9/(byte) init_dist_screen::x#8 )
  (byte*) init_dist_screen::screen_topline#7 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_topline#9 init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#10 )
  (byte) NUM_SQUARES#23 ← phi( init_dist_screen::@8/(byte) NUM_SQUARES#30 init_dist_screen::@9/(byte) NUM_SQUARES#31 )
  (word) init_dist_screen::yds#2 ← phi( init_dist_screen::@8/(word) init_dist_screen::yds#3 init_dist_screen::@9/(word) init_dist_screen::yds#4 )
  (word*) SQUARES#18 ← phi( init_dist_screen::@8/(word*) SQUARES#32 init_dist_screen::@9/(word*) SQUARES#33 )
  (number~) init_dist_screen::$17 ← phi( init_dist_screen::@8/(unumber~) init_dist_screen::$16 init_dist_screen::@9/(unumber~) init_dist_screen::$14 )
Adding number conversion cast (unumber) $100 in (bool~) make_plasma_charset::$2 ← (word) make_plasma_charset::c#2 < (number) $100
Adding number conversion cast (unumber) 8 in (bool~) make_plasma_charset::$4 ← (byte) make_plasma_charset::i#2 < (number) 8
Adding number conversion cast (unumber) 7 in (number~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#4 & (number) 7
Adding number conversion cast (unumber) make_plasma_charset::$12 in (number~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#4 & (unumber)(number) 7
Adding number conversion cast (unumber) 0 in (bool~) make_plasma_charset::$13 ← (unumber~) make_plasma_charset::$12 == (number) 0
Adding number conversion cast (unumber) 8 in (bool~) make_plasma_charset::$5 ← (byte) make_plasma_charset::ii#2 < (number) 8
Adding number conversion cast (unumber) $ff in (number~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (number) $ff
Adding number conversion cast (unumber) make_plasma_charset::$7 in (number~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (unumber)(number) $ff
Adding number conversion cast (unumber) 8 in (number~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#5 * (number) 8
Adding number conversion cast (unumber) make_plasma_charset::$10 in (number~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#5 * (unumber)(number) 8
Adding number conversion cast (unumber) make_plasma_charset::$11 in (number~) make_plasma_charset::$11 ← (unumber~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#3
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#3
Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3
Inlining cast (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0
Inlining cast (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#1
Inlining cast (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0)
Inlining cast (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1
Inlining cast (byte~) sqrt::$2 ← (byte)(word~) sqrt::$1
Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8
Inlining cast *((const word*) SID_VOICE3_FREQ) ← (unumber)(number) $ffff
Inlining cast (word) malloc::size#1 ← (unumber)(number) $3e8
Inlining cast (byte*) SCREEN_DIST#0 ← (byte*)(void*~) $0
Inlining cast (word) malloc::size#2 ← (unumber)(number) $3e8
Inlining cast (byte*) SCREEN_ANGLE#0 ← (byte*)(void*~) $1
Inlining cast (word) memset::num#1 ← (unumber)(number) $3e8
Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1
Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1
Inlining cast (word~) main::toD0182_$0 ← (word)(byte*) main::toD0182_screen#1
Inlining cast (word~) main::toD0182_$4 ← (word)(byte*) main::toD0182_gfx#1
Inlining cast (signed word~) init_angle_screen::$6 ← (signed word)(word~) init_angle_screen::$5
Inlining cast (signed word~) init_angle_screen::$9 ← (signed word)(word~) init_angle_screen::$8
Inlining cast (byte) NUM_SQUARES#3 ← (unumber)(number) $30
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 53272
Simplifying constant pointer cast (byte*) 55296
Simplifying constant pointer cast (word*) 54286
Simplifying constant pointer cast (byte*) 54290
Simplifying constant pointer cast (byte*) 54299
Simplifying constant pointer cast (byte*) 8192
Simplifying constant pointer cast (byte*) 10240
Simplifying constant pointer cast (byte*) 11264
Simplifying constant pointer cast (byte*) 40960
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
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 2
Simplifying constant integer cast 1
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 $3e8
Simplifying constant integer cast $ffff
Simplifying constant integer cast $3e8
Simplifying constant integer cast $3e8
Simplifying constant integer cast $3e8
Simplifying constant integer cast $3fff
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast $f
Simplifying constant integer cast $3fff
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast $f
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast 3
Simplifying constant integer cast 7
Simplifying constant integer cast $13
Simplifying constant integer cast 2
Simplifying constant integer cast $27
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast $80
Simplifying constant integer cast $80
Simplifying constant integer cast $80
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $30
Simplifying constant integer cast 2
Simplifying constant integer cast $18
Simplifying constant integer cast $18
Simplifying constant integer cast $18
Simplifying constant integer cast $13
Simplifying constant integer cast 2
Simplifying constant integer cast $27
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $27
Simplifying constant integer cast $27
Simplifying constant integer cast $100
Simplifying constant integer cast 8
Simplifying constant integer cast 7
Simplifying constant integer cast 0
Simplifying constant integer cast 8
Simplifying constant integer cast $ff
Simplifying constant integer cast 8
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 1
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 (word) $3e8
Finalized unsigned number type (word) $ffff
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (word) $3fff
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $f
Finalized unsigned number type (word) $3fff
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $f
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) $13
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $30
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $18
Finalized unsigned number type (byte) $18
Finalized unsigned number type (byte) $18
Finalized unsigned number type (byte) $13
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) $27
Finalized unsigned number type (word) $100
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) 8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) bsearch16u::$17 ← (byte) 1 * (const byte) SIZEOF_WORD
Inferred type updated to byte in (unumber~) bsearch16u::$18 ← (byte) 1 * (const byte) SIZEOF_WORD
Inferred type updated to byte in (unumber~) init_squares::$3 ← (byte) init_squares::i#3 * (byte) 2
Inferred type updated to byte in (unumber~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
Inferred type updated to word in (unumber~) atan2_16::$12 ← (word) $8000 - (word) atan2_16::angle#9
Inferred type updated to word in (unumber~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (word) $3fff
Inferred type updated to word in (unumber~) main::toD0181_$2 ← (word~) main::toD0181_$1 * (byte) 4
Inferred type updated to byte in (unumber~) main::toD0181_$3 ← > (word~) main::toD0181_$2
Inferred type updated to byte in (unumber~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (byte) 4
Inferred type updated to byte in (unumber~) main::toD0181_$7 ← (byte~) main::toD0181_$6 & (byte) $f
Inferred type updated to byte in (unumber~) main::toD0181_$8 ← (byte~) main::toD0181_$3 | (byte~) main::toD0181_$7
Inferred type updated to word in (unumber~) main::toD0182_$1 ← (word~) main::toD0182_$0 & (word) $3fff
Inferred type updated to word in (unumber~) main::toD0182_$2 ← (word~) main::toD0182_$1 * (byte) 4
Inferred type updated to byte in (unumber~) main::toD0182_$3 ← > (word~) main::toD0182_$2
Inferred type updated to byte in (unumber~) main::toD0182_$6 ← (byte~) main::toD0182_$5 / (byte) 4
Inferred type updated to byte in (unumber~) main::toD0182_$7 ← (byte~) main::toD0182_$6 & (byte) $f
Inferred type updated to byte in (unumber~) main::toD0182_$8 ← (byte~) main::toD0182_$3 | (byte~) main::toD0182_$7
Inferred type updated to byte in (unumber~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (byte) 2
Inferred type updated to byte in (unumber~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3
Inferred type updated to byte in (unumber~) init_angle_screen::$7 ← (byte) init_angle_screen::y#2 * (byte) 2
Inferred type updated to word in (unumber~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80
Inferred type updated to byte in (unumber~) init_angle_screen::$12 ← > (word~) init_angle_screen::$11
Inferred type updated to byte in (unumber~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
Inferred type updated to byte in (unumber~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
Inferred type updated to byte in (unumber~) init_dist_screen::$2 ← (byte) init_dist_screen::y#2 * (byte) 2
Inferred type updated to byte in (unumber~) init_dist_screen::$6 ← (byte) init_dist_screen::y2#1 - (byte) $18
Inferred type updated to byte in (unumber~) init_dist_screen::$7 ← (byte~) init_dist_screen::$6
Inferred type updated to byte in (unumber~) init_dist_screen::$4 ← (byte) $18 - (byte) init_dist_screen::y2#2
Inferred type updated to byte in (unumber~) init_dist_screen::$5 ← (byte~) init_dist_screen::$4
Inferred type updated to byte for (unumber~) init_dist_screen::$8
Inferred type updated to byte in (unumber~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (byte) 2
Inferred type updated to byte in (unumber~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#1 - (byte) $27
Inferred type updated to byte in (unumber~) init_dist_screen::$16 ← (byte~) init_dist_screen::$15
Inferred type updated to byte in (unumber~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#2
Inferred type updated to byte in (unumber~) init_dist_screen::$14 ← (byte~) init_dist_screen::$13
Inferred type updated to byte for (unumber~) init_dist_screen::$17
Inferred type updated to byte in (unumber~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#4 & (byte) 7
Inferred type updated to byte in (unumber~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff
Inferred type updated to word in (unumber~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#5 * (byte) 8
Inferred type updated to word in (unumber~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#3
Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#2 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#2 > (byte) 0
Inversing boolean not [44] (bool~) bsearch16u::$12 ← (signed word) bsearch16u::result#0 != (signed byte) 0 from [43] (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#0 == (signed byte) 0
Inversing boolean not [51] (bool~) bsearch16u::$14 ← (signed word) bsearch16u::result#1 <= (signed byte) 0 from [50] (bool~) bsearch16u::$13 ← (signed word) bsearch16u::result#1 > (signed byte) 0
Inversing boolean not [148] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 != (signed byte) 0 from [147] (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (signed byte) 0
Inversing boolean not [157] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [156] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0
Inversing boolean not [168] (bool~) atan2_16::$19 ← (byte) 0 == (byte) atan2_16::shift#4 from [167] (bool~) atan2_16::$24 ← (byte) 0 != (byte) atan2_16::shift#4
Inversing boolean not [192] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [191] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0
Inversing boolean not [514] (bool~) make_plasma_charset::$14 ← (byte~) make_plasma_charset::$12 != (byte) 0 from [513] (bool~) make_plasma_charset::$13 ← (byte~) make_plasma_charset::$12 == (byte) 0
Inversing boolean not [526] (bool~) make_plasma_charset::$9 ← (byte~) make_plasma_charset::$7 <= (byte) make_plasma_charset::s#1 from [525] (bool~) make_plasma_charset::$8 ← (byte~) make_plasma_charset::$7 > (byte) make_plasma_charset::s#1
Successful SSA optimization Pass2UnaryNotSimplification
Alias (void*) memset::return#0 = (void*) memset::str#2 (void*) memset::return#4 (void*) memset::return#1 
Alias (void*) memset::str#3 = (void*) memset::str#4 
Alias (word) memset::num#2 = (word) memset::num#3 
Alias (byte) memset::c#4 = (byte) memset::c#5 
Alias (byte*) memset::end#0 = (byte*~) memset::$3 
Alias (byte) memset::c#2 = (byte) memset::c#3 
Alias (byte*) memset::dst#2 = (byte*) memset::dst#3 
Alias (byte*) memset::end#1 = (byte*) memset::end#2 
Alias (void*) memset::str#5 = (void*) memset::str#6 
Alias (byte*) malloc::mem#0 = (byte*~) malloc::$0 
Alias (void*) malloc::return#0 = (void*) malloc::return#5 (void*) malloc::return#1 
Alias (byte*) heap_head#1 = (byte*) heap_head#13 (byte*) heap_head#2 
Alias (byte) bsearch16u::num#3 = (byte) bsearch16u::num#4 (byte) bsearch16u::num#8 (byte) bsearch16u::num#6 
Alias (word*) bsearch16u::items#2 = (word*) bsearch16u::items#6 (word*) bsearch16u::items#3 (word*) bsearch16u::items#9 (word*) bsearch16u::items#4 (word*~) bsearch16u::$3 (word*) bsearch16u::items#5 
Alias (word) bsearch16u::key#1 = (word) bsearch16u::key#3 (word) bsearch16u::key#2 (word) bsearch16u::key#7 (word) bsearch16u::key#6 
Alias (word*) bsearch16u::pivot#0 = (word*~) bsearch16u::$7 (word*) bsearch16u::pivot#3 (word*) bsearch16u::pivot#1 (word*) bsearch16u::return#0 (word*) bsearch16u::pivot#2 
Alias (signed word) bsearch16u::result#0 = (signed word~) bsearch16u::$10 (signed word) bsearch16u::result#1 
Alias (word*) bsearch16u::return#1 = (word*) bsearch16u::return#4 
Alias (word*) bsearch16u::items#0 = (word*~) bsearch16u::$15 
Alias (word*~) bsearch16u::$2 = (word*~) bsearch16u::$1 
Alias (word*) bsearch16u::return#2 = (word*~) bsearch16u::$4 
Alias (byte*) heap_head#0 = (byte*) heap_head#37 (byte*) heap_head#32 (byte*) heap_head#23 
Alias (word) malloc::size#0 = (byte~) init_squares::$0 
Alias (void*) malloc::return#2 = (void*) malloc::return#6 
Alias (byte) NUM_SQUARES#14 = (byte) NUM_SQUARES#6 
Alias (byte*) heap_head#14 = (byte*) heap_head#3 
Alias (word) init_squares::sqr#2 = (word) init_squares::sqr#3 
Alias (word*) init_squares::squares#2 = (word*) init_squares::squares#3 
Alias (byte) init_squares::i#2 = (byte) init_squares::i#3 
Alias (byte) NUM_SQUARES#13 = (byte) NUM_SQUARES#7 
Alias (byte*) heap_head#15 = (byte*) heap_head#31 (byte*) heap_head#25 (byte*) heap_head#4 
Alias (word*) SQUARES#17 = (word*) SQUARES#26 (word*) SQUARES#8 (word*) SQUARES#2 
Alias (word) sqr::return#0 = (word) sqr::return#4 (word) sqr::return#1 
Alias (word*) bsearch16u::return#3 = (word*) bsearch16u::return#5 
Alias (word*) SQUARES#10 = (word*) SQUARES#11 
Alias (word*) sqrt::found#0 = (word*~) sqrt::$0 
Alias (byte) sqrt::return#0 = (byte) sqrt::sq#0 (byte~) sqrt::$2 (byte) sqrt::return#3 (byte) sqrt::return#1 
Alias (signed word) atan2_16::y#1 = (signed word) atan2_16::y#2 (signed word~) atan2_16::$3 (signed word) atan2_16::y#3 
Alias (signed word) atan2_16::x#5 = (signed word) atan2_16::x#9 (signed word) atan2_16::x#6 
Alias (signed word~) atan2_16::$2 = (signed word~) atan2_16::$1 
Alias (signed word) atan2_16::yi#0 = (signed word~) atan2_16::$4 (signed word) atan2_16::yi#12 (signed word) atan2_16::yi#13 
Alias (signed word) atan2_16::x#1 = (signed word) atan2_16::x#2 (signed word~) atan2_16::$8 (signed word) atan2_16::x#3 
Alias (signed word) atan2_16::y#12 = (signed word) atan2_16::y#15 (signed word) atan2_16::y#13 
Alias (signed word~) atan2_16::$7 = (signed word~) atan2_16::$6 
Alias (signed word) atan2_16::xi#0 = (signed word~) atan2_16::$9 
Alias (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#6 (signed word) atan2_16::xd#0 
Alias (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#4 (signed word) atan2_16::yd#0 
Alias (byte) atan2_16::i#2 = (byte) atan2_16::i#6 (byte) atan2_16::shift#0 
Alias (word) atan2_16::angle#12 = (word) atan2_16::angle#19 
Alias (signed word) atan2_16::x#17 = (signed word) atan2_16::x#7 
Alias (signed word) atan2_16::y#19 = (signed word) atan2_16::y#7 
Alias (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#7 (signed word) atan2_16::xd#8 (signed word) atan2_16::xd#4 
Alias (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#7 (signed word) atan2_16::yd#8 (signed word) atan2_16::yd#4 
Alias (byte) atan2_16::shift#2 = (byte) atan2_16::shift#3 (byte) atan2_16::shift#4 
Alias (signed word) atan2_16::yi#10 = (signed word) atan2_16::yi#15 (signed word) atan2_16::yi#14 (signed word) atan2_16::yi#11 
Alias (signed word) atan2_16::xi#10 = (signed word) atan2_16::xi#12 (signed word) atan2_16::xi#11 (signed word) atan2_16::xi#9 
Alias (byte) atan2_16::i#10 = (byte) atan2_16::i#11 (byte) atan2_16::i#8 (byte) atan2_16::i#9 
Alias (word) atan2_16::angle#16 = (word) atan2_16::angle#20 (word) atan2_16::angle#18 (word) atan2_16::angle#17 
Alias (signed word) atan2_16::x#14 = (signed word) atan2_16::x#18 (signed word) atan2_16::x#16 (signed word) atan2_16::x#15 
Alias (signed word) atan2_16::y#16 = (signed word) atan2_16::y#20 (signed word) atan2_16::y#18 (signed word) atan2_16::y#17 
Alias (signed word) atan2_16::xi#4 = (signed word) atan2_16::xi#7 (signed word) atan2_16::xi#5 
Alias (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#9 (signed word) atan2_16::yd#6 
Alias (signed word) atan2_16::yi#5 = (signed word) atan2_16::yi#6 (signed word) atan2_16::yi#7 
Alias (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#9 (signed word) atan2_16::xd#6 
Alias (byte) atan2_16::i#3 = (byte) atan2_16::i#7 (byte) atan2_16::i#4 
Alias (word) atan2_16::angle#14 = (word) atan2_16::angle#7 (word) atan2_16::angle#8 
Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#13 (signed word) atan2_16::x#12 
Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#14 (signed word) atan2_16::y#11 
Alias (word) atan2_16::angle#1 = (word) atan2_16::angle#9 
Alias (signed word) atan2_16::y#5 = (signed word) atan2_16::y#6 
Alias (word) atan2_16::angle#4 = (word~) atan2_16::$12 
Alias (word) atan2_16::return#0 = (word) atan2_16::angle#10 (word) atan2_16::return#3 (word) atan2_16::return#1 
Alias (word) atan2_16::angle#11 = (word) atan2_16::angle#15 
Alias (word) atan2_16::angle#5 = (word~) atan2_16::$15 
Alias (byte) NUM_SQUARES#0 = (byte) NUM_SQUARES#41 (byte) NUM_SQUARES#37 (byte) NUM_SQUARES#32 (byte) NUM_SQUARES#27 (byte) NUM_SQUARES#24 (byte) NUM_SQUARES#19 
Alias (word*) SQUARES#0 = (word*) SQUARES#47 (word*) SQUARES#45 (word*) SQUARES#42 (word*) SQUARES#37 (word*) SQUARES#34 (word*) SQUARES#25 
Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#34 (byte*) print_char_cursor#41 (byte*) print_screen#12 (byte*) print_line_cursor#30 (byte*) print_char_cursor#37 (byte*) print_screen#11 (byte*) print_line_cursor#27 (byte*) print_char_cursor#35 (byte*) print_screen#10 (byte*) print_line_cursor#24 (byte*) print_char_cursor#32 (byte*) print_screen#9 (byte*) print_line_cursor#18 (byte*) print_char_cursor#25 (byte*) print_screen#8 
Alias (byte*) print_char_cursor#1 = (byte*) print_char_cursor#12 (byte*) print_char_cursor#2 
Alias (byte*) print_line_cursor#1 = (byte*) print_screen#2 (byte*) print_screen#1 (byte*) print_char_cursor#3 (byte*) print_line_cursor#8 (byte*) print_char_cursor#13 (byte*) print_line_cursor#2 (byte*) print_char_cursor#4 
Alias (byte) sid_rnd::return#0 = (byte) sid_rnd::return#3 (byte) sid_rnd::return#1 
Alias (void*) malloc::return#3 = (void*) malloc::return#7 
Alias (byte*) heap_head#16 = (byte*) heap_head#5 
Alias (void*) malloc::return#4 = (void*) malloc::return#8 
Alias (byte*) SCREEN_DIST#0 = (byte*) SCREEN_DIST#12 (byte*) SCREEN_DIST#8 (byte*) SCREEN_DIST#3 
Alias (byte*) heap_head#17 = (byte*) heap_head#6 (byte*) heap_head#36 (byte*) heap_head#30 
Alias (byte*) SCREEN_ANGLE#1 = (byte*) SCREEN_ANGLE#3 (byte*) SCREEN_ANGLE#16 (byte*) SCREEN_ANGLE#13 (byte*) SCREEN_ANGLE#9 
Alias (byte*) print_line_cursor#14 = (byte*) print_line_cursor#19 (byte*) print_line_cursor#25 
Alias (byte*) print_char_cursor#21 = (byte*) print_char_cursor#26 (byte*) print_char_cursor#33 
Alias (byte*) print_screen#5 = (byte*) print_screen#6 (byte*) print_screen#7 
Alias (byte) sin_offset_x#19 = (byte) sin_offset_x#29 (byte) sin_offset_x#30 (byte) sin_offset_x#27 (byte) sin_offset_x#23 
Alias (byte) sin_offset_y#19 = (byte) sin_offset_y#29 (byte) sin_offset_y#30 (byte) sin_offset_y#27 (byte) sin_offset_y#23 
Alias (byte*) SCREEN_DIST#1 = (byte*) SCREEN_DIST#18 (byte*) SCREEN_DIST#16 (byte*) SCREEN_DIST#13 (byte*) SCREEN_DIST#9 
Alias (byte) NUM_SQUARES#1 = (byte) NUM_SQUARES#9 (byte) NUM_SQUARES#33 (byte) NUM_SQUARES#25 (byte) NUM_SQUARES#20 
Alias (byte*) heap_head#18 = (byte*) heap_head#7 (byte*) heap_head#42 (byte*) heap_head#38 (byte*) heap_head#33 
Alias (word*) SQUARES#12 = (word*) SQUARES#3 (word*) SQUARES#43 (word*) SQUARES#35 (word*) SQUARES#27 
Alias (byte*) print_line_cursor#20 = (byte*) print_line_cursor#3 (byte*) print_line_cursor#9 
Alias (byte*) print_char_cursor#14 = (byte*) print_char_cursor#5 (byte*) print_char_cursor#27 
Alias (byte) sin_offset_x#14 = (byte) sin_offset_x#16 (byte) sin_offset_x#9 (byte) sin_offset_x#2 
Alias (byte) sin_offset_y#14 = (byte) sin_offset_y#16 (byte) sin_offset_y#9 (byte) sin_offset_y#2 
Alias (byte*) SCREEN_ANGLE#10 = (byte*) SCREEN_ANGLE#4 (byte*) SCREEN_ANGLE#7 (byte*) SCREEN_ANGLE#14 (byte*) SCREEN_ANGLE#11 (byte*) SCREEN_ANGLE#8 (byte*) SCREEN_ANGLE#5 (byte*) SCREEN_ANGLE#18 (byte*) SCREEN_ANGLE#17 (byte*) SCREEN_ANGLE#15 
Alias (byte*) SCREEN_DIST#10 = (byte*) SCREEN_DIST#4 (byte*) SCREEN_DIST#6 (byte*) SCREEN_DIST#14 (byte*) SCREEN_DIST#11 (byte*) SCREEN_DIST#7 (byte*) SCREEN_DIST#5 (byte*) SCREEN_DIST#19 (byte*) SCREEN_DIST#17 (byte*) SCREEN_DIST#15 
Alias (byte) NUM_SQUARES#10 = (byte) NUM_SQUARES#48 (byte) NUM_SQUARES#17 (byte) NUM_SQUARES#47 (byte) NUM_SQUARES#46 (byte) NUM_SQUARES#44 (byte) NUM_SQUARES#42 (byte) NUM_SQUARES#38 (byte) NUM_SQUARES#34 (byte) NUM_SQUARES#26 (byte) NUM_SQUARES#21 (byte) NUM_SQUARES#2 
Alias (byte*) heap_head#19 = (byte*) heap_head#58 (byte*) heap_head#27 (byte*) heap_head#57 (byte*) heap_head#56 (byte*) heap_head#54 (byte*) heap_head#50 (byte*) heap_head#46 (byte*) heap_head#43 (byte*) heap_head#39 (byte*) heap_head#34 (byte*) heap_head#8 
Alias (word*) SQUARES#13 = (word*) SQUARES#52 (word*) SQUARES#22 (word*) SQUARES#51 (word*) SQUARES#50 (word*) SQUARES#49 (word*) SQUARES#48 (word*) SQUARES#46 (word*) SQUARES#44 (word*) SQUARES#36 (word*) SQUARES#28 (word*) SQUARES#4 
Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#48 (byte*) print_line_cursor#15 (byte*) print_line_cursor#46 (byte*) print_line_cursor#43 (byte*) print_line_cursor#40 (byte*) print_line_cursor#38 (byte*) print_line_cursor#35 (byte*) print_line_cursor#31 (byte*) print_line_cursor#26 (byte*) print_line_cursor#21 (byte*) print_line_cursor#4 
Alias (byte*) print_char_cursor#15 = (byte*) print_char_cursor#53 (byte*) print_char_cursor#22 (byte*) print_char_cursor#52 (byte*) print_char_cursor#50 (byte*) print_char_cursor#47 (byte*) print_char_cursor#44 (byte*) print_char_cursor#42 (byte*) print_char_cursor#38 (byte*) print_char_cursor#34 (byte*) print_char_cursor#28 (byte*) print_char_cursor#6 
Alias (byte) sin_offset_x#0 = (byte) sin_offset_x#7 (byte) sin_offset_x#24 (byte) sin_offset_x#21 (byte) sin_offset_x#15 
Alias (byte) sin_offset_y#0 = (byte) sin_offset_y#7 (byte) sin_offset_y#24 (byte) sin_offset_y#21 (byte) sin_offset_y#15 
Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1 
Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 
Alias (byte) main::toD0181_return#0 = (byte~) main::toD0181_$8 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$5 
Alias (byte) sin_offset_x#1 = (byte) sin_offset_x#8 (byte) sin_offset_x#28 (byte) sin_offset_x#25 (byte) sin_offset_x#20 
Alias (byte) sin_offset_y#1 = (byte) sin_offset_y#8 (byte) sin_offset_y#28 (byte) sin_offset_y#25 (byte) sin_offset_y#20 
Alias (byte*) main::toD0182_screen#0 = (byte*) main::toD0182_screen#1 
Alias (byte*) main::toD0182_gfx#0 = (byte*) main::toD0182_gfx#1 
Alias (byte) main::toD0182_return#0 = (byte~) main::toD0182_$8 (byte) main::toD0182_return#2 (byte) main::toD0182_return#1 (byte) main::toD0182_return#3 (byte~) main::$7 
Alias (byte*) SCREEN_ANGLE#0 = (byte*) SCREEN_ANGLE#12 (byte*) SCREEN_ANGLE#6 
Alias (byte*) doplasma::sin_x#0 = (byte*~) doplasma::$0 
Alias (byte*) doplasma::sin_y#0 = (byte*~) doplasma::$1 
Alias (byte*) doplasma::screen#3 = (byte*) doplasma::screen#4 
Alias (byte*) doplasma::angle#2 = (byte*) doplasma::angle#3 
Alias (byte*) doplasma::dist#2 = (byte*) doplasma::dist#3 
Alias (byte) doplasma::y#2 = (byte) doplasma::y#3 
Alias (byte) sin_offset_x#11 = (byte) sin_offset_x#17 (byte) sin_offset_x#22 
Alias (byte) sin_offset_y#11 = (byte) sin_offset_y#17 (byte) sin_offset_y#22 
Alias (byte*) doplasma::sin_x#1 = (byte*) doplasma::sin_x#3 
Alias (byte*) doplasma::sin_y#1 = (byte*) doplasma::sin_y#3 
Alias (byte) sin_offset_x#12 = (byte) sin_offset_x#4 (byte) sin_offset_x#5 
Alias (byte) sin_offset_y#12 = (byte) sin_offset_y#4 (byte) sin_offset_y#5 
Alias (byte*) init_angle_screen::screen_topline#0 = (byte*~) init_angle_screen::$0 
Alias (byte*) init_angle_screen::screen_bottomline#0 = (byte*~) init_angle_screen::$1 
Alias (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#3 (byte) init_angle_screen::x#4 
Alias (byte) init_angle_screen::y#2 = (byte) init_angle_screen::y#4 (byte) init_angle_screen::y#6 (byte) init_angle_screen::y#3 
Alias (byte*) init_angle_screen::screen_bottomline#2 = (byte*) init_angle_screen::screen_bottomline#4 (byte*) init_angle_screen::screen_bottomline#5 (byte*) init_angle_screen::screen_bottomline#3 
Alias (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#3 (byte) init_angle_screen::xb#4 
Alias (byte*) init_angle_screen::screen_topline#2 = (byte*) init_angle_screen::screen_topline#4 (byte*) init_angle_screen::screen_topline#5 (byte*) init_angle_screen::screen_topline#3 
Alias (word~) init_angle_screen::$5 = (word~) init_angle_screen::$17 
Alias (signed word) init_angle_screen::xw#0 = (signed word~) init_angle_screen::$6 
Alias (word~) init_angle_screen::$8 = (word~) init_angle_screen::$18 
Alias (signed word) init_angle_screen::yw#0 = (signed word~) init_angle_screen::$9 
Alias (word) atan2_16::return#2 = (word) atan2_16::return#4 
Alias (word) init_angle_screen::angle_w#0 = (word~) init_angle_screen::$10 
Alias (byte) init_angle_screen::ang_w#0 = (byte~) init_angle_screen::$12 
Alias (byte*) init_dist_screen::screen#1 = (byte*) init_dist_screen::screen#2 (byte*) init_dist_screen::screen_topline#0 
Alias (byte) NUM_SQUARES#3 = (byte) NUM_SQUARES#45 
Alias (byte*) heap_head#20 = (byte*) heap_head#9 
Alias (word*) SQUARES#14 = (word*) SQUARES#5 
Alias (byte*) init_dist_screen::screen_bottomline#0 = (byte*~) init_dist_screen::$1 
Alias (byte) init_dist_screen::y2#0 = (byte~) init_dist_screen::$2 (byte) init_dist_screen::y2#1 (byte) init_dist_screen::y2#2 
Alias (word*) SQUARES#29 = (word*) SQUARES#38 (word*) SQUARES#30 
Alias (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#14 (byte*) init_dist_screen::screen_topline#12 
Alias (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#14 (byte*) init_dist_screen::screen_bottomline#12 
Alias (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#9 (byte) init_dist_screen::y#2 
Alias (byte) NUM_SQUARES#39 = (byte) NUM_SQUARES#43 (byte) NUM_SQUARES#40 
Alias (byte*) heap_head#47 = (byte*) heap_head#51 (byte*) heap_head#48 
Alias (byte~) init_dist_screen::$7 = (byte~) init_dist_screen::$6 
Alias (byte~) init_dist_screen::$5 = (byte~) init_dist_screen::$4 
Alias (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$8 
Alias (word) sqr::return#2 = (word) sqr::return#5 
Alias (byte*) init_dist_screen::screen_topline#6 = (byte*) init_dist_screen::screen_topline#8 
Alias (byte*) init_dist_screen::screen_bottomline#6 = (byte*) init_dist_screen::screen_bottomline#8 
Alias (byte) init_dist_screen::y#5 = (byte) init_dist_screen::y#7 
Alias (byte) NUM_SQUARES#28 = (byte) NUM_SQUARES#35 
Alias (byte*) heap_head#40 = (byte*) heap_head#44 
Alias (word*) SQUARES#19 = (word*) SQUARES#39 
Alias (word) init_dist_screen::yds#0 = (word~) init_dist_screen::$9 
Alias (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#3 (byte) init_dist_screen::x#7 (byte) init_dist_screen::x#8 
Alias (word*) SQUARES#15 = (word*) SQUARES#41 (word*) SQUARES#31 (word*) SQUARES#24 (word*) SQUARES#32 (word*) SQUARES#33 (word*) SQUARES#6 
Alias (word) init_dist_screen::yds#3 = (word) init_dist_screen::yds#5 (word) init_dist_screen::yds#6 (word) init_dist_screen::yds#4 
Alias (byte) NUM_SQUARES#11 = (byte) NUM_SQUARES#36 (byte) NUM_SQUARES#22 (byte) NUM_SQUARES#18 (byte) NUM_SQUARES#30 (byte) NUM_SQUARES#31 (byte) NUM_SQUARES#4 
Alias (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#13 (byte*) init_dist_screen::screen_topline#4 (byte*) init_dist_screen::screen_topline#2 (byte*) init_dist_screen::screen_topline#9 
Alias (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#13 (byte*) init_dist_screen::screen_bottomline#4 (byte*) init_dist_screen::screen_bottomline#2 (byte*) init_dist_screen::screen_bottomline#9 
Alias (byte) init_dist_screen::xb#5 = (byte) init_dist_screen::xb#7 (byte) init_dist_screen::xb#8 (byte) init_dist_screen::xb#6 
Alias (byte) init_dist_screen::y#12 = (byte) init_dist_screen::y#14 (byte) init_dist_screen::y#4 (byte) init_dist_screen::y#3 (byte) init_dist_screen::y#13 
Alias (byte*) heap_head#10 = (byte*) heap_head#55 (byte*) heap_head#35 (byte*) heap_head#29 (byte*) heap_head#52 (byte*) heap_head#53 (byte*) heap_head#21 
Alias (byte) init_dist_screen::x2#0 = (byte~) init_dist_screen::$11 (byte) init_dist_screen::x2#1 (byte) init_dist_screen::x2#2 
Alias (byte~) init_dist_screen::$16 = (byte~) init_dist_screen::$15 
Alias (byte~) init_dist_screen::$14 = (byte~) init_dist_screen::$13 
Alias (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$17 
Alias (word) sqr::return#3 = (word) sqr::return#6 
Alias (word) init_dist_screen::yds#1 = (word) init_dist_screen::yds#2 (word) init_dist_screen::yds#7 
Alias (word*) SQUARES#18 = (word*) SQUARES#20 (word*) SQUARES#40 
Alias (byte) NUM_SQUARES#15 = (byte) NUM_SQUARES#23 (byte) NUM_SQUARES#29 
Alias (byte*) init_dist_screen::screen_topline#3 = (byte*) init_dist_screen::screen_topline#5 (byte*) init_dist_screen::screen_topline#7 
Alias (byte) init_dist_screen::x#4 = (byte) init_dist_screen::x#5 (byte) init_dist_screen::x#6 
Alias (byte*) init_dist_screen::screen_bottomline#3 = (byte*) init_dist_screen::screen_bottomline#5 (byte*) init_dist_screen::screen_bottomline#7 
Alias (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#3 (byte) init_dist_screen::xb#4 
Alias (byte) init_dist_screen::y#11 = (byte) init_dist_screen::y#8 (byte) init_dist_screen::y#6 
Alias (byte*) heap_head#41 = (byte*) heap_head#45 (byte*) heap_head#49 
Alias (word) init_dist_screen::xds#0 = (word~) init_dist_screen::$18 
Alias (word) init_dist_screen::ds#0 = (word~) init_dist_screen::$19 
Alias (byte) sqrt::return#2 = (byte) sqrt::return#4 
Alias (byte) init_dist_screen::d#0 = (byte~) init_dist_screen::$20 
Alias (byte*) print_screen#3 = (byte*) print_screen#4 
Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#22 
Alias (byte*) print_char_cursor#23 = (byte*) print_char_cursor#29 
Alias (byte*) make_plasma_charset::charset#12 = (byte*) make_plasma_charset::charset#13 (byte*) make_plasma_charset::charset#16 
Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#5 
Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#7 
Alias (word) make_plasma_charset::c#2 = (word) make_plasma_charset::c#3 
Alias (byte*) make_plasma_charset::charset#10 = (byte*) make_plasma_charset::charset#8 
Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#39 (byte*) print_char_cursor#24 (byte*) print_char_cursor#9 
Alias (byte*) print_line_cursor#12 = (byte*) print_line_cursor#36 (byte*) print_line_cursor#17 (byte*) print_line_cursor#6 
Alias (word) make_plasma_charset::c#11 = (word) make_plasma_charset::c#7 (word) make_plasma_charset::c#4 (word) make_plasma_charset::c#12 (word) make_plasma_charset::c#9 
Alias (byte) make_plasma_charset::i#2 = (byte) make_plasma_charset::i#6 
Alias (byte*) make_plasma_charset::charset#14 = (byte*) make_plasma_charset::charset#4 (byte*) make_plasma_charset::charset#5 (byte*) make_plasma_charset::charset#15 (byte*) make_plasma_charset::charset#17 
Alias (byte) make_plasma_charset::s#5 = (byte) make_plasma_charset::s#6 
Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#46 (byte*) print_char_cursor#36 (byte*) print_char_cursor#31 
Alias (byte*) print_line_cursor#28 = (byte*) print_line_cursor#42 (byte*) print_line_cursor#32 (byte*) print_line_cursor#29 (byte*) print_line_cursor#33 
Alias (byte) make_plasma_charset::s#1 = (byte) make_plasma_charset::s#2 (byte) make_plasma_charset::s#3 (byte) make_plasma_charset::s#8 (byte) make_plasma_charset::s#7 
Alias (byte) make_plasma_charset::ii#2 = (byte) make_plasma_charset::ii#6 (byte) make_plasma_charset::ii#5 (byte) make_plasma_charset::ii#4 
Alias (byte) make_plasma_charset::b#2 = (byte) make_plasma_charset::b#7 (byte) make_plasma_charset::b#4 (byte) make_plasma_charset::b#5 (byte) make_plasma_charset::b#3 
Alias (word) make_plasma_charset::c#13 = (word) make_plasma_charset::c#15 (word) make_plasma_charset::c#8 (word) make_plasma_charset::c#14 (word) make_plasma_charset::c#5 
Alias (byte) make_plasma_charset::i#3 = (byte) make_plasma_charset::i#9 (byte) make_plasma_charset::i#4 (byte) make_plasma_charset::i#8 (byte) make_plasma_charset::i#7 
Alias (byte*) make_plasma_charset::charset#1 = (byte*) make_plasma_charset::charset#9 (byte*) make_plasma_charset::charset#2 (byte*) make_plasma_charset::charset#7 (byte*) make_plasma_charset::charset#6 
Alias (byte*) print_char_cursor#40 = (byte*) print_char_cursor#51 (byte*) print_char_cursor#43 (byte*) print_char_cursor#49 (byte*) print_char_cursor#48 
Alias (byte*) print_line_cursor#37 = (byte*) print_line_cursor#47 (byte*) print_line_cursor#39 (byte*) print_line_cursor#45 (byte*) print_line_cursor#44 
Alias (byte) sid_rnd::return#2 = (byte) sid_rnd::return#4 
Alias (byte*) print_char_cursor#17 = (byte*) print_char_cursor#8 
Alias (byte) sin_offset_x#18 = (byte) sin_offset_x#3 
Alias (byte) sin_offset_y#18 = (byte) sin_offset_y#3 
Alias (byte) NUM_SQUARES#12 = (byte) NUM_SQUARES#5 
Alias (byte*) heap_head#11 = (byte*) heap_head#22 
Alias (word*) SQUARES#16 = (word*) SQUARES#7 
Alias (byte*) print_line_cursor#13 = (byte*) print_line_cursor#7 
Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#19 
Alias (byte) sin_offset_x#13 = (byte) sin_offset_x#6 
Alias (byte) sin_offset_y#13 = (byte) sin_offset_y#6 
Successful SSA optimization Pass2AliasElimination
Alias (word) bsearch16u::key#1 = (word) bsearch16u::key#5 
Alias (signed word) atan2_16::x#1 = (signed word) atan2_16::x#5 (signed word) atan2_16::x#10 
Alias (signed word) atan2_16::y#1 = (signed word) atan2_16::y#12 (signed word) atan2_16::y#9 
Alias (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#9 
Alias (signed word) atan2_16::yi#10 = (signed word) atan2_16::yi#5 
Alias (signed word) atan2_16::xi#10 = (signed word) atan2_16::xi#4 
Alias (byte) atan2_16::i#10 = (byte) atan2_16::i#3 (byte) atan2_16::i#5 
Alias (word) atan2_16::angle#14 = (word) atan2_16::angle#16 
Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#14 (signed word) atan2_16::x#8 
Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#16 (signed word) atan2_16::y#8 
Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5 
Alias (word*) SQUARES#19 = (word*) SQUARES#29 
Alias (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#6 
Alias (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#6 
Alias (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#5 
Alias (byte) NUM_SQUARES#28 = (byte) NUM_SQUARES#39 
Alias (byte*) heap_head#40 = (byte*) heap_head#47 
Alias (word*) SQUARES#15 = (word*) SQUARES#18 
Alias (word) init_dist_screen::yds#1 = (word) init_dist_screen::yds#3 
Alias (byte) NUM_SQUARES#11 = (byte) NUM_SQUARES#15 
Alias (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#3 
Alias (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#4 
Alias (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#3 
Alias (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#5 
Alias (byte) init_dist_screen::y#11 = (byte) init_dist_screen::y#12 
Alias (byte*) heap_head#10 = (byte*) heap_head#41 
Alias (byte) make_plasma_charset::ii#2 = (byte) make_plasma_charset::ii#3 
Alias (word) make_plasma_charset::c#10 = (word) make_plasma_charset::c#13 
Alias (byte) make_plasma_charset::i#3 = (byte) make_plasma_charset::i#5 
Alias (byte*) make_plasma_charset::charset#1 = (byte*) make_plasma_charset::charset#3 
Alias (byte) make_plasma_charset::s#1 = (byte) make_plasma_charset::s#4 
Alias (byte*) print_char_cursor#40 = (byte*) print_char_cursor#45 
Alias (byte*) print_line_cursor#37 = (byte*) print_line_cursor#41 
Alias (word) make_plasma_charset::c#11 = (word) make_plasma_charset::c#6 
Alias (byte*) print_line_cursor#23 = (byte*) print_line_cursor#28 
Alias (byte*) make_plasma_charset::charset#11 = (byte*) make_plasma_charset::charset#14 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0
Identical Phi Values (void*) memset::str#5 (void*) memset::str#3
Identical Phi Values (byte) memset::c#2 (byte) memset::c#4
Identical Phi Values (byte) bsearch16u::num#7 (byte) bsearch16u::num#2
Identical Phi Values (word*) bsearch16u::items#7 (word*) bsearch16u::items#1
Identical Phi Values (word) bsearch16u::key#4 (word) bsearch16u::key#0
Identical Phi Values (word) bsearch16u::key#1 (word) bsearch16u::key#4
Identical Phi Values (byte) NUM_SQUARES#14 (byte) NUM_SQUARES#3
Identical Phi Values (byte*) heap_head#24 (byte*) heap_head#28
Identical Phi Values (byte*) heap_head#14 (byte*) heap_head#1
Identical Phi Values (byte) NUM_SQUARES#13 (byte) NUM_SQUARES#14
Identical Phi Values (byte*) heap_head#15 (byte*) heap_head#14
Identical Phi Values (word*) SQUARES#17 (word*) SQUARES#1
Identical Phi Values (word) sqrt::val#1 (word) sqrt::val#0
Identical Phi Values (word*) SQUARES#10 (word*) SQUARES#15
Identical Phi Values (byte) NUM_SQUARES#8 (byte) NUM_SQUARES#11
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 (byte) print_char::ch#1 (byte) print_char::ch#0
Identical Phi Values (byte*) print_char_cursor#11 (byte*) print_char_cursor#20
Identical Phi Values (byte*) print_line_cursor#1 (byte*) print_screen#3
Identical Phi Values (byte*) heap_head#16 (byte*) heap_head#1
Identical Phi Values (byte*) heap_head#17 (byte*) heap_head#1
Identical Phi Values (byte*) SCREEN_DIST#1 (byte*) SCREEN_DIST#0
Identical Phi Values (byte) NUM_SQUARES#16 (byte) NUM_SQUARES#0
Identical Phi Values (byte*) heap_head#26 (byte*) heap_head#17
Identical Phi Values (word*) SQUARES#21 (word*) SQUARES#0
Identical Phi Values (byte*) SCREEN_ANGLE#1 (byte*) SCREEN_ANGLE#0
Identical Phi Values (byte*) print_line_cursor#14 (byte*) print_line_cursor#0
Identical Phi Values (byte*) print_char_cursor#21 (byte*) print_line_cursor#0
Identical Phi Values (byte*) print_screen#5 (byte*) print_line_cursor#0
Identical Phi Values (byte) sin_offset_x#19 (byte) sin_offset_x#18
Identical Phi Values (byte) sin_offset_y#19 (byte) sin_offset_y#18
Identical Phi Values (byte) NUM_SQUARES#1 (byte) NUM_SQUARES#11
Identical Phi Values (byte*) heap_head#18 (byte*) heap_head#10
Identical Phi Values (word*) SQUARES#12 (word*) SQUARES#15
Identical Phi Values (byte*) print_line_cursor#20 (byte*) print_line_cursor#12
Identical Phi Values (byte*) print_char_cursor#14 (byte*) print_char_cursor#18
Identical Phi Values (byte) NUM_SQUARES#10 (byte) NUM_SQUARES#1
Identical Phi Values (byte*) heap_head#19 (byte*) heap_head#18
Identical Phi Values (word*) SQUARES#13 (word*) SQUARES#12
Identical Phi Values (byte*) print_line_cursor#10 (byte*) print_line_cursor#20
Identical Phi Values (byte*) print_char_cursor#15 (byte*) print_char_cursor#14
Identical Phi Values (byte*) SCREEN_ANGLE#10 (byte*) SCREEN_ANGLE#1
Identical Phi Values (byte*) SCREEN_DIST#10 (byte*) SCREEN_DIST#1
Identical Phi Values (byte) sin_offset_x#0 (byte) sin_offset_x#12
Identical Phi Values (byte) sin_offset_y#0 (byte) sin_offset_y#12
Identical Phi Values (byte) sin_offset_x#1 (byte) sin_offset_x#12
Identical Phi Values (byte) sin_offset_y#1 (byte) sin_offset_y#12
Identical Phi Values (byte*) SCREEN_ANGLE#2 (byte*) SCREEN_ANGLE#10
Identical Phi Values (byte*) SCREEN_DIST#2 (byte*) SCREEN_DIST#10
Identical Phi Values (byte*) doplasma::sin_x#1 (byte*) doplasma::sin_x#2
Identical Phi Values (byte*) doplasma::angle#2 (byte*) doplasma::angle#4
Identical Phi Values (byte*) doplasma::sin_y#1 (byte*) doplasma::sin_y#2
Identical Phi Values (byte*) doplasma::dist#2 (byte*) doplasma::dist#4
Identical Phi Values (byte*) doplasma::screen#3 (byte*) doplasma::screen#5
Identical Phi Values (byte) doplasma::y#2 (byte) doplasma::y#4
Identical Phi Values (byte) sin_offset_x#11 (byte) sin_offset_x#26
Identical Phi Values (byte) sin_offset_y#11 (byte) sin_offset_y#26
Identical Phi Values (byte*) init_angle_screen::screen#1 (byte*) init_angle_screen::screen#0
Identical Phi Values (byte) init_angle_screen::y#2 (byte) init_angle_screen::y#5
Identical Phi Values (byte*) init_angle_screen::screen_topline#2 (byte*) init_angle_screen::screen_topline#6
Identical Phi Values (byte*) init_angle_screen::screen_bottomline#2 (byte*) init_angle_screen::screen_bottomline#6
Identical Phi Values (byte*) heap_head#28 (byte*) heap_head#26
Identical Phi Values (word*) SQUARES#23 (word*) SQUARES#21
Identical Phi Values (byte*) init_dist_screen::screen#1 (byte*) init_dist_screen::screen#0
Identical Phi Values (byte*) heap_head#20 (byte*) heap_head#15
Identical Phi Values (word*) SQUARES#14 (word*) SQUARES#17
Identical Phi Values (byte*) init_dist_screen::screen_topline#10 (byte*) init_dist_screen::screen_topline#11
Identical Phi Values (byte*) init_dist_screen::screen_bottomline#10 (byte*) init_dist_screen::screen_bottomline#11
Identical Phi Values (byte) init_dist_screen::y#11 (byte) init_dist_screen::y#10
Identical Phi Values (byte) NUM_SQUARES#11 (byte) NUM_SQUARES#28
Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#40
Identical Phi Values (word*) SQUARES#15 (word*) SQUARES#19
Identical Phi Values (word) init_dist_screen::yds#1 (word) init_dist_screen::yds#0
Identical Phi Values (byte*) print_screen#3 (byte*) print_screen#5
Identical Phi Values (byte*) print_line_cursor#16 (byte*) print_line_cursor#14
Identical Phi Values (byte*) print_char_cursor#23 (byte*) print_char_cursor#21
Identical Phi Values (byte*) make_plasma_charset::charset#12 (byte*) make_plasma_charset::charset#0
Identical Phi Values (byte*) print_line_cursor#11 (byte*) print_line_cursor#1
Identical Phi Values (byte*) print_char_cursor#16 (byte*) print_line_cursor#1
Identical Phi Values (word) make_plasma_charset::c#10 (word) make_plasma_charset::c#11
Identical Phi Values (byte) make_plasma_charset::i#3 (byte) make_plasma_charset::i#2
Identical Phi Values (byte*) make_plasma_charset::charset#1 (byte*) make_plasma_charset::charset#11
Identical Phi Values (byte) make_plasma_charset::s#1 (byte) make_plasma_charset::s#5
Identical Phi Values (byte*) print_char_cursor#40 (byte*) print_char_cursor#20
Identical Phi Values (byte*) print_line_cursor#37 (byte*) print_line_cursor#23
Identical Phi Values (byte*) print_char_cursor#17 (byte*) print_char_cursor#1
Identical Phi Values (byte) NUM_SQUARES#12 (byte) NUM_SQUARES#10
Identical Phi Values (byte*) heap_head#11 (byte*) heap_head#19
Identical Phi Values (word*) SQUARES#16 (word*) SQUARES#13
Identical Phi Values (byte*) print_line_cursor#13 (byte*) print_line_cursor#10
Identical Phi Values (byte*) print_char_cursor#10 (byte*) print_char_cursor#15
Identical Phi Values (byte) sin_offset_x#13 (byte) sin_offset_x#14
Identical Phi Values (byte) sin_offset_y#13 (byte) sin_offset_y#14
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (void*) memset::return#0 (void*) memset::str#3
Identical Phi Values (word*) SQUARES#9 (word*) SQUARES#19
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*) doplasma::sin_x#2 (byte*) doplasma::sin_x#0
Identical Phi Values (byte*) doplasma::sin_y#2 (byte*) doplasma::sin_y#0
Identical Phi Values (byte) sin_offset_x#26 (byte) sin_offset_x#10
Identical Phi Values (byte) sin_offset_y#26 (byte) sin_offset_y#10
Identical Phi Values (word*) SQUARES#19 (word*) SQUARES#1
Identical Phi Values (byte) NUM_SQUARES#28 (byte) NUM_SQUARES#3
Identical Phi Values (byte*) heap_head#40 (byte*) heap_head#1
Identical Phi Values (word) make_plasma_charset::c#11 (word) make_plasma_charset::c#2
Identical Phi Values (byte*) make_plasma_charset::charset#11 (byte*) make_plasma_charset::charset#10
Identical Phi Values (byte*) print_char_cursor#20 (byte*) print_char_cursor#18
Identical Phi Values (byte) make_plasma_charset::s#5 (byte) make_plasma_charset::s#0
Identical Phi Values (byte*) print_line_cursor#23 (byte*) print_line_cursor#12
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (byte*) print_line_cursor#12 (byte*) print_line_cursor#0
Identical Phi Values (byte*) make_plasma_charset::charset#10 (byte*) make_plasma_charset::charset#0
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [2] if((word) memset::num#2<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [9] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) bsearch16u::$5 [22] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@7
Simple Condition (bool~) bsearch16u::$12 [30] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@9
Simple Condition (bool~) bsearch16u::$0 [32] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@1
Simple Condition (bool~) bsearch16u::$14 [34] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10
Simple Condition (bool~) init_squares::$2 [59] if((byte) init_squares::i#2<(byte) NUM_SQUARES#3) goto init_squares::@2
Simple Condition (bool~) atan2_16::$0 [84] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
Simple Condition (bool~) atan2_16::$5 [88] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
Simple Condition (bool~) atan2_16::$17 [95] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16
Simple Condition (bool~) atan2_16::$11 [99] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
Simple Condition (bool~) atan2_16::$18 [102] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19
Simple Condition (bool~) atan2_16::$19 [107] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25
Simple Condition (bool~) atan2_16::$20 [110] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26
Simple Condition (bool~) atan2_16::$21 [124] if((byte) atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@15
Simple Condition (bool~) atan2_16::$14 [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
Simple Condition (bool~) doplasma::$3 [223] if((byte) doplasma::x#1!=rangelast(0,$27)) goto doplasma::@2
Simple Condition (bool~) doplasma::$4 [229] if((byte) doplasma::y#1!=rangelast(0,$19)) goto doplasma::@1
Simple Condition (bool~) init_angle_screen::$2 [242] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3
Simple Condition (bool~) init_angle_screen::$16 [270] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1
Simple Condition (bool~) init_dist_screen::$3 [281] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
Simple Condition (bool~) init_dist_screen::$10 [293] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6
Simple Condition (bool~) init_dist_screen::$12 [296] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8
Simple Condition (bool~) init_dist_screen::$21 [301] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1
Simple Condition (bool~) make_plasma_charset::$2 [328] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2
Simple Condition (bool~) make_plasma_charset::$4 [334] if((byte) make_plasma_charset::i#2<(byte) 8) goto make_plasma_charset::@5
Simple Condition (bool~) make_plasma_charset::$14 [339] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@19
Simple Condition (bool~) make_plasma_charset::$5 [342] if((byte) make_plasma_charset::ii#2<(byte) 8) goto make_plasma_charset::@8
Simple Condition (bool~) make_plasma_charset::$9 [348] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@10
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [124] if((byte) atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@17
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [39] (byte~) bsearch16u::$17 ← (byte) 1 * (const byte) SIZEOF_WORD
Constant right-side identified [42] (byte~) bsearch16u::$18 ← (byte) 1 * (const byte) SIZEOF_WORD
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) heap_head#0 = HEAP_TOP
Constant (const byte) bsearch16u::$17 = 1*SIZEOF_WORD
Constant (const byte) bsearch16u::$18 = 1*SIZEOF_WORD
Constant (const byte) NUM_SQUARES#0 = $ff
Constant (const word*) SQUARES#0 = (word*) 0
Constant (const word) init_squares::sqr#0 = 0
Constant (const byte) init_squares::i#0 = 0
Constant (const word) atan2_16::angle#0 = 0
Constant (const byte) atan2_16::i#0 = 0
Constant (const byte*) print_line_cursor#0 = (byte*) 1024
Constant (const byte) memset::c#0 = ' '
Constant (const word) memset::num#0 = $3e8
Constant (const word) malloc::size#1 = $3e8
Constant (const word) malloc::size#2 = $3e8
Constant (const byte*) make_plasma_charset::charset#0 = CHARSET
Constant (const void*) memset::str#1 = (void*)COLS
Constant (const byte) memset::c#1 = BLACK
Constant (const word) memset::num#1 = $3e8
Constant (const byte*) doplasma::screen#0 = SCREEN1
Constant (const byte*) main::toD0181_screen#0 = SCREEN1
Constant (const byte*) main::toD0181_gfx#0 = CHARSET
Constant (const byte*) doplasma::screen#1 = SCREEN2
Constant (const byte*) main::toD0182_screen#0 = SCREEN2
Constant (const byte*) main::toD0182_gfx#0 = CHARSET
Constant (const byte) sin_offset_x#18 = 0
Constant (const byte) sin_offset_y#18 = 0
Constant (const byte) doplasma::y#0 = 0
Constant (const byte) doplasma::x#0 = 0
Constant (const byte) init_angle_screen::y#0 = 0
Constant (const byte) init_angle_screen::x#0 = 0
Constant (const byte) init_angle_screen::xb#0 = $27
Constant (const byte) NUM_SQUARES#3 = $30
Constant (const byte) init_dist_screen::y#0 = 0
Constant (const byte) init_dist_screen::x#0 = 0
Constant (const byte) init_dist_screen::xb#0 = $27
Constant (const word) make_plasma_charset::c#0 = 0
Constant (const byte) make_plasma_charset::i#0 = 0
Constant (const byte) make_plasma_charset::b#0 = 0
Constant (const byte) make_plasma_charset::ii#0 = 0
Constant (const byte) print_char::ch#0 = '.'
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#3
Constant (const void*) memset::str#0 = (void*)print_line_cursor#0
Constant (const word) main::toD0181_$0 = (word)main::toD0181_screen#0
Constant (const word) main::toD0181_$4 = (word)main::toD0181_gfx#0
Constant (const word) main::toD0182_$0 = (word)main::toD0182_screen#0
Constant (const word) main::toD0182_$4 = (word)main::toD0182_gfx#0
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [176] if(true) goto main::@2
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [122] atan2_16::i#1 ← ++ atan2_16::i#2 to ++
Resolved ranged comparison value [124] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@17 to (const byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1
Resolved ranged next value [221] doplasma::x#1 ← ++ doplasma::x#2 to ++
Resolved ranged comparison value [223] if(doplasma::x#1!=rangelast(0,$27)) goto doplasma::@2 to (number) $28
Resolved ranged next value [227] doplasma::y#1 ← ++ doplasma::y#4 to ++
Resolved ranged comparison value [229] if(doplasma::y#1!=rangelast(0,$19)) goto doplasma::@1 to (number) $1a
Resolved ranged next value [268] init_angle_screen::y#1 ← ++ init_angle_screen::y#5 to ++
Resolved ranged comparison value [270] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d
Resolved ranged next value [299] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++
Resolved ranged comparison value [301] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d
Rewriting conditional comparison [242] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3
Rewriting conditional comparison [293] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6
De-inlining pointer[w] to *(pointer+w)   [351] *((const byte*) make_plasma_charset::charset#0 + (word~) make_plasma_charset::$11) ← (byte) make_plasma_charset::b#2
Successful SSA optimization Pass2DeInlineWordDerefIdx
Eliminating unused variable (void*) memset::return#2 and assignment [104] (void*) memset::return#2 ← (void*) memset::str#3
Eliminating unused variable (void*) memset::return#3 and assignment [125] (void*) memset::return#3 ← (void*) memset::str#3
Eliminating unused constant (const byte) NUM_SQUARES#0
Eliminating unused constant (const word*) SQUARES#0
Successful SSA optimization PassNEliminateUnusedVars
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Adding number conversion cast (unumber) CORDIC_ITERATIONS_16-1+1 in if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1) goto atan2_16::@17
Adding number conversion cast (unumber) 1 in if((byte) atan2_16::i#1==(unumber)(const byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1) goto atan2_16::@17
Adding number conversion cast (unumber) $28 in if((byte) doplasma::x#1!=(number) $28) goto doplasma::@2
Adding number conversion cast (unumber) $1a in if((byte) doplasma::y#1!=(number) $1a) goto doplasma::@1
Adding number conversion cast (unumber) $13+1 in if((byte) init_angle_screen::x#2<(byte) $13+(number) 1) goto init_angle_screen::@3
Adding number conversion cast (unumber) 1 in if((byte) init_angle_screen::x#2<(unumber)(byte) $13+(number) 1) goto init_angle_screen::@3
Adding number conversion cast (unumber) $d in if((byte) init_angle_screen::y#1!=(number) $d) goto init_angle_screen::@1
Adding number conversion cast (unumber) $13+1 in if((byte) init_dist_screen::x#2<(byte) $13+(number) 1) goto init_dist_screen::@6
Adding number conversion cast (unumber) 1 in if((byte) init_dist_screen::x#2<(unumber)(byte) $13+(number) 1) goto init_dist_screen::@6
Adding number conversion cast (unumber) $d in if((byte) init_dist_screen::y#1!=(number) $d) goto init_dist_screen::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast (const byte) CORDIC_ITERATIONS_16-(byte) 1+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast $28
Simplifying constant integer cast $1a
Simplifying constant integer cast (byte) $13+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (byte~) init_angle_screen::$4
Simplifying constant integer cast (byte~) init_angle_screen::$7
Simplifying constant integer cast $d
Simplifying constant integer cast (byte) $13+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast $d
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $1a
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $d
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $d
Successful SSA optimization PassNFinalizeNumberTypeConversions
Constant right-side identified [34] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD
Constant right-side identified [126] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff
Constant right-side identified [129] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4
Constant right-side identified [135] (word~) main::toD0182_$1 ← (const word) main::toD0182_$0 & (word) $3fff
Constant right-side identified [138] (byte~) main::toD0182_$5 ← > (const word) main::toD0182_$4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word) malloc::size#0 = NUM_SQUARES#3*SIZEOF_WORD
Constant (const word) main::toD0181_$1 = main::toD0181_$0&$3fff
Constant (const byte) main::toD0181_$5 = >main::toD0181_$4
Constant (const word) main::toD0182_$1 = main::toD0182_$0&$3fff
Constant (const byte) main::toD0182_$5 = >main::toD0182_$4
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [125] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4
Constant right-side identified [127] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4
Constant right-side identified [132] (word~) main::toD0182_$2 ← (const word) main::toD0182_$1 * (byte) 4
Constant right-side identified [134] (byte~) main::toD0182_$6 ← (const byte) main::toD0182_$5 / (byte) 4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word) main::toD0181_$2 = main::toD0181_$1*4
Constant (const byte) main::toD0181_$6 = main::toD0181_$5/4
Constant (const word) main::toD0182_$2 = main::toD0182_$1*4
Constant (const byte) main::toD0182_$6 = main::toD0182_$5/4
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [125] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2
Constant right-side identified [126] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f
Constant right-side identified [130] (byte~) main::toD0182_$3 ← > (const word) main::toD0182_$2
Constant right-side identified [131] (byte~) main::toD0182_$7 ← (const byte) main::toD0182_$6 & (byte) $f
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::toD0181_$3 = >main::toD0181_$2
Constant (const byte) main::toD0181_$7 = main::toD0181_$6&$f
Constant (const byte) main::toD0182_$3 = >main::toD0182_$2
Constant (const byte) main::toD0182_$7 = main::toD0182_$6&$f
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [125] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7
Constant right-side identified [128] (byte) main::toD0182_return#0 ← (const byte) main::toD0182_$3 | (const byte) main::toD0182_$7
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::toD0181_return#0 = main::toD0181_$3|main::toD0181_$7
Constant (const byte) main::toD0182_return#0 = main::toD0182_$3|main::toD0182_$7
Successful SSA optimization Pass2ConstantIdentification
Inlining Noop Cast [2] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 keeping memset::str#3
Inlining Noop Cast [4] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3
Inlining Noop Cast [13] (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [20] (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#0 keeping bsearch16u::key#0
Inlining Noop Cast [21] (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0) keeping *(bsearch16u::pivot#0)
Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [35] (void*) malloc::return#2 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [110] (void*) malloc::return#3 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [114] (void*) malloc::return#4 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [37] (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1 keeping SQUARES#1
Inlining Noop Cast [112] (byte*) SCREEN_DIST#0 ← (byte*)(void*~) $0 keeping SCREEN_DIST#0
Inlining Noop Cast [116] (byte*) SCREEN_ANGLE#0 ← (byte*)(void*~) $1 keeping SCREEN_ANGLE#0
Inlining Noop Cast [155] (signed word) init_angle_screen::xw#0 ← (signed word)(word~) init_angle_screen::$5 keeping init_angle_screen::xw#0
Inlining Noop Cast [158] (signed word) init_angle_screen::yw#0 ← (signed word)(word~) init_angle_screen::$8 keeping init_angle_screen::yw#0
Successful SSA optimization Pass2NopCastInlining
Rewriting multiplication to use shift [18] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [43] (byte~) init_squares::$3 ← (byte) init_squares::i#2 * (byte) 2
Rewriting multiplication to use shift [49] (byte~) sqr::$0 ← (byte) sqr::val#2 * (const byte) SIZEOF_WORD
Rewriting division to use shift [58] (word~) sqrt::$1 ← (word~) sqrt::$3 / (const byte) SIZEOF_WORD
Rewriting division to use shift [70] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2
Rewriting multiplication to use shift [84] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [88] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [152] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 * (byte) 2
Rewriting multiplication to use shift [156] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 * (byte) 2
Rewriting multiplication to use shift [183] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2
Rewriting multiplication to use shift [194] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 * (byte) 2
Rewriting multiplication to use shift [236] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 * (byte) 8
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const byte) memset::c#0
Inlining constant with var siblings (const word) memset::num#0
Inlining constant with var siblings (const void*) memset::str#1
Inlining constant with var siblings (const byte) memset::c#1
Inlining constant with var siblings (const word) memset::num#1
Inlining constant with var siblings (const void*) memset::str#0
Inlining constant with var siblings (const word) malloc::size#1
Inlining constant with var siblings (const word) malloc::size#2
Inlining constant with var siblings (const word) malloc::size#0
Inlining constant with var siblings (const byte) bsearch16u::num#2
Inlining constant with var siblings (const word) init_squares::sqr#0
Inlining constant with var siblings (const byte) init_squares::i#0
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*) doplasma::screen#0
Inlining constant with var siblings (const byte*) doplasma::screen#1
Inlining constant with var siblings (const byte) doplasma::y#0
Inlining constant with var siblings (const byte) doplasma::x#0
Inlining constant with var siblings (const byte) init_angle_screen::y#0
Inlining constant with var siblings (const byte) init_angle_screen::x#0
Inlining constant with var siblings (const byte) init_angle_screen::xb#0
Inlining constant with var siblings (const byte) init_dist_screen::y#0
Inlining constant with var siblings (const byte) init_dist_screen::x#0
Inlining constant with var siblings (const byte) init_dist_screen::xb#0
Inlining constant with var siblings (const word) make_plasma_charset::c#0
Inlining constant with var siblings (const byte) make_plasma_charset::i#0
Inlining constant with var siblings (const byte) make_plasma_charset::b#0
Inlining constant with var siblings (const byte) make_plasma_charset::ii#0
Inlining constant with var siblings (const byte*) heap_head#0
Inlining constant with var siblings (const byte) sin_offset_x#18
Inlining constant with var siblings (const byte) sin_offset_y#18
Constant inlined sin_offset_x#18 = (byte) 0
Constant inlined main::toD0182_$4 = (word)(const byte*) CHARSET
Constant inlined init_angle_screen::y#0 = (byte) 0
Constant inlined main::toD0182_$5 = >(word)(const byte*) CHARSET
Constant inlined main::toD0182_$6 = >(word)(const byte*) CHARSET/(byte) 4
Constant inlined memset::num#1 = (word) $3e8
Constant inlined main::toD0182_$7 = >(word)(const byte*) CHARSET/(byte) 4&(byte) $f
Constant inlined memset::num#0 = (word) $3e8
Constant inlined main::toD0182_$0 = (word)(const byte*) SCREEN2
Constant inlined atan2_16::angle#0 = (word) 0
Constant inlined main::toD0182_$1 = (word)(const byte*) SCREEN2&(word) $3fff
Constant inlined main::toD0182_$2 = (word)(const byte*) SCREEN2&(word) $3fff*(byte) 4
Constant inlined main::toD0182_$3 = >(word)(const byte*) SCREEN2&(word) $3fff*(byte) 4
Constant inlined init_dist_screen::x#0 = (byte) 0
Constant inlined doplasma::x#0 = (byte) 0
Constant inlined make_plasma_charset::ii#0 = (byte) 0
Constant inlined main::toD0181_$7 = >(word)(const byte*) CHARSET/(byte) 4&(byte) $f
Constant inlined bsearch16u::num#2 = (const byte) NUM_SQUARES#3
Constant inlined main::toD0182_gfx#0 = (const byte*) CHARSET
Constant inlined init_angle_screen::xb#0 = (byte) $27
Constant inlined main::toD0181_$2 = (word)(const byte*) SCREEN1&(word) $3fff*(byte) 4
Constant inlined main::toD0181_$1 = (word)(const byte*) SCREEN1&(word) $3fff
Constant inlined main::toD0181_$0 = (word)(const byte*) SCREEN1
Constant inlined main::toD0181_$6 = >(word)(const byte*) CHARSET/(byte) 4
Constant inlined main::toD0181_$5 = >(word)(const byte*) CHARSET
Constant inlined main::toD0181_$4 = (word)(const byte*) CHARSET
Constant inlined main::toD0181_$3 = >(word)(const byte*) SCREEN1&(word) $3fff*(byte) 4
Constant inlined doplasma::screen#0 = (const byte*) SCREEN1
Constant inlined init_squares::i#0 = (byte) 0
Constant inlined doplasma::screen#1 = (const byte*) SCREEN2
Constant inlined make_plasma_charset::b#0 = (byte) 0
Constant inlined memset::c#0 = (byte) ' '
Constant inlined memset::c#1 = (const byte) BLACK
Constant inlined make_plasma_charset::charset#0 = (const byte*) CHARSET
Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN1
Constant inlined main::toD0181_gfx#0 = (const byte*) CHARSET
Constant inlined init_squares::sqr#0 = (word) 0
Constant inlined init_angle_screen::x#0 = (byte) 0
Constant inlined init_dist_screen::y#0 = (byte) 0
Constant inlined init_dist_screen::xb#0 = (byte) $27
Constant inlined doplasma::y#0 = (byte) 0
Constant inlined memset::str#1 = (void*)(const byte*) COLS
Constant inlined memset::str#0 = (void*)(const byte*) print_line_cursor#0
Constant inlined malloc::size#2 = (word) $3e8
Constant inlined make_plasma_charset::i#0 = (byte) 0
Constant inlined make_plasma_charset::c#0 = (word) 0
Constant inlined sin_offset_y#18 = (byte) 0
Constant inlined atan2_16::i#0 = (byte) 0
Constant inlined malloc::size#1 = (word) $3e8
Constant inlined malloc::size#0 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD
Constant inlined bsearch16u::$17 = (byte) 1*(const byte) SIZEOF_WORD
Constant inlined bsearch16u::$18 = (byte) 1*(const byte) SIZEOF_WORD
Constant inlined main::toD0182_screen#0 = (const byte*) SCREEN2
Constant inlined heap_head#0 = (const byte*) HEAP_TOP
Successful SSA optimization Pass2ConstantInlining
Identical Phi Values (word) memset::num#2 (word) $3e8
Successful SSA optimization Pass2IdenticalPhiElimination
if() condition always false - eliminating [1] if((word) $3e8<=(byte) 0) goto memset::@1
Successful SSA optimization Pass2ConstantIfs
Added new block during phi lifting bsearch16u::@18(between bsearch16u::@9 and bsearch16u::@10)
Added new block during phi lifting atan2_16::@34(between atan2_16::@27 and atan2_16::@15)
Added new block during phi lifting atan2_16::@35(between atan2_16::@15 and atan2_16::@17)
Added new block during phi lifting atan2_16::@36(between atan2_16::@27 and atan2_16::@17)
Added new block during phi lifting atan2_16::@37(between atan2_16::@20 and atan2_16::@25)
Added new block during phi lifting atan2_16::@38(between atan2_16::@17 and atan2_16::@7)
Added new block during phi lifting atan2_16::@39(between atan2_16::@7 and atan2_16::@8)
Added new block during phi lifting doplasma::@5(between doplasma::@3 and doplasma::@1)
Added new block during phi lifting doplasma::@6(between doplasma::@2 and doplasma::@2)
Added new block during phi lifting init_angle_screen::@10(between init_angle_screen::@4 and init_angle_screen::@1)
Added new block during phi lifting init_dist_screen::@23(between init_dist_screen::@7 and init_dist_screen::@1)
Added new block during phi lifting make_plasma_charset::@27(between make_plasma_charset::@25 and make_plasma_charset::@10)
Added new block during phi lifting make_plasma_charset::@28(between make_plasma_charset::@6 and make_plasma_charset::@19)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @9
Adding NOP phi() at start of @17
Adding NOP phi() at start of @22
Adding NOP phi() at start of @48
Adding NOP phi() at start of @49
Adding NOP phi() at start of @53
Adding NOP phi() at start of @56
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@10
Adding NOP phi() at start of main::@11
Adding NOP phi() at start of main::@12
Adding NOP phi() at start of main::@13
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::toD0181_@return
Adding NOP phi() at start of main::@14
Adding NOP phi() at start of main::toD0182
Adding NOP phi() at start of main::toD0182_@return
Adding NOP phi() at start of memset::@1
Adding NOP phi() at start of make_plasma_charset
Adding NOP phi() at start of make_plasma_charset::@23
Adding NOP phi() at start of make_plasma_charset::@24
Adding NOP phi() at start of make_plasma_charset::@18
Adding NOP phi() at start of make_plasma_charset::@5
Adding NOP phi() at start of make_plasma_charset::@8
Adding NOP phi() at start of print_cls
Adding NOP phi() at start of print_cls::@1
Adding NOP phi() at start of init_dist_screen
CALL GRAPH
Calls in [] to malloc:5 malloc:8 main:12 
Calls in [main] to init_dist_screen:16 init_angle_screen:18 make_plasma_charset:20 memset:22 doplasma:27 doplasma:34 
Calls in [make_plasma_charset] to sid_rnd_init:79 print_cls:81 print_char:93 sid_rnd:110 
Calls in [print_cls] to memset:128 
Calls in [init_angle_screen] to atan2_16:156 
Calls in [init_dist_screen] to init_squares:243 sqr:255 sqr:275 sqrt:280 
Calls in [sqrt] to bsearch16u:297 
Calls in [init_squares] to malloc:337 

Created 61 initial phi equivalence classes
Coalesced [7] heap_head#59 ← heap_head#1
Coalesced [25] sin_offset_x#32 ← sin_offset_x#14
Coalesced [26] sin_offset_y#32 ← sin_offset_y#14
Coalesced [32] sin_offset_x#33 ← sin_offset_x#12
Coalesced [33] sin_offset_y#33 ← sin_offset_y#12
Coalesced (already) [39] sin_offset_x#31 ← sin_offset_x#12
Coalesced (already) [40] sin_offset_y#31 ← sin_offset_y#12
Coalesced [46] doplasma::angle#5 ← doplasma::angle#0
Coalesced [47] doplasma::dist#5 ← doplasma::dist#0
Coalesced [48] doplasma::screen#7 ← doplasma::screen#6
Coalesced [63] doplasma::angle#6 ← doplasma::angle#1
Coalesced [64] doplasma::dist#6 ← doplasma::dist#1
Coalesced [65] doplasma::screen#8 ← doplasma::screen#2
Coalesced [66] doplasma::y#5 ← doplasma::y#1
Coalesced [67] doplasma::x#3 ← doplasma::x#1
Coalesced [77] memset::dst#5 ← memset::dst#1
Coalesced [94] print_char_cursor#55 ← print_char_cursor#1
Coalesced [97] make_plasma_charset::c#16 ← make_plasma_charset::c#1
Coalesced [98] print_char_cursor#54 ← print_char_cursor#30
Coalesced (already) [99] print_char_cursor#56 ← print_char_cursor#18
Coalesced [108] make_plasma_charset::i#10 ← make_plasma_charset::i#1
Coalesced [116] make_plasma_charset::b#9 ← make_plasma_charset::b#1
Coalesced [119] make_plasma_charset::ii#7 ← make_plasma_charset::ii#1
Coalesced [120] make_plasma_charset::b#8 ← make_plasma_charset::b#6
Coalesced (already) [121] make_plasma_charset::b#10 ← make_plasma_charset::b#2
Coalesced [136] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#0
Coalesced [137] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#0
Coalesced [146] init_angle_screen::y#7 ← init_angle_screen::y#1
Coalesced [147] init_angle_screen::screen_topline#8 ← init_angle_screen::screen_topline#1
Coalesced [148] init_angle_screen::screen_bottomline#8 ← init_angle_screen::screen_bottomline#1
Coalesced [170] init_angle_screen::x#5 ← init_angle_screen::x#1
Coalesced [171] init_angle_screen::xb#5 ← init_angle_screen::xb#1
Coalesced [174] atan2_16::yi#17 ← atan2_16::$2
Coalesced [178] atan2_16::xi#14 ← atan2_16::$7
Coalesced [180] atan2_16::yi#19 ← atan2_16::yi#0
Coalesced [181] atan2_16::xi#16 ← atan2_16::xi#0
Coalesced [184] atan2_16::angle#22 ← atan2_16::angle#12
Coalesced [189] atan2_16::angle#27 ← atan2_16::angle#4
Coalesced [193] atan2_16::return#5 ← atan2_16::angle#5
Coalesced [196] atan2_16::return#6 ← atan2_16::angle#11
Coalesced [197] atan2_16::angle#26 ← atan2_16::angle#1
Not coalescing [198] atan2_16::shift#5 ← atan2_16::i#2
Not coalescing [199] atan2_16::xd#10 ← atan2_16::xi#3
Not coalescing [200] atan2_16::yd#10 ← atan2_16::yi#3
Coalesced [206] atan2_16::yd#13 ← atan2_16::yd#2
Coalesced [207] atan2_16::xd#13 ← atan2_16::xd#2
Coalesced [214] atan2_16::yi#21 ← atan2_16::yi#2
Coalesced [215] atan2_16::angle#25 ← atan2_16::angle#3
Coalesced [216] atan2_16::xi#18 ← atan2_16::xi#2
Coalesced [220] atan2_16::yi#18 ← atan2_16::yi#8
Coalesced [221] atan2_16::xi#15 ← atan2_16::xi#8
Coalesced [222] atan2_16::i#12 ← atan2_16::i#1
Coalesced [223] atan2_16::angle#21 ← atan2_16::angle#13
Coalesced (already) [224] atan2_16::angle#23 ← atan2_16::angle#13
Coalesced [229] atan2_16::yi#20 ← atan2_16::yi#1
Coalesced [230] atan2_16::angle#24 ← atan2_16::angle#2
Coalesced [231] atan2_16::xi#17 ← atan2_16::xi#1
Coalesced [232] atan2_16::yd#12 ← atan2_16::yd#3
Coalesced [233] atan2_16::xd#12 ← atan2_16::xd#3
Coalesced [237] atan2_16::shift#6 ← atan2_16::shift#1
Coalesced [238] atan2_16::xd#11 ← atan2_16::xd#1
Coalesced [239] atan2_16::yd#11 ← atan2_16::yd#1
Not coalescing [240] atan2_16::xi#13 ← atan2_16::x#0
Not coalescing [241] atan2_16::yi#16 ← atan2_16::y#0
Coalesced [245] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0
Coalesced [246] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0
Coalesced [251] init_dist_screen::yd#2 ← init_dist_screen::$5
Coalesced [254] sqr::val#4 ← sqr::val#0
Coalesced [265] init_dist_screen::y#15 ← init_dist_screen::y#1
Coalesced [266] init_dist_screen::screen_topline#16 ← init_dist_screen::screen_topline#1
Coalesced [267] init_dist_screen::screen_bottomline#16 ← init_dist_screen::screen_bottomline#1
Coalesced [271] init_dist_screen::xd#2 ← init_dist_screen::$14
Coalesced [274] sqr::val#3 ← sqr::val#1
Coalesced [289] init_dist_screen::x#9 ← init_dist_screen::x#1
Coalesced [290] init_dist_screen::xb#9 ← init_dist_screen::xb#1
Coalesced [292] init_dist_screen::xd#1 ← init_dist_screen::$16
Coalesced [294] init_dist_screen::yd#1 ← init_dist_screen::$7
Coalesced [304] bsearch16u::items#10 ← bsearch16u::items#1
Coalesced [309] bsearch16u::return#9 ← bsearch16u::$2
Coalesced [311] bsearch16u::return#7 ← bsearch16u::return#2
Coalesced [314] bsearch16u::return#8 ← bsearch16u::items#2
Not coalescing [320] bsearch16u::return#6 ← bsearch16u::pivot#0
Coalesced [324] bsearch16u::num#10 ← bsearch16u::num#1
Coalesced [325] bsearch16u::items#12 ← bsearch16u::items#0
Coalesced [328] bsearch16u::num#9 ← bsearch16u::num#0
Coalesced [329] bsearch16u::items#11 ← bsearch16u::items#8
Coalesced [330] bsearch16u::num#11 ← bsearch16u::num#3
Coalesced (already) [331] bsearch16u::items#13 ← bsearch16u::items#2
Coalesced (already) [336] heap_head#60 ← heap_head#1
Coalesced [340] init_squares::squares#5 ← init_squares::squares#0
Coalesced [350] init_squares::i#4 ← init_squares::i#1
Coalesced [351] init_squares::sqr#4 ← init_squares::sqr#1
Coalesced [352] init_squares::squares#4 ← init_squares::squares#1
Not coalescing [355] heap_head#1 ← malloc::mem#0
Coalesced down to 47 phi equivalence classes
Culled Empty Block (label) @9
Culled Empty Block (label) @17
Culled Empty Block (label) @22
Culled Empty Block (label) @49
Culled Empty Block (label) @56
Culled Empty Block (label) main::@12
Culled Empty Block (label) main::@13
Culled Empty Block (label) main::toD0181_@return
Culled Empty Block (label) main::@14
Culled Empty Block (label) main::toD0182_@return
Culled Empty Block (label) doplasma::@5
Culled Empty Block (label) doplasma::@6
Culled Empty Block (label) memset::@1
Culled Empty Block (label) make_plasma_charset::@24
Culled Empty Block (label) make_plasma_charset::@26
Culled Empty Block (label) make_plasma_charset::@28
Culled Empty Block (label) make_plasma_charset::@5
Culled Empty Block (label) make_plasma_charset::@27
Culled Empty Block (label) print_cls::@1
Culled Empty Block (label) init_angle_screen::@10
Culled Empty Block (label) atan2_16::@35
Culled Empty Block (label) atan2_16::@39
Culled Empty Block (label) atan2_16::@38
Culled Empty Block (label) atan2_16::@34
Culled Empty Block (label) atan2_16::@36
Culled Empty Block (label) atan2_16::@37
Culled Empty Block (label) init_dist_screen::@23
Culled Empty Block (label) bsearch16u::@1
Culled Empty Block (label) bsearch16u::@18
Renumbering block @48 to @1
Renumbering block @53 to @2
Renumbering block @54 to @3
Renumbering block @55 to @4
Renumbering block memset::@2 to memset::@1
Renumbering block memset::@4 to memset::@2
Renumbering block memset::@5 to memset::@3
Renumbering block bsearch16u::@2 to bsearch16u::@1
Renumbering block bsearch16u::@3 to bsearch16u::@2
Renumbering block bsearch16u::@6 to bsearch16u::@3
Renumbering block bsearch16u::@7 to bsearch16u::@4
Renumbering block bsearch16u::@8 to bsearch16u::@5
Renumbering block bsearch16u::@9 to bsearch16u::@6
Renumbering block bsearch16u::@10 to bsearch16u::@7
Renumbering block bsearch16u::@13 to bsearch16u::@8
Renumbering block bsearch16u::@15 to bsearch16u::@9
Renumbering block init_squares::@7 to init_squares::@3
Renumbering block sqrt::@2 to sqrt::@1
Renumbering block atan2_16::@13 to atan2_16::@9
Renumbering block atan2_16::@15 to atan2_16::@10
Renumbering block atan2_16::@16 to atan2_16::@11
Renumbering block atan2_16::@17 to atan2_16::@12
Renumbering block atan2_16::@18 to atan2_16::@13
Renumbering block atan2_16::@19 to atan2_16::@14
Renumbering block atan2_16::@20 to atan2_16::@15
Renumbering block atan2_16::@24 to atan2_16::@16
Renumbering block atan2_16::@25 to atan2_16::@17
Renumbering block atan2_16::@26 to atan2_16::@18
Renumbering block atan2_16::@27 to atan2_16::@19
Renumbering block atan2_16::@30 to atan2_16::@20
Renumbering block atan2_16::@33 to atan2_16::@21
Renumbering block main::@7 to main::@3
Renumbering block main::@8 to main::@4
Renumbering block main::@9 to main::@5
Renumbering block main::@10 to main::@6
Renumbering block main::@11 to main::@7
Renumbering block init_angle_screen::@9 to init_angle_screen::@5
Renumbering block init_dist_screen::@19 to init_dist_screen::@11
Renumbering block init_dist_screen::@20 to init_dist_screen::@12
Renumbering block init_dist_screen::@21 to init_dist_screen::@13
Renumbering block init_dist_screen::@22 to init_dist_screen::@14
Renumbering block make_plasma_charset::@4 to make_plasma_charset::@3
Renumbering block make_plasma_charset::@6 to make_plasma_charset::@4
Renumbering block make_plasma_charset::@7 to make_plasma_charset::@5
Renumbering block make_plasma_charset::@8 to make_plasma_charset::@6
Renumbering block make_plasma_charset::@9 to make_plasma_charset::@7
Renumbering block make_plasma_charset::@10 to make_plasma_charset::@8
Renumbering block make_plasma_charset::@13 to make_plasma_charset::@9
Renumbering block make_plasma_charset::@18 to make_plasma_charset::@10
Renumbering block make_plasma_charset::@19 to make_plasma_charset::@11
Renumbering block make_plasma_charset::@23 to make_plasma_charset::@12
Renumbering block make_plasma_charset::@25 to make_plasma_charset::@13
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 @end
Adding NOP phi() at start of main::@6
Adding NOP phi() at start of main::@7
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::toD0182
Adding NOP phi() at start of make_plasma_charset
Adding NOP phi() at start of make_plasma_charset::@12
Adding NOP phi() at start of make_plasma_charset::@10
Adding NOP phi() at start of make_plasma_charset::@6
Adding NOP phi() at start of print_cls
Adding NOP phi() at start of init_dist_screen
Adding NOP phi() at start of bsearch16u
Adding NOP phi() at start of init_squares

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  [1] phi()
  [2] call malloc 
  to:@3
@3: scope:[]  from @1
  [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0
  [4] call malloc 
  to:@4
@4: scope:[]  from @3
  [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0
  to:@2
@2: scope:[]  from @4
  [6] phi()
  [7] call main 
  to:@end
@end: scope:[]  from @2
  [8] phi()

(void()) main()
main: scope:[main]  from @2
  [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0
  [10] call init_dist_screen 
  to:main::@5
main::@5: scope:[main]  from main
  [11] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0
  [12] call init_angle_screen 
  to:main::@6
main::@6: scope:[main]  from main::@5
  [13] phi()
  [14] call make_plasma_charset 
  to:main::@7
main::@7: scope:[main]  from main::@6
  [15] phi()
  [16] call memset 
  to:main::@1
main::@1: scope:[main]  from main::@4 main::@7
  [17] (byte) sin_offset_y#14 ← phi( main::@7/(byte) 0 main::@4/(byte) sin_offset_y#12 )
  [17] (byte) sin_offset_x#14 ← phi( main::@7/(byte) 0 main::@4/(byte) sin_offset_x#12 )
  to:main::@2
main::@2: scope:[main]  from main::@1
  [18] phi()
  [19] call doplasma 
  to:main::toD0181
main::toD0181: scope:[main]  from main::@2
  [20] phi()
  to:main::@3
main::@3: scope:[main]  from main::toD0181
  [21] *((const byte*) D018) ← (const byte) main::toD0181_return#0
  [22] call doplasma 
  to:main::toD0182
main::toD0182: scope:[main]  from main::@3
  [23] phi()
  to:main::@4
main::@4: scope:[main]  from main::toD0182
  [24] *((const byte*) D018) ← (const byte) main::toD0182_return#0
  to:main::@1

(void()) doplasma((byte*) doplasma::screen)
doplasma: scope:[doplasma]  from main::@2 main::@3
  [25] (byte*) doplasma::screen#6 ← phi( main::@2/(const byte*) SCREEN1 main::@3/(const byte*) SCREEN2 )
  [25] (byte) sin_offset_y#10 ← phi( main::@2/(byte) sin_offset_y#14 main::@3/(byte) sin_offset_y#12 )
  [25] (byte) sin_offset_x#10 ← phi( main::@2/(byte) sin_offset_x#14 main::@3/(byte) sin_offset_x#12 )
  [26] (byte*) doplasma::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0
  [27] (byte*) doplasma::dist#0 ← (byte*)(void*) SCREEN_DIST#0
  [28] (byte*) doplasma::sin_x#0 ← (const byte*) SINTABLE + (byte) sin_offset_x#10
  [29] (byte*) doplasma::sin_y#0 ← (const byte*) SINTABLE + (byte) sin_offset_y#10
  to:doplasma::@1
doplasma::@1: scope:[doplasma]  from doplasma doplasma::@3
  [30] (byte) doplasma::y#4 ← phi( doplasma/(byte) 0 doplasma::@3/(byte) doplasma::y#1 )
  [30] (byte*) doplasma::screen#5 ← phi( doplasma/(byte*) doplasma::screen#6 doplasma::@3/(byte*) doplasma::screen#2 )
  [30] (byte*) doplasma::dist#4 ← phi( doplasma/(byte*) doplasma::dist#0 doplasma::@3/(byte*) doplasma::dist#1 )
  [30] (byte*) doplasma::angle#4 ← phi( doplasma/(byte*) doplasma::angle#0 doplasma::@3/(byte*) doplasma::angle#1 )
  to:doplasma::@2
doplasma::@2: scope:[doplasma]  from doplasma::@1 doplasma::@2
  [31] (byte) doplasma::x#2 ← phi( doplasma::@1/(byte) 0 doplasma::@2/(byte) doplasma::x#1 )
  [32] (byte~) doplasma::$2 ← *((byte*) doplasma::sin_x#0 + *((byte*) doplasma::angle#4 + (byte) doplasma::x#2)) + *((byte*) doplasma::sin_y#0 + *((byte*) doplasma::dist#4 + (byte) doplasma::x#2))
  [33] *((byte*) doplasma::screen#5 + (byte) doplasma::x#2) ← (byte~) doplasma::$2
  [34] (byte) doplasma::x#1 ← ++ (byte) doplasma::x#2
  [35] if((byte) doplasma::x#1!=(byte) $28) goto doplasma::@2
  to:doplasma::@3
doplasma::@3: scope:[doplasma]  from doplasma::@2
  [36] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28
  [37] (byte*) doplasma::angle#1 ← (byte*) doplasma::angle#4 + (byte) $28
  [38] (byte*) doplasma::dist#1 ← (byte*) doplasma::dist#4 + (byte) $28
  [39] (byte) doplasma::y#1 ← ++ (byte) doplasma::y#4
  [40] if((byte) doplasma::y#1!=(byte) $1a) goto doplasma::@1
  to:doplasma::@4
doplasma::@4: scope:[doplasma]  from doplasma::@3
  [41] (byte) sin_offset_x#12 ← (byte) sin_offset_x#10 - (byte) 3
  [42] (byte) sin_offset_y#12 ← (byte) sin_offset_y#10 - (byte) 7
  to:doplasma::@return
doplasma::@return: scope:[doplasma]  from doplasma::@4
  [43] return 
  to:@return

(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
memset: scope:[memset]  from main::@7 print_cls
  [44] (byte) memset::c#4 ← phi( main::@7/(const byte) BLACK print_cls/(byte) ' ' )
  [44] (void*) memset::str#3 ← phi( main::@7/(void*)(const byte*) COLS print_cls/(void*)(const byte*) print_line_cursor#0 )
  to:memset::@1
memset::@1: scope:[memset]  from memset
  [45] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8
  [46] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3
  to:memset::@2
memset::@2: scope:[memset]  from memset::@1 memset::@3
  [47] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 )
  [48] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3
  to:memset::@return
memset::@return: scope:[memset]  from memset::@2
  [49] return 
  to:@return
memset::@3: scope:[memset]  from memset::@2
  [50] *((byte*) memset::dst#2) ← (byte) memset::c#4
  [51] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
  to:memset::@2

(void()) make_plasma_charset((byte*) make_plasma_charset::charset)
make_plasma_charset: scope:[make_plasma_charset]  from main::@6
  [52] phi()
  [53] call sid_rnd_init 
  to:make_plasma_charset::@12
make_plasma_charset::@12: scope:[make_plasma_charset]  from make_plasma_charset
  [54] phi()
  [55] call print_cls 
  to:make_plasma_charset::@1
make_plasma_charset::@1: scope:[make_plasma_charset]  from make_plasma_charset::@11 make_plasma_charset::@12
  [56] (byte*) print_char_cursor#18 ← phi( make_plasma_charset::@11/(byte*) print_char_cursor#30 make_plasma_charset::@12/(const byte*) print_line_cursor#0 )
  [56] (word) make_plasma_charset::c#2 ← phi( make_plasma_charset::@11/(word) make_plasma_charset::c#1 make_plasma_charset::@12/(word) 0 )
  [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2
  to:make_plasma_charset::@return
make_plasma_charset::@return: scope:[make_plasma_charset]  from make_plasma_charset::@1
  [58] return 
  to:@return
make_plasma_charset::@2: scope:[make_plasma_charset]  from make_plasma_charset::@1
  [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2
  [60] (byte) make_plasma_charset::s#0 ← *((const byte*) SINTABLE + (byte~) make_plasma_charset::$3)
  to:make_plasma_charset::@3
make_plasma_charset::@3: scope:[make_plasma_charset]  from make_plasma_charset::@2 make_plasma_charset::@7
  [61] (byte) make_plasma_charset::i#2 ← phi( make_plasma_charset::@2/(byte) 0 make_plasma_charset::@7/(byte) make_plasma_charset::i#1 )
  [62] if((byte) make_plasma_charset::i#2<(byte) 8) goto make_plasma_charset::@5
  to:make_plasma_charset::@4
make_plasma_charset::@4: scope:[make_plasma_charset]  from make_plasma_charset::@3
  [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7
  [64] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@11
  to:make_plasma_charset::@10
make_plasma_charset::@10: scope:[make_plasma_charset]  from make_plasma_charset::@4
  [65] phi()
  [66] call print_char 
  to:make_plasma_charset::@11
make_plasma_charset::@11: scope:[make_plasma_charset]  from make_plasma_charset::@10 make_plasma_charset::@4
  [67] (byte*) print_char_cursor#30 ← phi( make_plasma_charset::@10/(byte*) print_char_cursor#1 make_plasma_charset::@4/(byte*) print_char_cursor#18 )
  [68] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#2
  to:make_plasma_charset::@1
make_plasma_charset::@5: scope:[make_plasma_charset]  from make_plasma_charset::@3 make_plasma_charset::@8
  [69] (byte) make_plasma_charset::b#2 ← phi( make_plasma_charset::@8/(byte) make_plasma_charset::b#6 make_plasma_charset::@3/(byte) 0 )
  [69] (byte) make_plasma_charset::ii#2 ← phi( make_plasma_charset::@8/(byte) make_plasma_charset::ii#1 make_plasma_charset::@3/(byte) 0 )
  [70] if((byte) make_plasma_charset::ii#2<(byte) 8) goto make_plasma_charset::@6
  to:make_plasma_charset::@7
make_plasma_charset::@7: scope:[make_plasma_charset]  from make_plasma_charset::@5
  [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3
  [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2
  [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET + (word~) make_plasma_charset::$11
  [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2
  [75] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#2
  to:make_plasma_charset::@3
make_plasma_charset::@6: scope:[make_plasma_charset]  from make_plasma_charset::@5
  [76] phi()
  [77] call sid_rnd 
  [78] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
  to:make_plasma_charset::@13
make_plasma_charset::@13: scope:[make_plasma_charset]  from make_plasma_charset::@6
  [79] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2
  [80] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff
  [81] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@8
  to:make_plasma_charset::@9
make_plasma_charset::@9: scope:[make_plasma_charset]  from make_plasma_charset::@13
  [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte*) make_plasma_charset::bittab + (byte) make_plasma_charset::ii#2)
  to:make_plasma_charset::@8
make_plasma_charset::@8: scope:[make_plasma_charset]  from make_plasma_charset::@13 make_plasma_charset::@9
  [83] (byte) make_plasma_charset::b#6 ← phi( make_plasma_charset::@9/(byte) make_plasma_charset::b#1 make_plasma_charset::@13/(byte) make_plasma_charset::b#2 )
  [84] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#2
  to:make_plasma_charset::@5

(byte()) sid_rnd()
sid_rnd: scope:[sid_rnd]  from make_plasma_charset::@6
  [85] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC)
  to:sid_rnd::@return
sid_rnd::@return: scope:[sid_rnd]  from sid_rnd
  [86] return 
  to:@return

(void()) print_char((byte) print_char::ch)
print_char: scope:[print_char]  from make_plasma_charset::@10
  [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0
  [88] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18
  to:print_char::@return
print_char::@return: scope:[print_char]  from print_char
  [89] return 
  to:@return

(void()) print_cls()
print_cls: scope:[print_cls]  from make_plasma_charset::@12
  [90] phi()
  [91] call memset 
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls
  [92] return 
  to:@return

(void()) sid_rnd_init()
sid_rnd_init: scope:[sid_rnd_init]  from make_plasma_charset
  [93] *((const word*) SID_VOICE3_FREQ) ← (word) $ffff
  [94] *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE
  to:sid_rnd_init::@return
sid_rnd_init::@return: scope:[sid_rnd_init]  from sid_rnd_init
  [95] return 
  to:@return

(void()) init_angle_screen((byte*) init_angle_screen::screen)
init_angle_screen: scope:[init_angle_screen]  from main::@5
  [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
  [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
  to:init_angle_screen::@1
init_angle_screen::@1: scope:[init_angle_screen]  from init_angle_screen init_angle_screen::@4
  [98] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 )
  [98] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 )
  [98] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 )
  to:init_angle_screen::@2
init_angle_screen::@2: scope:[init_angle_screen]  from init_angle_screen::@1 init_angle_screen::@5
  [99] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 )
  [99] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 )
  [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3
  to:init_angle_screen::@4
init_angle_screen::@4: scope:[init_angle_screen]  from init_angle_screen::@2
  [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28
  [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28
  [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5
  [104] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1
  to:init_angle_screen::@return
init_angle_screen::@return: scope:[init_angle_screen]  from init_angle_screen::@4
  [105] return 
  to:@return
init_angle_screen::@3: scope:[init_angle_screen]  from init_angle_screen::@2
  [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1
  [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3
  [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0
  [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1
  [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0
  [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
  [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
  [113] call atan2_16 
  [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0
  to:init_angle_screen::@5
init_angle_screen::@5: scope:[init_angle_screen]  from init_angle_screen::@3
  [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
  [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80
  [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11
  [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0
  [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0
  [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13
  [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
  [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14
  [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
  [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15
  [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2
  [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2
  to:init_angle_screen::@2

(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
atan2_16: scope:[atan2_16]  from init_angle_screen::@3
  [127] 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
  [128] (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
  [129] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 )
  [130] 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
  [131] (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
  [132] (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
  [133] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 )
  [133] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 )
  [133] (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 )
  [133] (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 )
  [134] 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
  [135] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
  [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1
  [137] 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
  [138] (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
  [139] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
  [140] 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
  [141] (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
  [142] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 )
  to:atan2_16::@return
atan2_16::@return: scope:[atan2_16]  from atan2_16::@8
  [143] return 
  to:@return
atan2_16::@11: scope:[atan2_16]  from atan2_16::@10
  [144] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2
  [145] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3
  [146] (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
  [147] (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 )
  [147] (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 )
  [147] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 )
  [148] 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
  [149] 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
  [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1
  [151] (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
  [152] (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 )
  [152] (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 )
  [153] 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
  [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5
  [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5
  [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1
  [157] (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
  [158] (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 )
  [158] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
  [158] (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 )
  [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2
  [160] if((byte) atan2_16::i#1==(const 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
  [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5
  [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5
  [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1
  [164] (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
  [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2
  [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2
  [167] (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
  [168] (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
  [169] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0
  to:atan2_16::@3

(void()) init_dist_screen((byte*) init_dist_screen::screen)
init_dist_screen: scope:[init_dist_screen]  from main
  [170] phi()
  [171] call init_squares 
  to:init_dist_screen::@11
init_dist_screen::@11: scope:[init_dist_screen]  from init_dist_screen
  [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18
  to:init_dist_screen::@1
init_dist_screen::@1: scope:[init_dist_screen]  from init_dist_screen::@11 init_dist_screen::@7
  [173] (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#1 )
  [173] (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 )
  [173] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@7/(byte) init_dist_screen::y#1 )
  [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1
  [175] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
  to:init_dist_screen::@3
init_dist_screen::@3: scope:[init_dist_screen]  from init_dist_screen::@1
  [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0
  to:init_dist_screen::@4
init_dist_screen::@4: scope:[init_dist_screen]  from init_dist_screen::@2 init_dist_screen::@3
  [177] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 )
  [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
  [179] call sqr 
  [180] (word) sqr::return#2 ← (word) sqr::return#0
  to:init_dist_screen::@12
init_dist_screen::@12: scope:[init_dist_screen]  from init_dist_screen::@4
  [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
  to:init_dist_screen::@5
init_dist_screen::@5: scope:[init_dist_screen]  from init_dist_screen::@12 init_dist_screen::@14
  [182] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 )
  [182] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 )
  [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6
  to:init_dist_screen::@7
init_dist_screen::@7: scope:[init_dist_screen]  from init_dist_screen::@5
  [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28
  [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28
  [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10
  [187] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1
  to:init_dist_screen::@return
init_dist_screen::@return: scope:[init_dist_screen]  from init_dist_screen::@7
  [188] return 
  to:@return
init_dist_screen::@6: scope:[init_dist_screen]  from init_dist_screen::@5
  [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1
  [190] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8
  to:init_dist_screen::@9
init_dist_screen::@9: scope:[init_dist_screen]  from init_dist_screen::@6
  [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0
  to:init_dist_screen::@10
init_dist_screen::@10: scope:[init_dist_screen]  from init_dist_screen::@8 init_dist_screen::@9
  [192] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 )
  [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
  [194] call sqr 
  [195] (word) sqr::return#3 ← (word) sqr::return#0
  to:init_dist_screen::@13
init_dist_screen::@13: scope:[init_dist_screen]  from init_dist_screen::@10
  [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
  [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0
  [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
  [199] call sqrt 
  [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0
  to:init_dist_screen::@14
init_dist_screen::@14: scope:[init_dist_screen]  from init_dist_screen::@13
  [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
  [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
  [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
  [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
  [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
  [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2
  [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2
  to:init_dist_screen::@5
init_dist_screen::@8: scope:[init_dist_screen]  from init_dist_screen::@6
  [208] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27
  to:init_dist_screen::@10
init_dist_screen::@2: scope:[init_dist_screen]  from init_dist_screen::@1
  [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18
  to:init_dist_screen::@4

(byte()) sqrt((word) sqrt::val)
sqrt: scope:[sqrt]  from init_dist_screen::@13
  [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0
  [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1
  [212] call bsearch16u 
  [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
  to:sqrt::@1
sqrt::@1: scope:[sqrt]  from sqrt
  [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
  [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1
  [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1
  [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1
  to:sqrt::@return
sqrt::@return: scope:[sqrt]  from sqrt::@1
  [218] return 
  to:@return

(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
bsearch16u: scope:[bsearch16u]  from sqrt
  [219] phi()
  to:bsearch16u::@3
bsearch16u::@3: scope:[bsearch16u]  from bsearch16u bsearch16u::@7
  [220] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 )
  [220] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 )
  [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4
  to:bsearch16u::@5
bsearch16u::@5: scope:[bsearch16u]  from bsearch16u::@3
  [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2
  to:bsearch16u::@1
bsearch16u::@1: scope:[bsearch16u]  from bsearch16u::@5
  [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD
  to:bsearch16u::@2
bsearch16u::@2: scope:[bsearch16u]  from bsearch16u::@1 bsearch16u::@5
  [224] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 )
  to:bsearch16u::@return
bsearch16u::@return: scope:[bsearch16u]  from bsearch16u::@2 bsearch16u::@8
  [225] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 )
  [226] return 
  to:@return
bsearch16u::@4: scope:[bsearch16u]  from bsearch16u::@3
  [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1
  [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1
  [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16
  [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0)
  [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6
  to:bsearch16u::@8
bsearch16u::@8: scope:[bsearch16u]  from bsearch16u::@4
  [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0
  to:bsearch16u::@return
bsearch16u::@6: scope:[bsearch16u]  from bsearch16u::@4
  [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7
  to:bsearch16u::@9
bsearch16u::@9: scope:[bsearch16u]  from bsearch16u::@6
  [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD
  [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3
  to:bsearch16u::@7
bsearch16u::@7: scope:[bsearch16u]  from bsearch16u::@6 bsearch16u::@9
  [236] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 )
  [236] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 )
  [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1
  to:bsearch16u::@3

(word()) sqr((byte) sqr::val)
sqr: scope:[sqr]  from init_dist_screen::@10 init_dist_screen::@4
  [238] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 )
  [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1
  [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0)
  to:sqr::@return
sqr::@return: scope:[sqr]  from sqr
  [241] return 
  to:@return

(void()) init_squares()
init_squares: scope:[init_squares]  from init_dist_screen
  [242] phi()
  [243] call malloc 
  to:init_squares::@3
init_squares::@3: scope:[init_squares]  from init_squares
  [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
  [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1
  to:init_squares::@1
init_squares::@1: scope:[init_squares]  from init_squares::@2 init_squares::@3
  [246] (word*) init_squares::squares#2 ← phi( init_squares::@2/(word*) init_squares::squares#1 init_squares::@3/(word*) init_squares::squares#0 )
  [246] (word) init_squares::sqr#2 ← phi( init_squares::@2/(word) init_squares::sqr#1 init_squares::@3/(word) 0 )
  [246] (byte) init_squares::i#2 ← phi( init_squares::@2/(byte) init_squares::i#1 init_squares::@3/(byte) 0 )
  [247] if((byte) init_squares::i#2<(const byte) NUM_SQUARES#3) goto init_squares::@2
  to:init_squares::@return
init_squares::@return: scope:[init_squares]  from init_squares::@1
  [248] return 
  to:@return
init_squares::@2: scope:[init_squares]  from init_squares::@1
  [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2
  [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD
  [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1
  [252] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
  [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4
  [254] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2
  to:init_squares::@1

(void*()) malloc((word) malloc::size)
malloc: scope:[malloc]  from @1 @3 init_squares
  [255] (word) malloc::size#3 ← phi( @1/(word) $3e8 @3/(word) $3e8 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD )
  [255] (byte*) heap_head#12 ← phi( @1/(const byte*) HEAP_TOP @3/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 )
  [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3
  [257] (byte*) heap_head#1 ← (byte*) malloc::mem#0
  to:malloc::@return
malloc::@return: scope:[malloc]  from malloc
  [258] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(byte) NUM_SQUARES
(byte*) SCREEN_ANGLE
(void*) SCREEN_ANGLE#0 0.05405405405405406
(byte*) SCREEN_DIST
(void*) SCREEN_DIST#0 0.05128205128205128
(word*) SQUARES
(void*) SQUARES#1 0.03225806451612903
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(signed word~) atan2_16::$2 4.0
(byte~) atan2_16::$22 2002.0
(byte~) atan2_16::$23 2002.0
(signed word~) atan2_16::$7 4.0
(word) atan2_16::angle
(word) atan2_16::angle#1 3.0
(word) atan2_16::angle#11 4.0
(word) atan2_16::angle#12 190.66666666666666
(word) atan2_16::angle#13 1334.6666666666667
(word) atan2_16::angle#2 2002.0
(word) atan2_16::angle#3 2002.0
(word) atan2_16::angle#4 4.0
(word) atan2_16::angle#5 4.0
(word) atan2_16::angle#6 2004.0
(byte) atan2_16::i
(byte) atan2_16::i#1 1501.5
(byte) atan2_16::i#2 208.54166666666669
(word) atan2_16::return
(word) atan2_16::return#0 34.99999999999999
(word) atan2_16::return#2 202.0
(byte) atan2_16::shift
(byte) atan2_16::shift#1 20002.0
(byte) atan2_16::shift#2 8001.25
(byte) atan2_16::shift#5 667.3333333333334
(signed word) atan2_16::x
(signed word) atan2_16::x#0 2.8684210526315796
(signed word) atan2_16::xd
(signed word) atan2_16::xd#1 6667.333333333333
(signed word) atan2_16::xd#10 1001.0
(signed word) atan2_16::xd#2 1001.0
(signed word) atan2_16::xd#3 7668.333333333332
(signed word) atan2_16::xd#5 1001.0
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0 6.0
(signed word) atan2_16::xi#1 500.5
(signed word) atan2_16::xi#13 4.0
(signed word) atan2_16::xi#2 500.5
(signed word) atan2_16::xi#3 267.0666666666667
(signed word) atan2_16::xi#8 1001.0
(signed word) atan2_16::y
(signed word) atan2_16::y#0 2.724999999999999
(signed word) atan2_16::yd
(signed word) atan2_16::yd#1 10001.0
(signed word) atan2_16::yd#10 2002.0
(signed word) atan2_16::yd#2 2002.0
(signed word) atan2_16::yd#3 4601.0
(signed word) atan2_16::yd#5 2002.0
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0 1.2000000000000002
(signed word) atan2_16::yi#1 667.3333333333334
(signed word) atan2_16::yi#16 4.0
(signed word) atan2_16::yi#2 667.3333333333334
(signed word) atan2_16::yi#3 353.4117647058823
(signed word) atan2_16::yi#8 1001.0
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
(byte~) bsearch16u::$16 2002.0
(word*~) bsearch16u::$2 4.0
(byte~) bsearch16u::$6 2002.0
(word*) bsearch16u::items
(word*) bsearch16u::items#0 1001.0
(word*) bsearch16u::items#1 2.0
(word*) bsearch16u::items#2 334.5555555555556
(word*) bsearch16u::items#8 1501.5
(word) bsearch16u::key
(word) bsearch16u::key#0 0.26666666666666666
(byte) bsearch16u::num
(byte) bsearch16u::num#0 2002.0
(byte) bsearch16u::num#1 2002.0
(byte) bsearch16u::num#3 556.1111111111111
(byte) bsearch16u::num#5 3003.0
(word*) bsearch16u::pivot
(word*) bsearch16u::pivot#0 501.0
(signed word) bsearch16u::result
(signed word) bsearch16u::result#0 1501.5
(word*) bsearch16u::return
(word*) bsearch16u::return#1 2.0
(word*) bsearch16u::return#2 6.0
(word*) bsearch16u::return#3 4.0
(word*) bsearch16u::return#6 4.0
(void()) doplasma((byte*) doplasma::screen)
(byte~) doplasma::$2 2002.0
(byte*) doplasma::angle
(byte*) doplasma::angle#0 1.0
(byte*) doplasma::angle#1 50.5
(byte*) doplasma::angle#4 172.14285714285714
(byte*) doplasma::dist
(byte*) doplasma::dist#0 1.3333333333333333
(byte*) doplasma::dist#1 67.33333333333333
(byte*) doplasma::dist#4 150.625
(byte*) doplasma::screen
(byte*) doplasma::screen#2 40.4
(byte*) doplasma::screen#5 200.83333333333334
(byte*) doplasma::screen#6 0.4
(byte*) doplasma::sin_x
(byte*) doplasma::sin_x#0 77.15384615384616
(byte*) doplasma::sin_y
(byte*) doplasma::sin_y#0 83.58333333333334
(byte) doplasma::x
(byte) doplasma::x#1 1501.5
(byte) doplasma::x#2 1668.3333333333335
(byte) doplasma::y
(byte) doplasma::y#1 151.5
(byte) doplasma::y#4 22.444444444444443
(byte*) heap_head
(byte*) heap_head#1 0.6000000000000001
(byte*) heap_head#12 6.0
(void()) init_angle_screen((byte*) init_angle_screen::screen)
(word~) init_angle_screen::$11 202.0
(byte~) init_angle_screen::$13 202.0
(byte~) init_angle_screen::$14 202.0
(byte~) init_angle_screen::$15 202.0
(byte~) init_angle_screen::$3 202.0
(byte~) init_angle_screen::$4 202.0
(byte~) init_angle_screen::$7 202.0
(byte) init_angle_screen::ang_w
(byte) init_angle_screen::ang_w#0 84.16666666666666
(word) init_angle_screen::angle_w
(word) init_angle_screen::angle_w#0 202.0
(byte*) init_angle_screen::screen
(byte*) init_angle_screen::screen#0 3.0
(byte*) init_angle_screen::screen_bottomline
(byte*) init_angle_screen::screen_bottomline#0 4.0
(byte*) init_angle_screen::screen_bottomline#1 7.333333333333333
(byte*) init_angle_screen::screen_bottomline#6 9.04
(byte*) init_angle_screen::screen_topline
(byte*) init_angle_screen::screen_topline#0 2.0
(byte*) init_angle_screen::screen_topline#1 5.5
(byte*) init_angle_screen::screen_topline#6 9.416666666666666
(byte) init_angle_screen::x
(byte) init_angle_screen::x#1 101.0
(byte) init_angle_screen::x#2 28.857142857142858
(byte) init_angle_screen::xb
(byte) init_angle_screen::xb#1 202.0
(byte) init_angle_screen::xb#2 18.363636363636363
(signed word) init_angle_screen::xw
(word) init_angle_screen::xw#0 33.666666666666664
(byte) init_angle_screen::y
(byte) init_angle_screen::y#1 16.5
(byte) init_angle_screen::y#5 4.730769230769231
(signed word) init_angle_screen::yw
(word) init_angle_screen::yw#0 50.5
(void()) init_dist_screen((byte*) init_dist_screen::screen)
(byte~) init_dist_screen::$14 202.0
(byte~) init_dist_screen::$16 202.0
(byte~) init_dist_screen::$5 22.0
(byte~) init_dist_screen::$7 22.0
(byte) init_dist_screen::d
(byte) init_dist_screen::d#0 126.25
(word) init_dist_screen::ds
(word) init_dist_screen::ds#0 202.0
(byte*) init_dist_screen::screen
(byte*) init_dist_screen::screen#0 1.5
(byte*) init_dist_screen::screen_bottomline
(byte*) init_dist_screen::screen_bottomline#0 4.0
(byte*) init_dist_screen::screen_bottomline#1 7.333333333333333
(byte*) init_dist_screen::screen_bottomline#11 6.848484848484849
(byte*) init_dist_screen::screen_topline
(byte*) init_dist_screen::screen_topline#1 5.5
(byte*) init_dist_screen::screen_topline#11 7.0625
(byte) init_dist_screen::x
(byte) init_dist_screen::x#1 101.0
(byte) init_dist_screen::x#2 30.3
(byte) init_dist_screen::x2
(byte) init_dist_screen::x2#0 202.0
(byte) init_dist_screen::xb
(byte) init_dist_screen::xb#1 202.0
(byte) init_dist_screen::xb#2 19.238095238095237
(byte) init_dist_screen::xd
(byte) init_dist_screen::xd#0 303.0
(word) init_dist_screen::xds
(word) init_dist_screen::xds#0 202.0
(byte) init_dist_screen::y
(byte) init_dist_screen::y#1 16.5
(byte) init_dist_screen::y#10 0.9705882352941178
(byte) init_dist_screen::y2
(byte) init_dist_screen::y2#0 22.0
(byte) init_dist_screen::yd
(byte) init_dist_screen::yd#0 33.0
(word) init_dist_screen::yds
(word) init_dist_screen::yds#0 4.869565217391305
(void()) init_squares()
(byte~) init_squares::$3 22.0
(byte~) init_squares::$4 22.0
(byte) init_squares::i
(byte) init_squares::i#1 22.0
(byte) init_squares::i#2 6.285714285714286
(word) init_squares::sqr
(word) init_squares::sqr#1 11.0
(word) init_squares::sqr#2 5.5
(word*) init_squares::squares
(word*) init_squares::squares#0 4.0
(word*) init_squares::squares#1 4.4
(word*) init_squares::squares#2 11.666666666666666
(void()) main()
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(byte*) main::toD0181_screen
(byte*) main::toD0182_gfx
(byte) main::toD0182_return
(byte*) main::toD0182_screen
(void()) make_plasma_charset((byte*) make_plasma_charset::charset)
(word~) make_plasma_charset::$10 202.0
(word~) make_plasma_charset::$11 202.0
(byte~) make_plasma_charset::$12 22.0
(byte*~) make_plasma_charset::$16 202.0
(byte~) make_plasma_charset::$3 22.0
(byte~) make_plasma_charset::$6 2002.0
(byte~) make_plasma_charset::$7 2002.0
(byte) make_plasma_charset::b
(byte) make_plasma_charset::b#1 2002.0
(byte) make_plasma_charset::b#2 282.1818181818182
(byte) make_plasma_charset::b#6 1501.5
(word) make_plasma_charset::c
(word) make_plasma_charset::c#1 22.0
(word) make_plasma_charset::c#2 5.777777777777778
(byte*) make_plasma_charset::charset
(byte) make_plasma_charset::i
(byte) make_plasma_charset::i#1 202.0
(byte) make_plasma_charset::i#2 23.764705882352942
(byte) make_plasma_charset::ii
(byte) make_plasma_charset::ii#1 2002.0
(byte) make_plasma_charset::ii#2 400.4
(byte) make_plasma_charset::s
(byte) make_plasma_charset::s#0 53.26315789473684
(void*()) malloc((word) malloc::size)
(byte*) malloc::mem
(byte*) malloc::mem#0 0.6666666666666666
(void*) malloc::return
(word) malloc::size
(word) malloc::size#3 2.0
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(byte) memset::c
(byte) memset::c#4 1.5714285714285714
(byte*) memset::dst
(byte*) memset::dst#1 22.0
(byte*) memset::dst#2 15.333333333333332
(byte*) memset::dst#4 4.0
(byte*) memset::end
(byte*) memset::end#0 2.1666666666666665
(word) memset::num
(void*) memset::return
(void*) memset::str
(void*) memset::str#3
(void()) print_char((byte) print_char::ch)
(byte) print_char::ch
(byte*) print_char_cursor
(byte*) print_char_cursor#1 4.333333333333333
(byte*) print_char_cursor#18 1.0
(byte*) print_char_cursor#30 16.5
(void()) print_cls()
(byte*) print_line_cursor
(byte*) print_screen
(byte()) sid_rnd()
(byte) sid_rnd::return
(byte) sid_rnd::return#0 334.33333333333337
(byte) sid_rnd::return#2 2002.0
(void()) sid_rnd_init()
(byte) sin_offset_x
(byte) sin_offset_x#10 1.625
(byte) sin_offset_x#12 2.666666666666667
(byte) sin_offset_x#14 11.0
(byte) sin_offset_y
(byte) sin_offset_y#10 1.5294117647058825
(byte) sin_offset_y#12 3.0
(byte) sin_offset_y#14 11.0
(word()) sqr((byte) sqr::val)
(byte~) sqr::$0 4.0
(word) sqr::return
(word) sqr::return#0 28.5
(word) sqr::return#2 22.0
(word) sqr::return#3 202.0
(byte) sqr::val
(byte) sqr::val#0 22.0
(byte) sqr::val#1 202.0
(byte) sqr::val#2 114.0
(byte()) sqrt((word) sqrt::val)
(word~) sqrt::$1 2.0
(word~) sqrt::$3 4.0
(word*) sqrt::found
(word*) sqrt::found#0 4.0
(byte) sqrt::return
(byte) sqrt::return#0 34.33333333333333
(byte) sqrt::return#2 202.0
(byte) sqrt::sq
(word) sqrt::val
(word) sqrt::val#0 103.0

Initial phi equivalence classes
[ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ]
[ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ]
[ doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ]
[ doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ]
[ doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ]
[ doplasma::y#4 doplasma::y#1 ]
[ doplasma::x#2 doplasma::x#1 ]
[ memset::str#3 ]
[ memset::c#4 ]
[ memset::dst#2 memset::dst#4 memset::dst#1 ]
[ make_plasma_charset::c#2 make_plasma_charset::c#1 ]
[ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ]
[ make_plasma_charset::i#2 make_plasma_charset::i#1 ]
[ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ]
[ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ]
[ init_angle_screen::y#5 init_angle_screen::y#1 ]
[ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
[ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
[ init_angle_screen::x#2 init_angle_screen::x#1 ]
[ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
[ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
[ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
[ atan2_16::i#2 atan2_16::i#1 ]
[ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
[ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ]
[ 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_dist_screen::y#10 init_dist_screen::y#1 ]
[ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ]
[ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ]
[ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
[ init_dist_screen::x#2 init_dist_screen::x#1 ]
[ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
[ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ]
[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
[ sqr::val#2 sqr::val#1 sqr::val#0 ]
[ init_squares::i#2 init_squares::i#1 ]
[ init_squares::sqr#2 init_squares::sqr#1 ]
[ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
[ heap_head#12 heap_head#1 ]
[ malloc::size#3 ]
Added variable SCREEN_DIST#0 to live range equivalence class [ SCREEN_DIST#0 ]
Added variable SCREEN_ANGLE#0 to live range equivalence class [ SCREEN_ANGLE#0 ]
Added variable init_angle_screen::screen#0 to live range equivalence class [ init_angle_screen::screen#0 ]
Added variable doplasma::sin_x#0 to live range equivalence class [ doplasma::sin_x#0 ]
Added variable doplasma::sin_y#0 to live range equivalence class [ doplasma::sin_y#0 ]
Added variable doplasma::$2 to live range equivalence class [ doplasma::$2 ]
Added variable memset::end#0 to live range equivalence class [ memset::end#0 ]
Added variable make_plasma_charset::$3 to live range equivalence class [ make_plasma_charset::$3 ]
Added variable make_plasma_charset::s#0 to live range equivalence class [ make_plasma_charset::s#0 ]
Added variable make_plasma_charset::$12 to live range equivalence class [ make_plasma_charset::$12 ]
Added variable make_plasma_charset::$10 to live range equivalence class [ make_plasma_charset::$10 ]
Added variable make_plasma_charset::$11 to live range equivalence class [ make_plasma_charset::$11 ]
Added variable make_plasma_charset::$16 to live range equivalence class [ make_plasma_charset::$16 ]
Added variable sid_rnd::return#2 to live range equivalence class [ sid_rnd::return#2 ]
Added variable make_plasma_charset::$6 to live range equivalence class [ make_plasma_charset::$6 ]
Added variable make_plasma_charset::$7 to live range equivalence class [ make_plasma_charset::$7 ]
Added variable sid_rnd::return#0 to live range equivalence class [ sid_rnd::return#0 ]
Added variable init_angle_screen::$3 to live range equivalence class [ init_angle_screen::$3 ]
Added variable init_angle_screen::$4 to live range equivalence class [ init_angle_screen::$4 ]
Added variable init_angle_screen::xw#0 to live range equivalence class [ init_angle_screen::xw#0 ]
Added variable init_angle_screen::$7 to live range equivalence class [ init_angle_screen::$7 ]
Added variable init_angle_screen::yw#0 to live range equivalence class [ init_angle_screen::yw#0 ]
Added variable atan2_16::x#0 to live range equivalence class [ atan2_16::x#0 ]
Added variable atan2_16::y#0 to live range equivalence class [ atan2_16::y#0 ]
Added variable atan2_16::return#2 to live range equivalence class [ atan2_16::return#2 ]
Added variable init_angle_screen::angle_w#0 to live range equivalence class [ init_angle_screen::angle_w#0 ]
Added variable init_angle_screen::$11 to live range equivalence class [ init_angle_screen::$11 ]
Added variable init_angle_screen::ang_w#0 to live range equivalence class [ init_angle_screen::ang_w#0 ]
Added variable init_angle_screen::$13 to live range equivalence class [ init_angle_screen::$13 ]
Added variable init_angle_screen::$14 to live range equivalence class [ init_angle_screen::$14 ]
Added variable init_angle_screen::$15 to live range equivalence class [ init_angle_screen::$15 ]
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_dist_screen::y2#0 to live range equivalence class [ init_dist_screen::y2#0 ]
Added variable sqr::return#2 to live range equivalence class [ sqr::return#2 ]
Added variable init_dist_screen::yds#0 to live range equivalence class [ init_dist_screen::yds#0 ]
Added variable init_dist_screen::x2#0 to live range equivalence class [ init_dist_screen::x2#0 ]
Added variable sqr::return#3 to live range equivalence class [ sqr::return#3 ]
Added variable init_dist_screen::xds#0 to live range equivalence class [ init_dist_screen::xds#0 ]
Added variable init_dist_screen::ds#0 to live range equivalence class [ init_dist_screen::ds#0 ]
Added variable sqrt::val#0 to live range equivalence class [ sqrt::val#0 ]
Added variable sqrt::return#2 to live range equivalence class [ sqrt::return#2 ]
Added variable init_dist_screen::d#0 to live range equivalence class [ init_dist_screen::d#0 ]
Added variable bsearch16u::key#0 to live range equivalence class [ bsearch16u::key#0 ]
Added variable bsearch16u::return#3 to live range equivalence class [ bsearch16u::return#3 ]
Added variable sqrt::found#0 to live range equivalence class [ sqrt::found#0 ]
Added variable sqrt::$3 to live range equivalence class [ sqrt::$3 ]
Added variable sqrt::$1 to live range equivalence class [ sqrt::$1 ]
Added variable sqrt::return#0 to live range equivalence class [ sqrt::return#0 ]
Added variable bsearch16u::$6 to live range equivalence class [ bsearch16u::$6 ]
Added variable bsearch16u::$16 to live range equivalence class [ bsearch16u::$16 ]
Added variable bsearch16u::pivot#0 to live range equivalence class [ bsearch16u::pivot#0 ]
Added variable bsearch16u::result#0 to live range equivalence class [ bsearch16u::result#0 ]
Added variable sqr::$0 to live range equivalence class [ sqr::$0 ]
Added variable sqr::return#0 to live range equivalence class [ sqr::return#0 ]
Added variable SQUARES#1 to live range equivalence class [ SQUARES#1 ]
Added variable init_squares::$3 to live range equivalence class [ init_squares::$3 ]
Added variable init_squares::$4 to live range equivalence class [ init_squares::$4 ]
Added variable malloc::mem#0 to live range equivalence class [ malloc::mem#0 ]
Complete equivalence classes
[ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ]
[ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ]
[ doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ]
[ doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ]
[ doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ]
[ doplasma::y#4 doplasma::y#1 ]
[ doplasma::x#2 doplasma::x#1 ]
[ memset::str#3 ]
[ memset::c#4 ]
[ memset::dst#2 memset::dst#4 memset::dst#1 ]
[ make_plasma_charset::c#2 make_plasma_charset::c#1 ]
[ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ]
[ make_plasma_charset::i#2 make_plasma_charset::i#1 ]
[ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ]
[ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ]
[ init_angle_screen::y#5 init_angle_screen::y#1 ]
[ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
[ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
[ init_angle_screen::x#2 init_angle_screen::x#1 ]
[ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
[ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
[ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
[ atan2_16::i#2 atan2_16::i#1 ]
[ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
[ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ]
[ 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_dist_screen::y#10 init_dist_screen::y#1 ]
[ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ]
[ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ]
[ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
[ init_dist_screen::x#2 init_dist_screen::x#1 ]
[ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
[ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ]
[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
[ sqr::val#2 sqr::val#1 sqr::val#0 ]
[ init_squares::i#2 init_squares::i#1 ]
[ init_squares::sqr#2 init_squares::sqr#1 ]
[ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
[ heap_head#12 heap_head#1 ]
[ malloc::size#3 ]
[ SCREEN_DIST#0 ]
[ SCREEN_ANGLE#0 ]
[ init_angle_screen::screen#0 ]
[ doplasma::sin_x#0 ]
[ doplasma::sin_y#0 ]
[ doplasma::$2 ]
[ memset::end#0 ]
[ make_plasma_charset::$3 ]
[ make_plasma_charset::s#0 ]
[ make_plasma_charset::$12 ]
[ make_plasma_charset::$10 ]
[ make_plasma_charset::$11 ]
[ make_plasma_charset::$16 ]
[ sid_rnd::return#2 ]
[ make_plasma_charset::$6 ]
[ make_plasma_charset::$7 ]
[ sid_rnd::return#0 ]
[ init_angle_screen::$3 ]
[ init_angle_screen::$4 ]
[ init_angle_screen::xw#0 ]
[ init_angle_screen::$7 ]
[ init_angle_screen::yw#0 ]
[ atan2_16::x#0 ]
[ atan2_16::y#0 ]
[ atan2_16::return#2 ]
[ init_angle_screen::angle_w#0 ]
[ init_angle_screen::$11 ]
[ init_angle_screen::ang_w#0 ]
[ init_angle_screen::$13 ]
[ init_angle_screen::$14 ]
[ init_angle_screen::$15 ]
[ atan2_16::$23 ]
[ atan2_16::$22 ]
[ init_dist_screen::y2#0 ]
[ sqr::return#2 ]
[ init_dist_screen::yds#0 ]
[ init_dist_screen::x2#0 ]
[ sqr::return#3 ]
[ init_dist_screen::xds#0 ]
[ init_dist_screen::ds#0 ]
[ sqrt::val#0 ]
[ sqrt::return#2 ]
[ init_dist_screen::d#0 ]
[ bsearch16u::key#0 ]
[ bsearch16u::return#3 ]
[ sqrt::found#0 ]
[ sqrt::$3 ]
[ sqrt::$1 ]
[ sqrt::return#0 ]
[ bsearch16u::$6 ]
[ bsearch16u::$16 ]
[ bsearch16u::pivot#0 ]
[ bsearch16u::result#0 ]
[ sqr::$0 ]
[ sqr::return#0 ]
[ SQUARES#1 ]
[ init_squares::$3 ]
[ init_squares::$4 ]
[ malloc::mem#0 ]
Allocated zp[1]:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ]
Allocated zp[1]:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ]
Allocated zp[2]:4 [ doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ]
Allocated zp[2]:6 [ doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ]
Allocated zp[2]:8 [ doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ]
Allocated zp[1]:10 [ doplasma::y#4 doplasma::y#1 ]
Allocated zp[1]:11 [ doplasma::x#2 doplasma::x#1 ]
Allocated zp[2]:12 [ memset::str#3 ]
Allocated zp[1]:14 [ memset::c#4 ]
Allocated zp[2]:15 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated zp[2]:17 [ make_plasma_charset::c#2 make_plasma_charset::c#1 ]
Allocated zp[2]:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ]
Allocated zp[1]:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ]
Allocated zp[1]:22 [ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ]
Allocated zp[1]:23 [ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ]
Allocated zp[1]:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Allocated zp[2]:25 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
Allocated zp[2]:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
Allocated zp[1]:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Allocated zp[1]:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Allocated zp[2]:31 [ 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]:33 [ 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]:35 [ atan2_16::i#2 atan2_16::i#1 ]
Allocated zp[2]:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
Allocated zp[2]:38 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ]
Allocated zp[1]:40 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Allocated zp[2]:41 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated zp[2]:43 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated zp[1]:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Allocated zp[2]:46 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ]
Allocated zp[2]:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ]
Allocated zp[1]:50 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
Allocated zp[1]:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Allocated zp[1]:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Allocated zp[1]:53 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
Allocated zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ]
Allocated zp[1]:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
Allocated zp[1]:57 [ sqr::val#2 sqr::val#1 sqr::val#0 ]
Allocated zp[1]:58 [ init_squares::i#2 init_squares::i#1 ]
Allocated zp[2]:59 [ init_squares::sqr#2 init_squares::sqr#1 ]
Allocated zp[2]:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
Allocated zp[2]:63 [ heap_head#12 heap_head#1 ]
Allocated zp[2]:65 [ malloc::size#3 ]
Allocated zp[2]:67 [ SCREEN_DIST#0 ]
Allocated zp[2]:69 [ SCREEN_ANGLE#0 ]
Allocated zp[2]:71 [ init_angle_screen::screen#0 ]
Allocated zp[2]:73 [ doplasma::sin_x#0 ]
Allocated zp[2]:75 [ doplasma::sin_y#0 ]
Allocated zp[1]:77 [ doplasma::$2 ]
Allocated zp[2]:78 [ memset::end#0 ]
Allocated zp[1]:80 [ make_plasma_charset::$3 ]
Allocated zp[1]:81 [ make_plasma_charset::s#0 ]
Allocated zp[1]:82 [ make_plasma_charset::$12 ]
Allocated zp[2]:83 [ make_plasma_charset::$10 ]
Allocated zp[2]:85 [ make_plasma_charset::$11 ]
Allocated zp[2]:87 [ make_plasma_charset::$16 ]
Allocated zp[1]:89 [ sid_rnd::return#2 ]
Allocated zp[1]:90 [ make_plasma_charset::$6 ]
Allocated zp[1]:91 [ make_plasma_charset::$7 ]
Allocated zp[1]:92 [ sid_rnd::return#0 ]
Allocated zp[1]:93 [ init_angle_screen::$3 ]
Allocated zp[1]:94 [ init_angle_screen::$4 ]
Allocated zp[2]:95 [ init_angle_screen::xw#0 ]
Allocated zp[1]:97 [ init_angle_screen::$7 ]
Allocated zp[2]:98 [ init_angle_screen::yw#0 ]
Allocated zp[2]:100 [ atan2_16::x#0 ]
Allocated zp[2]:102 [ atan2_16::y#0 ]
Allocated zp[2]:104 [ atan2_16::return#2 ]
Allocated zp[2]:106 [ init_angle_screen::angle_w#0 ]
Allocated zp[2]:108 [ init_angle_screen::$11 ]
Allocated zp[1]:110 [ init_angle_screen::ang_w#0 ]
Allocated zp[1]:111 [ init_angle_screen::$13 ]
Allocated zp[1]:112 [ init_angle_screen::$14 ]
Allocated zp[1]:113 [ init_angle_screen::$15 ]
Allocated zp[1]:114 [ atan2_16::$23 ]
Allocated zp[1]:115 [ atan2_16::$22 ]
Allocated zp[1]:116 [ init_dist_screen::y2#0 ]
Allocated zp[2]:117 [ sqr::return#2 ]
Allocated zp[2]:119 [ init_dist_screen::yds#0 ]
Allocated zp[1]:121 [ init_dist_screen::x2#0 ]
Allocated zp[2]:122 [ sqr::return#3 ]
Allocated zp[2]:124 [ init_dist_screen::xds#0 ]
Allocated zp[2]:126 [ init_dist_screen::ds#0 ]
Allocated zp[2]:128 [ sqrt::val#0 ]
Allocated zp[1]:130 [ sqrt::return#2 ]
Allocated zp[1]:131 [ init_dist_screen::d#0 ]
Allocated zp[2]:132 [ bsearch16u::key#0 ]
Allocated zp[2]:134 [ bsearch16u::return#3 ]
Allocated zp[2]:136 [ sqrt::found#0 ]
Allocated zp[2]:138 [ sqrt::$3 ]
Allocated zp[2]:140 [ sqrt::$1 ]
Allocated zp[1]:142 [ sqrt::return#0 ]
Allocated zp[1]:143 [ bsearch16u::$6 ]
Allocated zp[1]:144 [ bsearch16u::$16 ]
Allocated zp[2]:145 [ bsearch16u::pivot#0 ]
Allocated zp[2]:147 [ bsearch16u::result#0 ]
Allocated zp[1]:149 [ sqr::$0 ]
Allocated zp[2]:150 [ sqr::return#0 ]
Allocated zp[2]:152 [ SQUARES#1 ]
Allocated zp[1]:154 [ init_squares::$3 ]
Allocated zp[1]:155 [ init_squares::$4 ]
Allocated zp[2]:156 [ malloc::mem#0 ]

INITIAL ASM
Target platform is c64basic / MOS6502X
  // File Comments
// Plasma based on the distance/angle to the screen center
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(__bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .label D018 = $d018
  // Color Ram
  .label COLS = $d800
  // The colors of the C64
  .const BLACK = 0
  .const SIZEOF_WORD = 2
  // The number of iterations performed during 16-bit CORDIC atan2 calculation
  .const CORDIC_ITERATIONS_16 = $f
  // SID registers for random number generation
  .label SID_VOICE3_FREQ = $d40e
  .label SID_VOICE3_CONTROL = $d412
  .const SID_CONTROL_NOISE = $80
  .label SID_VOICE3_OSC = $d41b
  // Plasma charset
  .label CHARSET = $2000
  // Plasma screen 1
  .label SCREEN1 = $2800
  // Plasma screen 2
  .label SCREEN2 = $2c00
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  .label print_line_cursor = $400
  // The number of squares to pre-calculate. Limits what values sqr() can calculate and the result of sqrt()
  .const NUM_SQUARES = $30
  // Head of the heap. Moved backward each malloc()
  .label heap_head = $3f
  // Squares for each byte value SQUARES[i] = i*i
  // Initialized by init_squares()
  .label SQUARES = $98
  .label print_char_cursor = $13
  .label SCREEN_DIST = $43
  .label SCREEN_ANGLE = $45
  // Offsets for the sines
  .label sin_offset_x = 2
  .label sin_offset_y = 3
  // @begin
__bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
__b1_from___bbegin:
  jmp __b1
  // @1
__b1:
  // [2] call malloc 
  // [255] phi from @1 to malloc [phi:@1->malloc]
malloc_from___b1:
  // [255] phi (word) malloc::size#3 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [255] phi (byte*) heap_head#12 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 
  lda #<HEAP_TOP
  sta.z heap_head
  lda #>HEAP_TOP
  sta.z heap_head+1
  jsr malloc
  jmp __b3
  // @3
__b3:
  // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_DIST
  lda.z malloc.mem+1
  sta.z SCREEN_DIST+1
  // [4] call malloc 
  // [255] phi from @3 to malloc [phi:@3->malloc]
malloc_from___b3:
  // [255] phi (word) malloc::size#3 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [255] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy 
  jsr malloc
  jmp __b4
  // @4
__b4:
  // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_ANGLE
  lda.z malloc.mem+1
  sta.z SCREEN_ANGLE+1
  // [6] phi from @4 to @2 [phi:@4->@2]
__b2_from___b4:
  jmp __b2
  // @2
__b2:
  // [7] call main 
  jsr main
  // [8] phi from @2 to @end [phi:@2->@end]
__bend_from___b2:
  jmp __bend
  // @end
__bend:
  // main
main: {
    .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f
    .const toD0182_return = (>(SCREEN2&$3fff)*4)|(>CHARSET)/4&$f
    // [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
    lda.z SCREEN_DIST
    sta.z init_dist_screen.screen
    lda.z SCREEN_DIST+1
    sta.z init_dist_screen.screen+1
    // [10] call init_dist_screen 
    // [170] phi from main to init_dist_screen [phi:main->init_dist_screen]
  init_dist_screen_from_main:
    jsr init_dist_screen
    jmp __b5
    // main::@5
  __b5:
    // [11] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 
    lda.z SCREEN_ANGLE
    sta.z init_angle_screen.screen
    lda.z SCREEN_ANGLE+1
    sta.z init_angle_screen.screen+1
    // [12] call init_angle_screen 
    jsr init_angle_screen
    // [13] phi from main::@5 to main::@6 [phi:main::@5->main::@6]
  __b6_from___b5:
    jmp __b6
    // main::@6
  __b6:
    // [14] call make_plasma_charset 
    // [52] phi from main::@6 to make_plasma_charset [phi:main::@6->make_plasma_charset]
  make_plasma_charset_from___b6:
    jsr make_plasma_charset
    // [15] phi from main::@6 to main::@7 [phi:main::@6->main::@7]
  __b7_from___b6:
    jmp __b7
    // main::@7
  __b7:
    // [16] call memset 
    // [44] phi from main::@7 to memset [phi:main::@7->memset]
  memset_from___b7:
    // [44] phi (byte) memset::c#4 = (const byte) BLACK [phi:main::@7->memset#0] -- vbuz1=vbuc1 
    lda #BLACK
    sta.z memset.c
    // [44] phi (void*) memset::str#3 = (void*)(const byte*) COLS [phi:main::@7->memset#1] -- pvoz1=pvoc1 
    lda #<COLS
    sta.z memset.str
    lda #>COLS
    sta.z memset.str+1
    jsr memset
    // [17] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
  __b1_from___b7:
    // [17] phi (byte) sin_offset_y#14 = (byte) 0 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z sin_offset_y
    // [17] phi (byte) sin_offset_x#14 = (byte) 0 [phi:main::@7->main::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z sin_offset_x
    jmp __b1
  // Show double-buffered plasma
    // main::@1
  __b1:
    // [18] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  __b2_from___b1:
    jmp __b2
    // main::@2
  __b2:
    // [19] call doplasma 
    // [25] phi from main::@2 to doplasma [phi:main::@2->doplasma]
  doplasma_from___b2:
    // [25] phi (byte*) doplasma::screen#6 = (const byte*) SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN1
    sta.z doplasma.screen
    lda #>SCREEN1
    sta.z doplasma.screen+1
    // [25] phi (byte) sin_offset_y#10 = (byte) sin_offset_y#14 [phi:main::@2->doplasma#1] -- register_copy 
    // [25] phi (byte) sin_offset_x#10 = (byte) sin_offset_x#14 [phi:main::@2->doplasma#2] -- register_copy 
    jsr doplasma
    // [20] phi from main::@2 to main::toD0181 [phi:main::@2->main::toD0181]
  toD0181_from___b2:
    jmp toD0181
    // main::toD0181
  toD0181:
    jmp __b3
    // main::@3
  __b3:
    // [21] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // [22] call doplasma 
    // [25] phi from main::@3 to doplasma [phi:main::@3->doplasma]
  doplasma_from___b3:
    // [25] phi (byte*) doplasma::screen#6 = (const byte*) SCREEN2 [phi:main::@3->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN2
    sta.z doplasma.screen
    lda #>SCREEN2
    sta.z doplasma.screen+1
    // [25] phi (byte) sin_offset_y#10 = (byte) sin_offset_y#12 [phi:main::@3->doplasma#1] -- register_copy 
    // [25] phi (byte) sin_offset_x#10 = (byte) sin_offset_x#12 [phi:main::@3->doplasma#2] -- register_copy 
    jsr doplasma
    // [23] phi from main::@3 to main::toD0182 [phi:main::@3->main::toD0182]
  toD0182_from___b3:
    jmp toD0182
    // main::toD0182
  toD0182:
    jmp __b4
    // main::@4
  __b4:
    // [24] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0182_return
    sta D018
    // [17] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
  __b1_from___b4:
    // [17] phi (byte) sin_offset_y#14 = (byte) sin_offset_y#12 [phi:main::@4->main::@1#0] -- register_copy 
    // [17] phi (byte) sin_offset_x#14 = (byte) sin_offset_x#12 [phi:main::@4->main::@1#1] -- register_copy 
    jmp __b1
}
  // doplasma
// Render plasma to the passed screen
// doplasma(byte* zp(8) screen)
doplasma: {
    .label __2 = $4d
    .label angle = 4
    .label dist = 6
    .label sin_x = $49
    .label sin_y = $4b
    .label x = $b
    .label screen = 8
    .label y = $a
    // [26] (byte*) doplasma::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 
    lda.z SCREEN_ANGLE
    sta.z angle
    lda.z SCREEN_ANGLE+1
    sta.z angle+1
    // [27] (byte*) doplasma::dist#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
    lda.z SCREEN_DIST
    sta.z dist
    lda.z SCREEN_DIST+1
    sta.z dist+1
    // [28] (byte*) doplasma::sin_x#0 ← (const byte*) SINTABLE + (byte) sin_offset_x#10 -- pbuz1=pbuc1_plus_vbuz2 
    lda.z sin_offset_x
    clc
    adc #<SINTABLE
    sta.z sin_x
    lda #>SINTABLE
    adc #0
    sta.z sin_x+1
    // [29] (byte*) doplasma::sin_y#0 ← (const byte*) SINTABLE + (byte) sin_offset_y#10 -- pbuz1=pbuc1_plus_vbuz2 
    lda.z sin_offset_y
    clc
    adc #<SINTABLE
    sta.z sin_y
    lda #>SINTABLE
    adc #0
    sta.z sin_y+1
    // [30] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
  __b1_from_doplasma:
    // [30] phi (byte) doplasma::y#4 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [30] phi (byte*) doplasma::screen#5 = (byte*) doplasma::screen#6 [phi:doplasma->doplasma::@1#1] -- register_copy 
    // [30] phi (byte*) doplasma::dist#4 = (byte*) doplasma::dist#0 [phi:doplasma->doplasma::@1#2] -- register_copy 
    // [30] phi (byte*) doplasma::angle#4 = (byte*) doplasma::angle#0 [phi:doplasma->doplasma::@1#3] -- register_copy 
    jmp __b1
    // [30] phi from doplasma::@3 to doplasma::@1 [phi:doplasma::@3->doplasma::@1]
  __b1_from___b3:
    // [30] phi (byte) doplasma::y#4 = (byte) doplasma::y#1 [phi:doplasma::@3->doplasma::@1#0] -- register_copy 
    // [30] phi (byte*) doplasma::screen#5 = (byte*) doplasma::screen#2 [phi:doplasma::@3->doplasma::@1#1] -- register_copy 
    // [30] phi (byte*) doplasma::dist#4 = (byte*) doplasma::dist#1 [phi:doplasma::@3->doplasma::@1#2] -- register_copy 
    // [30] phi (byte*) doplasma::angle#4 = (byte*) doplasma::angle#1 [phi:doplasma::@3->doplasma::@1#3] -- register_copy 
    jmp __b1
    // doplasma::@1
  __b1:
    // [31] phi from doplasma::@1 to doplasma::@2 [phi:doplasma::@1->doplasma::@2]
  __b2_from___b1:
    // [31] phi (byte) doplasma::x#2 = (byte) 0 [phi:doplasma::@1->doplasma::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp __b2
    // [31] phi from doplasma::@2 to doplasma::@2 [phi:doplasma::@2->doplasma::@2]
  __b2_from___b2:
    // [31] phi (byte) doplasma::x#2 = (byte) doplasma::x#1 [phi:doplasma::@2->doplasma::@2#0] -- register_copy 
    jmp __b2
    // doplasma::@2
  __b2:
    // [32] (byte~) doplasma::$2 ← *((byte*) doplasma::sin_x#0 + *((byte*) doplasma::angle#4 + (byte) doplasma::x#2)) + *((byte*) doplasma::sin_y#0 + *((byte*) doplasma::dist#4 + (byte) doplasma::x#2)) -- vbuz1=pbuz2_derefidx_(pbuz3_derefidx_vbuz4)_plus_pbuz5_derefidx_(pbuz6_derefidx_vbuz4) 
    ldy.z x
    lda (dist),y
    sta.z $ff
    lda (angle),y
    tay
    lda (sin_x),y
    ldy.z $ff
    clc
    adc (sin_y),y
    sta.z __2
    // [33] *((byte*) doplasma::screen#5 + (byte) doplasma::x#2) ← (byte~) doplasma::$2 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z __2
    ldy.z x
    sta (screen),y
    // [34] (byte) doplasma::x#1 ← ++ (byte) doplasma::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [35] if((byte) doplasma::x#1!=(byte) $28) goto doplasma::@2 -- vbuz1_neq_vbuc1_then_la1 
    lda #$28
    cmp.z x
    bne __b2_from___b2
    jmp __b3
    // doplasma::@3
  __b3:
    // [36] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen
    sta.z screen
    bcc !+
    inc.z screen+1
  !:
    // [37] (byte*) doplasma::angle#1 ← (byte*) doplasma::angle#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z angle
    sta.z angle
    bcc !+
    inc.z angle+1
  !:
    // [38] (byte*) doplasma::dist#1 ← (byte*) doplasma::dist#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z dist
    sta.z dist
    bcc !+
    inc.z dist+1
  !:
    // [39] (byte) doplasma::y#1 ← ++ (byte) doplasma::y#4 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [40] if((byte) doplasma::y#1!=(byte) $1a) goto doplasma::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$1a
    cmp.z y
    bne __b1_from___b3
    jmp __b4
    // doplasma::@4
  __b4:
    // [41] (byte) sin_offset_x#12 ← (byte) sin_offset_x#10 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 
    lax.z sin_offset_x
    axs #3
    stx.z sin_offset_x
    // [42] (byte) sin_offset_y#12 ← (byte) sin_offset_y#10 - (byte) 7 -- vbuz1=vbuz1_minus_vbuc1 
    lax.z sin_offset_y
    axs #7
    stx.z sin_offset_y
    jmp __breturn
    // doplasma::@return
  __breturn:
    // [43] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zp($c) str, byte zp($e) c)
memset: {
    .label end = $4e
    .label dst = $f
    .label str = $c
    .label c = $e
    jmp __b1
    // memset::@1
  __b1:
    // [45] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 -- pbuz1=pbuz2_plus_vwuc1 
    lda.z str
    clc
    adc #<$3e8
    sta.z end
    lda.z str+1
    adc #>$3e8
    sta.z end+1
    // [46] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 
    lda.z str
    sta.z dst
    lda.z str+1
    sta.z dst+1
    // [47] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2]
  __b2_from___b1:
  __b2_from___b3:
    // [47] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy 
    jmp __b2
    // memset::@2
  __b2:
    // [48] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 
    lda.z dst+1
    cmp.z end+1
    bne __b3
    lda.z dst
    cmp.z end
    bne __b3
    jmp __breturn
    // memset::@return
  __breturn:
    // [49] return 
    rts
    // memset::@3
  __b3:
    // [50] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 
    lda.z c
    ldy #0
    sta (dst),y
    // [51] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    jmp __b2_from___b3
}
  // make_plasma_charset
// Make a plasma-friendly charset where the chars are randomly filled
make_plasma_charset: {
    .label __3 = $50
    .label __6 = $5a
    .label __7 = $5b
    .label __10 = $53
    .label __11 = $55
    .label __12 = $52
    .label s = $51
    .label i = $15
    .label ii = $16
    .label b = $17
    .label c = $11
    .label __16 = $57
    // [53] call sid_rnd_init 
    jsr sid_rnd_init
    // [54] phi from make_plasma_charset to make_plasma_charset::@12 [phi:make_plasma_charset->make_plasma_charset::@12]
  __b12_from_make_plasma_charset:
    jmp __b12
    // make_plasma_charset::@12
  __b12:
    // [55] call print_cls 
    // [90] phi from make_plasma_charset::@12 to print_cls [phi:make_plasma_charset::@12->print_cls]
  print_cls_from___b12:
    jsr print_cls
    // [56] phi from make_plasma_charset::@12 to make_plasma_charset::@1 [phi:make_plasma_charset::@12->make_plasma_charset::@1]
  __b1_from___b12:
    // [56] phi (byte*) print_char_cursor#18 = (const byte*) print_line_cursor#0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta.z print_char_cursor
    lda #>print_line_cursor
    sta.z print_char_cursor+1
    // [56] phi (word) make_plasma_charset::c#2 = (word) 0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z c
    lda #>0
    sta.z c+1
    jmp __b1
    // make_plasma_charset::@1
  __b1:
    // [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 -- vwuz1_lt_vwuc1_then_la1 
    lda.z c+1
    cmp #>$100
    bcc __b2
    bne !+
    lda.z c
    cmp #<$100
    bcc __b2
  !:
    jmp __breturn
    // make_plasma_charset::@return
  __breturn:
    // [58] return 
    rts
    // make_plasma_charset::@2
  __b2:
    // [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2 -- vbuz1=_lo_vwuz2 
    lda.z c
    sta.z __3
    // [60] (byte) make_plasma_charset::s#0 ← *((const byte*) SINTABLE + (byte~) make_plasma_charset::$3) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy.z __3
    lda SINTABLE,y
    sta.z s
    // [61] phi from make_plasma_charset::@2 to make_plasma_charset::@3 [phi:make_plasma_charset::@2->make_plasma_charset::@3]
  __b3_from___b2:
    // [61] phi (byte) make_plasma_charset::i#2 = (byte) 0 [phi:make_plasma_charset::@2->make_plasma_charset::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b3
    // make_plasma_charset::@3
  __b3:
    // [62] if((byte) make_plasma_charset::i#2<(byte) 8) goto make_plasma_charset::@5 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #8
    bcc __b5_from___b3
    jmp __b4
    // make_plasma_charset::@4
  __b4:
    // [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7 -- vbuz1=vwuz2_band_vbuc1 
    lda #7
    and.z c
    sta.z __12
    // [64] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@11 -- vbuz1_neq_0_then_la1 
    lda.z __12
    cmp #0
    bne __b11_from___b4
    // [65] phi from make_plasma_charset::@4 to make_plasma_charset::@10 [phi:make_plasma_charset::@4->make_plasma_charset::@10]
  __b10_from___b4:
    jmp __b10
    // make_plasma_charset::@10
  __b10:
    // [66] call print_char 
    jsr print_char
    // [67] phi from make_plasma_charset::@10 make_plasma_charset::@4 to make_plasma_charset::@11 [phi:make_plasma_charset::@10/make_plasma_charset::@4->make_plasma_charset::@11]
  __b11_from___b10:
  __b11_from___b4:
    // [67] phi (byte*) print_char_cursor#30 = (byte*) print_char_cursor#1 [phi:make_plasma_charset::@10/make_plasma_charset::@4->make_plasma_charset::@11#0] -- register_copy 
    jmp __b11
    // make_plasma_charset::@11
  __b11:
    // [68] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#2 -- vwuz1=_inc_vwuz1 
    inc.z c
    bne !+
    inc.z c+1
  !:
    // [56] phi from make_plasma_charset::@11 to make_plasma_charset::@1 [phi:make_plasma_charset::@11->make_plasma_charset::@1]
  __b1_from___b11:
    // [56] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#30 [phi:make_plasma_charset::@11->make_plasma_charset::@1#0] -- register_copy 
    // [56] phi (word) make_plasma_charset::c#2 = (word) make_plasma_charset::c#1 [phi:make_plasma_charset::@11->make_plasma_charset::@1#1] -- register_copy 
    jmp __b1
    // [69] phi from make_plasma_charset::@3 to make_plasma_charset::@5 [phi:make_plasma_charset::@3->make_plasma_charset::@5]
  __b5_from___b3:
    // [69] phi (byte) make_plasma_charset::b#2 = (byte) 0 [phi:make_plasma_charset::@3->make_plasma_charset::@5#0] -- vbuz1=vbuc1 
    lda #0
    sta.z b
    // [69] phi (byte) make_plasma_charset::ii#2 = (byte) 0 [phi:make_plasma_charset::@3->make_plasma_charset::@5#1] -- vbuz1=vbuc1 
    lda #0
    sta.z ii
    jmp __b5
    // make_plasma_charset::@5
  __b5:
    // [70] if((byte) make_plasma_charset::ii#2<(byte) 8) goto make_plasma_charset::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda.z ii
    cmp #8
    bcc __b6_from___b5
    jmp __b7
    // make_plasma_charset::@7
  __b7:
    // [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z c
    asl
    sta.z __10
    lda.z c+1
    rol
    sta.z __10+1
    asl.z __10
    rol.z __10+1
    asl.z __10
    rol.z __10+1
    // [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2 -- vwuz1=vwuz2_plus_vbuz3 
    lda.z i
    clc
    adc.z __10
    sta.z __11
    lda #0
    adc.z __10+1
    sta.z __11+1
    // [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET + (word~) make_plasma_charset::$11 -- pbuz1=pbuc1_plus_vwuz2 
    lda.z __11
    clc
    adc #<CHARSET
    sta.z __16
    lda.z __11+1
    adc #>CHARSET
    sta.z __16+1
    // [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 -- _deref_pbuz1=vbuz2 
    lda.z b
    ldy #0
    sta (__16),y
    // [75] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [61] phi from make_plasma_charset::@7 to make_plasma_charset::@3 [phi:make_plasma_charset::@7->make_plasma_charset::@3]
  __b3_from___b7:
    // [61] phi (byte) make_plasma_charset::i#2 = (byte) make_plasma_charset::i#1 [phi:make_plasma_charset::@7->make_plasma_charset::@3#0] -- register_copy 
    jmp __b3
    // [76] phi from make_plasma_charset::@5 to make_plasma_charset::@6 [phi:make_plasma_charset::@5->make_plasma_charset::@6]
  __b6_from___b5:
    jmp __b6
    // make_plasma_charset::@6
  __b6:
    // [77] call sid_rnd 
    jsr sid_rnd
    // [78] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 -- vbuz1=vbuz2 
    lda.z sid_rnd.return
    sta.z sid_rnd.return_1
    jmp __b13
    // make_plasma_charset::@13
  __b13:
    // [79] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2 -- vbuz1=vbuz2 
    lda.z sid_rnd.return_1
    sta.z __6
    // [80] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff -- vbuz1=vbuz2_band_vbuc1 
    lda #$ff
    and.z __6
    sta.z __7
    // [81] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@8 -- vbuz1_le_vbuz2_then_la1 
    lda.z s
    cmp.z __7
    bcs __b8_from___b13
    jmp __b9
    // make_plasma_charset::@9
  __b9:
    // [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte*) make_plasma_charset::bittab + (byte) make_plasma_charset::ii#2) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 
    lda.z b
    ldy.z ii
    ora bittab,y
    sta.z b
    // [83] phi from make_plasma_charset::@13 make_plasma_charset::@9 to make_plasma_charset::@8 [phi:make_plasma_charset::@13/make_plasma_charset::@9->make_plasma_charset::@8]
  __b8_from___b13:
  __b8_from___b9:
    // [83] phi (byte) make_plasma_charset::b#6 = (byte) make_plasma_charset::b#2 [phi:make_plasma_charset::@13/make_plasma_charset::@9->make_plasma_charset::@8#0] -- register_copy 
    jmp __b8
    // make_plasma_charset::@8
  __b8:
    // [84] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#2 -- vbuz1=_inc_vbuz1 
    inc.z ii
    // [69] phi from make_plasma_charset::@8 to make_plasma_charset::@5 [phi:make_plasma_charset::@8->make_plasma_charset::@5]
  __b5_from___b8:
    // [69] phi (byte) make_plasma_charset::b#2 = (byte) make_plasma_charset::b#6 [phi:make_plasma_charset::@8->make_plasma_charset::@5#0] -- register_copy 
    // [69] phi (byte) make_plasma_charset::ii#2 = (byte) make_plasma_charset::ii#1 [phi:make_plasma_charset::@8->make_plasma_charset::@5#1] -- register_copy 
    jmp __b5
    bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80
}
  // sid_rnd
// Get a random number from the SID voice 3,
// Must be initialized with sid_rnd_init()
sid_rnd: {
    .label return = $5c
    .label return_1 = $59
    // [85] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC) -- vbuz1=_deref_pbuc1 
    lda SID_VOICE3_OSC
    sta.z return
    jmp __breturn
    // sid_rnd::@return
  __breturn:
    // [86] return 
    rts
}
  // print_char
// Print a single char
print_char: {
    .const ch = '.'
    // [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
    lda #ch
    ldy #0
    sta (print_char_cursor),y
    // [88] (byte*) print_char_cursor#1 ← ++ (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:
    // [89] return 
    rts
}
  // print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    // [91] call memset 
    // [44] phi from print_cls to memset [phi:print_cls->memset]
  memset_from_print_cls:
    // [44] phi (byte) memset::c#4 = (byte) ' ' [phi:print_cls->memset#0] -- vbuz1=vbuc1 
    lda #' '
    sta.z memset.c
    // [44] phi (void*) memset::str#3 = (void*)(const byte*) print_line_cursor#0 [phi:print_cls->memset#1] -- pvoz1=pvoc1 
    lda #<print_line_cursor
    sta.z memset.str
    lda #>print_line_cursor
    sta.z memset.str+1
    jsr memset
    jmp __breturn
    // print_cls::@return
  __breturn:
    // [92] return 
    rts
}
  // sid_rnd_init
// Initialize SID voice 3 for random number generation
sid_rnd_init: {
    // [93] *((const word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 
    lda #<$ffff
    sta SID_VOICE3_FREQ
    lda #>$ffff
    sta SID_VOICE3_FREQ+1
    // [94] *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 
    lda #SID_CONTROL_NOISE
    sta SID_VOICE3_CONTROL
    jmp __breturn
    // sid_rnd_init::@return
  __breturn:
    // [95] return 
    rts
}
  // init_angle_screen
// Populates 1000 bytes (a screen) with values representing the angle to the center.
// Utilizes symmetry around the  center
// init_angle_screen(byte* zp($47) screen)
init_angle_screen: {
    .label __3 = $5d
    .label __4 = $5e
    .label __7 = $61
    .label __11 = $6c
    .label __13 = $6f
    .label __14 = $70
    .label __15 = $71
    .label screen = $47
    .label screen_topline = $19
    .label screen_bottomline = $1b
    .label xw = $5f
    .label yw = $62
    .label angle_w = $6a
    .label ang_w = $6e
    .label x = $1d
    .label xb = $1e
    .label y = $18
    // [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 
    lda.z screen
    clc
    adc #<$28*$c
    sta.z screen_topline
    lda.z screen+1
    adc #>$28*$c
    sta.z screen_topline+1
    // [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 
    lda.z screen
    clc
    adc #<$28*$c
    sta.z screen_bottomline
    lda.z screen+1
    adc #>$28*$c
    sta.z screen_bottomline+1
    // [98] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
  __b1_from_init_angle_screen:
    // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy 
    // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy 
    // [98] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    jmp __b1
    // [98] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
  __b1_from___b4:
    // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy 
    // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy 
    // [98] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy 
    jmp __b1
    // init_angle_screen::@1
  __b1:
    // [99] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
  __b2_from___b1:
    // [99] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [99] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp __b2
    // init_angle_screen::@2
  __b2:
    // [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc __b3
    jmp __b4
    // init_angle_screen::@4
  __b4:
    // [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
    lda.z screen_topline
    sec
    sbc #<$28
    sta.z screen_topline
    lda.z screen_topline+1
    sbc #>$28
    sta.z screen_topline+1
    // [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen_bottomline
    sta.z screen_bottomline
    bcc !+
    inc.z screen_bottomline+1
  !:
    // [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [104] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$d
    cmp.z y
    bne __b1_from___b4
    jmp __breturn
    // init_angle_screen::@return
  __breturn:
    // [105] return 
    rts
    // init_angle_screen::@3
  __b3:
    // [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z x
    asl
    sta.z __3
    // [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 
    lda #$27
    sec
    sbc.z __3
    sta.z __4
    // [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 
    lda.z __4
    ldy #0
    sta.z xw+1
    sty.z xw
    // [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z y
    asl
    sta.z __7
    // [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 
    lda.z __7
    ldy #0
    sta.z yw+1
    sty.z yw
    // [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 
    lda.z xw
    sta.z atan2_16.x
    lda.z xw+1
    sta.z atan2_16.x+1
    // [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 
    lda.z yw
    sta.z atan2_16.y
    lda.z yw+1
    sta.z atan2_16.y+1
    // [113] call atan2_16 
    jsr atan2_16
    // [114] (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 __b5
    // init_angle_screen::@5
  __b5:
    // [115] (word) init_angle_screen::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
    // [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 
    lda #$80
    clc
    adc.z angle_w
    sta.z __11
    lda #0
    adc.z angle_w+1
    sta.z __11+1
    // [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 
    lda.z __11+1
    sta.z ang_w
    // [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z ang_w
    ldy.z xb
    sta (screen_bottomline),y
    // [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 
    lda.z ang_w
    eor #$ff
    clc
    adc #1
    sta.z __13
    // [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z __13
    ldy.z xb
    sta (screen_topline),y
    // [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 
    lax.z ang_w
    axs #-[$80]
    stx.z __14
    // [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z __14
    ldy.z x
    sta (screen_topline),y
    // [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 
    lda #$80
    sec
    sbc.z ang_w
    sta.z __15
    // [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z __15
    ldy.z x
    sta (screen_bottomline),y
    // [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [99] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
  __b2_from___b5:
    // [99] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy 
    // [99] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy 
    jmp __b2
}
  // atan2_16
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// atan2_16(signed word zp($64) x, signed word zp($66) y)
atan2_16: {
    .label __2 = $1f
    .label __7 = $21
    .label __22 = $73
    .label __23 = $72
    .label yi = $1f
    .label xi = $21
    .label angle = $26
    .label xd = $2b
    .label yd = $29
    .label shift = $28
    .label angle_1 = $24
    .label i = $23
    .label return = $26
    .label x = $64
    .label y = $66
    .label return_1 = $68
    // [127] 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:
    // [128] (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
    // [129] 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:
    // [129] 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:
    // [130] 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:
    // [131] (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
    // [132] 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:
    // [132] 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:
    // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
  __b10_from___b6:
    // [133] 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
    // [133] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [133] 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:
    // [134] 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
    // [135] 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:
    // [135] 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:
    // [136] (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
    // [137] 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:
    // [138] (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
    // [139] 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:
    // [139] 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:
    // [140] 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:
    // [141] (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
    // [142] 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:
    // [142] 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:
    // [143] return 
    rts
    // atan2_16::@11
  __b11:
    // [144] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 
    lda.z i
    sta.z shift
    // [145] (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
    // [146] (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
    // [147] 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:
    // [147] 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 
    // [147] 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 
    // [147] 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:
    // [148] 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:
    // [149] 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:
    // [150] (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
    // [151] (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
    // [152] 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:
    // [152] 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 
    // [152] 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:
    // [153] 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:
    // [154] (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
    // [155] (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
    // [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z __23
    // [157] (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
    // [158] 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:
    // [158] 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 
    // [158] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [158] 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:
    // [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [160] if((byte) atan2_16::i#1==(const 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
    // [133] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
  __b10_from___b19:
    // [133] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [133] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [133] 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:
    // [161] (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
    // [162] (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
    // [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z __22
    // [164] (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:
    // [165] (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
    // [166] (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
    // [167] (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:
    // [168] (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:
    // [169] (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_dist_screen
// Populates 1000 bytes (a screen) with values representing the distance to the center.
// The actual value stored is distance*2 to increase precision
// init_dist_screen(byte* zp($2e) screen)
init_dist_screen: {
    .label __5 = $32
    .label __7 = $32
    .label __14 = $35
    .label __16 = $35
    .label screen = $2e
    .label screen_bottomline = $30
    .label y2 = $74
    .label yd = $32
    .label yds = $77
    .label x2 = $79
    .label screen_topline = $2e
    .label y = $2d
    .label xd = $35
    .label xds = $7c
    .label ds = $7e
    .label d = $83
    .label x = $33
    .label xb = $34
    // [171] call init_squares 
    // [242] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
  init_squares_from_init_dist_screen:
    jsr init_squares
    jmp __b11
    // init_dist_screen::@11
  __b11:
    // [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 
    lda.z screen
    clc
    adc #<$28*$18
    sta.z screen_bottomline
    lda.z screen+1
    adc #>$28*$18
    sta.z screen_bottomline+1
    // [173] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1]
  __b1_from___b11:
    // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy 
    // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy 
    // [173] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    jmp __b1
    // [173] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1]
  __b1_from___b7:
    // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy 
    // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy 
    // [173] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy 
    jmp __b1
    // init_dist_screen::@1
  __b1:
    // [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z y
    asl
    sta.z y2
    // [175] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuz1_ge_vbuc1_then_la1 
    lda.z y2
    cmp #$18
    bcs __b2
    jmp __b3
    // init_dist_screen::@3
  __b3:
    // [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuz1=vbuc1_minus_vbuz2 
    lda #$18
    sec
    sbc.z y2
    sta.z __5
    // [177] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4]
  __b4_from___b2:
  __b4_from___b3:
    // [177] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy 
    jmp __b4
    // init_dist_screen::@4
  __b4:
    // [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 
    lda.z yd
    sta.z sqr.val
    // [179] call sqr 
    // [238] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
  sqr_from___b4:
    // [238] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
    jsr sqr
    // [180] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
    lda.z sqr.return
    sta.z sqr.return_1
    lda.z sqr.return+1
    sta.z sqr.return_1+1
    jmp __b12
    // init_dist_screen::@12
  __b12:
    // [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 -- vwuz1=vwuz2 
    lda.z sqr.return_1
    sta.z yds
    lda.z sqr.return_1+1
    sta.z yds+1
    // [182] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
  __b5_from___b12:
    // [182] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [182] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp __b5
    // init_dist_screen::@5
  __b5:
    // [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc __b6
    jmp __b7
    // init_dist_screen::@7
  __b7:
    // [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen_topline
    sta.z screen_topline
    bcc !+
    inc.z screen_topline+1
  !:
    // [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
    lda.z screen_bottomline
    sec
    sbc #<$28
    sta.z screen_bottomline
    lda.z screen_bottomline+1
    sbc #>$28
    sta.z screen_bottomline+1
    // [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [187] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$d
    cmp.z y
    bne __b1_from___b7
    jmp __breturn
    // init_dist_screen::@return
  __breturn:
    // [188] return 
    rts
    // init_dist_screen::@6
  __b6:
    // [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z x
    asl
    sta.z x2
    // [190] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuz1_ge_vbuc1_then_la1 
    lda.z x2
    cmp #$27
    bcs __b8
    jmp __b9
    // init_dist_screen::@9
  __b9:
    // [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 
    lda #$27
    sec
    sbc.z x2
    sta.z __14
    // [192] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10]
  __b10_from___b8:
  __b10_from___b9:
    // [192] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy 
    jmp __b10
    // init_dist_screen::@10
  __b10:
    // [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 
    lda.z xd
    sta.z sqr.val
    // [194] call sqr 
    // [238] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr]
  sqr_from___b10:
    // [238] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy 
    jsr sqr
    // [195] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 
    lda.z sqr.return
    sta.z sqr.return_2
    lda.z sqr.return+1
    sta.z sqr.return_2+1
    jmp __b13
    // init_dist_screen::@13
  __b13:
    // [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 
    lda.z sqr.return_2
    sta.z xds
    lda.z sqr.return_2+1
    sta.z xds+1
    // [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 
    lda.z xds
    clc
    adc.z yds
    sta.z ds
    lda.z xds+1
    adc.z yds+1
    sta.z ds+1
    // [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 
    lda.z ds
    sta.z sqrt.val
    lda.z ds+1
    sta.z sqrt.val+1
    // [199] call sqrt 
    jsr sqrt
    // [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 
    lda.z sqrt.return
    sta.z sqrt.return_1
    jmp __b14
    // init_dist_screen::@14
  __b14:
    // [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 
    lda.z sqrt.return_1
    sta.z d
    // [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z d
    ldy.z x
    sta (screen_topline),y
    // [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z d
    ldy.z x
    sta (screen_bottomline),y
    // [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z d
    ldy.z xb
    sta (screen_topline),y
    // [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z d
    ldy.z xb
    sta (screen_bottomline),y
    // [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [182] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5]
  __b5_from___b14:
    // [182] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy 
    // [182] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy 
    jmp __b5
    // init_dist_screen::@8
  __b8:
    // [208] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1 
    lax.z x2
    axs #$27
    stx.z __16
    jmp __b10_from___b8
    // init_dist_screen::@2
  __b2:
    // [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuz1=vbuz2_minus_vbuc1 
    lax.z y2
    axs #$18
    stx.z __7
    jmp __b4_from___b2
}
  // sqrt
// Find the (integer) square root of a word value
// If the square is not an integer then it returns the largest integer N where N*N <= val
// Uses a table of squares that must be initialized by calling init_squares()
// sqrt(word zp($80) val)
sqrt: {
    .label __1 = $8c
    .label __3 = $8a
    .label found = $88
    .label return = $8e
    .label val = $80
    .label return_1 = $82
    // [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 
    lda.z val
    sta.z bsearch16u.key
    lda.z val+1
    sta.z bsearch16u.key+1
    // [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
    lda.z SQUARES
    sta.z bsearch16u.items
    lda.z SQUARES+1
    sta.z bsearch16u.items+1
    // [212] call bsearch16u 
    // [219] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
  bsearch16u_from_sqrt:
    jsr bsearch16u
    // [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2 
    lda.z bsearch16u.return
    sta.z bsearch16u.return_1
    lda.z bsearch16u.return+1
    sta.z bsearch16u.return_1+1
    jmp __b1
    // sqrt::@1
  __b1:
    // [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2 
    lda.z bsearch16u.return_1
    sta.z found
    lda.z bsearch16u.return_1+1
    sta.z found+1
    // [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz2_minus_pwuz3 
    lda.z found
    sec
    sbc.z SQUARES
    sta.z __3
    lda.z found+1
    sbc.z SQUARES+1
    sta.z __3+1
    // [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz2_ror_1 
    lda.z __3+1
    lsr
    sta.z __1+1
    lda.z __3
    ror
    sta.z __1
    // [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 
    lda.z __1
    sta.z return
    jmp __breturn
    // sqrt::@return
  __breturn:
    // [218] return 
    rts
}
  // bsearch16u
// Searches an array of nitems unsigned words, the initial member of which is pointed to by base, for a member that matches the value key.
// - key - The value to look for
// - items - Pointer to the start of the array to search in
// - num - The number of items in the array
// Returns pointer to an entry in the array that matches the search key
// bsearch16u(word zp($84) key, word* zp($36) items, byte zp($38) num)
bsearch16u: {
    .label __2 = $36
    .label __6 = $8f
    .label __16 = $90
    .label pivot = $91
    .label result = $93
    .label return = $36
    .label num = $38
    .label items = $36
    .label key = $84
    .label return_1 = $86
    // [220] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
  __b3_from_bsearch16u:
    // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy 
    // [220] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 
    lda #NUM_SQUARES
    sta.z num
    jmp __b3
    // bsearch16u::@3
  __b3:
    // [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 
    lda.z num
    bne __b4
    jmp __b5
    // bsearch16u::@5
  __b5:
    // [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
    ldy #1
    lda (items),y
    cmp.z key+1
    bne !+
    dey
    lda (items),y
    cmp.z key
    beq __b2_from___b5
  !:
    bcc __b2_from___b5
    jmp __b1
    // bsearch16u::@1
  __b1:
    // [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
    lda.z __2
    sec
    sbc #<1*SIZEOF_WORD
    sta.z __2
    lda.z __2+1
    sbc #>1*SIZEOF_WORD
    sta.z __2+1
    // [224] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
  __b2_from___b1:
  __b2_from___b5:
    // [224] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
    jmp __b2
    // bsearch16u::@2
  __b2:
    // [225] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
  __breturn_from___b2:
  __breturn_from___b8:
    // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
    jmp __breturn
    // bsearch16u::@return
  __breturn:
    // [226] return 
    rts
    // bsearch16u::@4
  __b4:
    // [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 
    lda.z num
    lsr
    sta.z __6
    // [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z __6
    asl
    sta.z __16
    // [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 
    lda.z __16
    clc
    adc.z items
    sta.z pivot
    lda #0
    adc.z items+1
    sta.z pivot+1
    // [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 
    sec
    lda.z key
    ldy #0
    sbc (pivot),y
    sta.z result
    lda.z key+1
    iny
    sbc (pivot),y
    sta.z result+1
    // [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
    lda.z result+1
    bne __b6
    lda.z result
    bne __b6
    jmp __b8
    // bsearch16u::@8
  __b8:
    // [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
    lda.z pivot
    sta.z return
    lda.z pivot+1
    sta.z return+1
    jmp __breturn_from___b8
    // bsearch16u::@6
  __b6:
    // [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
    lda.z result+1
    bmi __b7_from___b6
    bne !+
    lda.z result
    beq __b7_from___b6
  !:
    jmp __b9
    // bsearch16u::@9
  __b9:
    // [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
    lda #1*SIZEOF_WORD
    clc
    adc.z pivot
    sta.z items
    lda #0
    adc.z pivot+1
    sta.z items+1
    // [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 
    dec.z num
    // [236] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
  __b7_from___b6:
  __b7_from___b9:
    // [236] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
    // [236] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
    jmp __b7
    // bsearch16u::@7
  __b7:
    // [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 
    lsr.z num
    // [220] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
  __b3_from___b7:
    // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
    // [220] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy 
    jmp __b3
}
  // sqr
// Find the square of a byte value
// Uses a table of squares that must be initialized by calling init_squares()
// sqr(byte zp($39) val)
sqr: {
    .label __0 = $95
    .label return = $96
    .label val = $39
    .label return_1 = $75
    .label return_2 = $7a
    // [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z val
    asl
    sta.z __0
    // [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3 
    ldy.z __0
    lda (SQUARES),y
    sta.z return
    iny
    lda (SQUARES),y
    sta.z return+1
    jmp __breturn
    // sqr::@return
  __breturn:
    // [241] return 
    rts
}
  // init_squares
// Initialize squares table
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
init_squares: {
    .label __3 = $9a
    .label __4 = $9b
    .label squares = $3d
    .label sqr = $3b
    .label i = $3a
    // [243] call malloc 
    // [255] phi from init_squares to malloc [phi:init_squares->malloc]
  malloc_from_init_squares:
    // [255] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 
    lda #<NUM_SQUARES*SIZEOF_WORD
    sta.z malloc.size
    lda #>NUM_SQUARES*SIZEOF_WORD
    sta.z malloc.size+1
    // [255] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy 
    jsr malloc
    jmp __b3
    // init_squares::@3
  __b3:
    // [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
    lda.z malloc.mem
    sta.z SQUARES
    lda.z malloc.mem+1
    sta.z SQUARES+1
    // [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
    lda.z SQUARES
    sta.z squares
    lda.z SQUARES+1
    sta.z squares+1
    // [246] phi from init_squares::@3 to init_squares::@1 [phi:init_squares::@3->init_squares::@1]
  __b1_from___b3:
    // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@3->init_squares::@1#0] -- register_copy 
    // [246] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@3->init_squares::@1#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z sqr
    lda #>0
    sta.z sqr+1
    // [246] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@3->init_squares::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b1
    // init_squares::@1
  __b1:
    // [247] if((byte) init_squares::i#2<(const byte) NUM_SQUARES#3) goto init_squares::@2 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #NUM_SQUARES
    bcc __b2
    jmp __breturn
    // init_squares::@return
  __breturn:
    // [248] return 
    rts
    // init_squares::@2
  __b2:
    // [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 
    ldy #0
    lda.z sqr
    sta (squares),y
    iny
    lda.z sqr+1
    sta (squares),y
    // [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
    lda #SIZEOF_WORD
    clc
    adc.z squares
    sta.z squares
    bcc !+
    inc.z squares+1
  !:
    // [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z __3
    // [252] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 
    ldy.z __3
    iny
    sty.z __4
    // [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 
    lda.z __4
    clc
    adc.z sqr
    sta.z sqr
    bcc !+
    inc.z sqr+1
  !:
    // [254] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [246] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
  __b1_from___b2:
    // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@2->init_squares::@1#0] -- register_copy 
    // [246] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
    // [246] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@2->init_squares::@1#2] -- register_copy 
    jmp __b1
}
  // malloc
// Allocates a block of size bytes of memory, returning a pointer to the beginning of the block.
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
// malloc(word zp($41) size)
malloc: {
    .label mem = $9c
    .label size = $41
    // [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz3 
    lda.z heap_head
    sec
    sbc.z size
    sta.z mem
    lda.z heap_head+1
    sbc.z size+1
    sta.z mem+1
    // [257] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 
    lda.z mem
    sta.z heap_head
    lda.z mem+1
    sta.z heap_head+1
    jmp __breturn
    // malloc::@return
  __breturn:
    // [258] return 
    rts
}
  // File Data
  // 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

  .align $100
SINTABLE:
.for(var i=0;i<$200;i++)
        .byte round(127.5+127.5*sin(2*PI*i/256))


REGISTER UPLIFT POTENTIAL REGISTERS
Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] (  [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [11] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 ] ) always clobbers reg byte a 
Statement [21] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ]
Statement [24] *((const byte*) D018) ← (const byte) main::toD0182_return#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ) always clobbers reg byte a 
Statement [26] (byte*) doplasma::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 ] ) always clobbers reg byte a 
Statement [27] (byte*) doplasma::dist#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 ] ) always clobbers reg byte a 
Statement [28] (byte*) doplasma::sin_x#0 ← (const byte*) SINTABLE + (byte) sin_offset_x#10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 ] ) always clobbers reg byte a 
Statement [29] (byte*) doplasma::sin_y#0 ← (const byte*) SINTABLE + (byte) sin_offset_y#10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 doplasma::sin_y#0 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 doplasma::sin_y#0 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 doplasma::sin_y#0 ] ) always clobbers reg byte a 
Statement [32] (byte~) doplasma::$2 ← *((byte*) doplasma::sin_x#0 + *((byte*) doplasma::angle#4 + (byte) doplasma::x#2)) + *((byte*) doplasma::sin_y#0 + *((byte*) doplasma::dist#4 + (byte) doplasma::x#2)) [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 doplasma::$2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 doplasma::$2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 doplasma::$2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ]
Removing always clobbered register reg byte y as potential for zp[1]:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ]
Removing always clobbered register reg byte a as potential for zp[1]:10 [ doplasma::y#4 doplasma::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:10 [ doplasma::y#4 doplasma::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:11 [ doplasma::x#2 doplasma::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:11 [ doplasma::x#2 doplasma::x#1 ]
Statement [33] *((byte*) doplasma::screen#5 + (byte) doplasma::x#2) ← (byte~) doplasma::$2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 ] ) always clobbers reg byte y 
Statement [36] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::y#4 doplasma::screen#2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::y#4 doplasma::screen#2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::y#4 doplasma::screen#2 ] ) always clobbers reg byte a 
Statement [37] (byte*) doplasma::angle#1 ← (byte*) doplasma::angle#4 + (byte) $28 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::dist#4 doplasma::y#4 doplasma::angle#1 doplasma::screen#2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::dist#4 doplasma::y#4 doplasma::angle#1 doplasma::screen#2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::dist#4 doplasma::y#4 doplasma::angle#1 doplasma::screen#2 ] ) always clobbers reg byte a 
Statement [38] (byte*) doplasma::dist#1 ← (byte*) doplasma::dist#4 + (byte) $28 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] ) always clobbers reg byte a 
Statement [41] (byte) sin_offset_x#12 ← (byte) sin_offset_x#10 - (byte) 3 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] ) always clobbers reg byte a reg byte x 
Removing always clobbered register reg byte x as potential for zp[1]:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ]
Statement [42] (byte) sin_offset_y#12 ← (byte) sin_offset_y#10 - (byte) 7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ) always clobbers reg byte a reg byte x 
Removing always clobbered register reg byte x as potential for zp[1]:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ]
Statement [45] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:14 [ memset::c#4 ]
Statement [46] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a 
Statement [48] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a 
Statement [50] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:14 [ memset::c#4 ]
Statement [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 [ make_plasma_charset::c#2 print_char_cursor#18 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a 
Statement [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$3 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$3 ] ) always clobbers reg byte a 
Statement [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$12 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$12 ] ) always clobbers reg byte a 
Statement [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$10 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$10 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:81 [ make_plasma_charset::s#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:23 [ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ]
Statement [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$11 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$11 ] ) always clobbers reg byte a 
Statement [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET + (word~) make_plasma_charset::$11 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$16 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$16 ] ) always clobbers reg byte a 
Statement [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:81 [ make_plasma_charset::s#0 ]
Removing always clobbered register reg byte y as potential for zp[1]:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ]
Statement [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte*) make_plasma_charset::bittab + (byte) make_plasma_charset::ii#2) [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:22 [ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ]
Statement [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:7::make_plasma_charset:14::print_char:66 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a reg byte y 
Statement [93] *((const word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a 
Statement [94] *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a 
Statement [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a 
Statement [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a 
Statement [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Statement [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a 
Statement [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Statement [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a 
Statement [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Statement [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a 
Statement [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
Statement [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
Statement [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a 
Statement [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
Statement [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a 
Statement [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
Statement [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:110 [ init_angle_screen::ang_w#0 ]
Statement [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:110 [ init_angle_screen::ang_w#0 ]
Statement [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a 
Statement [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a 
Statement [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y 
Statement [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
Statement [130] 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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
Statement [131] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
Statement [134] 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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:35 [ atan2_16::i#2 atan2_16::i#1 ]
Statement [136] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
Statement [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a 
Statement [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a 
Statement [145] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:40 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Statement [146] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 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 ] ) always clobbers reg byte a 
Statement [150] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a 
Statement [151] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a 
Statement [153] 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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a 
Statement [154] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a 
Statement [155] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a 
Statement [156] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a 
Statement [157] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a 
Statement [161] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [162] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [163] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a 
Statement [164] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [165] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 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 ] ) always clobbers reg byte a 
Statement [166] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 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 ] ) always clobbers reg byte a 
Statement [168] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
Statement [169] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
Statement [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Statement [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a 
Statement [180] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a 
Statement [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Statement [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a 
Statement [195] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
Statement [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
Statement [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
Statement [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
Statement [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
Statement [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Statement [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
Statement [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
Statement [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
Statement [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
Statement [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
Statement [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a 
Statement [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a 
Statement [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#2 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte a as potential for zp[1]:58 [ init_squares::i#2 init_squares::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:58 [ init_squares::i#2 init_squares::i#1 ]
Statement [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
Statement [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a 
Statement [257] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] (  [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [11] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 ] ) always clobbers reg byte a 
Statement [21] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ) always clobbers reg byte a 
Statement [24] *((const byte*) D018) ← (const byte) main::toD0182_return#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ) always clobbers reg byte a 
Statement [26] (byte*) doplasma::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 ] ) always clobbers reg byte a 
Statement [27] (byte*) doplasma::dist#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 ] ) always clobbers reg byte a 
Statement [28] (byte*) doplasma::sin_x#0 ← (const byte*) SINTABLE + (byte) sin_offset_x#10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 ] ) always clobbers reg byte a 
Statement [29] (byte*) doplasma::sin_y#0 ← (const byte*) SINTABLE + (byte) sin_offset_y#10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 doplasma::sin_y#0 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 doplasma::sin_y#0 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 doplasma::sin_y#0 ] ) always clobbers reg byte a 
Statement [32] (byte~) doplasma::$2 ← *((byte*) doplasma::sin_x#0 + *((byte*) doplasma::angle#4 + (byte) doplasma::x#2)) + *((byte*) doplasma::sin_y#0 + *((byte*) doplasma::dist#4 + (byte) doplasma::x#2)) [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 doplasma::$2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 doplasma::$2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 doplasma::$2 ] ) always clobbers reg byte a reg byte y 
Statement [33] *((byte*) doplasma::screen#5 + (byte) doplasma::x#2) ← (byte~) doplasma::$2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 ] ) always clobbers reg byte y 
Statement [36] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::y#4 doplasma::screen#2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::y#4 doplasma::screen#2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::y#4 doplasma::screen#2 ] ) always clobbers reg byte a 
Statement [37] (byte*) doplasma::angle#1 ← (byte*) doplasma::angle#4 + (byte) $28 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::dist#4 doplasma::y#4 doplasma::angle#1 doplasma::screen#2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::dist#4 doplasma::y#4 doplasma::angle#1 doplasma::screen#2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::dist#4 doplasma::y#4 doplasma::angle#1 doplasma::screen#2 ] ) always clobbers reg byte a 
Statement [38] (byte*) doplasma::dist#1 ← (byte*) doplasma::dist#4 + (byte) $28 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] ) always clobbers reg byte a 
Statement [41] (byte) sin_offset_x#12 ← (byte) sin_offset_x#10 - (byte) 3 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] ) always clobbers reg byte a reg byte x 
Statement [42] (byte) sin_offset_y#12 ← (byte) sin_offset_y#10 - (byte) 7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ) always clobbers reg byte a reg byte x 
Statement [45] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a 
Statement [46] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a 
Statement [48] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a 
Statement [50] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y 
Statement [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 [ make_plasma_charset::c#2 print_char_cursor#18 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a 
Statement [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$3 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$3 ] ) always clobbers reg byte a 
Statement [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$12 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$12 ] ) always clobbers reg byte a 
Statement [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$10 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$10 ] ) always clobbers reg byte a 
Statement [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$11 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$11 ] ) always clobbers reg byte a 
Statement [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET + (word~) make_plasma_charset::$11 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$16 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$16 ] ) always clobbers reg byte a 
Statement [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] ) always clobbers reg byte a reg byte y 
Statement [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte*) make_plasma_charset::bittab + (byte) make_plasma_charset::ii#2) [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ) always clobbers reg byte a 
Statement [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:7::make_plasma_charset:14::print_char:66 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a reg byte y 
Statement [93] *((const word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a 
Statement [94] *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a 
Statement [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a 
Statement [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a 
Statement [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
Statement [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a 
Statement [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a 
Statement [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a 
Statement [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
Statement [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a 
Statement [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
Statement [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
Statement [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a 
Statement [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
Statement [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a 
Statement [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
Statement [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y 
Statement [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
Statement [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a 
Statement [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a 
Statement [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y 
Statement [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
Statement [130] 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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
Statement [131] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
Statement [134] 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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a 
Statement [136] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
Statement [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a 
Statement [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a 
Statement [145] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a 
Statement [146] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 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 ] ) always clobbers reg byte a 
Statement [150] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a 
Statement [151] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a 
Statement [153] 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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a 
Statement [154] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a 
Statement [155] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a 
Statement [156] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a 
Statement [157] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a 
Statement [161] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [162] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [163] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a 
Statement [164] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [165] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 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 ] ) always clobbers reg byte a 
Statement [166] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 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 ] ) always clobbers reg byte a 
Statement [168] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
Statement [169] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
Statement [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a 
Statement [180] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a 
Statement [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a 
Statement [195] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
Statement [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:131 [ init_dist_screen::d#0 ]
Statement [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y 
Statement [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
Statement [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
Statement [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
Statement [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
Statement [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
Statement [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
Statement [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a 
Statement [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
Statement [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
Statement [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
Statement [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a 
Statement [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a 
Statement [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#2 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#2 ] ) always clobbers reg byte a reg byte y 
Statement [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
Statement [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a 
Statement [257] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] (  [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [11] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 ] ) always clobbers reg byte a 
Statement [21] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ) always clobbers reg byte a 
Statement [24] *((const byte*) D018) ← (const byte) main::toD0182_return#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ) always clobbers reg byte a 
Statement [26] (byte*) doplasma::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 ] ) always clobbers reg byte a 
Statement [27] (byte*) doplasma::dist#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 ] ) always clobbers reg byte a 
Statement [28] (byte*) doplasma::sin_x#0 ← (const byte*) SINTABLE + (byte) sin_offset_x#10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 ] ) always clobbers reg byte a 
Statement [29] (byte*) doplasma::sin_y#0 ← (const byte*) SINTABLE + (byte) sin_offset_y#10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 doplasma::sin_y#0 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 doplasma::sin_y#0 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::screen#6 doplasma::angle#0 doplasma::dist#0 doplasma::sin_x#0 doplasma::sin_y#0 ] ) always clobbers reg byte a 
Statement [32] (byte~) doplasma::$2 ← *((byte*) doplasma::sin_x#0 + *((byte*) doplasma::angle#4 + (byte) doplasma::x#2)) + *((byte*) doplasma::sin_y#0 + *((byte*) doplasma::dist#4 + (byte) doplasma::x#2)) [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 doplasma::$2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 doplasma::$2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 doplasma::$2 ] ) always clobbers reg byte a reg byte y 
Statement [33] *((byte*) doplasma::screen#5 + (byte) doplasma::x#2) ← (byte~) doplasma::$2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::screen#5 doplasma::y#4 doplasma::x#2 ] ) always clobbers reg byte y 
Statement [36] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::y#4 doplasma::screen#2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::y#4 doplasma::screen#2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::angle#4 doplasma::dist#4 doplasma::y#4 doplasma::screen#2 ] ) always clobbers reg byte a 
Statement [37] (byte*) doplasma::angle#1 ← (byte*) doplasma::angle#4 + (byte) $28 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::dist#4 doplasma::y#4 doplasma::angle#1 doplasma::screen#2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::dist#4 doplasma::y#4 doplasma::angle#1 doplasma::screen#2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::dist#4 doplasma::y#4 doplasma::angle#1 doplasma::screen#2 ] ) always clobbers reg byte a 
Statement [38] (byte*) doplasma::dist#1 ← (byte*) doplasma::dist#4 + (byte) $28 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#10 sin_offset_y#10 doplasma::sin_x#0 doplasma::sin_y#0 doplasma::y#4 doplasma::angle#1 doplasma::dist#1 doplasma::screen#2 ] ) always clobbers reg byte a 
Statement [41] (byte) sin_offset_x#12 ← (byte) sin_offset_x#10 - (byte) 3 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#10 ] ) always clobbers reg byte a reg byte x 
Statement [42] (byte) sin_offset_y#12 ← (byte) sin_offset_y#10 - (byte) 7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ( main:7::doplasma:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] main:7::doplasma:22 [ SCREEN_DIST#0 SCREEN_ANGLE#0 sin_offset_x#12 sin_offset_y#12 ] ) always clobbers reg byte a reg byte x 
Statement [45] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a 
Statement [46] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a 
Statement [48] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a 
Statement [50] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:7::memset:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] main:7::make_plasma_charset:14::print_cls:55::memset:91 [ SCREEN_DIST#0 SCREEN_ANGLE#0 memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y 
Statement [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 [ make_plasma_charset::c#2 print_char_cursor#18 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a 
Statement [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$3 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$3 ] ) always clobbers reg byte a 
Statement [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$12 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::$12 ] ) always clobbers reg byte a 
Statement [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$10 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$10 ] ) always clobbers reg byte a 
Statement [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$11 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$11 ] ) always clobbers reg byte a 
Statement [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET + (word~) make_plasma_charset::$11 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$16 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::b#2 make_plasma_charset::$16 ] ) always clobbers reg byte a 
Statement [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] ) always clobbers reg byte a reg byte y 
Statement [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte*) make_plasma_charset::bittab + (byte) make_plasma_charset::ii#2) [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ) always clobbers reg byte a 
Statement [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:7::make_plasma_charset:14::print_char:66 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] ) always clobbers reg byte a reg byte y 
Statement [93] *((const word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a 
Statement [94] *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ) always clobbers reg byte a 
Statement [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a 
Statement [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a 
Statement [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
Statement [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a 
Statement [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a 
Statement [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a 
Statement [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
Statement [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a 
Statement [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
Statement [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
Statement [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a 
Statement [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
Statement [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a 
Statement [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
Statement [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y 
Statement [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
Statement [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a 
Statement [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a 
Statement [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y 
Statement [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
Statement [130] 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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
Statement [131] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
Statement [134] 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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a 
Statement [136] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
Statement [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a 
Statement [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a 
Statement [145] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a 
Statement [146] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 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 ] ) always clobbers reg byte a 
Statement [150] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a 
Statement [151] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a 
Statement [153] 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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a 
Statement [154] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a 
Statement [155] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a 
Statement [156] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a 
Statement [157] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a 
Statement [161] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [162] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [163] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a 
Statement [164] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [165] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 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 ] ) always clobbers reg byte a 
Statement [166] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 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 ] ) always clobbers reg byte a 
Statement [168] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
Statement [169] (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:7::init_angle_screen:12::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
Statement [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a 
Statement [180] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a 
Statement [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a 
Statement [195] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
Statement [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y 
Statement [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
Statement [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
Statement [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
Statement [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
Statement [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
Statement [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
Statement [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a 
Statement [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
Statement [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
Statement [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
Statement [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a 
Statement [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:7::init_dist_screen:10::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:7::init_dist_screen:10::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a 
Statement [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#2 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#2 ] ) always clobbers reg byte a reg byte y 
Statement [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
Statement [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a 
Statement [257] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a 
Potential registers zp[1]:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] : zp[1]:2 , 
Potential registers zp[1]:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] : zp[1]:3 , 
Potential registers zp[2]:4 [ doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] : zp[2]:4 , 
Potential registers zp[2]:6 [ doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] : zp[2]:6 , 
Potential registers zp[2]:8 [ doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] : zp[2]:8 , 
Potential registers zp[1]:10 [ doplasma::y#4 doplasma::y#1 ] : zp[1]:10 , reg byte x , 
Potential registers zp[1]:11 [ doplasma::x#2 doplasma::x#1 ] : zp[1]:11 , reg byte x , 
Potential registers zp[2]:12 [ memset::str#3 ] : zp[2]:12 , 
Potential registers zp[1]:14 [ memset::c#4 ] : zp[1]:14 , reg byte x , 
Potential registers zp[2]:15 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:15 , 
Potential registers zp[2]:17 [ make_plasma_charset::c#2 make_plasma_charset::c#1 ] : zp[2]:17 , 
Potential registers zp[2]:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] : zp[2]:19 , 
Potential registers zp[1]:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ] : zp[1]:21 , reg byte x , 
Potential registers zp[1]:22 [ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ] : zp[1]:22 , reg byte x , reg byte y , 
Potential registers zp[1]:23 [ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ] : zp[1]:23 , reg byte x , reg byte y , 
Potential registers zp[1]:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp[1]:24 , reg byte x , 
Potential registers zp[2]:25 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] : zp[2]:25 , 
Potential registers zp[2]:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp[2]:27 , 
Potential registers zp[1]:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp[1]:29 , reg byte x , 
Potential registers zp[1]:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp[1]:30 , reg byte x , 
Potential registers zp[2]:31 [ 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]:31 , 
Potential registers zp[2]:33 [ 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]:33 , 
Potential registers zp[1]:35 [ atan2_16::i#2 atan2_16::i#1 ] : zp[1]:35 , reg byte x , reg byte y , 
Potential registers zp[2]:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp[2]:36 , 
Potential registers zp[2]:38 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] : zp[2]:38 , 
Potential registers zp[1]:40 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp[1]:40 , reg byte x , reg byte y , 
Potential registers zp[2]:41 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp[2]:41 , 
Potential registers zp[2]:43 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp[2]:43 , 
Potential registers zp[1]:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] : zp[1]:45 , reg byte x , 
Potential registers zp[2]:46 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] : zp[2]:46 , 
Potential registers zp[2]:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] : zp[2]:48 , 
Potential registers zp[1]:50 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ] : zp[1]:51 , reg byte x , 
Potential registers zp[1]:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] : zp[1]:52 , reg byte x , 
Potential registers zp[1]:53 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] : zp[2]:54 , 
Potential registers zp[1]:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] : zp[1]:56 , reg byte x , 
Potential registers zp[1]:57 [ sqr::val#2 sqr::val#1 sqr::val#0 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:58 [ init_squares::i#2 init_squares::i#1 ] : zp[1]:58 , reg byte x , 
Potential registers zp[2]:59 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp[2]:59 , 
Potential registers zp[2]:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp[2]:61 , 
Potential registers zp[2]:63 [ heap_head#12 heap_head#1 ] : zp[2]:63 , 
Potential registers zp[2]:65 [ malloc::size#3 ] : zp[2]:65 , 
Potential registers zp[2]:67 [ SCREEN_DIST#0 ] : zp[2]:67 , 
Potential registers zp[2]:69 [ SCREEN_ANGLE#0 ] : zp[2]:69 , 
Potential registers zp[2]:71 [ init_angle_screen::screen#0 ] : zp[2]:71 , 
Potential registers zp[2]:73 [ doplasma::sin_x#0 ] : zp[2]:73 , 
Potential registers zp[2]:75 [ doplasma::sin_y#0 ] : zp[2]:75 , 
Potential registers zp[1]:77 [ doplasma::$2 ] : zp[1]:77 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:78 [ memset::end#0 ] : zp[2]:78 , 
Potential registers zp[1]:80 [ make_plasma_charset::$3 ] : zp[1]:80 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:81 [ make_plasma_charset::s#0 ] : zp[1]:81 , reg byte x , 
Potential registers zp[1]:82 [ make_plasma_charset::$12 ] : zp[1]:82 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:83 [ make_plasma_charset::$10 ] : zp[2]:83 , 
Potential registers zp[2]:85 [ make_plasma_charset::$11 ] : zp[2]:85 , 
Potential registers zp[2]:87 [ make_plasma_charset::$16 ] : zp[2]:87 , 
Potential registers zp[1]:89 [ sid_rnd::return#2 ] : zp[1]:89 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:90 [ make_plasma_charset::$6 ] : zp[1]:90 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:91 [ make_plasma_charset::$7 ] : zp[1]:91 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:92 [ sid_rnd::return#0 ] : zp[1]:92 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:93 [ init_angle_screen::$3 ] : zp[1]:93 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:94 [ init_angle_screen::$4 ] : zp[1]:94 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:95 [ init_angle_screen::xw#0 ] : zp[2]:95 , 
Potential registers zp[1]:97 [ init_angle_screen::$7 ] : zp[1]:97 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:98 [ init_angle_screen::yw#0 ] : zp[2]:98 , 
Potential registers zp[2]:100 [ atan2_16::x#0 ] : zp[2]:100 , 
Potential registers zp[2]:102 [ atan2_16::y#0 ] : zp[2]:102 , 
Potential registers zp[2]:104 [ atan2_16::return#2 ] : zp[2]:104 , 
Potential registers zp[2]:106 [ init_angle_screen::angle_w#0 ] : zp[2]:106 , 
Potential registers zp[2]:108 [ init_angle_screen::$11 ] : zp[2]:108 , 
Potential registers zp[1]:110 [ init_angle_screen::ang_w#0 ] : zp[1]:110 , reg byte x , 
Potential registers zp[1]:111 [ init_angle_screen::$13 ] : zp[1]:111 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:112 [ init_angle_screen::$14 ] : zp[1]:112 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:113 [ init_angle_screen::$15 ] : zp[1]:113 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:114 [ atan2_16::$23 ] : zp[1]:114 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:115 [ atan2_16::$22 ] : zp[1]:115 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:116 [ init_dist_screen::y2#0 ] : zp[1]:116 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:117 [ sqr::return#2 ] : zp[2]:117 , 
Potential registers zp[2]:119 [ init_dist_screen::yds#0 ] : zp[2]:119 , 
Potential registers zp[1]:121 [ init_dist_screen::x2#0 ] : zp[1]:121 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:122 [ sqr::return#3 ] : zp[2]:122 , 
Potential registers zp[2]:124 [ init_dist_screen::xds#0 ] : zp[2]:124 , 
Potential registers zp[2]:126 [ init_dist_screen::ds#0 ] : zp[2]:126 , 
Potential registers zp[2]:128 [ sqrt::val#0 ] : zp[2]:128 , 
Potential registers zp[1]:130 [ sqrt::return#2 ] : zp[1]:130 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:131 [ init_dist_screen::d#0 ] : zp[1]:131 , reg byte a , reg byte x , 
Potential registers zp[2]:132 [ bsearch16u::key#0 ] : zp[2]:132 , 
Potential registers zp[2]:134 [ bsearch16u::return#3 ] : zp[2]:134 , 
Potential registers zp[2]:136 [ sqrt::found#0 ] : zp[2]:136 , 
Potential registers zp[2]:138 [ sqrt::$3 ] : zp[2]:138 , 
Potential registers zp[2]:140 [ sqrt::$1 ] : zp[2]:140 , 
Potential registers zp[1]:142 [ sqrt::return#0 ] : zp[1]:142 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:143 [ bsearch16u::$6 ] : zp[1]:143 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:144 [ bsearch16u::$16 ] : zp[1]:144 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:145 [ bsearch16u::pivot#0 ] : zp[2]:145 , 
Potential registers zp[2]:147 [ bsearch16u::result#0 ] : zp[2]:147 , 
Potential registers zp[1]:149 [ sqr::$0 ] : zp[1]:149 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:150 [ sqr::return#0 ] : zp[2]:150 , 
Potential registers zp[2]:152 [ SQUARES#1 ] : zp[2]:152 , 
Potential registers zp[1]:154 [ init_squares::$3 ] : zp[1]:154 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:155 [ init_squares::$4 ] : zp[1]:155 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:156 [ malloc::mem#0 ] : zp[2]:156 , 

REGISTER UPLIFT SCOPES
Uplift Scope [atan2_16] 28,670.58: zp[1]:40 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp[2]:41 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp[2]:43 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp[2]:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp[2]:31 [ 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 ] 2,283.07: zp[2]:33 [ 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 ] 2,002: zp[1]:114 [ atan2_16::$23 ] 2,002: zp[1]:115 [ atan2_16::$22 ] 1,710.04: zp[1]:35 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp[2]:104 [ atan2_16::return#2 ] 50: zp[2]:38 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp[2]:100 [ atan2_16::x#0 ] 2.72: zp[2]:102 [ atan2_16::y#0 ] 
Uplift Scope [bsearch16u] 7,563.11: zp[1]:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,855.06: zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] 2,002: zp[1]:143 [ bsearch16u::$6 ] 2,002: zp[1]:144 [ bsearch16u::$16 ] 1,501.5: zp[2]:147 [ bsearch16u::result#0 ] 501: zp[2]:145 [ bsearch16u::pivot#0 ] 4: zp[2]:134 [ bsearch16u::return#3 ] 0.27: zp[2]:132 [ bsearch16u::key#0 ] 
Uplift Scope [make_plasma_charset] 3,785.68: zp[1]:23 [ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ] 2,402.4: zp[1]:22 [ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ] 2,002: zp[1]:90 [ make_plasma_charset::$6 ] 2,002: zp[1]:91 [ make_plasma_charset::$7 ] 225.76: zp[1]:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ] 202: zp[2]:83 [ make_plasma_charset::$10 ] 202: zp[2]:85 [ make_plasma_charset::$11 ] 202: zp[2]:87 [ make_plasma_charset::$16 ] 53.26: zp[1]:81 [ make_plasma_charset::s#0 ] 27.78: zp[2]:17 [ make_plasma_charset::c#2 make_plasma_charset::c#1 ] 22: zp[1]:80 [ make_plasma_charset::$3 ] 22: zp[1]:82 [ make_plasma_charset::$12 ] 
Uplift Scope [doplasma] 3,169.83: zp[1]:11 [ doplasma::x#2 doplasma::x#1 ] 2,002: zp[1]:77 [ doplasma::$2 ] 241.63: zp[2]:8 [ doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] 223.64: zp[2]:4 [ doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] 219.29: zp[2]:6 [ doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] 173.94: zp[1]:10 [ doplasma::y#4 doplasma::y#1 ] 83.58: zp[2]:75 [ doplasma::sin_y#0 ] 77.15: zp[2]:73 [ doplasma::sin_x#0 ] 
Uplift Scope [sid_rnd] 2,002: zp[1]:89 [ sid_rnd::return#2 ] 334.33: zp[1]:92 [ sid_rnd::return#0 ] 
Uplift Scope [init_angle_screen] 220.36: zp[1]:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 202: zp[1]:93 [ init_angle_screen::$3 ] 202: zp[1]:94 [ init_angle_screen::$4 ] 202: zp[1]:97 [ init_angle_screen::$7 ] 202: zp[2]:106 [ init_angle_screen::angle_w#0 ] 202: zp[2]:108 [ init_angle_screen::$11 ] 202: zp[1]:111 [ init_angle_screen::$13 ] 202: zp[1]:112 [ init_angle_screen::$14 ] 202: zp[1]:113 [ init_angle_screen::$15 ] 129.86: zp[1]:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 84.17: zp[1]:110 [ init_angle_screen::ang_w#0 ] 50.5: zp[2]:98 [ init_angle_screen::yw#0 ] 33.67: zp[2]:95 [ init_angle_screen::xw#0 ] 21.23: zp[1]:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp[2]:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp[2]:25 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp[2]:71 [ init_angle_screen::screen#0 ] 
Uplift Scope [init_dist_screen] 707: zp[1]:53 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] 221.24: zp[1]:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 202: zp[1]:121 [ init_dist_screen::x2#0 ] 202: zp[2]:124 [ init_dist_screen::xds#0 ] 202: zp[2]:126 [ init_dist_screen::ds#0 ] 131.3: zp[1]:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp[1]:131 [ init_dist_screen::d#0 ] 77: zp[1]:50 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp[1]:116 [ init_dist_screen::y2#0 ] 18.18: zp[2]:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] 17.47: zp[1]:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.06: zp[2]:46 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] 4.87: zp[2]:119 [ init_dist_screen::yds#0 ] 
Uplift Scope [sqr] 338: zp[1]:57 [ sqr::val#2 sqr::val#1 sqr::val#0 ] 202: zp[2]:122 [ sqr::return#3 ] 28.5: zp[2]:150 [ sqr::return#0 ] 22: zp[2]:117 [ sqr::return#2 ] 4: zp[1]:149 [ sqr::$0 ] 
Uplift Scope [sqrt] 202: zp[1]:130 [ sqrt::return#2 ] 103: zp[2]:128 [ sqrt::val#0 ] 34.33: zp[1]:142 [ sqrt::return#0 ] 4: zp[2]:136 [ sqrt::found#0 ] 4: zp[2]:138 [ sqrt::$3 ] 2: zp[2]:140 [ sqrt::$1 ] 
Uplift Scope [init_squares] 28.29: zp[1]:58 [ init_squares::i#2 init_squares::i#1 ] 22: zp[1]:154 [ init_squares::$3 ] 22: zp[1]:155 [ init_squares::$4 ] 20.07: zp[2]:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 16.5: zp[2]:59 [ init_squares::sqr#2 init_squares::sqr#1 ] 
Uplift Scope [] 21.83: zp[2]:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] 15.53: zp[1]:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] 15.29: zp[1]:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] 6.6: zp[2]:63 [ heap_head#12 heap_head#1 ] 0.05: zp[2]:69 [ SCREEN_ANGLE#0 ] 0.05: zp[2]:67 [ SCREEN_DIST#0 ] 0.03: zp[2]:152 [ SQUARES#1 ] 
Uplift Scope [memset] 41.33: zp[2]:15 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp[2]:78 [ memset::end#0 ] 1.57: zp[1]:14 [ memset::c#4 ] 0: zp[2]:12 [ memset::str#3 ] 
Uplift Scope [malloc] 2: zp[2]:65 [ malloc::size#3 ] 0.67: zp[2]:156 [ malloc::mem#0 ] 
Uplift Scope [RADIX] 
Uplift Scope [print_char] 
Uplift Scope [print_cls] 
Uplift Scope [sid_rnd_init] 
Uplift Scope [main] 

Uplifting [atan2_16] best 1415221 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:41 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:43 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:31 [ 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]:33 [ 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]:104 [ atan2_16::return#2 ] zp[2]:38 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp[2]:100 [ atan2_16::x#0 ] zp[2]:102 [ atan2_16::y#0 ] 
Limited combination testing to 100 combinations of 144 possible.
Uplifting [bsearch16u] best 1396221 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp[2]:147 [ bsearch16u::result#0 ] zp[2]:145 [ bsearch16u::pivot#0 ] zp[2]:134 [ bsearch16u::return#3 ] zp[2]:132 [ bsearch16u::key#0 ] 
Uplifting [make_plasma_charset] best 1373121 combination reg byte y [ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ] reg byte x [ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ] reg byte a [ make_plasma_charset::$6 ] zp[1]:91 [ make_plasma_charset::$7 ] zp[1]:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ] zp[2]:83 [ make_plasma_charset::$10 ] zp[2]:85 [ make_plasma_charset::$11 ] zp[2]:87 [ make_plasma_charset::$16 ] zp[1]:81 [ make_plasma_charset::s#0 ] zp[2]:17 [ make_plasma_charset::c#2 make_plasma_charset::c#1 ] zp[1]:80 [ make_plasma_charset::$3 ] zp[1]:82 [ make_plasma_charset::$12 ] 
Limited combination testing to 100 combinations of 9216 possible.
Uplifting [doplasma] best 1362121 combination reg byte x [ doplasma::x#2 doplasma::x#1 ] reg byte a [ doplasma::$2 ] zp[2]:8 [ doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] zp[2]:4 [ doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] zp[2]:6 [ doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] zp[1]:10 [ doplasma::y#4 doplasma::y#1 ] zp[2]:75 [ doplasma::sin_y#0 ] zp[2]:73 [ doplasma::sin_x#0 ] 
Uplifting [sid_rnd] best 1353118 combination reg byte a [ sid_rnd::return#2 ] reg byte a [ sid_rnd::return#0 ] 
Uplifting [init_angle_screen] best 1351518 combination zp[1]:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp[2]:106 [ init_angle_screen::angle_w#0 ] zp[2]:108 [ init_angle_screen::$11 ] zp[1]:111 [ init_angle_screen::$13 ] zp[1]:112 [ init_angle_screen::$14 ] zp[1]:113 [ init_angle_screen::$15 ] zp[1]:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:110 [ init_angle_screen::ang_w#0 ] zp[2]:98 [ init_angle_screen::yw#0 ] zp[2]:95 [ init_angle_screen::xw#0 ] zp[1]:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp[2]:25 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp[2]:71 [ init_angle_screen::screen#0 ] 
Limited combination testing to 100 combinations of 65536 possible.
Uplifting [init_dist_screen] best 1348318 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] zp[1]:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] reg byte a [ init_dist_screen::x2#0 ] zp[2]:124 [ init_dist_screen::xds#0 ] zp[2]:126 [ init_dist_screen::ds#0 ] zp[1]:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp[1]:50 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp[1]:116 [ init_dist_screen::y2#0 ] zp[2]:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] zp[1]:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp[2]:46 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] zp[2]:119 [ init_dist_screen::yds#0 ] 
Limited combination testing to 100 combinations of 6144 possible.
Uplifting [sqr] best 1347981 combination reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp[2]:122 [ sqr::return#3 ] zp[2]:150 [ sqr::return#0 ] zp[2]:117 [ sqr::return#2 ] reg byte a [ sqr::$0 ] 
Uplifting [sqrt] best 1347078 combination reg byte a [ sqrt::return#2 ] zp[2]:128 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp[2]:136 [ sqrt::found#0 ] zp[2]:138 [ sqrt::$3 ] zp[2]:140 [ sqrt::$1 ] 
Uplifting [init_squares] best 1346878 combination reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp[2]:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] zp[2]:59 [ init_squares::sqr#2 init_squares::sqr#1 ] 
Uplifting [] best 1346878 combination zp[2]:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] zp[1]:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] zp[1]:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] zp[2]:63 [ heap_head#12 heap_head#1 ] zp[2]:69 [ SCREEN_ANGLE#0 ] zp[2]:67 [ SCREEN_DIST#0 ] zp[2]:152 [ SQUARES#1 ] 
Uplifting [memset] best 1346862 combination zp[2]:15 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:78 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:12 [ memset::str#3 ] 
Uplifting [malloc] best 1346862 combination zp[2]:65 [ malloc::size#3 ] zp[2]:156 [ malloc::mem#0 ] 
Uplifting [RADIX] best 1346862 combination 
Uplifting [print_char] best 1346862 combination 
Uplifting [print_cls] best 1346862 combination 
Uplifting [sid_rnd_init] best 1346862 combination 
Uplifting [main] best 1346862 combination 
Attempting to uplift remaining variables inzp[1]:91 [ make_plasma_charset::$7 ]
Uplifting [make_plasma_charset] best 1346862 combination zp[1]:91 [ make_plasma_charset::$7 ] 
Attempting to uplift remaining variables inzp[1]:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ]
Uplifting [make_plasma_charset] best 1346862 combination zp[1]:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ] 
Attempting to uplift remaining variables inzp[1]:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Uplifting [init_dist_screen] best 1346862 combination zp[1]:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 
Attempting to uplift remaining variables inzp[1]:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Uplifting [init_angle_screen] best 1346862 combination zp[1]:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 
Attempting to uplift remaining variables inzp[1]:111 [ init_angle_screen::$13 ]
Uplifting [init_angle_screen] best 1346262 combination reg byte a [ init_angle_screen::$13 ] 
Attempting to uplift remaining variables inzp[1]:112 [ init_angle_screen::$14 ]
Uplifting [init_angle_screen] best 1345862 combination reg byte a [ init_angle_screen::$14 ] 
Attempting to uplift remaining variables inzp[1]:113 [ init_angle_screen::$15 ]
Uplifting [init_angle_screen] best 1345262 combination reg byte a [ init_angle_screen::$15 ] 
Attempting to uplift remaining variables inzp[1]:10 [ doplasma::y#4 doplasma::y#1 ]
Uplifting [doplasma] best 1345262 combination zp[1]:10 [ doplasma::y#4 doplasma::y#1 ] 
Attempting to uplift remaining variables inzp[1]:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Uplifting [init_dist_screen] best 1345262 combination zp[1]:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 
Attempting to uplift remaining variables inzp[1]:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Uplifting [init_angle_screen] best 1345262 combination zp[1]:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 
Attempting to uplift remaining variables inzp[1]:110 [ init_angle_screen::ang_w#0 ]
Uplifting [init_angle_screen] best 1345262 combination zp[1]:110 [ init_angle_screen::ang_w#0 ] 
Attempting to uplift remaining variables inzp[1]:50 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
Uplifting [init_dist_screen] best 1345192 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 
Attempting to uplift remaining variables inzp[1]:81 [ make_plasma_charset::s#0 ]
Uplifting [make_plasma_charset] best 1345192 combination zp[1]:81 [ make_plasma_charset::s#0 ] 
Attempting to uplift remaining variables inzp[1]:80 [ make_plasma_charset::$3 ]
Uplifting [make_plasma_charset] best 1345152 combination reg byte a [ make_plasma_charset::$3 ] 
Attempting to uplift remaining variables inzp[1]:82 [ make_plasma_charset::$12 ]
Uplifting [make_plasma_charset] best 1345092 combination reg byte a [ make_plasma_charset::$12 ] 
Attempting to uplift remaining variables inzp[1]:116 [ init_dist_screen::y2#0 ]
Uplifting [init_dist_screen] best 1344992 combination reg byte a [ init_dist_screen::y2#0 ] 
Attempting to uplift remaining variables inzp[1]:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Uplifting [init_angle_screen] best 1344992 combination zp[1]:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 
Attempting to uplift remaining variables inzp[1]:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Uplifting [init_dist_screen] best 1344992 combination zp[1]:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 
Attempting to uplift remaining variables inzp[1]:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ]
Uplifting [] best 1344992 combination zp[1]:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] 
Attempting to uplift remaining variables inzp[1]:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ]
Uplifting [] best 1344992 combination zp[1]:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] 
Coalescing zero page register [ zp[2]:12 [ memset::str#3 ] ] with [ zp[2]:15 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp[2]:71 [ init_angle_screen::screen#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp[2]:38 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] - score: 1
Coalescing zero page register [ zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] ] with [ zp[2]:134 [ bsearch16u::return#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:65 [ malloc::size#3 ] ] with [ zp[2]:156 [ malloc::mem#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:83 [ make_plasma_charset::$10 ] ] with [ zp[2]:85 [ make_plasma_charset::$11 ] ] - score: 1
Coalescing zero page register [ zp[2]:95 [ init_angle_screen::xw#0 ] ] with [ zp[2]:100 [ atan2_16::x#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:98 [ init_angle_screen::yw#0 ] ] with [ zp[2]:102 [ atan2_16::y#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:104 [ atan2_16::return#2 ] ] with [ zp[2]:106 [ init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:117 [ sqr::return#2 ] ] with [ zp[2]:119 [ init_dist_screen::yds#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:122 [ sqr::return#3 ] ] with [ zp[2]:124 [ init_dist_screen::xds#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:122 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp[2]:150 [ sqr::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:126 [ init_dist_screen::ds#0 ] ] with [ zp[2]:128 [ sqrt::val#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:136 [ sqrt::found#0 ] ] with [ zp[2]:138 [ sqrt::$3 ] ] - score: 1
Coalescing zero page register [ zp[2]:36 [ 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#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] with [ zp[2]:104 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 ] ] with [ zp[2]:136 [ sqrt::found#0 sqrt::$3 ] ] - score: 1
Coalescing zero page register [ zp[2]:65 [ malloc::size#3 malloc::mem#0 ] ] with [ zp[2]:152 [ SQUARES#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:83 [ make_plasma_charset::$10 make_plasma_charset::$11 ] ] with [ zp[2]:87 [ make_plasma_charset::$16 ] ] - score: 1
Coalescing zero page register [ zp[2]:122 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp[2]:126 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:36 [ 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#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp[2]:108 [ init_angle_screen::$11 ] ] - score: 1
Coalescing zero page register [ zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp[2]:140 [ sqrt::$1 ] ] - score: 1
Coalescing zero page register [ zp[2]:122 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp[2]:132 [ bsearch16u::key#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:12 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:4 [ doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] ]
Coalescing zero page register [ zp[2]:17 [ make_plasma_charset::c#2 make_plasma_charset::c#1 ] ] with [ zp[2]:6 [ doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] ]
Coalescing zero page register [ zp[2]:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] ] with [ zp[2]:8 [ doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] ]
Coalescing zero page register [ zp[1]:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 ] ] with [ zp[1]:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] ]
Coalescing zero page register [ zp[1]:24 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] with [ zp[1]:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] ]
Coalescing zero page register [ zp[1]:29 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] with [ zp[1]:10 [ doplasma::y#4 doplasma::y#1 ] ]
Coalescing zero page register [ zp[1]:45 [ init_dist_screen::y#10 init_dist_screen::y#1 ] ] with [ zp[1]:30 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ]
Coalescing zero page register [ zp[2]:46 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] ] with [ zp[2]:25 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] ]
Coalescing zero page register [ zp[2]:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] ] with [ zp[2]:27 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ]
Coalescing zero page register [ zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] with [ zp[2]:31 [ 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]:59 [ init_squares::sqr#2 init_squares::sqr#1 ] ] with [ zp[2]:33 [ 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]:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ] with [ zp[2]:36 [ 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#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] ]
Coalescing zero page register [ zp[2]:63 [ heap_head#12 heap_head#1 ] ] with [ zp[2]:41 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ]
Coalescing zero page register [ zp[2]:65 [ malloc::size#3 malloc::mem#0 SQUARES#1 ] ] with [ zp[2]:43 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] ]
Coalescing zero page register [ zp[2]:78 [ memset::end#0 ] ] with [ zp[2]:73 [ doplasma::sin_x#0 ] ]
Coalescing zero page register [ zp[1]:81 [ make_plasma_charset::s#0 ] ] with [ zp[1]:51 [ init_dist_screen::x#2 init_dist_screen::x#1 ] ]
Coalescing zero page register [ zp[2]:83 [ make_plasma_charset::$10 make_plasma_charset::$11 make_plasma_charset::$16 ] ] with [ zp[2]:75 [ doplasma::sin_y#0 ] ]
Coalescing zero page register [ zp[1]:91 [ make_plasma_charset::$7 ] ] with [ zp[1]:52 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] ]
Coalescing zero page register [ zp[2]:117 [ sqr::return#2 init_dist_screen::yds#0 ] ] with [ zp[2]:95 [ init_angle_screen::xw#0 atan2_16::x#0 ] ]
Coalescing zero page register [ zp[2]:122 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] ] with [ zp[2]:98 [ init_angle_screen::yw#0 atan2_16::y#0 ] ]
Coalescing zero page register [ zp[1]:45 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] with [ zp[1]:21 [ make_plasma_charset::i#2 make_plasma_charset::i#1 sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] ]
Coalescing zero page register [ zp[2]:46 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] ] with [ zp[2]:12 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ] ]
Coalescing zero page register [ zp[2]:48 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ] with [ zp[2]:17 [ make_plasma_charset::c#2 make_plasma_charset::c#1 doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ] ]
Coalescing zero page register [ zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$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 ] ] with [ zp[2]:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ] ]
Coalescing zero page register [ zp[2]:78 [ memset::end#0 doplasma::sin_x#0 ] ] with [ zp[2]:59 [ init_squares::sqr#2 init_squares::sqr#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ]
Coalescing zero page register [ zp[1]:81 [ make_plasma_charset::s#0 init_dist_screen::x#2 init_dist_screen::x#1 ] ] with [ zp[1]:24 [ init_angle_screen::y#5 init_angle_screen::y#1 sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] ]
Coalescing zero page register [ zp[2]:83 [ make_plasma_charset::$10 make_plasma_charset::$11 make_plasma_charset::$16 doplasma::sin_y#0 ] ] with [ zp[2]:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 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#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] ]
Coalescing zero page register [ zp[1]:91 [ make_plasma_charset::$7 init_dist_screen::xb#2 init_dist_screen::xb#1 ] ] with [ zp[1]:29 [ init_angle_screen::x#2 init_angle_screen::x#1 doplasma::y#4 doplasma::y#1 ] ]
Coalescing zero page register [ zp[2]:145 [ bsearch16u::pivot#0 ] ] with [ zp[2]:63 [ heap_head#12 heap_head#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ]
Coalescing zero page register [ zp[2]:147 [ bsearch16u::result#0 ] ] with [ zp[2]:78 [ memset::end#0 doplasma::sin_x#0 init_squares::sqr#2 init_squares::sqr#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ]
Allocated (was zp[1]:45) zp[1]:2 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#2 init_angle_screen::xb#1 make_plasma_charset::i#2 make_plasma_charset::i#1 sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ]
Allocated (was zp[2]:46) zp[2]:3 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ]
Allocated (was zp[2]:48) zp[2]:5 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 make_plasma_charset::c#2 make_plasma_charset::c#1 doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ]
Allocated (was zp[2]:54) zp[2]:7 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$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 print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ]
Allocated (was zp[2]:65) zp[2]:9 [ malloc::size#3 malloc::mem#0 SQUARES#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated (was zp[2]:67) zp[2]:11 [ SCREEN_DIST#0 ]
Allocated (was zp[2]:69) zp[2]:13 [ SCREEN_ANGLE#0 ]
Allocated (was zp[1]:81) zp[1]:15 [ make_plasma_charset::s#0 init_dist_screen::x#2 init_dist_screen::x#1 init_angle_screen::y#5 init_angle_screen::y#1 sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ]
Allocated (was zp[2]:83) zp[2]:16 [ make_plasma_charset::$10 make_plasma_charset::$11 make_plasma_charset::$16 doplasma::sin_y#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 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#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ]
Allocated (was zp[1]:91) zp[1]:18 [ make_plasma_charset::$7 init_dist_screen::xb#2 init_dist_screen::xb#1 init_angle_screen::x#2 init_angle_screen::x#1 doplasma::y#4 doplasma::y#1 ]
Allocated (was zp[1]:110) zp[1]:19 [ init_angle_screen::ang_w#0 ]
Allocated (was zp[2]:117) zp[2]:20 [ sqr::return#2 init_dist_screen::yds#0 init_angle_screen::xw#0 atan2_16::x#0 ]
Allocated (was zp[2]:122) zp[2]:22 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::yw#0 atan2_16::y#0 ]
Allocated (was zp[2]:145) zp[2]:24 [ bsearch16u::pivot#0 heap_head#12 heap_head#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated (was zp[2]:147) zp[2]:26 [ bsearch16u::result#0 memset::end#0 doplasma::sin_x#0 init_squares::sqr#2 init_squares::sqr#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
// Plasma based on the distance/angle to the screen center
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(__bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .label D018 = $d018
  // Color Ram
  .label COLS = $d800
  // The colors of the C64
  .const BLACK = 0
  .const SIZEOF_WORD = 2
  // The number of iterations performed during 16-bit CORDIC atan2 calculation
  .const CORDIC_ITERATIONS_16 = $f
  // SID registers for random number generation
  .label SID_VOICE3_FREQ = $d40e
  .label SID_VOICE3_CONTROL = $d412
  .const SID_CONTROL_NOISE = $80
  .label SID_VOICE3_OSC = $d41b
  // Plasma charset
  .label CHARSET = $2000
  // Plasma screen 1
  .label SCREEN1 = $2800
  // Plasma screen 2
  .label SCREEN2 = $2c00
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  .label print_line_cursor = $400
  // The number of squares to pre-calculate. Limits what values sqr() can calculate and the result of sqrt()
  .const NUM_SQUARES = $30
  // Head of the heap. Moved backward each malloc()
  .label heap_head = $18
  // Squares for each byte value SQUARES[i] = i*i
  // Initialized by init_squares()
  .label SQUARES = 9
  .label print_char_cursor = 7
  .label SCREEN_DIST = $b
  .label SCREEN_ANGLE = $d
  // Offsets for the sines
  .label sin_offset_x = 2
  .label sin_offset_y = $f
  // @begin
__bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
__b1_from___bbegin:
  jmp __b1
  // @1
__b1:
  // [2] call malloc 
  // [255] phi from @1 to malloc [phi:@1->malloc]
malloc_from___b1:
  // [255] phi (word) malloc::size#3 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [255] phi (byte*) heap_head#12 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 
  lda #<HEAP_TOP
  sta.z heap_head
  lda #>HEAP_TOP
  sta.z heap_head+1
  jsr malloc
  jmp __b3
  // @3
__b3:
  // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_DIST
  lda.z malloc.mem+1
  sta.z SCREEN_DIST+1
  // [4] call malloc 
  // [255] phi from @3 to malloc [phi:@3->malloc]
malloc_from___b3:
  // [255] phi (word) malloc::size#3 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [255] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy 
  jsr malloc
  jmp __b4
  // @4
__b4:
  // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_ANGLE
  lda.z malloc.mem+1
  sta.z SCREEN_ANGLE+1
  // [6] phi from @4 to @2 [phi:@4->@2]
__b2_from___b4:
  jmp __b2
  // @2
__b2:
  // [7] call main 
  jsr main
  // [8] phi from @2 to @end [phi:@2->@end]
__bend_from___b2:
  jmp __bend
  // @end
__bend:
  // main
main: {
    .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f
    .const toD0182_return = (>(SCREEN2&$3fff)*4)|(>CHARSET)/4&$f
    // [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
    lda.z SCREEN_DIST
    sta.z init_dist_screen.screen
    lda.z SCREEN_DIST+1
    sta.z init_dist_screen.screen+1
    // [10] call init_dist_screen 
    // [170] phi from main to init_dist_screen [phi:main->init_dist_screen]
  init_dist_screen_from_main:
    jsr init_dist_screen
    jmp __b5
    // main::@5
  __b5:
    // [11] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 
    lda.z SCREEN_ANGLE
    sta.z init_angle_screen.screen
    lda.z SCREEN_ANGLE+1
    sta.z init_angle_screen.screen+1
    // [12] call init_angle_screen 
    jsr init_angle_screen
    // [13] phi from main::@5 to main::@6 [phi:main::@5->main::@6]
  __b6_from___b5:
    jmp __b6
    // main::@6
  __b6:
    // [14] call make_plasma_charset 
    // [52] phi from main::@6 to make_plasma_charset [phi:main::@6->make_plasma_charset]
  make_plasma_charset_from___b6:
    jsr make_plasma_charset
    // [15] phi from main::@6 to main::@7 [phi:main::@6->main::@7]
  __b7_from___b6:
    jmp __b7
    // main::@7
  __b7:
    // [16] call memset 
    // [44] phi from main::@7 to memset [phi:main::@7->memset]
  memset_from___b7:
    // [44] phi (byte) memset::c#4 = (const byte) BLACK [phi:main::@7->memset#0] -- vbuxx=vbuc1 
    ldx #BLACK
    // [44] phi (void*) memset::str#3 = (void*)(const byte*) COLS [phi:main::@7->memset#1] -- pvoz1=pvoc1 
    lda #<COLS
    sta.z memset.str
    lda #>COLS
    sta.z memset.str+1
    jsr memset
    // [17] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
  __b1_from___b7:
    // [17] phi (byte) sin_offset_y#14 = (byte) 0 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z sin_offset_y
    // [17] phi (byte) sin_offset_x#14 = (byte) 0 [phi:main::@7->main::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z sin_offset_x
    jmp __b1
  // Show double-buffered plasma
    // main::@1
  __b1:
    // [18] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  __b2_from___b1:
    jmp __b2
    // main::@2
  __b2:
    // [19] call doplasma 
    // [25] phi from main::@2 to doplasma [phi:main::@2->doplasma]
  doplasma_from___b2:
    // [25] phi (byte*) doplasma::screen#6 = (const byte*) SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN1
    sta.z doplasma.screen
    lda #>SCREEN1
    sta.z doplasma.screen+1
    // [25] phi (byte) sin_offset_y#10 = (byte) sin_offset_y#14 [phi:main::@2->doplasma#1] -- register_copy 
    // [25] phi (byte) sin_offset_x#10 = (byte) sin_offset_x#14 [phi:main::@2->doplasma#2] -- register_copy 
    jsr doplasma
    // [20] phi from main::@2 to main::toD0181 [phi:main::@2->main::toD0181]
  toD0181_from___b2:
    jmp toD0181
    // main::toD0181
  toD0181:
    jmp __b3
    // main::@3
  __b3:
    // [21] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // [22] call doplasma 
    // [25] phi from main::@3 to doplasma [phi:main::@3->doplasma]
  doplasma_from___b3:
    // [25] phi (byte*) doplasma::screen#6 = (const byte*) SCREEN2 [phi:main::@3->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN2
    sta.z doplasma.screen
    lda #>SCREEN2
    sta.z doplasma.screen+1
    // [25] phi (byte) sin_offset_y#10 = (byte) sin_offset_y#12 [phi:main::@3->doplasma#1] -- register_copy 
    // [25] phi (byte) sin_offset_x#10 = (byte) sin_offset_x#12 [phi:main::@3->doplasma#2] -- register_copy 
    jsr doplasma
    // [23] phi from main::@3 to main::toD0182 [phi:main::@3->main::toD0182]
  toD0182_from___b3:
    jmp toD0182
    // main::toD0182
  toD0182:
    jmp __b4
    // main::@4
  __b4:
    // [24] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0182_return
    sta D018
    // [17] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
  __b1_from___b4:
    // [17] phi (byte) sin_offset_y#14 = (byte) sin_offset_y#12 [phi:main::@4->main::@1#0] -- register_copy 
    // [17] phi (byte) sin_offset_x#14 = (byte) sin_offset_x#12 [phi:main::@4->main::@1#1] -- register_copy 
    jmp __b1
}
  // doplasma
// Render plasma to the passed screen
// doplasma(byte* zp(7) screen)
doplasma: {
    .label angle = 3
    .label dist = 5
    .label sin_x = $1a
    .label sin_y = $10
    .label screen = 7
    .label y = $12
    // [26] (byte*) doplasma::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 
    lda.z SCREEN_ANGLE
    sta.z angle
    lda.z SCREEN_ANGLE+1
    sta.z angle+1
    // [27] (byte*) doplasma::dist#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
    lda.z SCREEN_DIST
    sta.z dist
    lda.z SCREEN_DIST+1
    sta.z dist+1
    // [28] (byte*) doplasma::sin_x#0 ← (const byte*) SINTABLE + (byte) sin_offset_x#10 -- pbuz1=pbuc1_plus_vbuz2 
    lda.z sin_offset_x
    clc
    adc #<SINTABLE
    sta.z sin_x
    lda #>SINTABLE
    adc #0
    sta.z sin_x+1
    // [29] (byte*) doplasma::sin_y#0 ← (const byte*) SINTABLE + (byte) sin_offset_y#10 -- pbuz1=pbuc1_plus_vbuz2 
    lda.z sin_offset_y
    clc
    adc #<SINTABLE
    sta.z sin_y
    lda #>SINTABLE
    adc #0
    sta.z sin_y+1
    // [30] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
  __b1_from_doplasma:
    // [30] phi (byte) doplasma::y#4 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [30] phi (byte*) doplasma::screen#5 = (byte*) doplasma::screen#6 [phi:doplasma->doplasma::@1#1] -- register_copy 
    // [30] phi (byte*) doplasma::dist#4 = (byte*) doplasma::dist#0 [phi:doplasma->doplasma::@1#2] -- register_copy 
    // [30] phi (byte*) doplasma::angle#4 = (byte*) doplasma::angle#0 [phi:doplasma->doplasma::@1#3] -- register_copy 
    jmp __b1
    // [30] phi from doplasma::@3 to doplasma::@1 [phi:doplasma::@3->doplasma::@1]
  __b1_from___b3:
    // [30] phi (byte) doplasma::y#4 = (byte) doplasma::y#1 [phi:doplasma::@3->doplasma::@1#0] -- register_copy 
    // [30] phi (byte*) doplasma::screen#5 = (byte*) doplasma::screen#2 [phi:doplasma::@3->doplasma::@1#1] -- register_copy 
    // [30] phi (byte*) doplasma::dist#4 = (byte*) doplasma::dist#1 [phi:doplasma::@3->doplasma::@1#2] -- register_copy 
    // [30] phi (byte*) doplasma::angle#4 = (byte*) doplasma::angle#1 [phi:doplasma::@3->doplasma::@1#3] -- register_copy 
    jmp __b1
    // doplasma::@1
  __b1:
    // [31] phi from doplasma::@1 to doplasma::@2 [phi:doplasma::@1->doplasma::@2]
  __b2_from___b1:
    // [31] phi (byte) doplasma::x#2 = (byte) 0 [phi:doplasma::@1->doplasma::@2#0] -- vbuxx=vbuc1 
    ldx #0
    jmp __b2
    // [31] phi from doplasma::@2 to doplasma::@2 [phi:doplasma::@2->doplasma::@2]
  __b2_from___b2:
    // [31] phi (byte) doplasma::x#2 = (byte) doplasma::x#1 [phi:doplasma::@2->doplasma::@2#0] -- register_copy 
    jmp __b2
    // doplasma::@2
  __b2:
    // [32] (byte~) doplasma::$2 ← *((byte*) doplasma::sin_x#0 + *((byte*) doplasma::angle#4 + (byte) doplasma::x#2)) + *((byte*) doplasma::sin_y#0 + *((byte*) doplasma::dist#4 + (byte) doplasma::x#2)) -- vbuaa=pbuz1_derefidx_(pbuz2_derefidx_vbuxx)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuxx) 
    txa
    tay
    lda (dist),y
    sta.z $ff
    lda (angle),y
    tay
    lda (sin_x),y
    ldy.z $ff
    clc
    adc (sin_y),y
    // [33] *((byte*) doplasma::screen#5 + (byte) doplasma::x#2) ← (byte~) doplasma::$2 -- pbuz1_derefidx_vbuxx=vbuaa 
    stx.z $ff
    ldy.z $ff
    sta (screen),y
    // [34] (byte) doplasma::x#1 ← ++ (byte) doplasma::x#2 -- vbuxx=_inc_vbuxx 
    inx
    // [35] if((byte) doplasma::x#1!=(byte) $28) goto doplasma::@2 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$28
    bne __b2_from___b2
    jmp __b3
    // doplasma::@3
  __b3:
    // [36] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen
    sta.z screen
    bcc !+
    inc.z screen+1
  !:
    // [37] (byte*) doplasma::angle#1 ← (byte*) doplasma::angle#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z angle
    sta.z angle
    bcc !+
    inc.z angle+1
  !:
    // [38] (byte*) doplasma::dist#1 ← (byte*) doplasma::dist#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z dist
    sta.z dist
    bcc !+
    inc.z dist+1
  !:
    // [39] (byte) doplasma::y#1 ← ++ (byte) doplasma::y#4 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [40] if((byte) doplasma::y#1!=(byte) $1a) goto doplasma::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$1a
    cmp.z y
    bne __b1_from___b3
    jmp __b4
    // doplasma::@4
  __b4:
    // [41] (byte) sin_offset_x#12 ← (byte) sin_offset_x#10 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 
    lax.z sin_offset_x
    axs #3
    stx.z sin_offset_x
    // [42] (byte) sin_offset_y#12 ← (byte) sin_offset_y#10 - (byte) 7 -- vbuz1=vbuz1_minus_vbuc1 
    lax.z sin_offset_y
    axs #7
    stx.z sin_offset_y
    jmp __breturn
    // doplasma::@return
  __breturn:
    // [43] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zp(3) str, byte register(X) c)
memset: {
    .label end = $1a
    .label dst = 3
    .label str = 3
    jmp __b1
    // memset::@1
  __b1:
    // [45] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 -- pbuz1=pbuz2_plus_vwuc1 
    lda.z str
    clc
    adc #<$3e8
    sta.z end
    lda.z str+1
    adc #>$3e8
    sta.z end+1
    // [46] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3
    // [47] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2]
  __b2_from___b1:
  __b2_from___b3:
    // [47] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy 
    jmp __b2
    // memset::@2
  __b2:
    // [48] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 
    lda.z dst+1
    cmp.z end+1
    bne __b3
    lda.z dst
    cmp.z end
    bne __b3
    jmp __breturn
    // memset::@return
  __breturn:
    // [49] return 
    rts
    // memset::@3
  __b3:
    // [50] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx 
    txa
    ldy #0
    sta (dst),y
    // [51] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    jmp __b2_from___b3
}
  // make_plasma_charset
// Make a plasma-friendly charset where the chars are randomly filled
make_plasma_charset: {
    .label __7 = $12
    .label __10 = $10
    .label __11 = $10
    .label s = $f
    .label i = 2
    .label c = 5
    .label __16 = $10
    // [53] call sid_rnd_init 
    jsr sid_rnd_init
    // [54] phi from make_plasma_charset to make_plasma_charset::@12 [phi:make_plasma_charset->make_plasma_charset::@12]
  __b12_from_make_plasma_charset:
    jmp __b12
    // make_plasma_charset::@12
  __b12:
    // [55] call print_cls 
    // [90] phi from make_plasma_charset::@12 to print_cls [phi:make_plasma_charset::@12->print_cls]
  print_cls_from___b12:
    jsr print_cls
    // [56] phi from make_plasma_charset::@12 to make_plasma_charset::@1 [phi:make_plasma_charset::@12->make_plasma_charset::@1]
  __b1_from___b12:
    // [56] phi (byte*) print_char_cursor#18 = (const byte*) print_line_cursor#0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta.z print_char_cursor
    lda #>print_line_cursor
    sta.z print_char_cursor+1
    // [56] phi (word) make_plasma_charset::c#2 = (word) 0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z c
    lda #>0
    sta.z c+1
    jmp __b1
    // make_plasma_charset::@1
  __b1:
    // [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 -- vwuz1_lt_vwuc1_then_la1 
    lda.z c+1
    cmp #>$100
    bcc __b2
    bne !+
    lda.z c
    cmp #<$100
    bcc __b2
  !:
    jmp __breturn
    // make_plasma_charset::@return
  __breturn:
    // [58] return 
    rts
    // make_plasma_charset::@2
  __b2:
    // [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2 -- vbuaa=_lo_vwuz1 
    lda.z c
    // [60] (byte) make_plasma_charset::s#0 ← *((const byte*) SINTABLE + (byte~) make_plasma_charset::$3) -- vbuz1=pbuc1_derefidx_vbuaa 
    tay
    lda SINTABLE,y
    sta.z s
    // [61] phi from make_plasma_charset::@2 to make_plasma_charset::@3 [phi:make_plasma_charset::@2->make_plasma_charset::@3]
  __b3_from___b2:
    // [61] phi (byte) make_plasma_charset::i#2 = (byte) 0 [phi:make_plasma_charset::@2->make_plasma_charset::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b3
    // make_plasma_charset::@3
  __b3:
    // [62] if((byte) make_plasma_charset::i#2<(byte) 8) goto make_plasma_charset::@5 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #8
    bcc __b5_from___b3
    jmp __b4
    // make_plasma_charset::@4
  __b4:
    // [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 
    lda #7
    and.z c
    // [64] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@11 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne __b11_from___b4
    // [65] phi from make_plasma_charset::@4 to make_plasma_charset::@10 [phi:make_plasma_charset::@4->make_plasma_charset::@10]
  __b10_from___b4:
    jmp __b10
    // make_plasma_charset::@10
  __b10:
    // [66] call print_char 
    jsr print_char
    // [67] phi from make_plasma_charset::@10 make_plasma_charset::@4 to make_plasma_charset::@11 [phi:make_plasma_charset::@10/make_plasma_charset::@4->make_plasma_charset::@11]
  __b11_from___b10:
  __b11_from___b4:
    // [67] phi (byte*) print_char_cursor#30 = (byte*) print_char_cursor#1 [phi:make_plasma_charset::@10/make_plasma_charset::@4->make_plasma_charset::@11#0] -- register_copy 
    jmp __b11
    // make_plasma_charset::@11
  __b11:
    // [68] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#2 -- vwuz1=_inc_vwuz1 
    inc.z c
    bne !+
    inc.z c+1
  !:
    // [56] phi from make_plasma_charset::@11 to make_plasma_charset::@1 [phi:make_plasma_charset::@11->make_plasma_charset::@1]
  __b1_from___b11:
    // [56] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#30 [phi:make_plasma_charset::@11->make_plasma_charset::@1#0] -- register_copy 
    // [56] phi (word) make_plasma_charset::c#2 = (word) make_plasma_charset::c#1 [phi:make_plasma_charset::@11->make_plasma_charset::@1#1] -- register_copy 
    jmp __b1
    // [69] phi from make_plasma_charset::@3 to make_plasma_charset::@5 [phi:make_plasma_charset::@3->make_plasma_charset::@5]
  __b5_from___b3:
    // [69] phi (byte) make_plasma_charset::b#2 = (byte) 0 [phi:make_plasma_charset::@3->make_plasma_charset::@5#0] -- vbuyy=vbuc1 
    ldy #0
    // [69] phi (byte) make_plasma_charset::ii#2 = (byte) 0 [phi:make_plasma_charset::@3->make_plasma_charset::@5#1] -- vbuxx=vbuc1 
    ldx #0
    jmp __b5
    // make_plasma_charset::@5
  __b5:
    // [70] if((byte) make_plasma_charset::ii#2<(byte) 8) goto make_plasma_charset::@6 -- vbuxx_lt_vbuc1_then_la1 
    cpx #8
    bcc __b6_from___b5
    jmp __b7
    // make_plasma_charset::@7
  __b7:
    // [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z c
    asl
    sta.z __10
    lda.z c+1
    rol
    sta.z __10+1
    asl.z __10
    rol.z __10+1
    asl.z __10
    rol.z __10+1
    // [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2 -- vwuz1=vwuz1_plus_vbuz2 
    lda.z i
    clc
    adc.z __11
    sta.z __11
    bcc !+
    inc.z __11+1
  !:
    // [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET + (word~) make_plasma_charset::$11 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z __16
    adc #<CHARSET
    sta.z __16
    lda.z __16+1
    adc #>CHARSET
    sta.z __16+1
    // [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 -- _deref_pbuz1=vbuyy 
    tya
    ldy #0
    sta (__16),y
    // [75] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [61] phi from make_plasma_charset::@7 to make_plasma_charset::@3 [phi:make_plasma_charset::@7->make_plasma_charset::@3]
  __b3_from___b7:
    // [61] phi (byte) make_plasma_charset::i#2 = (byte) make_plasma_charset::i#1 [phi:make_plasma_charset::@7->make_plasma_charset::@3#0] -- register_copy 
    jmp __b3
    // [76] phi from make_plasma_charset::@5 to make_plasma_charset::@6 [phi:make_plasma_charset::@5->make_plasma_charset::@6]
  __b6_from___b5:
    jmp __b6
    // make_plasma_charset::@6
  __b6:
    // [77] call sid_rnd 
    jsr sid_rnd
    // [78] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
    jmp __b13
    // make_plasma_charset::@13
  __b13:
    // [79] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2
    // [80] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 
    and #$ff
    sta.z __7
    // [81] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@8 -- vbuz1_le_vbuz2_then_la1 
    lda.z s
    cmp.z __7
    bcs __b8_from___b13
    jmp __b9
    // make_plasma_charset::@9
  __b9:
    // [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte*) make_plasma_charset::bittab + (byte) make_plasma_charset::ii#2) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx 
    tya
    ora bittab,x
    tay
    // [83] phi from make_plasma_charset::@13 make_plasma_charset::@9 to make_plasma_charset::@8 [phi:make_plasma_charset::@13/make_plasma_charset::@9->make_plasma_charset::@8]
  __b8_from___b13:
  __b8_from___b9:
    // [83] phi (byte) make_plasma_charset::b#6 = (byte) make_plasma_charset::b#2 [phi:make_plasma_charset::@13/make_plasma_charset::@9->make_plasma_charset::@8#0] -- register_copy 
    jmp __b8
    // make_plasma_charset::@8
  __b8:
    // [84] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#2 -- vbuxx=_inc_vbuxx 
    inx
    // [69] phi from make_plasma_charset::@8 to make_plasma_charset::@5 [phi:make_plasma_charset::@8->make_plasma_charset::@5]
  __b5_from___b8:
    // [69] phi (byte) make_plasma_charset::b#2 = (byte) make_plasma_charset::b#6 [phi:make_plasma_charset::@8->make_plasma_charset::@5#0] -- register_copy 
    // [69] phi (byte) make_plasma_charset::ii#2 = (byte) make_plasma_charset::ii#1 [phi:make_plasma_charset::@8->make_plasma_charset::@5#1] -- register_copy 
    jmp __b5
    bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80
}
  // sid_rnd
// Get a random number from the SID voice 3,
// Must be initialized with sid_rnd_init()
sid_rnd: {
    // [85] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC) -- vbuaa=_deref_pbuc1 
    lda SID_VOICE3_OSC
    jmp __breturn
    // sid_rnd::@return
  __breturn:
    // [86] return 
    rts
}
  // print_char
// Print a single char
print_char: {
    .const ch = '.'
    // [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
    lda #ch
    ldy #0
    sta (print_char_cursor),y
    // [88] (byte*) print_char_cursor#1 ← ++ (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:
    // [89] return 
    rts
}
  // print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    // [91] call memset 
    // [44] phi from print_cls to memset [phi:print_cls->memset]
  memset_from_print_cls:
    // [44] phi (byte) memset::c#4 = (byte) ' ' [phi:print_cls->memset#0] -- vbuxx=vbuc1 
    ldx #' '
    // [44] phi (void*) memset::str#3 = (void*)(const byte*) print_line_cursor#0 [phi:print_cls->memset#1] -- pvoz1=pvoc1 
    lda #<print_line_cursor
    sta.z memset.str
    lda #>print_line_cursor
    sta.z memset.str+1
    jsr memset
    jmp __breturn
    // print_cls::@return
  __breturn:
    // [92] return 
    rts
}
  // sid_rnd_init
// Initialize SID voice 3 for random number generation
sid_rnd_init: {
    // [93] *((const word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 
    lda #<$ffff
    sta SID_VOICE3_FREQ
    lda #>$ffff
    sta SID_VOICE3_FREQ+1
    // [94] *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 
    lda #SID_CONTROL_NOISE
    sta SID_VOICE3_CONTROL
    jmp __breturn
    // sid_rnd_init::@return
  __breturn:
    // [95] return 
    rts
}
  // init_angle_screen
// Populates 1000 bytes (a screen) with values representing the angle to the center.
// Utilizes symmetry around the  center
// init_angle_screen(byte* zp(5) screen)
init_angle_screen: {
    .label __11 = $10
    .label screen = 5
    .label screen_topline = 3
    .label screen_bottomline = 5
    .label xw = $14
    .label yw = $16
    .label angle_w = $10
    .label ang_w = $13
    .label x = $12
    .label xb = 2
    .label y = $f
    // [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 
    lda.z screen
    clc
    adc #<$28*$c
    sta.z screen_topline
    lda.z screen+1
    adc #>$28*$c
    sta.z screen_topline+1
    // [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 
    clc
    lda.z screen_bottomline
    adc #<$28*$c
    sta.z screen_bottomline
    lda.z screen_bottomline+1
    adc #>$28*$c
    sta.z screen_bottomline+1
    // [98] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
  __b1_from_init_angle_screen:
    // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy 
    // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy 
    // [98] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    jmp __b1
    // [98] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
  __b1_from___b4:
    // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy 
    // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy 
    // [98] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy 
    jmp __b1
    // init_angle_screen::@1
  __b1:
    // [99] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
  __b2_from___b1:
    // [99] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [99] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp __b2
    // init_angle_screen::@2
  __b2:
    // [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc __b3
    jmp __b4
    // init_angle_screen::@4
  __b4:
    // [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
    lda.z screen_topline
    sec
    sbc #<$28
    sta.z screen_topline
    lda.z screen_topline+1
    sbc #>$28
    sta.z screen_topline+1
    // [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen_bottomline
    sta.z screen_bottomline
    bcc !+
    inc.z screen_bottomline+1
  !:
    // [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [104] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$d
    cmp.z y
    bne __b1_from___b4
    jmp __breturn
    // init_angle_screen::@return
  __breturn:
    // [105] return 
    rts
    // init_angle_screen::@3
  __b3:
    // [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
    ldy #0
    sta.z xw+1
    sty.z xw
    // [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z y
    asl
    // [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
    ldy #0
    sta.z yw+1
    sty.z yw
    // [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
    // [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
    // [113] call atan2_16 
    jsr atan2_16
    // [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0
    jmp __b5
    // init_angle_screen::@5
  __b5:
    // [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
    // [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 
    lda #$80
    clc
    adc.z __11
    sta.z __11
    bcc !+
    inc.z __11+1
  !:
    // [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 
    lda.z __11+1
    sta.z ang_w
    // [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z ang_w
    ldy.z xb
    sta (screen_bottomline),y
    // [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 
    lda.z ang_w
    eor #$ff
    clc
    adc #1
    // [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z xb
    sta (screen_topline),y
    // [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 
    lda #$80
    clc
    adc.z ang_w
    // [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 
    lda #$80
    sec
    sbc.z ang_w
    // [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_bottomline),y
    // [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [99] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
  __b2_from___b5:
    // [99] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy 
    // [99] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy 
    jmp __b2
}
  // atan2_16
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// atan2_16(signed word zp($14) x, signed word zp($16) y)
atan2_16: {
    .label __2 = 7
    .label __7 = $1a
    .label yi = 7
    .label xi = $1a
    .label angle = $10
    .label xd = 9
    .label yd = $18
    .label return = $10
    .label x = $14
    .label y = $16
    // [127] 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:
    // [128] (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
    // [129] 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:
    // [129] 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:
    // [130] 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:
    // [131] (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
    // [132] 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:
    // [132] 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:
    // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
  __b10_from___b6:
    // [133] 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
    // [133] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 
    ldx #0
    // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [133] 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:
    // [134] 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
    // [135] 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:
    // [135] 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:
    // [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z angle+1
    ror.z angle
    // [137] 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:
    // [138] (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
    // [139] 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:
    // [139] 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:
    // [140] 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:
    // [141] (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
    // [142] 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:
    // [142] 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:
    // [143] return 
    rts
    // atan2_16::@11
  __b11:
    // [144] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx 
    txa
    tay
    // [145] (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
    // [146] (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
    // [147] 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:
    // [147] 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 
    // [147] 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 
    // [147] 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:
    // [148] 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:
    // [149] 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:
    // [150] (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
    // [151] (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
    // [152] 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:
    // [152] 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 
    // [152] 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:
    // [153] 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:
    // [154] (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
    // [155] (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
    // [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [157] (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
    // [158] 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:
    // [158] 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 
    // [158] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [158] 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:
    // [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [160] if((byte) atan2_16::i#1==(const 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
    // [133] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
  __b10_from___b19:
    // [133] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [133] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [133] 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:
    // [161] (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
    // [162] (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
    // [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [164] (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:
    // [165] (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
    // [166] (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
    // [167] (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:
    // [168] (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:
    // [169] (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_dist_screen
// Populates 1000 bytes (a screen) with values representing the distance to the center.
// The actual value stored is distance*2 to increase precision
// init_dist_screen(byte* zp(3) screen)
init_dist_screen: {
    .label screen = 3
    .label screen_bottomline = 5
    .label yds = $14
    .label screen_topline = 3
    .label y = 2
    .label xds = $16
    .label ds = $16
    .label x = $f
    .label xb = $12
    // [171] call init_squares 
    // [242] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
  init_squares_from_init_dist_screen:
    jsr init_squares
    jmp __b11
    // init_dist_screen::@11
  __b11:
    // [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 
    lda.z screen
    clc
    adc #<$28*$18
    sta.z screen_bottomline
    lda.z screen+1
    adc #>$28*$18
    sta.z screen_bottomline+1
    // [173] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1]
  __b1_from___b11:
    // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy 
    // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy 
    // [173] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    jmp __b1
    // [173] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1]
  __b1_from___b7:
    // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy 
    // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy 
    // [173] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy 
    jmp __b1
    // init_dist_screen::@1
  __b1:
    // [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z y
    asl
    // [175] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 
    cmp #$18
    bcs __b2
    jmp __b3
    // init_dist_screen::@3
  __b3:
    // [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$18+1
    // [177] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4]
  __b4_from___b2:
  __b4_from___b3:
    // [177] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy 
    jmp __b4
    // init_dist_screen::@4
  __b4:
    // [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
    // [179] call sqr 
    // [238] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
  sqr_from___b4:
    // [238] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
    jsr sqr
    // [180] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
    lda.z sqr.return
    sta.z sqr.return_1
    lda.z sqr.return+1
    sta.z sqr.return_1+1
    jmp __b12
    // init_dist_screen::@12
  __b12:
    // [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
    // [182] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
  __b5_from___b12:
    // [182] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [182] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp __b5
    // init_dist_screen::@5
  __b5:
    // [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc __b6
    jmp __b7
    // init_dist_screen::@7
  __b7:
    // [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen_topline
    sta.z screen_topline
    bcc !+
    inc.z screen_topline+1
  !:
    // [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
    lda.z screen_bottomline
    sec
    sbc #<$28
    sta.z screen_bottomline
    lda.z screen_bottomline+1
    sbc #>$28
    sta.z screen_bottomline+1
    // [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [187] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$d
    cmp.z y
    bne __b1_from___b7
    jmp __breturn
    // init_dist_screen::@return
  __breturn:
    // [188] return 
    rts
    // init_dist_screen::@6
  __b6:
    // [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // [190] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 
    cmp #$27
    bcs __b8
    jmp __b9
    // init_dist_screen::@9
  __b9:
    // [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // [192] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10]
  __b10_from___b8:
  __b10_from___b9:
    // [192] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy 
    jmp __b10
    // init_dist_screen::@10
  __b10:
    // [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
    // [194] call sqr 
    // [238] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr]
  sqr_from___b10:
    // [238] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy 
    jsr sqr
    // [195] (word) sqr::return#3 ← (word) sqr::return#0
    jmp __b13
    // init_dist_screen::@13
  __b13:
    // [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
    // [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 
    lda.z ds
    clc
    adc.z yds
    sta.z ds
    lda.z ds+1
    adc.z yds+1
    sta.z ds+1
    // [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
    // [199] call sqrt 
    jsr sqrt
    // [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0
    jmp __b14
    // init_dist_screen::@14
  __b14:
    // [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
    // [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_bottomline),y
    // [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z xb
    sta (screen_topline),y
    // [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z xb
    sta (screen_bottomline),y
    // [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [182] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5]
  __b5_from___b14:
    // [182] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy 
    // [182] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy 
    jmp __b5
    // init_dist_screen::@8
  __b8:
    // [208] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 
    sec
    sbc #$27
    jmp __b10_from___b8
    // init_dist_screen::@2
  __b2:
    // [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 
    sec
    sbc #$18
    jmp __b4_from___b2
}
  // sqrt
// Find the (integer) square root of a word value
// If the square is not an integer then it returns the largest integer N where N*N <= val
// Uses a table of squares that must be initialized by calling init_squares()
// sqrt(word zp($16) val)
sqrt: {
    .label __1 = 7
    .label __3 = 7
    .label found = 7
    .label val = $16
    // [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0
    // [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
    lda.z SQUARES
    sta.z bsearch16u.items
    lda.z SQUARES+1
    sta.z bsearch16u.items+1
    // [212] call bsearch16u 
    // [219] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
  bsearch16u_from_sqrt:
    jsr bsearch16u
    // [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
    jmp __b1
    // sqrt::@1
  __b1:
    // [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
    // [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 
    lda.z __3
    sec
    sbc.z SQUARES
    sta.z __3
    lda.z __3+1
    sbc.z SQUARES+1
    sta.z __3+1
    // [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z __1+1
    ror.z __1
    // [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 
    lda.z __1
    jmp __breturn
    // sqrt::@return
  __breturn:
    // [218] return 
    rts
}
  // bsearch16u
// Searches an array of nitems unsigned words, the initial member of which is pointed to by base, for a member that matches the value key.
// - key - The value to look for
// - items - Pointer to the start of the array to search in
// - num - The number of items in the array
// Returns pointer to an entry in the array that matches the search key
// bsearch16u(word zp($16) key, word* zp(7) items, byte register(X) num)
bsearch16u: {
    .label __2 = 7
    .label pivot = $18
    .label result = $1a
    .label return = 7
    .label items = 7
    .label key = $16
    // [220] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
  __b3_from_bsearch16u:
    // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy 
    // [220] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 
    ldx #NUM_SQUARES
    jmp __b3
    // bsearch16u::@3
  __b3:
    // [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 
    cpx #0
    bne __b4
    jmp __b5
    // bsearch16u::@5
  __b5:
    // [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
    ldy #1
    lda (items),y
    cmp.z key+1
    bne !+
    dey
    lda (items),y
    cmp.z key
    beq __b2_from___b5
  !:
    bcc __b2_from___b5
    jmp __b1
    // bsearch16u::@1
  __b1:
    // [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
    lda.z __2
    sec
    sbc #<1*SIZEOF_WORD
    sta.z __2
    lda.z __2+1
    sbc #>1*SIZEOF_WORD
    sta.z __2+1
    // [224] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
  __b2_from___b1:
  __b2_from___b5:
    // [224] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
    jmp __b2
    // bsearch16u::@2
  __b2:
    // [225] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
  __breturn_from___b2:
  __breturn_from___b8:
    // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
    jmp __breturn
    // bsearch16u::@return
  __breturn:
    // [226] return 
    rts
    // bsearch16u::@4
  __b4:
    // [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 
    txa
    lsr
    // [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa 
    clc
    adc.z items
    sta.z pivot
    lda #0
    adc.z items+1
    sta.z pivot+1
    // [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 
    sec
    lda.z key
    ldy #0
    sbc (pivot),y
    sta.z result
    lda.z key+1
    iny
    sbc (pivot),y
    sta.z result+1
    // [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
    lda.z result+1
    bne __b6
    lda.z result
    bne __b6
    jmp __b8
    // bsearch16u::@8
  __b8:
    // [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
    lda.z pivot
    sta.z return
    lda.z pivot+1
    sta.z return+1
    jmp __breturn_from___b8
    // bsearch16u::@6
  __b6:
    // [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
    lda.z result+1
    bmi __b7_from___b6
    bne !+
    lda.z result
    beq __b7_from___b6
  !:
    jmp __b9
    // bsearch16u::@9
  __b9:
    // [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
    lda #1*SIZEOF_WORD
    clc
    adc.z pivot
    sta.z items
    lda #0
    adc.z pivot+1
    sta.z items+1
    // [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx 
    dex
    // [236] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
  __b7_from___b6:
  __b7_from___b9:
    // [236] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
    // [236] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
    jmp __b7
    // bsearch16u::@7
  __b7:
    // [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 
    txa
    lsr
    tax
    // [220] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
  __b3_from___b7:
    // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
    // [220] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy 
    jmp __b3
}
  // sqr
// Find the square of a byte value
// Uses a table of squares that must be initialized by calling init_squares()
// sqr(byte register(A) val)
sqr: {
    .label return = $16
    .label return_1 = $14
    // [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa 
    tay
    lda (SQUARES),y
    sta.z return
    iny
    lda (SQUARES),y
    sta.z return+1
    jmp __breturn
    // sqr::@return
  __breturn:
    // [241] return 
    rts
}
  // init_squares
// Initialize squares table
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
init_squares: {
    .label squares = $10
    .label sqr = $1a
    // [243] call malloc 
    // [255] phi from init_squares to malloc [phi:init_squares->malloc]
  malloc_from_init_squares:
    // [255] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 
    lda #<NUM_SQUARES*SIZEOF_WORD
    sta.z malloc.size
    lda #>NUM_SQUARES*SIZEOF_WORD
    sta.z malloc.size+1
    // [255] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy 
    jsr malloc
    jmp __b3
    // init_squares::@3
  __b3:
    // [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
    // [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
    lda.z SQUARES
    sta.z squares
    lda.z SQUARES+1
    sta.z squares+1
    // [246] phi from init_squares::@3 to init_squares::@1 [phi:init_squares::@3->init_squares::@1]
  __b1_from___b3:
    // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@3->init_squares::@1#0] -- register_copy 
    // [246] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@3->init_squares::@1#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z sqr
    lda #>0
    sta.z sqr+1
    // [246] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@3->init_squares::@1#2] -- vbuxx=vbuc1 
    ldx #0
    jmp __b1
    // init_squares::@1
  __b1:
    // [247] if((byte) init_squares::i#2<(const byte) NUM_SQUARES#3) goto init_squares::@2 -- vbuxx_lt_vbuc1_then_la1 
    cpx #NUM_SQUARES
    bcc __b2
    jmp __breturn
    // init_squares::@return
  __breturn:
    // [248] return 
    rts
    // init_squares::@2
  __b2:
    // [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 
    ldy #0
    lda.z sqr
    sta (squares),y
    iny
    lda.z sqr+1
    sta (squares),y
    // [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
    lda #SIZEOF_WORD
    clc
    adc.z squares
    sta.z squares
    bcc !+
    inc.z squares+1
  !:
    // [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [252] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 
    clc
    adc #1
    // [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa 
    clc
    adc.z sqr
    sta.z sqr
    bcc !+
    inc.z sqr+1
  !:
    // [254] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [246] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
  __b1_from___b2:
    // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@2->init_squares::@1#0] -- register_copy 
    // [246] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
    // [246] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@2->init_squares::@1#2] -- register_copy 
    jmp __b1
}
  // malloc
// Allocates a block of size bytes of memory, returning a pointer to the beginning of the block.
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
// malloc(word zp(9) size)
malloc: {
    .label mem = 9
    .label size = 9
    // [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz1 
    lda.z heap_head
    sec
    sbc.z mem
    sta.z mem
    lda.z heap_head+1
    sbc.z mem+1
    sta.z mem+1
    // [257] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 
    lda.z mem
    sta.z heap_head
    lda.z mem+1
    sta.z heap_head+1
    jmp __breturn
    // malloc::@return
  __breturn:
    // [258] return 
    rts
}
  // File Data
  // 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

  .align $100
SINTABLE:
.for(var i=0;i<$200;i++)
        .byte round(127.5+127.5*sin(2*PI*i/256))


ASSEMBLER OPTIMIZATIONS
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b2
Removing instruction jmp __bend
Removing instruction jmp __b5
Removing instruction jmp __b6
Removing instruction jmp __b7
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp toD0181
Removing instruction jmp __b3
Removing instruction jmp toD0182
Removing instruction jmp __b4
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __breturn
Removing instruction jmp __b12
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b10
Removing instruction jmp __b11
Removing instruction jmp __b5
Removing instruction jmp __b7
Removing instruction jmp __b6
Removing instruction jmp __b13
Removing instruction jmp __b9
Removing instruction jmp __b8
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b4
Removing instruction jmp __breturn
Removing instruction jmp __b5
Removing instruction jmp __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 __b11
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b12
Removing instruction jmp __b5
Removing instruction jmp __b7
Removing instruction jmp __breturn
Removing instruction jmp __b9
Removing instruction jmp __b10
Removing instruction jmp __b13
Removing instruction jmp __b14
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b3
Removing instruction jmp __b5
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __breturn
Removing instruction jmp __b8
Removing instruction jmp __b9
Removing instruction jmp __b7
Removing instruction jmp __breturn
Removing instruction jmp __b3
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Removing instruction lda #>0
Removing instruction ldy #0
Removing instruction lda.z ang_w
Removing instruction lda.z ang_w
Removing instruction ldy.z xb
Removing instruction ldy.z x
Removing instruction lda #>0
Replacing instruction ldx #0 with TAX
Removing instruction ldy.z x
Removing instruction ldy.z xb
Removing instruction lda.z result+1
Removing instruction lda #>0
Replacing instruction ldx #0 with TAX
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label __bbegin with __b1
Replacing label __b1 with __b2
Replacing label __b2_from___b2 with __b2
Replacing label __b1_from___b3 with __b1
Replacing label __b2_from___b3 with __b2
Replacing label __b11_from___b4 with __b11
Replacing label __b6_from___b5 with __b6
Replacing label __b8_from___b13 with __b8
Replacing label __b1_from___b4 with __b1
Replacing label __b7_from___b12 with __b7
Replacing label __b8_from___b7 with __b8
Replacing label __b17_from___b15 with __b17
Replacing label __b12_from___b19 with __b12
Replacing label __b19_from___b18 with __b19
Replacing label __b13_from___b14 with __b13
Replacing label __b6_from___b4 with __b6
Replacing label __b3_from___b1 with __b3
Replacing label __b1_from___b7 with __b1
Replacing label __b10_from___b8 with __b10
Replacing label __b4_from___b2 with __b4
Replacing label __b2_from___b5 with __b2
Replacing label __b2_from___b5 with __b2
Replacing label __breturn_from___b8 with __b2
Replacing label __b7_from___b6 with __b7
Replacing label __b7_from___b6 with __b7
Removing instruction __bbegin:
Removing instruction __b1_from___bbegin:
Removing instruction malloc_from___b1:
Removing instruction __b2_from___b4:
Removing instruction __bend_from___b2:
Removing instruction __b6_from___b5:
Removing instruction make_plasma_charset_from___b6:
Removing instruction __b7_from___b6:
Removing instruction memset_from___b7:
Removing instruction __b1:
Removing instruction __b2_from___b1:
Removing instruction doplasma_from___b2:
Removing instruction toD0181_from___b2:
Removing instruction toD0181:
Removing instruction toD0182_from___b3:
Removing instruction toD0182:
Removing instruction __b1_from___b3:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b2:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b3:
Removing instruction __b12_from_make_plasma_charset:
Removing instruction print_cls_from___b12:
Removing instruction __b10_from___b4:
Removing instruction __b11_from___b10:
Removing instruction __b11_from___b4:
Removing instruction __b6_from___b5:
Removing instruction __b8_from___b13:
Removing instruction __b8_from___b9:
Removing instruction __b1_from___b4:
Removing instruction __b2_from___b1:
Removing instruction __b3_from___b1:
Removing instruction __b3_from___b2:
Removing instruction __b6_from___b4:
Removing instruction __b6_from___b5:
Removing instruction __b10_from___b6:
Removing instruction __b12_from___b10:
Removing instruction __b12_from___b19:
Removing instruction __b7_from___b12:
Removing instruction __b7_from___b21:
Removing instruction __b8_from___b7:
Removing instruction __b8_from___b9:
Removing instruction __breturn:
Removing instruction __b13_from___b11:
Removing instruction __b13_from___b14:
Removing instruction __b17_from___b15:
Removing instruction __b17_from___b16:
Removing instruction __b19_from___b18:
Removing instruction __b19_from___b20:
Removing instruction __b1_from___b7:
Removing instruction __b4_from___b2:
Removing instruction __b4_from___b3:
Removing instruction sqr_from___b4:
Removing instruction __b5_from___b12:
Removing instruction __b10_from___b8:
Removing instruction __b10_from___b9:
Removing instruction sqr_from___b10:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b5:
Removing instruction __breturn_from___b2:
Removing instruction __breturn_from___b8:
Removing instruction __breturn:
Removing instruction __b7_from___b6:
Removing instruction __b7_from___b9:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction __b3:
Removing instruction malloc_from___b3:
Removing instruction __b4:
Removing instruction __b2:
Removing instruction __bend:
Removing instruction init_dist_screen_from_main:
Removing instruction __b5:
Removing instruction __b6:
Removing instruction __b7:
Removing instruction __b1_from___b7:
Removing instruction __b3:
Removing instruction doplasma_from___b3:
Removing instruction __b4:
Removing instruction __b1_from___b4:
Removing instruction __b1_from_doplasma:
Removing instruction __b3:
Removing instruction __b4:
Removing instruction __breturn:
Removing instruction __b1:
Removing instruction __breturn:
Removing instruction __b12:
Removing instruction __b1_from___b12:
Removing instruction __breturn:
Removing instruction __b3_from___b2:
Removing instruction __b4:
Removing instruction __b10:
Removing instruction __b1_from___b11:
Removing instruction __b7:
Removing instruction __b3_from___b7:
Removing instruction __b13:
Removing instruction __b9:
Removing instruction __b5_from___b8:
Removing instruction __breturn:
Removing instruction __breturn:
Removing instruction memset_from_print_cls:
Removing instruction __breturn:
Removing instruction __breturn:
Removing instruction __b1_from_init_angle_screen:
Removing instruction __b4:
Removing instruction __breturn:
Removing instruction __b5:
Removing instruction __b2_from___b5:
Removing instruction __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 init_squares_from_init_dist_screen:
Removing instruction __b11:
Removing instruction __b1_from___b11:
Removing instruction __b3:
Removing instruction __b12:
Removing instruction __b7:
Removing instruction __breturn:
Removing instruction __b9:
Removing instruction __b13:
Removing instruction __b14:
Removing instruction __b5_from___b14:
Removing instruction bsearch16u_from_sqrt:
Removing instruction __b1:
Removing instruction __breturn:
Removing instruction __b3_from_bsearch16u:
Removing instruction __b5:
Removing instruction __b1:
Removing instruction __b8:
Removing instruction __b9:
Removing instruction __b3_from___b7:
Removing instruction __breturn:
Removing instruction malloc_from_init_squares:
Removing instruction __b3:
Removing instruction __b1_from___b3:
Removing instruction __breturn:
Removing instruction __b1_from___b2:
Removing instruction __breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Replacing jump to rts with rts in jmp __b2
Succesful ASM optimization Pass5DoubleJumpElimination
Relabelling long label __b5_from___b3 to b1
Succesful ASM optimization Pass5RelabelLongLabels
Adding RTS to root block 
Succesful ASM optimization Pass5AddMainRts
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b1
Removing instruction jmp __b1
Succesful ASM optimization Pass5NextJumpElimination
Fixing long branch [582] beq __b12 to bne
Fixing long branch [476] bpl __b1 to bmi
Fixing long branch [488] bpl __b4 to bmi

FINAL SYMBOL TABLE
(label) @1
(label) @2
(label) @3
(label) @4
(label) @begin
(label) @end
(const byte) BLACK = (byte) 0
(const byte*) CHARSET = (byte*) 8192
(const byte*) COLS = (byte*) 55296
(const word*) CORDIC_ATAN2_ANGLES_16[(const 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 byte) CORDIC_ITERATIONS_16 = (byte) $f
(const byte*) D018 = (byte*) 53272
(const byte*) HEAP_TOP = (byte*) 40960
(byte) NUM_SQUARES
(const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30
(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 byte*) SCREEN1 = (byte*) 10240
(const byte*) SCREEN2 = (byte*) 11264
(byte*) SCREEN_ANGLE
(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp[2]:13 0.05405405405405406
(byte*) SCREEN_DIST
(void*) SCREEN_DIST#0 SCREEN_DIST zp[2]:11 0.05128205128205128
(const byte) SID_CONTROL_NOISE = (byte) $80
(const byte*) SID_VOICE3_CONTROL = (byte*) 54290
(const word*) SID_VOICE3_FREQ = (word*) 54286
(const byte*) SID_VOICE3_OSC = (byte*) 54299
(const byte*) SINTABLE[(number) $200]  = kickasm {{ .for(var i=0;i<$200;i++)
        .byte round(127.5+127.5*sin(2*PI*i/256))
 }}
(const byte) SIZEOF_WORD = (byte) 2
(word*) SQUARES
(void*) SQUARES#1 SQUARES zp[2]:9 0.03225806451612903
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(signed word~) atan2_16::$2 zp[2]:7 4.0
(byte~) atan2_16::$22 reg byte a 2002.0
(byte~) atan2_16::$23 reg byte a 2002.0
(signed word~) atan2_16::$7 zp[2]:26 4.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]:16 3.0
(word) atan2_16::angle#11 angle zp[2]:16 4.0
(word) atan2_16::angle#12 angle zp[2]:16 190.66666666666666
(word) atan2_16::angle#13 angle zp[2]:16 1334.6666666666667
(word) atan2_16::angle#2 angle zp[2]:16 2002.0
(word) atan2_16::angle#3 angle zp[2]:16 2002.0
(word) atan2_16::angle#4 angle zp[2]:16 4.0
(word) atan2_16::angle#5 angle zp[2]:16 4.0
(word) atan2_16::angle#6 angle zp[2]:16 2004.0
(byte) atan2_16::i
(byte) atan2_16::i#1 reg byte x 1501.5
(byte) atan2_16::i#2 reg byte x 208.54166666666669
(word) atan2_16::return
(word) atan2_16::return#0 return zp[2]:16 34.99999999999999
(word) atan2_16::return#2 return zp[2]:16 202.0
(byte) atan2_16::shift
(byte) atan2_16::shift#1 reg byte y 20002.0
(byte) atan2_16::shift#2 reg byte y 8001.25
(byte) atan2_16::shift#5 reg byte y 667.3333333333334
(signed word) atan2_16::x
(signed word) atan2_16::x#0 x zp[2]:20 2.8684210526315796
(signed word) atan2_16::xd
(signed word) atan2_16::xd#1 xd zp[2]:9 6667.333333333333
(signed word) atan2_16::xd#10 xd zp[2]:9 1001.0
(signed word) atan2_16::xd#2 xd zp[2]:9 1001.0
(signed word) atan2_16::xd#3 xd zp[2]:9 7668.333333333332
(signed word) atan2_16::xd#5 xd zp[2]:9 1001.0
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0 xi zp[2]:26 6.0
(signed word) atan2_16::xi#1 xi zp[2]:26 500.5
(signed word) atan2_16::xi#13 xi zp[2]:26 4.0
(signed word) atan2_16::xi#2 xi zp[2]:26 500.5
(signed word) atan2_16::xi#3 xi zp[2]:26 267.0666666666667
(signed word) atan2_16::xi#8 xi zp[2]:26 1001.0
(signed word) atan2_16::y
(signed word) atan2_16::y#0 y zp[2]:22 2.724999999999999
(signed word) atan2_16::yd
(signed word) atan2_16::yd#1 yd zp[2]:24 10001.0
(signed word) atan2_16::yd#10 yd zp[2]:24 2002.0
(signed word) atan2_16::yd#2 yd zp[2]:24 2002.0
(signed word) atan2_16::yd#3 yd zp[2]:24 4601.0
(signed word) atan2_16::yd#5 yd zp[2]:24 2002.0
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0 yi zp[2]:7 1.2000000000000002
(signed word) atan2_16::yi#1 yi zp[2]:7 667.3333333333334
(signed word) atan2_16::yi#16 yi zp[2]:7 4.0
(signed word) atan2_16::yi#2 yi zp[2]:7 667.3333333333334
(signed word) atan2_16::yi#3 yi zp[2]:7 353.4117647058823
(signed word) atan2_16::yi#8 yi zp[2]:7 1001.0
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
(byte~) bsearch16u::$16 reg byte a 2002.0
(word*~) bsearch16u::$2 zp[2]:7 4.0
(byte~) bsearch16u::$6 reg byte a 2002.0
(label) bsearch16u::@1
(label) bsearch16u::@2
(label) bsearch16u::@3
(label) bsearch16u::@4
(label) bsearch16u::@5
(label) bsearch16u::@6
(label) bsearch16u::@7
(label) bsearch16u::@8
(label) bsearch16u::@9
(label) bsearch16u::@return
(word*) bsearch16u::items
(word*) bsearch16u::items#0 items zp[2]:7 1001.0
(word*) bsearch16u::items#1 items zp[2]:7 2.0
(word*) bsearch16u::items#2 items zp[2]:7 334.5555555555556
(word*) bsearch16u::items#8 items zp[2]:7 1501.5
(word) bsearch16u::key
(word) bsearch16u::key#0 key zp[2]:22 0.26666666666666666
(byte) bsearch16u::num
(byte) bsearch16u::num#0 reg byte x 2002.0
(byte) bsearch16u::num#1 reg byte x 2002.0
(byte) bsearch16u::num#3 reg byte x 556.1111111111111
(byte) bsearch16u::num#5 reg byte x 3003.0
(word*) bsearch16u::pivot
(word*) bsearch16u::pivot#0 pivot zp[2]:24 501.0
(signed word) bsearch16u::result
(signed word) bsearch16u::result#0 result zp[2]:26 1501.5
(word*) bsearch16u::return
(word*) bsearch16u::return#1 return zp[2]:7 2.0
(word*) bsearch16u::return#2 return zp[2]:7 6.0
(word*) bsearch16u::return#3 return zp[2]:7 4.0
(word*) bsearch16u::return#6 return zp[2]:7 4.0
(void()) doplasma((byte*) doplasma::screen)
(byte~) doplasma::$2 reg byte a 2002.0
(label) doplasma::@1
(label) doplasma::@2
(label) doplasma::@3
(label) doplasma::@4
(label) doplasma::@return
(byte*) doplasma::angle
(byte*) doplasma::angle#0 angle zp[2]:3 1.0
(byte*) doplasma::angle#1 angle zp[2]:3 50.5
(byte*) doplasma::angle#4 angle zp[2]:3 172.14285714285714
(byte*) doplasma::dist
(byte*) doplasma::dist#0 dist zp[2]:5 1.3333333333333333
(byte*) doplasma::dist#1 dist zp[2]:5 67.33333333333333
(byte*) doplasma::dist#4 dist zp[2]:5 150.625
(byte*) doplasma::screen
(byte*) doplasma::screen#2 screen zp[2]:7 40.4
(byte*) doplasma::screen#5 screen zp[2]:7 200.83333333333334
(byte*) doplasma::screen#6 screen zp[2]:7 0.4
(byte*) doplasma::sin_x
(byte*) doplasma::sin_x#0 sin_x zp[2]:26 77.15384615384616
(byte*) doplasma::sin_y
(byte*) doplasma::sin_y#0 sin_y zp[2]:16 83.58333333333334
(byte) doplasma::x
(byte) doplasma::x#1 reg byte x 1501.5
(byte) doplasma::x#2 reg byte x 1668.3333333333335
(byte) doplasma::y
(byte) doplasma::y#1 y zp[1]:18 151.5
(byte) doplasma::y#4 y zp[1]:18 22.444444444444443
(byte*) heap_head
(byte*) heap_head#1 heap_head zp[2]:24 0.6000000000000001
(byte*) heap_head#12 heap_head zp[2]:24 6.0
(void()) init_angle_screen((byte*) init_angle_screen::screen)
(word~) init_angle_screen::$11 zp[2]:16 202.0
(byte~) init_angle_screen::$13 reg byte a 202.0
(byte~) init_angle_screen::$14 reg byte a 202.0
(byte~) init_angle_screen::$15 reg byte a 202.0
(byte~) init_angle_screen::$3 reg byte a 202.0
(byte~) init_angle_screen::$4 reg byte a 202.0
(byte~) init_angle_screen::$7 reg byte a 202.0
(label) init_angle_screen::@1
(label) init_angle_screen::@2
(label) init_angle_screen::@3
(label) init_angle_screen::@4
(label) init_angle_screen::@5
(label) init_angle_screen::@return
(byte) init_angle_screen::ang_w
(byte) init_angle_screen::ang_w#0 ang_w zp[1]:19 84.16666666666666
(word) init_angle_screen::angle_w
(word) init_angle_screen::angle_w#0 angle_w zp[2]:16 202.0
(byte*) init_angle_screen::screen
(byte*) init_angle_screen::screen#0 screen zp[2]:5 3.0
(byte*) init_angle_screen::screen_bottomline
(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp[2]:5 4.0
(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp[2]:5 7.333333333333333
(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp[2]:5 9.04
(byte*) init_angle_screen::screen_topline
(byte*) init_angle_screen::screen_topline#0 screen_topline zp[2]:3 2.0
(byte*) init_angle_screen::screen_topline#1 screen_topline zp[2]:3 5.5
(byte*) init_angle_screen::screen_topline#6 screen_topline zp[2]:3 9.416666666666666
(byte) init_angle_screen::x
(byte) init_angle_screen::x#1 x zp[1]:18 101.0
(byte) init_angle_screen::x#2 x zp[1]:18 28.857142857142858
(byte) init_angle_screen::xb
(byte) init_angle_screen::xb#1 xb zp[1]:2 202.0
(byte) init_angle_screen::xb#2 xb zp[1]:2 18.363636363636363
(signed word) init_angle_screen::xw
(word) init_angle_screen::xw#0 xw zp[2]:20 33.666666666666664
(byte) init_angle_screen::y
(byte) init_angle_screen::y#1 y zp[1]:15 16.5
(byte) init_angle_screen::y#5 y zp[1]:15 4.730769230769231
(signed word) init_angle_screen::yw
(word) init_angle_screen::yw#0 yw zp[2]:22 50.5
(void()) init_dist_screen((byte*) init_dist_screen::screen)
(byte~) init_dist_screen::$14 reg byte a 202.0
(byte~) init_dist_screen::$16 reg byte a 202.0
(byte~) init_dist_screen::$5 reg byte a 22.0
(byte~) init_dist_screen::$7 reg byte a 22.0
(label) init_dist_screen::@1
(label) init_dist_screen::@10
(label) init_dist_screen::@11
(label) init_dist_screen::@12
(label) init_dist_screen::@13
(label) init_dist_screen::@14
(label) init_dist_screen::@2
(label) init_dist_screen::@3
(label) init_dist_screen::@4
(label) init_dist_screen::@5
(label) init_dist_screen::@6
(label) init_dist_screen::@7
(label) init_dist_screen::@8
(label) init_dist_screen::@9
(label) init_dist_screen::@return
(byte) init_dist_screen::d
(byte) init_dist_screen::d#0 reg byte a 126.25
(word) init_dist_screen::ds
(word) init_dist_screen::ds#0 ds zp[2]:22 202.0
(byte*) init_dist_screen::screen
(byte*) init_dist_screen::screen#0 screen zp[2]:3 1.5
(byte*) init_dist_screen::screen_bottomline
(byte*) init_dist_screen::screen_bottomline#0 screen_bottomline zp[2]:5 4.0
(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp[2]:5 7.333333333333333
(byte*) init_dist_screen::screen_bottomline#11 screen_bottomline zp[2]:5 6.848484848484849
(byte*) init_dist_screen::screen_topline
(byte*) init_dist_screen::screen_topline#1 screen_topline zp[2]:3 5.5
(byte*) init_dist_screen::screen_topline#11 screen_topline zp[2]:3 7.0625
(byte) init_dist_screen::x
(byte) init_dist_screen::x#1 x zp[1]:15 101.0
(byte) init_dist_screen::x#2 x zp[1]:15 30.3
(byte) init_dist_screen::x2
(byte) init_dist_screen::x2#0 reg byte a 202.0
(byte) init_dist_screen::xb
(byte) init_dist_screen::xb#1 xb zp[1]:18 202.0
(byte) init_dist_screen::xb#2 xb zp[1]:18 19.238095238095237
(byte) init_dist_screen::xd
(byte) init_dist_screen::xd#0 reg byte a 303.0
(word) init_dist_screen::xds
(word) init_dist_screen::xds#0 xds zp[2]:22 202.0
(byte) init_dist_screen::y
(byte) init_dist_screen::y#1 y zp[1]:2 16.5
(byte) init_dist_screen::y#10 y zp[1]:2 0.9705882352941178
(byte) init_dist_screen::y2
(byte) init_dist_screen::y2#0 reg byte a 22.0
(byte) init_dist_screen::yd
(byte) init_dist_screen::yd#0 reg byte a 33.0
(word) init_dist_screen::yds
(word) init_dist_screen::yds#0 yds zp[2]:20 4.869565217391305
(void()) init_squares()
(byte~) init_squares::$3 reg byte a 22.0
(byte~) init_squares::$4 reg byte a 22.0
(label) init_squares::@1
(label) init_squares::@2
(label) init_squares::@3
(label) init_squares::@return
(byte) init_squares::i
(byte) init_squares::i#1 reg byte x 22.0
(byte) init_squares::i#2 reg byte x 6.285714285714286
(word) init_squares::sqr
(word) init_squares::sqr#1 sqr zp[2]:26 11.0
(word) init_squares::sqr#2 sqr zp[2]:26 5.5
(word*) init_squares::squares
(word*) init_squares::squares#0 squares zp[2]:16 4.0
(word*) init_squares::squares#1 squares zp[2]:16 4.4
(word*) init_squares::squares#2 squares zp[2]:16 11.666666666666666
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::toD0181
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN1&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET/(byte) 4&(byte) $f
(byte*) main::toD0181_screen
(label) main::toD0182
(byte*) main::toD0182_gfx
(byte) main::toD0182_return
(const byte) main::toD0182_return#0 toD0182_return = >(word)(const byte*) SCREEN2&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET/(byte) 4&(byte) $f
(byte*) main::toD0182_screen
(void()) make_plasma_charset((byte*) make_plasma_charset::charset)
(word~) make_plasma_charset::$10 zp[2]:16 202.0
(word~) make_plasma_charset::$11 zp[2]:16 202.0
(byte~) make_plasma_charset::$12 reg byte a 22.0
(byte*~) make_plasma_charset::$16 zp[2]:16 202.0
(byte~) make_plasma_charset::$3 reg byte a 22.0
(byte~) make_plasma_charset::$6 reg byte a 2002.0
(byte~) make_plasma_charset::$7 zp[1]:18 2002.0
(label) make_plasma_charset::@1
(label) make_plasma_charset::@10
(label) make_plasma_charset::@11
(label) make_plasma_charset::@12
(label) make_plasma_charset::@13
(label) make_plasma_charset::@2
(label) make_plasma_charset::@3
(label) make_plasma_charset::@4
(label) make_plasma_charset::@5
(label) make_plasma_charset::@6
(label) make_plasma_charset::@7
(label) make_plasma_charset::@8
(label) make_plasma_charset::@9
(label) make_plasma_charset::@return
(byte) make_plasma_charset::b
(byte) make_plasma_charset::b#1 reg byte y 2002.0
(byte) make_plasma_charset::b#2 reg byte y 282.1818181818182
(byte) make_plasma_charset::b#6 reg byte y 1501.5
(const byte*) make_plasma_charset::bittab[(number) 8]  = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 }
(word) make_plasma_charset::c
(word) make_plasma_charset::c#1 c zp[2]:5 22.0
(word) make_plasma_charset::c#2 c zp[2]:5 5.777777777777778
(byte*) make_plasma_charset::charset
(byte) make_plasma_charset::i
(byte) make_plasma_charset::i#1 i zp[1]:2 202.0
(byte) make_plasma_charset::i#2 i zp[1]:2 23.764705882352942
(byte) make_plasma_charset::ii
(byte) make_plasma_charset::ii#1 reg byte x 2002.0
(byte) make_plasma_charset::ii#2 reg byte x 400.4
(byte) make_plasma_charset::s
(byte) make_plasma_charset::s#0 s zp[1]:15 53.26315789473684
(void*()) malloc((word) malloc::size)
(label) malloc::@return
(byte*) malloc::mem
(byte*) malloc::mem#0 mem zp[2]:9 0.6666666666666666
(void*) malloc::return
(word) malloc::size
(word) malloc::size#3 size zp[2]:9 2.0
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
(label) memset::@2
(label) memset::@3
(label) memset::@return
(byte) memset::c
(byte) memset::c#4 reg byte x 1.5714285714285714
(byte*) memset::dst
(byte*) memset::dst#1 dst zp[2]:3 22.0
(byte*) memset::dst#2 dst zp[2]:3 15.333333333333332
(byte*) memset::dst#4 dst zp[2]:3 4.0
(byte*) memset::end
(byte*) memset::end#0 end zp[2]:26 2.1666666666666665
(word) memset::num
(void*) memset::return
(void*) memset::str
(void*) memset::str#3 str zp[2]:3
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
(const byte) print_char::ch#0 ch = (byte) '.'
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp[2]:7 4.333333333333333
(byte*) print_char_cursor#18 print_char_cursor zp[2]:7 1.0
(byte*) print_char_cursor#30 print_char_cursor zp[2]:7 16.5
(void()) print_cls()
(label) print_cls::@return
(byte*) print_line_cursor
(const byte*) print_line_cursor#0 print_line_cursor = (byte*) 1024
(byte*) print_screen
(byte()) sid_rnd()
(label) sid_rnd::@return
(byte) sid_rnd::return
(byte) sid_rnd::return#0 reg byte a 334.33333333333337
(byte) sid_rnd::return#2 reg byte a 2002.0
(void()) sid_rnd_init()
(label) sid_rnd_init::@return
(byte) sin_offset_x
(byte) sin_offset_x#10 sin_offset_x zp[1]:2 1.625
(byte) sin_offset_x#12 sin_offset_x zp[1]:2 2.666666666666667
(byte) sin_offset_x#14 sin_offset_x zp[1]:2 11.0
(byte) sin_offset_y
(byte) sin_offset_y#10 sin_offset_y zp[1]:15 1.5294117647058825
(byte) sin_offset_y#12 sin_offset_y zp[1]:15 3.0
(byte) sin_offset_y#14 sin_offset_y zp[1]:15 11.0
(word()) sqr((byte) sqr::val)
(byte~) sqr::$0 reg byte a 4.0
(label) sqr::@return
(word) sqr::return
(word) sqr::return#0 return zp[2]:22 28.5
(word) sqr::return#2 return_1 zp[2]:20 22.0
(word) sqr::return#3 return zp[2]:22 202.0
(byte) sqr::val
(byte) sqr::val#0 reg byte a 22.0
(byte) sqr::val#1 reg byte a 202.0
(byte) sqr::val#2 reg byte a 114.0
(byte()) sqrt((word) sqrt::val)
(word~) sqrt::$1 zp[2]:7 2.0
(word~) sqrt::$3 zp[2]:7 4.0
(label) sqrt::@1
(label) sqrt::@return
(word*) sqrt::found
(word*) sqrt::found#0 found zp[2]:7 4.0
(byte) sqrt::return
(byte) sqrt::return#0 reg byte a 34.33333333333333
(byte) sqrt::return#2 reg byte a 202.0
(byte) sqrt::sq
(word) sqrt::val
(word) sqrt::val#0 val zp[2]:22 103.0

reg byte x [ doplasma::x#2 doplasma::x#1 ]
reg byte x [ memset::c#4 ]
reg byte x [ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ]
reg byte y [ make_plasma_charset::b#2 make_plasma_charset::b#6 make_plasma_charset::b#1 ]
reg byte x [ atan2_16::i#2 atan2_16::i#1 ]
reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
zp[1]:2 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#2 init_angle_screen::xb#1 make_plasma_charset::i#2 make_plasma_charset::i#1 sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ]
zp[2]:3 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 doplasma::angle#4 doplasma::angle#0 doplasma::angle#1 ]
zp[2]:5 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 make_plasma_charset::c#2 make_plasma_charset::c#1 doplasma::dist#4 doplasma::dist#0 doplasma::dist#1 ]
reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
zp[2]:7 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$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 print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 doplasma::screen#5 doplasma::screen#6 doplasma::screen#2 ]
reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ]
reg byte x [ init_squares::i#2 init_squares::i#1 ]
zp[2]:9 [ malloc::size#3 malloc::mem#0 SQUARES#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
zp[2]:11 [ SCREEN_DIST#0 ]
zp[2]:13 [ SCREEN_ANGLE#0 ]
reg byte a [ doplasma::$2 ]
reg byte a [ make_plasma_charset::$3 ]
zp[1]:15 [ make_plasma_charset::s#0 init_dist_screen::x#2 init_dist_screen::x#1 init_angle_screen::y#5 init_angle_screen::y#1 sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ]
reg byte a [ make_plasma_charset::$12 ]
zp[2]:16 [ make_plasma_charset::$10 make_plasma_charset::$11 make_plasma_charset::$16 doplasma::sin_y#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 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#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ]
reg byte a [ sid_rnd::return#2 ]
reg byte a [ make_plasma_charset::$6 ]
zp[1]:18 [ make_plasma_charset::$7 init_dist_screen::xb#2 init_dist_screen::xb#1 init_angle_screen::x#2 init_angle_screen::x#1 doplasma::y#4 doplasma::y#1 ]
reg byte a [ sid_rnd::return#0 ]
reg byte a [ init_angle_screen::$3 ]
reg byte a [ init_angle_screen::$4 ]
reg byte a [ init_angle_screen::$7 ]
zp[1]:19 [ init_angle_screen::ang_w#0 ]
reg byte a [ init_angle_screen::$13 ]
reg byte a [ init_angle_screen::$14 ]
reg byte a [ init_angle_screen::$15 ]
reg byte a [ atan2_16::$23 ]
reg byte a [ atan2_16::$22 ]
reg byte a [ init_dist_screen::y2#0 ]
zp[2]:20 [ sqr::return#2 init_dist_screen::yds#0 init_angle_screen::xw#0 atan2_16::x#0 ]
reg byte a [ init_dist_screen::x2#0 ]
zp[2]:22 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::yw#0 atan2_16::y#0 ]
reg byte a [ sqrt::return#2 ]
reg byte a [ init_dist_screen::d#0 ]
reg byte a [ sqrt::return#0 ]
reg byte a [ bsearch16u::$6 ]
reg byte a [ bsearch16u::$16 ]
zp[2]:24 [ bsearch16u::pivot#0 heap_head#12 heap_head#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
zp[2]:26 [ bsearch16u::result#0 memset::end#0 doplasma::sin_x#0 init_squares::sqr#2 init_squares::sqr#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
reg byte a [ sqr::$0 ]
reg byte a [ init_squares::$3 ]
reg byte a [ init_squares::$4 ]


FINAL ASSEMBLER
Score: 1210209

  // File Comments
// Plasma based on the distance/angle to the screen center
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(__b1)
.pc = $80d "Program"
  // Global Constants & labels
  .label D018 = $d018
  // Color Ram
  .label COLS = $d800
  // The colors of the C64
  .const BLACK = 0
  .const SIZEOF_WORD = 2
  // The number of iterations performed during 16-bit CORDIC atan2 calculation
  .const CORDIC_ITERATIONS_16 = $f
  // SID registers for random number generation
  .label SID_VOICE3_FREQ = $d40e
  .label SID_VOICE3_CONTROL = $d412
  .const SID_CONTROL_NOISE = $80
  .label SID_VOICE3_OSC = $d41b
  // Plasma charset
  .label CHARSET = $2000
  // Plasma screen 1
  .label SCREEN1 = $2800
  // Plasma screen 2
  .label SCREEN2 = $2c00
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  .label print_line_cursor = $400
  // The number of squares to pre-calculate. Limits what values sqr() can calculate and the result of sqrt()
  .const NUM_SQUARES = $30
  // Head of the heap. Moved backward each malloc()
  .label heap_head = $18
  // Squares for each byte value SQUARES[i] = i*i
  // Initialized by init_squares()
  .label SQUARES = 9
  .label print_char_cursor = 7
  .label SCREEN_DIST = $b
  .label SCREEN_ANGLE = $d
  // Offsets for the sines
  .label sin_offset_x = 2
  .label sin_offset_y = $f
  // @begin
  // [1] phi from @begin to @1 [phi:@begin->@1]
  // @1
__b1:
  // malloc(1000)
  // [2] call malloc 
  // [255] phi from @1 to malloc [phi:@1->malloc]
  // [255] phi (word) malloc::size#3 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [255] phi (byte*) heap_head#12 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 
  lda #<HEAP_TOP
  sta.z heap_head
  lda #>HEAP_TOP
  sta.z heap_head+1
  jsr malloc
  // @3
  // malloc(1000)
  // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_DIST
  lda.z malloc.mem+1
  sta.z SCREEN_DIST+1
  // [4] call malloc 
  // [255] phi from @3 to malloc [phi:@3->malloc]
  // [255] phi (word) malloc::size#3 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [255] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy 
  jsr malloc
  // @4
  // malloc(1000)
  // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_ANGLE
  lda.z malloc.mem+1
  sta.z SCREEN_ANGLE+1
  // [6] phi from @4 to @2 [phi:@4->@2]
  // @2
  // [7] call main 
  jsr main
  rts
  // [8] phi from @2 to @end [phi:@2->@end]
  // @end
  // main
main: {
    .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f
    .const toD0182_return = (>(SCREEN2&$3fff)*4)|(>CHARSET)/4&$f
    // init_dist_screen(SCREEN_DIST)
    // [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
    lda.z SCREEN_DIST
    sta.z init_dist_screen.screen
    lda.z SCREEN_DIST+1
    sta.z init_dist_screen.screen+1
    // [10] call init_dist_screen 
    // [170] phi from main to init_dist_screen [phi:main->init_dist_screen]
    jsr init_dist_screen
    // main::@5
    // init_angle_screen(SCREEN_ANGLE)
    // [11] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 
    lda.z SCREEN_ANGLE
    sta.z init_angle_screen.screen
    lda.z SCREEN_ANGLE+1
    sta.z init_angle_screen.screen+1
    // [12] call init_angle_screen 
    jsr init_angle_screen
    // [13] phi from main::@5 to main::@6 [phi:main::@5->main::@6]
    // main::@6
    // make_plasma_charset(CHARSET)
    // [14] call make_plasma_charset 
    // [52] phi from main::@6 to make_plasma_charset [phi:main::@6->make_plasma_charset]
    jsr make_plasma_charset
    // [15] phi from main::@6 to main::@7 [phi:main::@6->main::@7]
    // main::@7
    // memset(COLS, BLACK, 1000)
    // [16] call memset 
    // [44] phi from main::@7 to memset [phi:main::@7->memset]
    // [44] phi (byte) memset::c#4 = (const byte) BLACK [phi:main::@7->memset#0] -- vbuxx=vbuc1 
    ldx #BLACK
    // [44] phi (void*) memset::str#3 = (void*)(const byte*) COLS [phi:main::@7->memset#1] -- pvoz1=pvoc1 
    lda #<COLS
    sta.z memset.str
    lda #>COLS
    sta.z memset.str+1
    jsr memset
    // [17] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
    // [17] phi (byte) sin_offset_y#14 = (byte) 0 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z sin_offset_y
    // [17] phi (byte) sin_offset_x#14 = (byte) 0 [phi:main::@7->main::@1#1] -- vbuz1=vbuc1 
    sta.z sin_offset_x
  // Show double-buffered plasma
    // main::@1
    // [18] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
    // main::@2
  __b2:
    // doplasma(SCREEN1)
    // [19] call doplasma 
    // [25] phi from main::@2 to doplasma [phi:main::@2->doplasma]
    // [25] phi (byte*) doplasma::screen#6 = (const byte*) SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN1
    sta.z doplasma.screen
    lda #>SCREEN1
    sta.z doplasma.screen+1
    // [25] phi (byte) sin_offset_y#10 = (byte) sin_offset_y#14 [phi:main::@2->doplasma#1] -- register_copy 
    // [25] phi (byte) sin_offset_x#10 = (byte) sin_offset_x#14 [phi:main::@2->doplasma#2] -- register_copy 
    jsr doplasma
    // [20] phi from main::@2 to main::toD0181 [phi:main::@2->main::toD0181]
    // main::toD0181
    // main::@3
    // *D018 = toD018(SCREEN1, CHARSET)
    // [21] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // doplasma(SCREEN2)
    // [22] call doplasma 
    // [25] phi from main::@3 to doplasma [phi:main::@3->doplasma]
    // [25] phi (byte*) doplasma::screen#6 = (const byte*) SCREEN2 [phi:main::@3->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN2
    sta.z doplasma.screen
    lda #>SCREEN2
    sta.z doplasma.screen+1
    // [25] phi (byte) sin_offset_y#10 = (byte) sin_offset_y#12 [phi:main::@3->doplasma#1] -- register_copy 
    // [25] phi (byte) sin_offset_x#10 = (byte) sin_offset_x#12 [phi:main::@3->doplasma#2] -- register_copy 
    jsr doplasma
    // [23] phi from main::@3 to main::toD0182 [phi:main::@3->main::toD0182]
    // main::toD0182
    // main::@4
    // *D018 = toD018(SCREEN2, CHARSET)
    // [24] *((const byte*) D018) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0182_return
    sta D018
    // [17] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
    // [17] phi (byte) sin_offset_y#14 = (byte) sin_offset_y#12 [phi:main::@4->main::@1#0] -- register_copy 
    // [17] phi (byte) sin_offset_x#14 = (byte) sin_offset_x#12 [phi:main::@4->main::@1#1] -- register_copy 
    jmp __b2
}
  // doplasma
// Render plasma to the passed screen
// doplasma(byte* zp(7) screen)
doplasma: {
    .label angle = 3
    .label dist = 5
    .label sin_x = $1a
    .label sin_y = $10
    .label screen = 7
    .label y = $12
    // angle = SCREEN_ANGLE
    // [26] (byte*) doplasma::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 
    lda.z SCREEN_ANGLE
    sta.z angle
    lda.z SCREEN_ANGLE+1
    sta.z angle+1
    // dist = SCREEN_DIST
    // [27] (byte*) doplasma::dist#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
    lda.z SCREEN_DIST
    sta.z dist
    lda.z SCREEN_DIST+1
    sta.z dist+1
    // sin_x = SINTABLE+sin_offset_x
    // [28] (byte*) doplasma::sin_x#0 ← (const byte*) SINTABLE + (byte) sin_offset_x#10 -- pbuz1=pbuc1_plus_vbuz2 
    lda.z sin_offset_x
    clc
    adc #<SINTABLE
    sta.z sin_x
    lda #>SINTABLE
    adc #0
    sta.z sin_x+1
    // sin_y = SINTABLE+sin_offset_y
    // [29] (byte*) doplasma::sin_y#0 ← (const byte*) SINTABLE + (byte) sin_offset_y#10 -- pbuz1=pbuc1_plus_vbuz2 
    lda.z sin_offset_y
    clc
    adc #<SINTABLE
    sta.z sin_y
    lda #>SINTABLE
    adc #0
    sta.z sin_y+1
    // [30] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
    // [30] phi (byte) doplasma::y#4 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [30] phi (byte*) doplasma::screen#5 = (byte*) doplasma::screen#6 [phi:doplasma->doplasma::@1#1] -- register_copy 
    // [30] phi (byte*) doplasma::dist#4 = (byte*) doplasma::dist#0 [phi:doplasma->doplasma::@1#2] -- register_copy 
    // [30] phi (byte*) doplasma::angle#4 = (byte*) doplasma::angle#0 [phi:doplasma->doplasma::@1#3] -- register_copy 
    // [30] phi from doplasma::@3 to doplasma::@1 [phi:doplasma::@3->doplasma::@1]
    // [30] phi (byte) doplasma::y#4 = (byte) doplasma::y#1 [phi:doplasma::@3->doplasma::@1#0] -- register_copy 
    // [30] phi (byte*) doplasma::screen#5 = (byte*) doplasma::screen#2 [phi:doplasma::@3->doplasma::@1#1] -- register_copy 
    // [30] phi (byte*) doplasma::dist#4 = (byte*) doplasma::dist#1 [phi:doplasma::@3->doplasma::@1#2] -- register_copy 
    // [30] phi (byte*) doplasma::angle#4 = (byte*) doplasma::angle#1 [phi:doplasma::@3->doplasma::@1#3] -- register_copy 
    // doplasma::@1
  __b1:
    // [31] phi from doplasma::@1 to doplasma::@2 [phi:doplasma::@1->doplasma::@2]
    // [31] phi (byte) doplasma::x#2 = (byte) 0 [phi:doplasma::@1->doplasma::@2#0] -- vbuxx=vbuc1 
    ldx #0
    // [31] phi from doplasma::@2 to doplasma::@2 [phi:doplasma::@2->doplasma::@2]
    // [31] phi (byte) doplasma::x#2 = (byte) doplasma::x#1 [phi:doplasma::@2->doplasma::@2#0] -- register_copy 
    // doplasma::@2
  __b2:
    // sin_x[angle[x]] + sin_y[dist[x]]
    // [32] (byte~) doplasma::$2 ← *((byte*) doplasma::sin_x#0 + *((byte*) doplasma::angle#4 + (byte) doplasma::x#2)) + *((byte*) doplasma::sin_y#0 + *((byte*) doplasma::dist#4 + (byte) doplasma::x#2)) -- vbuaa=pbuz1_derefidx_(pbuz2_derefidx_vbuxx)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuxx) 
    txa
    tay
    lda (dist),y
    sta.z $ff
    lda (angle),y
    tay
    lda (sin_x),y
    ldy.z $ff
    clc
    adc (sin_y),y
    // screen[x] = sin_x[angle[x]] + sin_y[dist[x]]
    // [33] *((byte*) doplasma::screen#5 + (byte) doplasma::x#2) ← (byte~) doplasma::$2 -- pbuz1_derefidx_vbuxx=vbuaa 
    stx.z $ff
    ldy.z $ff
    sta (screen),y
    // for( char x: 0..39)
    // [34] (byte) doplasma::x#1 ← ++ (byte) doplasma::x#2 -- vbuxx=_inc_vbuxx 
    inx
    // [35] if((byte) doplasma::x#1!=(byte) $28) goto doplasma::@2 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$28
    bne __b2
    // doplasma::@3
    // screen += 40
    // [36] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen
    sta.z screen
    bcc !+
    inc.z screen+1
  !:
    // angle += 40
    // [37] (byte*) doplasma::angle#1 ← (byte*) doplasma::angle#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z angle
    sta.z angle
    bcc !+
    inc.z angle+1
  !:
    // dist += 40
    // [38] (byte*) doplasma::dist#1 ← (byte*) doplasma::dist#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z dist
    sta.z dist
    bcc !+
    inc.z dist+1
  !:
    // for( char y: 0..25)
    // [39] (byte) doplasma::y#1 ← ++ (byte) doplasma::y#4 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [40] if((byte) doplasma::y#1!=(byte) $1a) goto doplasma::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$1a
    cmp.z y
    bne __b1
    // doplasma::@4
    // sin_offset_x -= 3
    // [41] (byte) sin_offset_x#12 ← (byte) sin_offset_x#10 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 
    lax.z sin_offset_x
    axs #3
    stx.z sin_offset_x
    // sin_offset_y -= 7
    // [42] (byte) sin_offset_y#12 ← (byte) sin_offset_y#10 - (byte) 7 -- vbuz1=vbuz1_minus_vbuc1 
    lax.z sin_offset_y
    axs #7
    stx.z sin_offset_y
    // doplasma::@return
    // }
    // [43] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zp(3) str, byte register(X) c)
memset: {
    .label end = $1a
    .label dst = 3
    .label str = 3
    // memset::@1
    // end = (char*)str + num
    // [45] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 -- pbuz1=pbuz2_plus_vwuc1 
    lda.z str
    clc
    adc #<$3e8
    sta.z end
    lda.z str+1
    adc #>$3e8
    sta.z end+1
    // [46] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3
    // [47] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2]
    // [47] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy 
    // memset::@2
  __b2:
    // for(char* dst = str; dst!=end; dst++)
    // [48] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 
    lda.z dst+1
    cmp.z end+1
    bne __b3
    lda.z dst
    cmp.z end
    bne __b3
    // memset::@return
    // }
    // [49] return 
    rts
    // memset::@3
  __b3:
    // *dst = c
    // [50] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx 
    txa
    ldy #0
    sta (dst),y
    // for(char* dst = str; dst!=end; dst++)
    // [51] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    jmp __b2
}
  // make_plasma_charset
// Make a plasma-friendly charset where the chars are randomly filled
make_plasma_charset: {
    .label __7 = $12
    .label __10 = $10
    .label __11 = $10
    .label s = $f
    .label i = 2
    .label c = 5
    .label __16 = $10
    // sid_rnd_init()
    // [53] call sid_rnd_init 
    jsr sid_rnd_init
    // [54] phi from make_plasma_charset to make_plasma_charset::@12 [phi:make_plasma_charset->make_plasma_charset::@12]
    // make_plasma_charset::@12
    // print_cls()
    // [55] call print_cls 
    // [90] phi from make_plasma_charset::@12 to print_cls [phi:make_plasma_charset::@12->print_cls]
    jsr print_cls
    // [56] phi from make_plasma_charset::@12 to make_plasma_charset::@1 [phi:make_plasma_charset::@12->make_plasma_charset::@1]
    // [56] phi (byte*) print_char_cursor#18 = (const byte*) print_line_cursor#0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta.z print_char_cursor
    lda #>print_line_cursor
    sta.z print_char_cursor+1
    // [56] phi (word) make_plasma_charset::c#2 = (word) 0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z c
    sta.z c+1
    // make_plasma_charset::@1
  __b1:
    // for (unsigned int c = 0; c < 0x100; ++c)
    // [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 -- vwuz1_lt_vwuc1_then_la1 
    lda.z c+1
    cmp #>$100
    bcc __b2
    bne !+
    lda.z c
    cmp #<$100
    bcc __b2
  !:
    // make_plasma_charset::@return
    // }
    // [58] return 
    rts
    // make_plasma_charset::@2
  __b2:
    // <c
    // [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2 -- vbuaa=_lo_vwuz1 
    lda.z c
    // s = SINTABLE[<c]
    // [60] (byte) make_plasma_charset::s#0 ← *((const byte*) SINTABLE + (byte~) make_plasma_charset::$3) -- vbuz1=pbuc1_derefidx_vbuaa 
    tay
    lda SINTABLE,y
    sta.z s
    // [61] phi from make_plasma_charset::@2 to make_plasma_charset::@3 [phi:make_plasma_charset::@2->make_plasma_charset::@3]
    // [61] phi (byte) make_plasma_charset::i#2 = (byte) 0 [phi:make_plasma_charset::@2->make_plasma_charset::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    // make_plasma_charset::@3
  __b3:
    // for ( char i = 0; i < 8; ++i)
    // [62] if((byte) make_plasma_charset::i#2<(byte) 8) goto make_plasma_charset::@5 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #8
    bcc b1
    // make_plasma_charset::@4
    // c & 0x07
    // [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 
    lda #7
    and.z c
    // if ((c & 0x07) == 0)
    // [64] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@11 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne __b11
    // [65] phi from make_plasma_charset::@4 to make_plasma_charset::@10 [phi:make_plasma_charset::@4->make_plasma_charset::@10]
    // make_plasma_charset::@10
    // print_char('.')
    // [66] call print_char 
    jsr print_char
    // [67] phi from make_plasma_charset::@10 make_plasma_charset::@4 to make_plasma_charset::@11 [phi:make_plasma_charset::@10/make_plasma_charset::@4->make_plasma_charset::@11]
    // [67] phi (byte*) print_char_cursor#30 = (byte*) print_char_cursor#1 [phi:make_plasma_charset::@10/make_plasma_charset::@4->make_plasma_charset::@11#0] -- register_copy 
    // make_plasma_charset::@11
  __b11:
    // for (unsigned int c = 0; c < 0x100; ++c)
    // [68] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#2 -- vwuz1=_inc_vwuz1 
    inc.z c
    bne !+
    inc.z c+1
  !:
    // [56] phi from make_plasma_charset::@11 to make_plasma_charset::@1 [phi:make_plasma_charset::@11->make_plasma_charset::@1]
    // [56] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#30 [phi:make_plasma_charset::@11->make_plasma_charset::@1#0] -- register_copy 
    // [56] phi (word) make_plasma_charset::c#2 = (word) make_plasma_charset::c#1 [phi:make_plasma_charset::@11->make_plasma_charset::@1#1] -- register_copy 
    jmp __b1
    // [69] phi from make_plasma_charset::@3 to make_plasma_charset::@5 [phi:make_plasma_charset::@3->make_plasma_charset::@5]
  b1:
    // [69] phi (byte) make_plasma_charset::b#2 = (byte) 0 [phi:make_plasma_charset::@3->make_plasma_charset::@5#0] -- vbuyy=vbuc1 
    ldy #0
    // [69] phi (byte) make_plasma_charset::ii#2 = (byte) 0 [phi:make_plasma_charset::@3->make_plasma_charset::@5#1] -- vbuxx=vbuc1 
    ldx #0
    // make_plasma_charset::@5
  __b5:
    // for (char ii = 0; ii < 8; ++ii)
    // [70] if((byte) make_plasma_charset::ii#2<(byte) 8) goto make_plasma_charset::@6 -- vbuxx_lt_vbuc1_then_la1 
    cpx #8
    bcc __b6
    // make_plasma_charset::@7
    // c*8
    // [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z c
    asl
    sta.z __10
    lda.z c+1
    rol
    sta.z __10+1
    asl.z __10
    rol.z __10+1
    asl.z __10
    rol.z __10+1
    // (c*8) + i
    // [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2 -- vwuz1=vwuz1_plus_vbuz2 
    lda.z i
    clc
    adc.z __11
    sta.z __11
    bcc !+
    inc.z __11+1
  !:
    // charset[(c*8) + i] = b
    // [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET + (word~) make_plasma_charset::$11 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z __16
    adc #<CHARSET
    sta.z __16
    lda.z __16+1
    adc #>CHARSET
    sta.z __16+1
    // [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 -- _deref_pbuz1=vbuyy 
    tya
    ldy #0
    sta (__16),y
    // for ( char i = 0; i < 8; ++i)
    // [75] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [61] phi from make_plasma_charset::@7 to make_plasma_charset::@3 [phi:make_plasma_charset::@7->make_plasma_charset::@3]
    // [61] phi (byte) make_plasma_charset::i#2 = (byte) make_plasma_charset::i#1 [phi:make_plasma_charset::@7->make_plasma_charset::@3#0] -- register_copy 
    jmp __b3
    // [76] phi from make_plasma_charset::@5 to make_plasma_charset::@6 [phi:make_plasma_charset::@5->make_plasma_charset::@6]
    // make_plasma_charset::@6
  __b6:
    // sid_rnd()
    // [77] call sid_rnd 
    jsr sid_rnd
    // [78] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
    // make_plasma_charset::@13
    // [79] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2
    // sid_rnd() & 0xFF
    // [80] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 
    and #$ff
    sta.z __7
    // if ((sid_rnd() & 0xFF) > s)
    // [81] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@8 -- vbuz1_le_vbuz2_then_la1 
    lda.z s
    cmp.z __7
    bcs __b8
    // make_plasma_charset::@9
    // b |= bittab[ii]
    // [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte*) make_plasma_charset::bittab + (byte) make_plasma_charset::ii#2) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx 
    tya
    ora bittab,x
    tay
    // [83] phi from make_plasma_charset::@13 make_plasma_charset::@9 to make_plasma_charset::@8 [phi:make_plasma_charset::@13/make_plasma_charset::@9->make_plasma_charset::@8]
    // [83] phi (byte) make_plasma_charset::b#6 = (byte) make_plasma_charset::b#2 [phi:make_plasma_charset::@13/make_plasma_charset::@9->make_plasma_charset::@8#0] -- register_copy 
    // make_plasma_charset::@8
  __b8:
    // for (char ii = 0; ii < 8; ++ii)
    // [84] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#2 -- vbuxx=_inc_vbuxx 
    inx
    // [69] phi from make_plasma_charset::@8 to make_plasma_charset::@5 [phi:make_plasma_charset::@8->make_plasma_charset::@5]
    // [69] phi (byte) make_plasma_charset::b#2 = (byte) make_plasma_charset::b#6 [phi:make_plasma_charset::@8->make_plasma_charset::@5#0] -- register_copy 
    // [69] phi (byte) make_plasma_charset::ii#2 = (byte) make_plasma_charset::ii#1 [phi:make_plasma_charset::@8->make_plasma_charset::@5#1] -- register_copy 
    jmp __b5
    bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80
}
  // sid_rnd
// Get a random number from the SID voice 3,
// Must be initialized with sid_rnd_init()
sid_rnd: {
    // return *SID_VOICE3_OSC;
    // [85] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC) -- vbuaa=_deref_pbuc1 
    lda SID_VOICE3_OSC
    // sid_rnd::@return
    // }
    // [86] return 
    rts
}
  // print_char
// Print a single char
print_char: {
    .const ch = '.'
    // *(print_char_cursor++) = ch
    // [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
    lda #ch
    ldy #0
    sta (print_char_cursor),y
    // *(print_char_cursor++) = ch;
    // [88] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18 -- pbuz1=_inc_pbuz1 
    inc.z print_char_cursor
    bne !+
    inc.z print_char_cursor+1
  !:
    // print_char::@return
    // }
    // [89] return 
    rts
}
  // print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    // memset(print_screen, ' ', 1000)
    // [91] call memset 
    // [44] phi from print_cls to memset [phi:print_cls->memset]
    // [44] phi (byte) memset::c#4 = (byte) ' ' [phi:print_cls->memset#0] -- vbuxx=vbuc1 
    ldx #' '
    // [44] phi (void*) memset::str#3 = (void*)(const byte*) print_line_cursor#0 [phi:print_cls->memset#1] -- pvoz1=pvoc1 
    lda #<print_line_cursor
    sta.z memset.str
    lda #>print_line_cursor
    sta.z memset.str+1
    jsr memset
    // print_cls::@return
    // }
    // [92] return 
    rts
}
  // sid_rnd_init
// Initialize SID voice 3 for random number generation
sid_rnd_init: {
    // *SID_VOICE3_FREQ = $ffff
    // [93] *((const word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 
    lda #<$ffff
    sta SID_VOICE3_FREQ
    lda #>$ffff
    sta SID_VOICE3_FREQ+1
    // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE
    // [94] *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 
    lda #SID_CONTROL_NOISE
    sta SID_VOICE3_CONTROL
    // sid_rnd_init::@return
    // }
    // [95] return 
    rts
}
  // init_angle_screen
// Populates 1000 bytes (a screen) with values representing the angle to the center.
// Utilizes symmetry around the  center
// init_angle_screen(byte* zp(5) screen)
init_angle_screen: {
    .label __11 = $10
    .label screen = 5
    .label screen_topline = 3
    .label screen_bottomline = 5
    .label xw = $14
    .label yw = $16
    .label angle_w = $10
    .label ang_w = $13
    .label x = $12
    .label xb = 2
    .label y = $f
    // screen_topline = screen+40*12
    // [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 
    lda.z screen
    clc
    adc #<$28*$c
    sta.z screen_topline
    lda.z screen+1
    adc #>$28*$c
    sta.z screen_topline+1
    // screen_bottomline = screen+40*12
    // [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 
    clc
    lda.z screen_bottomline
    adc #<$28*$c
    sta.z screen_bottomline
    lda.z screen_bottomline+1
    adc #>$28*$c
    sta.z screen_bottomline+1
    // [98] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
    // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy 
    // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy 
    // [98] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [98] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
    // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy 
    // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy 
    // [98] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy 
    // init_angle_screen::@1
  __b1:
    // [99] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
    // [99] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [99] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    // init_angle_screen::@2
  __b2:
    // for( byte x=0,xb=39; x<=19; x++, xb--)
    // [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc __b3
    // init_angle_screen::@4
    // screen_topline -= 40
    // [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
    lda.z screen_topline
    sec
    sbc #<$28
    sta.z screen_topline
    lda.z screen_topline+1
    sbc #>$28
    sta.z screen_topline+1
    // screen_bottomline += 40
    // [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen_bottomline
    sta.z screen_bottomline
    bcc !+
    inc.z screen_bottomline+1
  !:
    // for(byte y: 0..12)
    // [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [104] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$d
    cmp.z y
    bne __b1
    // init_angle_screen::@return
    // }
    // [105] return 
    rts
    // init_angle_screen::@3
  __b3:
    // x*2
    // [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // 39-x*2
    // [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // (word){ 39-x*2, 0 }
    // [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
    ldy #0
    sta.z xw+1
    sty.z xw
    // y*2
    // [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z y
    asl
    // (word){ y*2, 0 }
    // [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 
    sta.z yw+1
    sty.z yw
    // atan2_16(xw, yw)
    // [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
    // [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
    // [113] call atan2_16 
    jsr atan2_16
    // [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0
    // init_angle_screen::@5
    // angle_w = atan2_16(xw, yw)
    // [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
    // angle_w+0x0080
    // [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 
    lda #$80
    clc
    adc.z __11
    sta.z __11
    bcc !+
    inc.z __11+1
  !:
    // ang_w = >(angle_w+0x0080)
    // [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 
    lda.z __11+1
    sta.z ang_w
    // screen_bottomline[xb] = ang_w
    // [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    ldy.z xb
    sta (screen_bottomline),y
    // -ang_w
    // [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 
    eor #$ff
    clc
    adc #1
    // screen_topline[xb] = -ang_w
    // [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_topline),y
    // 0x80+ang_w
    // [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 
    lda #$80
    clc
    adc.z ang_w
    // screen_topline[x] = 0x80+ang_w
    // [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // 0x80-ang_w
    // [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 
    lda #$80
    sec
    sbc.z ang_w
    // screen_bottomline[x] = 0x80-ang_w
    // [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_bottomline),y
    // for( byte x=0,xb=39; x<=19; x++, xb--)
    // [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [99] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
    // [99] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy 
    // [99] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy 
    jmp __b2
}
  // atan2_16
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// atan2_16(signed word zp($14) x, signed word zp($16) y)
atan2_16: {
    .label __2 = 7
    .label __7 = $1a
    .label yi = 7
    .label xi = $1a
    .label angle = $10
    .label xd = 9
    .label yd = $18
    .label return = $10
    .label x = $14
    .label y = $16
    // (y>=0)?y:-y
    // [127] 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
    // [128] (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
    // [129] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
    // [129] 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
    // [130] 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
    // [131] (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
    // [132] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
    // [132] 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:
    // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
    // [133] 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
    // [133] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 
    tax
    // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [133] 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)
    // [134] 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
    // [135] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
    // [135] 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
    // [136] (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)
    // [137] 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
    // [138] (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
    // [139] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
    // [139] 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)
    // [140] 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
    // [141] (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
    // [142] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
    // [142] 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
    // }
    // [143] return 
    rts
    // atan2_16::@11
  __b11:
    // [144] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx 
    txa
    tay
    // [145] (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
    // [146] (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
    // [147] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
    // [147] 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 
    // [147] 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 
    // [147] 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)
    // [148] 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)
    // [149] 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
    // [150] (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
    // [151] (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
    // [152] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
    // [152] 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 
    // [152] 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)
    // [153] 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
    // [154] (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
    // [155] (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]
    // [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [157] (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
    // [158] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
    // [158] 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 
    // [158] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [158] 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( byte i: 0..CORDIC_ITERATIONS_16-1)
    // [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [160] if((byte) atan2_16::i#1==(const 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:
    // [133] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
    // [133] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [133] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [133] 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
    // [161] (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
    // [162] (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]
    // [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [164] (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
    // [165] (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
    // [166] (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
    // [167] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 
    dey
    dey
    jmp __b13
    // atan2_16::@4
  __b4:
    // [168] (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:
    // [169] (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_dist_screen
// Populates 1000 bytes (a screen) with values representing the distance to the center.
// The actual value stored is distance*2 to increase precision
// init_dist_screen(byte* zp(3) screen)
init_dist_screen: {
    .label screen = 3
    .label screen_bottomline = 5
    .label yds = $14
    .label screen_topline = 3
    .label y = 2
    .label xds = $16
    .label ds = $16
    .label x = $f
    .label xb = $12
    // init_squares()
    // [171] call init_squares 
    // [242] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
    jsr init_squares
    // init_dist_screen::@11
    // screen_bottomline = screen+40*24
    // [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 
    lda.z screen
    clc
    adc #<$28*$18
    sta.z screen_bottomline
    lda.z screen+1
    adc #>$28*$18
    sta.z screen_bottomline+1
    // [173] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1]
    // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy 
    // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy 
    // [173] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [173] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1]
    // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy 
    // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy 
    // [173] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy 
    // init_dist_screen::@1
  __b1:
    // y2 = y*2
    // [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z y
    asl
    // (y2>=24)?(y2-24):(24-y2)
    // [175] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 
    cmp #$18
    bcs __b2
    // init_dist_screen::@3
    // [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$18+1
    // [177] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4]
    // [177] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy 
    // init_dist_screen::@4
  __b4:
    // sqr(yd)
    // [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
    // [179] call sqr 
    // [238] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
    // [238] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
    jsr sqr
    // sqr(yd)
    // [180] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
    lda.z sqr.return
    sta.z sqr.return_1
    lda.z sqr.return+1
    sta.z sqr.return_1+1
    // init_dist_screen::@12
    // yds = sqr(yd)
    // [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
    // [182] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
    // [182] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [182] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    // init_dist_screen::@5
  __b5:
    // for( byte x=0,xb=39; x<=19; x++, xb--)
    // [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc __b6
    // init_dist_screen::@7
    // screen_topline += 40
    // [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z screen_topline
    sta.z screen_topline
    bcc !+
    inc.z screen_topline+1
  !:
    // screen_bottomline -= 40
    // [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
    lda.z screen_bottomline
    sec
    sbc #<$28
    sta.z screen_bottomline
    lda.z screen_bottomline+1
    sbc #>$28
    sta.z screen_bottomline+1
    // for(byte y: 0..12)
    // [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [187] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$d
    cmp.z y
    bne __b1
    // init_dist_screen::@return
    // }
    // [188] return 
    rts
    // init_dist_screen::@6
  __b6:
    // x2 = x*2
    // [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // (x2>=39)?(x2-39):(39-x2)
    // [190] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 
    cmp #$27
    bcs __b8
    // init_dist_screen::@9
    // [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // [192] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10]
    // [192] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy 
    // init_dist_screen::@10
  __b10:
    // sqr(xd)
    // [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
    // [194] call sqr 
    // [238] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr]
    // [238] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy 
    jsr sqr
    // sqr(xd)
    // [195] (word) sqr::return#3 ← (word) sqr::return#0
    // init_dist_screen::@13
    // xds = sqr(xd)
    // [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
    // ds = xds+yds
    // [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 
    lda.z ds
    clc
    adc.z yds
    sta.z ds
    lda.z ds+1
    adc.z yds+1
    sta.z ds+1
    // sqrt(ds)
    // [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
    // [199] call sqrt 
    jsr sqrt
    // [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0
    // init_dist_screen::@14
    // d = sqrt(ds)
    // [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
    // screen_topline[x] = d
    // [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // screen_bottomline[x] = d
    // [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_bottomline),y
    // screen_topline[xb] = d
    // [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z xb
    sta (screen_topline),y
    // screen_bottomline[xb] = d
    // [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_bottomline),y
    // for( byte x=0,xb=39; x<=19; x++, xb--)
    // [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [182] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5]
    // [182] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy 
    // [182] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy 
    jmp __b5
    // init_dist_screen::@8
  __b8:
    // (x2>=39)?(x2-39):(39-x2)
    // [208] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 
    sec
    sbc #$27
    jmp __b10
    // init_dist_screen::@2
  __b2:
    // (y2>=24)?(y2-24):(24-y2)
    // [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 
    sec
    sbc #$18
    jmp __b4
}
  // sqrt
// Find the (integer) square root of a word value
// If the square is not an integer then it returns the largest integer N where N*N <= val
// Uses a table of squares that must be initialized by calling init_squares()
// sqrt(word zp($16) val)
sqrt: {
    .label __1 = 7
    .label __3 = 7
    .label found = 7
    .label val = $16
    // bsearch16u(val, SQUARES, NUM_SQUARES)
    // [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0
    // [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
    lda.z SQUARES
    sta.z bsearch16u.items
    lda.z SQUARES+1
    sta.z bsearch16u.items+1
    // [212] call bsearch16u 
    // [219] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
    jsr bsearch16u
    // bsearch16u(val, SQUARES, NUM_SQUARES)
    // [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
    // sqrt::@1
    // found = bsearch16u(val, SQUARES, NUM_SQUARES)
    // [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
    // found-SQUARES
    // [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 
    lda.z __3
    sec
    sbc.z SQUARES
    sta.z __3
    lda.z __3+1
    sbc.z SQUARES+1
    sta.z __3+1
    // [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z __1+1
    ror.z __1
    // (byte)(found-SQUARES)
    // [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 
    lda.z __1
    // sqrt::@return
    // }
    // [218] return 
    rts
}
  // bsearch16u
// Searches an array of nitems unsigned words, the initial member of which is pointed to by base, for a member that matches the value key.
// - key - The value to look for
// - items - Pointer to the start of the array to search in
// - num - The number of items in the array
// Returns pointer to an entry in the array that matches the search key
// bsearch16u(word zp($16) key, word* zp(7) items, byte register(X) num)
bsearch16u: {
    .label __2 = 7
    .label pivot = $18
    .label result = $1a
    .label return = 7
    .label items = 7
    .label key = $16
    // [220] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
    // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy 
    // [220] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 
    ldx #NUM_SQUARES
    // bsearch16u::@3
  __b3:
    // while (num > 0)
    // [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 
    cpx #0
    bne __b4
    // bsearch16u::@5
    // *items<=key?items:items-1
    // [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
    ldy #1
    lda (items),y
    cmp.z key+1
    bne !+
    dey
    lda (items),y
    cmp.z key
    beq __b2
  !:
    bcc __b2
    // bsearch16u::@1
    // [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
    lda.z __2
    sec
    sbc #<1*SIZEOF_WORD
    sta.z __2
    lda.z __2+1
    sbc #>1*SIZEOF_WORD
    sta.z __2+1
    // [224] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
    // [224] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
    // bsearch16u::@2
  __b2:
    // [225] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
    // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
    // bsearch16u::@return
    // }
    // [226] return 
    rts
    // bsearch16u::@4
  __b4:
    // num >> 1
    // [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 
    txa
    lsr
    // items + (num >> 1)
    // [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa 
    clc
    adc.z items
    sta.z pivot
    lda #0
    adc.z items+1
    sta.z pivot+1
    // result = (signed int)key-(signed int)*pivot
    // [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 
    sec
    lda.z key
    ldy #0
    sbc (pivot),y
    sta.z result
    lda.z key+1
    iny
    sbc (pivot),y
    sta.z result+1
    // if (result == 0)
    // [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
    bne __b6
    lda.z result
    bne __b6
    // bsearch16u::@8
    // [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
    lda.z pivot
    sta.z return
    lda.z pivot+1
    sta.z return+1
    rts
    // bsearch16u::@6
  __b6:
    // if (result > 0)
    // [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
    lda.z result+1
    bmi __b7
    bne !+
    lda.z result
    beq __b7
  !:
    // bsearch16u::@9
    // items = pivot+1
    // [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
    lda #1*SIZEOF_WORD
    clc
    adc.z pivot
    sta.z items
    lda #0
    adc.z pivot+1
    sta.z items+1
    // num--;
    // [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx 
    dex
    // [236] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
    // [236] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
    // [236] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
    // bsearch16u::@7
  __b7:
    // num >>= 1
    // [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 
    txa
    lsr
    tax
    // [220] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
    // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
    // [220] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy 
    jmp __b3
}
  // sqr
// Find the square of a byte value
// Uses a table of squares that must be initialized by calling init_squares()
// sqr(byte register(A) val)
sqr: {
    .label return = $16
    .label return_1 = $14
    // return SQUARES[val];
    // [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa 
    tay
    lda (SQUARES),y
    sta.z return
    iny
    lda (SQUARES),y
    sta.z return+1
    // sqr::@return
    // }
    // [241] return 
    rts
}
  // init_squares
// Initialize squares table
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
init_squares: {
    .label squares = $10
    .label sqr = $1a
    // malloc(NUM_SQUARES*sizeof(word))
    // [243] call malloc 
    // [255] phi from init_squares to malloc [phi:init_squares->malloc]
    // [255] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 
    lda #<NUM_SQUARES*SIZEOF_WORD
    sta.z malloc.size
    lda #>NUM_SQUARES*SIZEOF_WORD
    sta.z malloc.size+1
    // [255] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy 
    jsr malloc
    // init_squares::@3
    // malloc(NUM_SQUARES*sizeof(word))
    // [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
    // squares = SQUARES
    // [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
    lda.z SQUARES
    sta.z squares
    lda.z SQUARES+1
    sta.z squares+1
    // [246] phi from init_squares::@3 to init_squares::@1 [phi:init_squares::@3->init_squares::@1]
    // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@3->init_squares::@1#0] -- register_copy 
    // [246] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@3->init_squares::@1#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z sqr
    sta.z sqr+1
    // [246] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@3->init_squares::@1#2] -- vbuxx=vbuc1 
    tax
    // init_squares::@1
  __b1:
    // for(byte i=0;i<NUM_SQUARES;i++)
    // [247] if((byte) init_squares::i#2<(const byte) NUM_SQUARES#3) goto init_squares::@2 -- vbuxx_lt_vbuc1_then_la1 
    cpx #NUM_SQUARES
    bcc __b2
    // init_squares::@return
    // }
    // [248] return 
    rts
    // init_squares::@2
  __b2:
    // *squares++ = sqr
    // [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 
    ldy #0
    lda.z sqr
    sta (squares),y
    iny
    lda.z sqr+1
    sta (squares),y
    // *squares++ = sqr;
    // [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
    lda #SIZEOF_WORD
    clc
    adc.z squares
    sta.z squares
    bcc !+
    inc.z squares+1
  !:
    // i*2
    // [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // i*2+1
    // [252] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 
    clc
    adc #1
    // sqr += i*2+1
    // [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa 
    clc
    adc.z sqr
    sta.z sqr
    bcc !+
    inc.z sqr+1
  !:
    // for(byte i=0;i<NUM_SQUARES;i++)
    // [254] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [246] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
    // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@2->init_squares::@1#0] -- register_copy 
    // [246] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
    // [246] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@2->init_squares::@1#2] -- register_copy 
    jmp __b1
}
  // malloc
// Allocates a block of size bytes of memory, returning a pointer to the beginning of the block.
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
// malloc(word zp(9) size)
malloc: {
    .label mem = 9
    .label size = 9
    // mem = heap_head-size
    // [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz1 
    lda.z heap_head
    sec
    sbc.z mem
    sta.z mem
    lda.z heap_head+1
    sbc.z mem+1
    sta.z mem+1
    // heap_head = mem
    // [257] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 
    lda.z mem
    sta.z heap_head
    lda.z mem+1
    sta.z heap_head+1
    // malloc::@return
    // }
    // [258] return 
    rts
}
  // File Data
  // 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

  .align $100
SINTABLE:
.for(var i=0;i<$200;i++)
        .byte round(127.5+127.5*sin(2*PI*i/256))


