Resolved forward reference FONT_HEX_PROTO to (byte[]) FONT_HEX_PROTO
Resolved forward reference FONT_HEX_PROTO to (byte[]) FONT_HEX_PROTO
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)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Identified constant variable (byte*) HEAP_TOP
Identified constant variable (byte*) main::BASE_SCREEN
Identified constant variable (byte*) main::BASE_CHARSET
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 
Inlined call (byte~) main::$1 ← call toD018 (byte*) SCREEN (byte*) CHARSET 
Inlined call (byte~) main::$7 ← call toD018 (byte*) main::BASE_SCREEN (byte*) main::BASE_CHARSET 
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) malloc::@1
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) @7
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) @8
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) init_squares::@2
Culled Empty Block (label) @13
Culled Empty Block (label) sqr::@1
Culled Empty Block (label) @14
Culled Empty Block (label) sqrt::@1
Culled Empty Block (label) @16
Culled Empty Block (label) @17
Culled Empty Block (label) @18
Culled Empty Block (label) @19
Culled Empty Block (label) init_font_hex::@6
Culled Empty Block (label) clock::@1
Culled Empty Block (label) @21
Culled Empty Block (label) @22
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) @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) main::toD0181_@1
Culled Empty Block (label) main::toD0182_@1
Culled Empty Block (label) @46
Culled Empty Block (label) init_dist_screen::@13
Culled Empty Block (label) init_dist_screen::@14
Culled Empty Block (label) init_dist_screen::@9
Culled Empty Block (label) init_dist_screen::@10
Culled Empty Block (label) init_dist_screen::@12

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  to:@4
@4: scope:[]  from @begin
  (byte*) HEAP_TOP#0 ← ((byte*)) (number) $a000
  (byte*) heap_head#0 ← (byte*) HEAP_TOP#0
  to:@12
malloc: scope:[malloc]  from init_squares
  (word) malloc::size#1 ← phi( init_squares/(word) malloc::size#0 )
  (byte*) heap_head#10 ← phi( init_squares/(byte*) heap_head#19 )
  (byte*~) malloc::$0 ← (byte*) heap_head#10 - (word) malloc::size#1
  (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#11 ← phi( malloc/(byte*) heap_head#1 )
  (void*) malloc::return#3 ← phi( malloc/(void*) malloc::return#0 )
  (void*) malloc::return#1 ← (void*) malloc::return#3
  (byte*) heap_head#2 ← (byte*) heap_head#11
  return 
  to:@return
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
@12: scope:[]  from @4
  (byte*) heap_head#43 ← phi( @4/(byte*) heap_head#0 )
  (byte) NUM_SQUARES#0 ← (number) $ff
  (word*) SQUARES#0 ← (word*) 0
  to:@15
init_squares: scope:[init_squares]  from init_dist_screen
  (byte*) heap_head#19 ← phi( init_dist_screen/(byte*) heap_head#23 )
  (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::@3
init_squares::@3: scope:[init_squares]  from init_squares
  (byte) NUM_SQUARES#7 ← phi( init_squares/(byte) NUM_SQUARES#6 )
  (byte*) heap_head#12 ← phi( init_squares/(byte*) heap_head#2 )
  (void*) malloc::return#4 ← phi( init_squares/(void*) malloc::return#2 )
  (void*~) init_squares::$1 ← (void*) malloc::return#4
  (byte*) heap_head#3 ← (byte*) heap_head#12
  (word*) SQUARES#1 ← ((word*)) (void*~) init_squares::$1
  (word*) init_squares::squares#0 ← (word*) SQUARES#1
  (word) init_squares::sqr#0 ← (number) 0
  (number~) init_squares::$2 ← (byte) NUM_SQUARES#7 - (number) 1
  (byte) init_squares::i#0 ← (byte) 0
  to:init_squares::@1
init_squares::@1: scope:[init_squares]  from init_squares::@1 init_squares::@3
  (word*) SQUARES#17 ← phi( init_squares::@1/(word*) SQUARES#17 init_squares::@3/(word*) SQUARES#1 )
  (byte*) heap_head#20 ← phi( init_squares::@1/(byte*) heap_head#20 init_squares::@3/(byte*) heap_head#3 )
  (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@3/(byte) init_squares::i#0 )
  (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@3/(word*) init_squares::squares#0 )
  (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@3/(word) init_squares::sqr#0 )
  *((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#2 * (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#2 + rangenext(0,init_squares::$2)
  (bool~) init_squares::$5 ← (byte) init_squares::i#1 != rangelast(0,init_squares::$2)
  if((bool~) init_squares::$5) goto init_squares::@1
  to:init_squares::@return
init_squares::@return: scope:[init_squares]  from init_squares::@1
  (word*) SQUARES#8 ← phi( init_squares::@1/(word*) SQUARES#17 )
  (byte*) heap_head#13 ← phi( init_squares::@1/(byte*) heap_head#20 )
  (byte*) heap_head#4 ← (byte*) heap_head#13
  (word*) SQUARES#2 ← (word*) SQUARES#8
  return 
  to:@return
sqr: scope:[sqr]  from init_dist_screen::@4 init_dist_screen::@8
  (word*) SQUARES#9 ← phi( init_dist_screen::@4/(word*) SQUARES#18 init_dist_screen::@8/(word*) SQUARES#19 )
  (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 )
  (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
sqrt: scope:[sqrt]  from init_dist_screen::@17
  (byte) NUM_SQUARES#8 ← phi( init_dist_screen::@17/(byte) NUM_SQUARES#13 )
  (word*) SQUARES#10 ← phi( init_dist_screen::@17/(word*) SQUARES#20 )
  (word) sqrt::val#1 ← phi( init_dist_screen::@17/(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
@15: scope:[]  from @12
  (word*) SQUARES#43 ← phi( @12/(word*) SQUARES#0 )
  (byte*) heap_head#38 ← phi( @12/(byte*) heap_head#43 )
  (byte) NUM_SQUARES#32 ← phi( @12/(byte) NUM_SQUARES#0 )
  (byte*) D018#0 ← ((byte*)) (number) $d018
  (dword*) CIA2_TIMER_AB#0 ← ((dword*)) (number) $dd04
  (byte*) CIA2_TIMER_A_CONTROL#0 ← ((byte*)) (number) $dd0e
  (byte*) CIA2_TIMER_B_CONTROL#0 ← ((byte*)) (number) $dd0f
  (byte) CIA_TIMER_CONTROL_STOP#0 ← (number) 0
  (byte) CIA_TIMER_CONTROL_START#0 ← (number) 1
  (byte) CIA_TIMER_CONTROL_CONTINUOUS#0 ← (number) 0
  (byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0 ← (number) 0
  (byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 ← (number) $40
  to:@20
init_font_hex: scope:[init_font_hex]  from main
  (byte*) init_font_hex::charset#6 ← phi( main/(byte*) init_font_hex::charset#1 )
  (byte*) init_font_hex::proto_hi#0 ← (byte[]) FONT_HEX_PROTO#0
  (byte) init_font_hex::c#0 ← (byte) 0
  to:init_font_hex::@1
init_font_hex::@1: scope:[init_font_hex]  from init_font_hex init_font_hex::@5
  (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) init_font_hex::c#0 init_font_hex::@5/(byte) init_font_hex::c#1 )
  (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(byte*) init_font_hex::proto_hi#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 )
  (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(byte*) init_font_hex::charset#6 init_font_hex::@5/(byte*) init_font_hex::charset#7 )
  (byte*) init_font_hex::proto_lo#0 ← (byte[]) FONT_HEX_PROTO#0
  (byte) init_font_hex::c1#0 ← (byte) 0
  to:init_font_hex::@2
init_font_hex::@2: scope:[init_font_hex]  from init_font_hex::@1 init_font_hex::@4
  (byte) init_font_hex::c#5 ← phi( init_font_hex::@1/(byte) init_font_hex::c#6 init_font_hex::@4/(byte) init_font_hex::c#3 )
  (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) init_font_hex::c1#0 init_font_hex::@4/(byte) init_font_hex::c1#1 )
  (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(byte*) init_font_hex::proto_lo#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 )
  (byte*) init_font_hex::proto_hi#4 ← phi( init_font_hex::@1/(byte*) init_font_hex::proto_hi#6 init_font_hex::@4/(byte*) init_font_hex::proto_hi#5 )
  (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 )
  (byte) init_font_hex::idx#0 ← (number) 0
  *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0
  (byte) init_font_hex::idx#1 ← ++ (byte) init_font_hex::idx#0
  (byte) init_font_hex::i#0 ← (byte) 0
  to:init_font_hex::@3
init_font_hex::@3: scope:[init_font_hex]  from init_font_hex::@2 init_font_hex::@3
  (byte) init_font_hex::c#4 ← phi( init_font_hex::@2/(byte) init_font_hex::c#5 init_font_hex::@3/(byte) init_font_hex::c#4 )
  (byte) init_font_hex::c1#3 ← phi( init_font_hex::@2/(byte) init_font_hex::c1#4 init_font_hex::@3/(byte) init_font_hex::c1#3 )
  (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) init_font_hex::idx#1 init_font_hex::@3/(byte) init_font_hex::idx#2 )
  (byte*) init_font_hex::charset#3 ← phi( init_font_hex::@2/(byte*) init_font_hex::charset#2 init_font_hex::@3/(byte*) init_font_hex::charset#3 )
  (byte*) init_font_hex::proto_lo#2 ← phi( init_font_hex::@2/(byte*) init_font_hex::proto_lo#4 init_font_hex::@3/(byte*) init_font_hex::proto_lo#2 )
  (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) init_font_hex::i#0 init_font_hex::@3/(byte) init_font_hex::i#1 )
  (byte*) init_font_hex::proto_hi#2 ← phi( init_font_hex::@2/(byte*) init_font_hex::proto_hi#4 init_font_hex::@3/(byte*) init_font_hex::proto_hi#2 )
  (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#2 + (byte) init_font_hex::i#2) << (number) 4
  (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#2 + (byte) init_font_hex::i#2) << (number) 1
  (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1
  *((byte*) init_font_hex::charset#3 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2
  (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5
  (byte) init_font_hex::i#1 ← (byte) init_font_hex::i#2 + rangenext(0,4)
  (bool~) init_font_hex::$3 ← (byte) init_font_hex::i#1 != rangelast(0,4)
  if((bool~) init_font_hex::$3) goto init_font_hex::@3
  to:init_font_hex::@4
init_font_hex::@4: scope:[init_font_hex]  from init_font_hex::@3
  (byte) init_font_hex::c#3 ← phi( init_font_hex::@3/(byte) init_font_hex::c#4 )
  (byte*) init_font_hex::proto_hi#5 ← phi( init_font_hex::@3/(byte*) init_font_hex::proto_hi#2 )
  (byte) init_font_hex::c1#2 ← phi( init_font_hex::@3/(byte) init_font_hex::c1#3 )
  (byte*) init_font_hex::proto_lo#3 ← phi( init_font_hex::@3/(byte*) init_font_hex::proto_lo#2 )
  (byte) init_font_hex::idx#6 ← phi( init_font_hex::@3/(byte) init_font_hex::idx#2 )
  (byte*) init_font_hex::charset#4 ← phi( init_font_hex::@3/(byte*) init_font_hex::charset#3 )
  *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (number) 0
  (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#6
  *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (number) 0
  (byte) init_font_hex::idx#4 ← ++ (byte) init_font_hex::idx#3
  (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#3 + (number) 5
  (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#4 + (number) 8
  (byte) init_font_hex::c1#1 ← (byte) init_font_hex::c1#2 + rangenext(0,$f)
  (bool~) init_font_hex::$4 ← (byte) init_font_hex::c1#1 != rangelast(0,$f)
  if((bool~) init_font_hex::$4) goto init_font_hex::@2
  to:init_font_hex::@5
init_font_hex::@5: scope:[init_font_hex]  from init_font_hex::@4
  (byte*) init_font_hex::charset#7 ← phi( init_font_hex::@4/(byte*) init_font_hex::charset#0 )
  (byte) init_font_hex::c#2 ← phi( init_font_hex::@4/(byte) init_font_hex::c#3 )
  (byte*) init_font_hex::proto_hi#3 ← phi( init_font_hex::@4/(byte*) init_font_hex::proto_hi#5 )
  (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#3 + (number) 5
  (byte) init_font_hex::c#1 ← (byte) init_font_hex::c#2 + rangenext(0,$f)
  (bool~) init_font_hex::$5 ← (byte) init_font_hex::c#1 != rangelast(0,$f)
  if((bool~) init_font_hex::$5) goto init_font_hex::@1
  to:init_font_hex::@return
init_font_hex::@return: scope:[init_font_hex]  from init_font_hex::@5
  return 
  to:@return
@20: scope:[]  from @15
  (word*) SQUARES#39 ← phi( @15/(word*) SQUARES#43 )
  (byte*) heap_head#34 ← phi( @15/(byte*) heap_head#38 )
  (byte) NUM_SQUARES#28 ← phi( @15/(byte) NUM_SQUARES#32 )
  (byte[]) FONT_HEX_PROTO#0 ← { (number) 2, (number) 5, (number) 5, (number) 5, (number) 2, (number) 6, (number) 2, (number) 2, (number) 2, (number) 7, (number) 6, (number) 1, (number) 2, (number) 4, (number) 7, (number) 6, (number) 1, (number) 2, (number) 1, (number) 6, (number) 5, (number) 5, (number) 7, (number) 1, (number) 1, (number) 7, (number) 4, (number) 6, (number) 1, (number) 6, (number) 3, (number) 4, (number) 6, (number) 5, (number) 2, (number) 7, (number) 1, (number) 1, (number) 1, (number) 1, (number) 2, (number) 5, (number) 2, (number) 5, (number) 2, (number) 2, (number) 5, (number) 3, (number) 1, (number) 1, (number) 2, (number) 5, (number) 7, (number) 5, (number) 5, (number) 6, (number) 5, (number) 6, (number) 5, (number) 6, (number) 2, (number) 5, (number) 4, (number) 5, (number) 2, (number) 6, (number) 5, (number) 5, (number) 5, (number) 6, (number) 7, (number) 4, (number) 6, (number) 4, (number) 7, (number) 7, (number) 4, (number) 6, (number) 4, (number) 4 }
  (dword) CLOCKS_PER_INIT#0 ← (number) $12
  to:@38
clock: scope:[clock]  from main::@5
  (number~) clock::$0 ← (number) $ffffffff - *((dword*) CIA2_TIMER_AB#0)
  (dword) clock::return#0 ← (number~) clock::$0
  to:clock::@return
clock::@return: scope:[clock]  from clock
  (dword) clock::return#3 ← phi( clock/(dword) clock::return#0 )
  (dword) clock::return#1 ← (dword) clock::return#3
  return 
  to:@return
clock_start: scope:[clock_start]  from main::@1
  (byte~) clock_start::$0 ← (byte) CIA_TIMER_CONTROL_STOP#0 | (byte) CIA_TIMER_CONTROL_CONTINUOUS#0
  (byte~) clock_start::$1 ← (byte~) clock_start::$0 | (byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0
  *((byte*) CIA2_TIMER_A_CONTROL#0) ← (byte~) clock_start::$1
  (byte~) clock_start::$2 ← (byte) CIA_TIMER_CONTROL_STOP#0 | (byte) CIA_TIMER_CONTROL_CONTINUOUS#0
  (byte~) clock_start::$3 ← (byte~) clock_start::$2 | (byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0
  *((byte*) CIA2_TIMER_B_CONTROL#0) ← (byte~) clock_start::$3
  *((dword*) CIA2_TIMER_AB#0) ← (number) $ffffffff
  (byte~) clock_start::$4 ← (byte) CIA_TIMER_CONTROL_START#0 | (byte) CIA_TIMER_CONTROL_CONTINUOUS#0
  (byte~) clock_start::$5 ← (byte~) clock_start::$4 | (byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0
  *((byte*) CIA2_TIMER_B_CONTROL#0) ← (byte~) clock_start::$5
  (byte~) clock_start::$6 ← (byte) CIA_TIMER_CONTROL_START#0 | (byte) CIA_TIMER_CONTROL_CONTINUOUS#0
  (byte~) clock_start::$7 ← (byte~) clock_start::$6 | (byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0
  *((byte*) CIA2_TIMER_A_CONTROL#0) ← (byte~) clock_start::$7
  to:clock_start::@return
clock_start::@return: scope:[clock_start]  from clock_start
  return 
  to:@return
print_word_at: scope:[print_word_at]  from print_dword_at print_dword_at::@1
  (byte*) print_word_at::at#2 ← phi( print_dword_at/(byte*) print_word_at::at#0 print_dword_at::@1/(byte*) print_word_at::at#1 )
  (word) print_word_at::w#2 ← phi( print_dword_at/(word) print_word_at::w#0 print_dword_at::@1/(word) print_word_at::w#1 )
  (byte~) print_word_at::$0 ← > (word) print_word_at::w#2
  (byte) print_byte_at::b#0 ← (byte~) print_word_at::$0
  (byte*) print_byte_at::at#0 ← (byte*) print_word_at::at#2
  call print_byte_at 
  to:print_word_at::@1
print_word_at::@1: scope:[print_word_at]  from print_word_at
  (byte*) print_word_at::at#3 ← phi( print_word_at/(byte*) print_word_at::at#2 )
  (word) print_word_at::w#3 ← phi( print_word_at/(word) print_word_at::w#2 )
  (byte~) print_word_at::$2 ← < (word) print_word_at::w#3
  (byte*~) print_word_at::$3 ← (byte*) print_word_at::at#3 + (number) 2
  (byte) print_byte_at::b#1 ← (byte~) print_word_at::$2
  (byte*) print_byte_at::at#1 ← (byte*~) print_word_at::$3
  call print_byte_at 
  to:print_word_at::@2
print_word_at::@2: scope:[print_word_at]  from print_word_at::@1
  to:print_word_at::@return
print_word_at::@return: scope:[print_word_at]  from print_word_at::@2
  return 
  to:@return
print_dword_at: scope:[print_dword_at]  from main::@6
  (byte*) print_dword_at::at#1 ← phi( main::@6/(byte*) print_dword_at::at#0 )
  (dword) print_dword_at::dw#1 ← phi( main::@6/(dword) print_dword_at::dw#0 )
  (word~) print_dword_at::$0 ← > (dword) print_dword_at::dw#1
  (word) print_word_at::w#0 ← (word~) print_dword_at::$0
  (byte*) print_word_at::at#0 ← (byte*) print_dword_at::at#1
  call print_word_at 
  to:print_dword_at::@1
print_dword_at::@1: scope:[print_dword_at]  from print_dword_at
  (byte*) print_dword_at::at#2 ← phi( print_dword_at/(byte*) print_dword_at::at#1 )
  (dword) print_dword_at::dw#2 ← phi( print_dword_at/(dword) print_dword_at::dw#1 )
  (word~) print_dword_at::$2 ← < (dword) print_dword_at::dw#2
  (byte*~) print_dword_at::$3 ← (byte*) print_dword_at::at#2 + (number) 4
  (word) print_word_at::w#1 ← (word~) print_dword_at::$2
  (byte*) print_word_at::at#1 ← (byte*~) print_dword_at::$3
  call print_word_at 
  to:print_dword_at::@2
print_dword_at::@2: scope:[print_dword_at]  from print_dword_at::@1
  to:print_dword_at::@return
print_dword_at::@return: scope:[print_dword_at]  from print_dword_at::@2
  return 
  to:@return
@38: scope:[]  from @20
  (word*) SQUARES#34 ← phi( @20/(word*) SQUARES#39 )
  (byte*) heap_head#30 ← phi( @20/(byte*) heap_head#34 )
  (byte) NUM_SQUARES#23 ← phi( @20/(byte) NUM_SQUARES#28 )
  (byte[]) print_hextab#0 ← (const string) $1
  to:@45
print_byte_at: scope:[print_byte_at]  from print_word_at print_word_at::@1
  (byte*) print_byte_at::at#2 ← phi( print_word_at/(byte*) print_byte_at::at#0 print_word_at::@1/(byte*) print_byte_at::at#1 )
  (byte) print_byte_at::b#2 ← phi( print_word_at/(byte) print_byte_at::b#0 print_word_at::@1/(byte) print_byte_at::b#1 )
  (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#2 >> (number) 4
  (byte) print_char_at::ch#0 ← *((byte[]) print_hextab#0 + (byte~) print_byte_at::$0)
  (byte*) print_char_at::at#0 ← (byte*) print_byte_at::at#2
  call print_char_at 
  to:print_byte_at::@1
print_byte_at::@1: scope:[print_byte_at]  from print_byte_at
  (byte*) print_byte_at::at#3 ← phi( print_byte_at/(byte*) print_byte_at::at#2 )
  (byte) print_byte_at::b#3 ← phi( print_byte_at/(byte) print_byte_at::b#2 )
  (number~) print_byte_at::$2 ← (byte) print_byte_at::b#3 & (number) $f
  (byte*~) print_byte_at::$3 ← (byte*) print_byte_at::at#3 + (number) 1
  (byte) print_char_at::ch#1 ← *((byte[]) print_hextab#0 + (number~) print_byte_at::$2)
  (byte*) print_char_at::at#1 ← (byte*~) print_byte_at::$3
  call print_char_at 
  to:print_byte_at::@2
print_byte_at::@2: scope:[print_byte_at]  from print_byte_at::@1
  to:print_byte_at::@return
print_byte_at::@return: scope:[print_byte_at]  from print_byte_at::@2
  return 
  to:@return
print_char_at: scope:[print_char_at]  from print_byte_at print_byte_at::@1
  (byte*) print_char_at::at#2 ← phi( print_byte_at/(byte*) print_char_at::at#0 print_byte_at::@1/(byte*) print_char_at::at#1 )
  (byte) print_char_at::ch#2 ← phi( print_byte_at/(byte) print_char_at::ch#0 print_byte_at::@1/(byte) print_char_at::ch#1 )
  *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2
  to:print_char_at::@return
print_char_at::@return: scope:[print_char_at]  from print_char_at
  return 
  to:@return
@45: scope:[]  from @38
  (word*) SQUARES#33 ← phi( @38/(word*) SQUARES#34 )
  (byte*) heap_head#29 ← phi( @38/(byte*) heap_head#30 )
  (byte) NUM_SQUARES#22 ← phi( @38/(byte) NUM_SQUARES#23 )
  (byte*) CHARSET#0 ← ((byte*)) (number) $2000
  (byte*) SCREEN#0 ← ((byte*)) (number) $2800
  to:@47
main: scope:[main]  from @47
  (word*) SQUARES#46 ← phi( @47/(word*) SQUARES#25 )
  (byte*) heap_head#44 ← phi( @47/(byte*) heap_head#25 )
  (byte) NUM_SQUARES#36 ← phi( @47/(byte) NUM_SQUARES#17 )
  (byte*) init_font_hex::charset#1 ← (byte*) CHARSET#0
  call init_font_hex 
  to:main::@3
main::@3: scope:[main]  from main
  (word*) SQUARES#44 ← phi( main/(word*) SQUARES#46 )
  (byte*) heap_head#39 ← phi( main/(byte*) heap_head#44 )
  (byte) NUM_SQUARES#33 ← phi( main/(byte) NUM_SQUARES#36 )
  (byte*) main::toD0181_screen#0 ← (byte*) SCREEN#0
  (byte*) main::toD0181_gfx#0 ← (byte*) CHARSET#0
  to:main::toD0181
main::toD0181: scope:[main]  from main::@3
  (word*) SQUARES#40 ← phi( main::@3/(word*) SQUARES#44 )
  (byte*) heap_head#35 ← phi( main::@3/(byte*) heap_head#39 )
  (byte) NUM_SQUARES#29 ← phi( main::@3/(byte) NUM_SQUARES#33 )
  (byte*) main::toD0181_gfx#1 ← phi( main::@3/(byte*) main::toD0181_gfx#0 )
  (byte*) main::toD0181_screen#1 ← phi( main::@3/(byte*) main::toD0181_screen#0 )
  (word~) main::toD0181_$0#0 ← ((word)) (byte*) main::toD0181_screen#1
  (number~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (number) $3fff
  (number~) main::toD0181_$2#0 ← (number~) main::toD0181_$1#0 * (number) 4
  (number~) main::toD0181_$3#0 ← > (number~) main::toD0181_$2#0
  (word~) main::toD0181_$4#0 ← ((word)) (byte*) main::toD0181_gfx#1
  (byte~) main::toD0181_$5#0 ← > (word~) main::toD0181_$4#0
  (number~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (number) 4
  (number~) main::toD0181_$7#0 ← (number~) main::toD0181_$6#0 & (number) $f
  (number~) main::toD0181_$8#0 ← (number~) main::toD0181_$3#0 | (number~) main::toD0181_$7#0
  (byte) main::toD0181_return#0 ← (number~) main::toD0181_$8#0
  to:main::toD0181_@return
main::toD0181_@return: scope:[main]  from main::toD0181
  (word*) SQUARES#35 ← phi( main::toD0181/(word*) SQUARES#40 )
  (byte*) heap_head#31 ← phi( main::toD0181/(byte*) heap_head#35 )
  (byte) NUM_SQUARES#24 ← phi( main::toD0181/(byte) NUM_SQUARES#29 )
  (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::@1
main::@1: scope:[main]  from main::toD0181_@return
  (word*) SQUARES#26 ← phi( main::toD0181_@return/(word*) SQUARES#35 )
  (byte*) heap_head#26 ← phi( main::toD0181_@return/(byte*) heap_head#31 )
  (byte) NUM_SQUARES#18 ← phi( main::toD0181_@return/(byte) NUM_SQUARES#24 )
  (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 )
  (byte~) main::$1 ← (byte) main::toD0181_return#3
  *((byte*) D018#0) ← (byte~) main::$1
  call clock_start 
  to:main::@4
main::@4: scope:[main]  from main::@1
  (word*) SQUARES#21 ← phi( main::@1/(word*) SQUARES#26 )
  (byte*) heap_head#21 ← phi( main::@1/(byte*) heap_head#26 )
  (byte) NUM_SQUARES#14 ← phi( main::@1/(byte) NUM_SQUARES#18 )
  (byte*) init_dist_screen::screen#0 ← (byte*) SCREEN#0
  call init_dist_screen 
  to:main::@5
main::@5: scope:[main]  from main::@4
  (word*) SQUARES#12 ← phi( main::@4/(word*) SQUARES#6 )
  (byte*) heap_head#14 ← phi( main::@4/(byte*) heap_head#8 )
  (byte) NUM_SQUARES#9 ← phi( main::@4/(byte) NUM_SQUARES#4 )
  (byte) NUM_SQUARES#1 ← (byte) NUM_SQUARES#9
  (byte*) heap_head#5 ← (byte*) heap_head#14
  (word*) SQUARES#3 ← (word*) SQUARES#12
  call clock 
  (dword) clock::return#2 ← (dword) clock::return#1
  to:main::@6
main::@6: scope:[main]  from main::@5
  (word*) SQUARES#45 ← phi( main::@5/(word*) SQUARES#3 )
  (byte*) heap_head#40 ← phi( main::@5/(byte*) heap_head#5 )
  (byte) NUM_SQUARES#34 ← phi( main::@5/(byte) NUM_SQUARES#1 )
  (dword) clock::return#4 ← phi( main::@5/(dword) clock::return#2 )
  (dword~) main::$4 ← (dword) clock::return#4
  (dword~) main::$5 ← (dword~) main::$4 - (dword) CLOCKS_PER_INIT#0
  (dword) main::cyclecount#0 ← (dword~) main::$5
  (byte*) main::BASE_SCREEN#0 ← ((byte*)) (number) $400
  (byte*) main::BASE_CHARSET#0 ← ((byte*)) (number) $1000
  (dword) print_dword_at::dw#0 ← (dword) main::cyclecount#0
  (byte*) print_dword_at::at#0 ← (byte*) main::BASE_SCREEN#0
  call print_dword_at 
  to:main::@7
main::@7: scope:[main]  from main::@6
  (word*) SQUARES#41 ← phi( main::@6/(word*) SQUARES#45 )
  (byte*) heap_head#36 ← phi( main::@6/(byte*) heap_head#40 )
  (byte) NUM_SQUARES#30 ← phi( main::@6/(byte) NUM_SQUARES#34 )
  (byte*) main::toD0182_screen#0 ← (byte*) main::BASE_SCREEN#0
  (byte*) main::toD0182_gfx#0 ← (byte*) main::BASE_CHARSET#0
  to:main::toD0182
main::toD0182: scope:[main]  from main::@7
  (word*) SQUARES#36 ← phi( main::@7/(word*) SQUARES#41 )
  (byte*) heap_head#32 ← phi( main::@7/(byte*) heap_head#36 )
  (byte) NUM_SQUARES#25 ← phi( main::@7/(byte) NUM_SQUARES#30 )
  (byte*) main::toD0182_gfx#1 ← phi( main::@7/(byte*) main::toD0182_gfx#0 )
  (byte*) main::toD0182_screen#1 ← phi( main::@7/(byte*) main::toD0182_screen#0 )
  (word~) main::toD0182_$0#0 ← ((word)) (byte*) main::toD0182_screen#1
  (number~) main::toD0182_$1#0 ← (word~) main::toD0182_$0#0 & (number) $3fff
  (number~) main::toD0182_$2#0 ← (number~) main::toD0182_$1#0 * (number) 4
  (number~) main::toD0182_$3#0 ← > (number~) main::toD0182_$2#0
  (word~) main::toD0182_$4#0 ← ((word)) (byte*) main::toD0182_gfx#1
  (byte~) main::toD0182_$5#0 ← > (word~) main::toD0182_$4#0
  (number~) main::toD0182_$6#0 ← (byte~) main::toD0182_$5#0 / (number) 4
  (number~) main::toD0182_$7#0 ← (number~) main::toD0182_$6#0 & (number) $f
  (number~) main::toD0182_$8#0 ← (number~) main::toD0182_$3#0 | (number~) main::toD0182_$7#0
  (byte) main::toD0182_return#0 ← (number~) main::toD0182_$8#0
  to:main::toD0182_@return
main::toD0182_@return: scope:[main]  from main::toD0182
  (word*) SQUARES#27 ← phi( main::toD0182/(word*) SQUARES#36 )
  (byte*) heap_head#27 ← phi( main::toD0182/(byte*) heap_head#32 )
  (byte) NUM_SQUARES#19 ← phi( main::toD0182/(byte) NUM_SQUARES#25 )
  (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::@2
main::@2: scope:[main]  from main::toD0182_@return
  (word*) SQUARES#22 ← phi( main::toD0182_@return/(word*) SQUARES#27 )
  (byte*) heap_head#22 ← phi( main::toD0182_@return/(byte*) heap_head#27 )
  (byte) NUM_SQUARES#15 ← phi( main::toD0182_@return/(byte) NUM_SQUARES#19 )
  (byte) main::toD0182_return#3 ← phi( main::toD0182_@return/(byte) main::toD0182_return#1 )
  (byte~) main::$7 ← (byte) main::toD0182_return#3
  *((byte*) D018#0) ← (byte~) main::$7
  to:main::@return
main::@return: scope:[main]  from main::@2
  (word*) SQUARES#13 ← phi( main::@2/(word*) SQUARES#22 )
  (byte*) heap_head#15 ← phi( main::@2/(byte*) heap_head#22 )
  (byte) NUM_SQUARES#10 ← phi( main::@2/(byte) NUM_SQUARES#15 )
  (byte) NUM_SQUARES#2 ← (byte) NUM_SQUARES#10
  (byte*) heap_head#6 ← (byte*) heap_head#15
  (word*) SQUARES#4 ← (word*) SQUARES#13
  return 
  to:@return
init_dist_screen: scope:[init_dist_screen]  from main::@4
  (byte*) init_dist_screen::screen#2 ← phi( main::@4/(byte*) init_dist_screen::screen#0 )
  (word*) SQUARES#23 ← phi( main::@4/(word*) SQUARES#21 )
  (byte*) heap_head#23 ← phi( main::@4/(byte*) heap_head#21 )
  (byte) NUM_SQUARES#3 ← (number) $30
  call init_squares 
  to:init_dist_screen::@15
init_dist_screen::@15: scope:[init_dist_screen]  from init_dist_screen
  (byte) NUM_SQUARES#41 ← 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#16 ← phi( init_dist_screen/(byte*) heap_head#4 )
  (byte*) heap_head#7 ← (byte*) heap_head#16
  (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::@11 init_dist_screen::@15
  (byte*) heap_head#50 ← phi( init_dist_screen::@11/(byte*) heap_head#24 init_dist_screen::@15/(byte*) heap_head#7 )
  (byte*) init_dist_screen::screen_bottomline#13 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen::@15/(byte*) init_dist_screen::screen_bottomline#0 )
  (byte*) init_dist_screen::screen_topline#13 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_topline#1 init_dist_screen::@15/(byte*) init_dist_screen::screen_topline#0 )
  (byte) NUM_SQUARES#40 ← phi( init_dist_screen::@11/(byte) NUM_SQUARES#16 init_dist_screen::@15/(byte) NUM_SQUARES#41 )
  (word*) SQUARES#37 ← phi( init_dist_screen::@11/(word*) SQUARES#24 init_dist_screen::@15/(word*) SQUARES#5 )
  (byte) init_dist_screen::y#2 ← phi( init_dist_screen::@11/(byte) init_dist_screen::y#1 init_dist_screen::@15/(byte) init_dist_screen::y#0 )
  (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#48 ← phi( init_dist_screen::@1/(byte*) heap_head#50 )
  (byte) init_dist_screen::y#12 ← 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#13 )
  (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_topline#13 )
  (byte) NUM_SQUARES#38 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#40 )
  (word*) SQUARES#28 ← phi( init_dist_screen::@1/(word*) SQUARES#37 )
  (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#49 ← phi( init_dist_screen::@1/(byte*) heap_head#50 )
  (byte) init_dist_screen::y#13 ← 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#13 )
  (byte*) init_dist_screen::screen_topline#12 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_topline#13 )
  (byte) NUM_SQUARES#39 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#40 )
  (word*) SQUARES#29 ← phi( init_dist_screen::@1/(word*) SQUARES#37 )
  (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#47 ← phi( init_dist_screen::@2/(byte*) heap_head#48 init_dist_screen::@3/(byte*) heap_head#49 )
  (byte) init_dist_screen::y#11 ← phi( init_dist_screen::@2/(byte) init_dist_screen::y#12 init_dist_screen::@3/(byte) init_dist_screen::y#13 )
  (byte*) init_dist_screen::screen_bottomline#10 ← 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#10 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 )
  (byte) NUM_SQUARES#37 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#38 init_dist_screen::@3/(byte) NUM_SQUARES#39 )
  (word*) SQUARES#18 ← phi( init_dist_screen::@2/(word*) SQUARES#28 init_dist_screen::@3/(word*) SQUARES#29 )
  (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::@16
init_dist_screen::@16: scope:[init_dist_screen]  from init_dist_screen::@4
  (byte*) heap_head#46 ← phi( init_dist_screen::@4/(byte*) heap_head#47 )
  (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@4/(byte) init_dist_screen::y#11 )
  (byte*) init_dist_screen::screen_bottomline#9 ← phi( init_dist_screen::@4/(byte*) init_dist_screen::screen_bottomline#10 )
  (byte*) init_dist_screen::screen_topline#9 ← phi( init_dist_screen::@4/(byte*) init_dist_screen::screen_topline#10 )
  (byte) NUM_SQUARES#35 ← phi( init_dist_screen::@4/(byte) NUM_SQUARES#37 )
  (word*) SQUARES#42 ← phi( init_dist_screen::@4/(word*) SQUARES#18 )
  (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 ← (number) 0
  (byte) init_dist_screen::xb#0 ← (number) $27
  to:init_dist_screen::@5
init_dist_screen::@5: scope:[init_dist_screen]  from init_dist_screen::@16 init_dist_screen::@18
  (byte*) heap_head#45 ← phi( init_dist_screen::@16/(byte*) heap_head#46 init_dist_screen::@18/(byte*) heap_head#28 )
  (byte) init_dist_screen::y#9 ← phi( init_dist_screen::@16/(byte) init_dist_screen::y#10 init_dist_screen::@18/(byte) init_dist_screen::y#4 )
  (byte) init_dist_screen::xb#7 ← phi( init_dist_screen::@16/(byte) init_dist_screen::xb#0 init_dist_screen::@18/(byte) init_dist_screen::xb#1 )
  (byte*) init_dist_screen::screen_bottomline#8 ← phi( init_dist_screen::@16/(byte*) init_dist_screen::screen_bottomline#9 init_dist_screen::@18/(byte*) init_dist_screen::screen_bottomline#2 )
  (byte*) init_dist_screen::screen_topline#8 ← phi( init_dist_screen::@16/(byte*) init_dist_screen::screen_topline#9 init_dist_screen::@18/(byte*) init_dist_screen::screen_topline#2 )
  (byte) NUM_SQUARES#31 ← phi( init_dist_screen::@16/(byte) NUM_SQUARES#35 init_dist_screen::@18/(byte) NUM_SQUARES#21 )
  (word) init_dist_screen::yds#5 ← phi( init_dist_screen::@16/(word) init_dist_screen::yds#0 init_dist_screen::@18/(word) init_dist_screen::yds#6 )
  (word*) SQUARES#38 ← phi( init_dist_screen::@16/(word*) SQUARES#42 init_dist_screen::@18/(word*) SQUARES#32 )
  (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@16/(byte) init_dist_screen::x#0 init_dist_screen::@18/(byte) init_dist_screen::x#1 )
  (number~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 * (number) 2
  (byte) init_dist_screen::x2#0 ← (number~) init_dist_screen::$10
  (bool~) init_dist_screen::$11 ← (byte) init_dist_screen::x2#0 >= (number) $27
  if((bool~) init_dist_screen::$11) 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#41 ← phi( init_dist_screen::@5/(byte*) heap_head#45 )
  (byte) init_dist_screen::y#7 ← phi( init_dist_screen::@5/(byte) init_dist_screen::y#9 )
  (byte) init_dist_screen::xb#5 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#7 )
  (byte*) init_dist_screen::screen_bottomline#6 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_bottomline#8 )
  (byte) init_dist_screen::x#6 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#2 )
  (byte*) init_dist_screen::screen_topline#6 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_topline#8 )
  (byte) NUM_SQUARES#26 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#31 )
  (word) init_dist_screen::yds#3 ← phi( init_dist_screen::@5/(word) init_dist_screen::yds#5 )
  (word*) SQUARES#30 ← phi( init_dist_screen::@5/(word*) SQUARES#38 )
  (byte) init_dist_screen::x2#1 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x2#0 )
  (number~) init_dist_screen::$14 ← (byte) init_dist_screen::x2#1 - (number) $27
  (number~) init_dist_screen::$15 ← (number~) init_dist_screen::$14
  to:init_dist_screen::@8
init_dist_screen::@7: scope:[init_dist_screen]  from init_dist_screen::@5
  (byte*) heap_head#42 ← phi( init_dist_screen::@5/(byte*) heap_head#45 )
  (byte) init_dist_screen::y#8 ← phi( init_dist_screen::@5/(byte) init_dist_screen::y#9 )
  (byte) init_dist_screen::xb#6 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#7 )
  (byte*) init_dist_screen::screen_bottomline#7 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_bottomline#8 )
  (byte) init_dist_screen::x#7 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#2 )
  (byte*) init_dist_screen::screen_topline#7 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_topline#8 )
  (byte) NUM_SQUARES#27 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#31 )
  (word) init_dist_screen::yds#4 ← phi( init_dist_screen::@5/(word) init_dist_screen::yds#5 )
  (word*) SQUARES#31 ← phi( init_dist_screen::@5/(word*) SQUARES#38 )
  (byte) init_dist_screen::x2#2 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x2#0 )
  (number~) init_dist_screen::$12 ← (number) $27 - (byte) init_dist_screen::x2#2
  (number~) init_dist_screen::$13 ← (number~) init_dist_screen::$12
  to:init_dist_screen::@8
init_dist_screen::@8: scope:[init_dist_screen]  from init_dist_screen::@6 init_dist_screen::@7
  (byte*) heap_head#37 ← phi( init_dist_screen::@6/(byte*) heap_head#41 init_dist_screen::@7/(byte*) heap_head#42 )
  (byte) init_dist_screen::y#6 ← phi( init_dist_screen::@6/(byte) init_dist_screen::y#7 init_dist_screen::@7/(byte) init_dist_screen::y#8 )
  (byte) init_dist_screen::xb#4 ← phi( init_dist_screen::@6/(byte) init_dist_screen::xb#5 init_dist_screen::@7/(byte) init_dist_screen::xb#6 )
  (byte*) init_dist_screen::screen_bottomline#5 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_bottomline#6 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#7 )
  (byte) init_dist_screen::x#5 ← phi( init_dist_screen::@6/(byte) init_dist_screen::x#6 init_dist_screen::@7/(byte) init_dist_screen::x#7 )
  (byte*) init_dist_screen::screen_topline#5 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_topline#6 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#7 )
  (byte) NUM_SQUARES#20 ← phi( init_dist_screen::@6/(byte) NUM_SQUARES#26 init_dist_screen::@7/(byte) NUM_SQUARES#27 )
  (word) init_dist_screen::yds#2 ← phi( init_dist_screen::@6/(word) init_dist_screen::yds#3 init_dist_screen::@7/(word) init_dist_screen::yds#4 )
  (word*) SQUARES#19 ← phi( init_dist_screen::@6/(word*) SQUARES#30 init_dist_screen::@7/(word*) SQUARES#31 )
  (number~) init_dist_screen::$16 ← phi( init_dist_screen::@6/(number~) init_dist_screen::$15 init_dist_screen::@7/(number~) init_dist_screen::$13 )
  (byte) init_dist_screen::xd#0 ← (number~) init_dist_screen::$16
  (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
  call sqr 
  (word) sqr::return#3 ← (word) sqr::return#1
  to:init_dist_screen::@17
init_dist_screen::@17: scope:[init_dist_screen]  from init_dist_screen::@8
  (byte*) heap_head#33 ← phi( init_dist_screen::@8/(byte*) heap_head#37 )
  (byte) init_dist_screen::y#5 ← phi( init_dist_screen::@8/(byte) init_dist_screen::y#6 )
  (byte) init_dist_screen::xb#3 ← phi( init_dist_screen::@8/(byte) init_dist_screen::xb#4 )
  (byte*) init_dist_screen::screen_bottomline#4 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_bottomline#5 )
  (byte) init_dist_screen::x#4 ← phi( init_dist_screen::@8/(byte) init_dist_screen::x#5 )
  (byte*) init_dist_screen::screen_topline#4 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_topline#5 )
  (byte) NUM_SQUARES#13 ← phi( init_dist_screen::@8/(byte) NUM_SQUARES#20 )
  (word*) SQUARES#20 ← phi( init_dist_screen::@8/(word*) SQUARES#19 )
  (word) init_dist_screen::yds#1 ← phi( init_dist_screen::@8/(word) init_dist_screen::yds#2 )
  (word) sqr::return#6 ← phi( init_dist_screen::@8/(word) sqr::return#3 )
  (word~) init_dist_screen::$17 ← (word) sqr::return#6
  (word) init_dist_screen::xds#0 ← (word~) init_dist_screen::$17
  (word~) init_dist_screen::$18 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#1
  (word) init_dist_screen::ds#0 ← (word~) init_dist_screen::$18
  (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
  call sqrt 
  (byte) sqrt::return#2 ← (byte) sqrt::return#1
  to:init_dist_screen::@18
init_dist_screen::@18: scope:[init_dist_screen]  from init_dist_screen::@17
  (word) init_dist_screen::yds#6 ← phi( init_dist_screen::@17/(word) init_dist_screen::yds#1 )
  (word*) SQUARES#32 ← phi( init_dist_screen::@17/(word*) SQUARES#20 )
  (byte*) heap_head#28 ← phi( init_dist_screen::@17/(byte*) heap_head#33 )
  (byte) NUM_SQUARES#21 ← phi( init_dist_screen::@17/(byte) NUM_SQUARES#13 )
  (byte) init_dist_screen::y#4 ← phi( init_dist_screen::@17/(byte) init_dist_screen::y#5 )
  (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@17/(byte) init_dist_screen::xb#3 )
  (byte*) init_dist_screen::screen_bottomline#2 ← phi( init_dist_screen::@17/(byte*) init_dist_screen::screen_bottomline#4 )
  (byte) init_dist_screen::x#3 ← phi( init_dist_screen::@17/(byte) init_dist_screen::x#4 )
  (byte*) init_dist_screen::screen_topline#2 ← phi( init_dist_screen::@17/(byte*) init_dist_screen::screen_topline#4 )
  (byte) sqrt::return#4 ← phi( init_dist_screen::@17/(byte) sqrt::return#2 )
  (byte~) init_dist_screen::$19 ← (byte) sqrt::return#4
  (byte) init_dist_screen::d#0 ← (byte~) init_dist_screen::$19
  *((byte*) init_dist_screen::screen_topline#2 + (byte) init_dist_screen::x#3) ← (byte) init_dist_screen::d#0
  *((byte*) init_dist_screen::screen_bottomline#2 + (byte) init_dist_screen::x#3) ← (byte) init_dist_screen::d#0
  *((byte*) init_dist_screen::screen_topline#2 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
  *((byte*) init_dist_screen::screen_bottomline#2 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
  (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#3
  (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2
  (bool~) init_dist_screen::$20 ← (byte) init_dist_screen::x#1 <= (number) $13
  if((bool~) init_dist_screen::$20) goto init_dist_screen::@5
  to:init_dist_screen::@11
init_dist_screen::@11: scope:[init_dist_screen]  from init_dist_screen::@18
  (word*) SQUARES#24 ← phi( init_dist_screen::@18/(word*) SQUARES#32 )
  (byte*) heap_head#24 ← phi( init_dist_screen::@18/(byte*) heap_head#28 )
  (byte) NUM_SQUARES#16 ← phi( init_dist_screen::@18/(byte) NUM_SQUARES#21 )
  (byte) init_dist_screen::y#3 ← phi( init_dist_screen::@18/(byte) init_dist_screen::y#4 )
  (byte*) init_dist_screen::screen_bottomline#3 ← phi( init_dist_screen::@18/(byte*) init_dist_screen::screen_bottomline#2 )
  (byte*) init_dist_screen::screen_topline#3 ← phi( init_dist_screen::@18/(byte*) init_dist_screen::screen_topline#2 )
  (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#3 + (number) $28
  (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#3 - (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::@return: scope:[init_dist_screen]  from init_dist_screen::@11
  (word*) SQUARES#15 ← phi( init_dist_screen::@11/(word*) SQUARES#24 )
  (byte*) heap_head#17 ← phi( init_dist_screen::@11/(byte*) heap_head#24 )
  (byte) NUM_SQUARES#11 ← phi( init_dist_screen::@11/(byte) NUM_SQUARES#16 )
  (byte) NUM_SQUARES#4 ← (byte) NUM_SQUARES#11
  (byte*) heap_head#8 ← (byte*) heap_head#17
  (word*) SQUARES#6 ← (word*) SQUARES#15
  return 
  to:@return
@47: scope:[]  from @45
  (word*) SQUARES#25 ← phi( @45/(word*) SQUARES#33 )
  (byte*) heap_head#25 ← phi( @45/(byte*) heap_head#29 )
  (byte) NUM_SQUARES#17 ← phi( @45/(byte) NUM_SQUARES#22 )
  call main 
  to:@48
@48: scope:[]  from @47
  (word*) SQUARES#16 ← phi( @47/(word*) SQUARES#4 )
  (byte*) heap_head#18 ← phi( @47/(byte*) heap_head#6 )
  (byte) NUM_SQUARES#12 ← phi( @47/(byte) NUM_SQUARES#2 )
  (byte) NUM_SQUARES#5 ← (byte) NUM_SQUARES#12
  (byte*) heap_head#9 ← (byte*) heap_head#18
  (word*) SQUARES#7 ← (word*) SQUARES#16
  to:@end
@end: scope:[]  from @48

SYMBOL TABLE SSA
(const string) $1 = (string) "0123456789abcdef"
(label) @12
(label) @15
(label) @20
(label) @38
(label) @4
(label) @45
(label) @47
(label) @48
(label) @begin
(label) @end
(byte*) CHARSET
(byte*) CHARSET#0
(dword*) CIA2_TIMER_AB
(dword*) CIA2_TIMER_AB#0
(byte*) CIA2_TIMER_A_CONTROL
(byte*) CIA2_TIMER_A_CONTROL#0
(byte*) CIA2_TIMER_B_CONTROL
(byte*) CIA2_TIMER_B_CONTROL#0
(byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES
(byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0
(byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
(byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0
(byte) CIA_TIMER_CONTROL_CONTINUOUS
(byte) CIA_TIMER_CONTROL_CONTINUOUS#0
(byte) CIA_TIMER_CONTROL_START
(byte) CIA_TIMER_CONTROL_START#0
(byte) CIA_TIMER_CONTROL_STOP
(byte) CIA_TIMER_CONTROL_STOP#0
(dword) CLOCKS_PER_INIT
(dword) CLOCKS_PER_INIT#0
(byte*) D018
(byte*) D018#0
(byte[]) FONT_HEX_PROTO
(byte[]) FONT_HEX_PROTO#0
(byte*) HEAP_TOP
(byte*) HEAP_TOP#0
(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#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
(byte*) SCREEN
(byte*) SCREEN#0
(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#5
(word*) SQUARES#6
(word*) SQUARES#7
(word*) SQUARES#8
(word*) SQUARES#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
(dword()) clock()
(number~) clock::$0
(label) clock::@return
(dword) clock::return
(dword) clock::return#0
(dword) clock::return#1
(dword) clock::return#2
(dword) clock::return#3
(dword) clock::return#4
(void()) clock_start()
(byte~) clock_start::$0
(byte~) clock_start::$1
(byte~) clock_start::$2
(byte~) clock_start::$3
(byte~) clock_start::$4
(byte~) clock_start::$5
(byte~) clock_start::$6
(byte~) clock_start::$7
(label) clock_start::@return
(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#6
(byte*) heap_head#7
(byte*) heap_head#8
(byte*) heap_head#9
(void()) init_dist_screen((byte*) init_dist_screen::screen)
(byte*~) init_dist_screen::$1
(number~) init_dist_screen::$10
(bool~) init_dist_screen::$11
(number~) init_dist_screen::$12
(number~) init_dist_screen::$13
(number~) init_dist_screen::$14
(number~) init_dist_screen::$15
(number~) init_dist_screen::$16
(word~) init_dist_screen::$17
(word~) init_dist_screen::$18
(byte~) init_dist_screen::$19
(number~) init_dist_screen::$2
(bool~) 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::@11
(label) init_dist_screen::@15
(label) init_dist_screen::@16
(label) init_dist_screen::@17
(label) init_dist_screen::@18
(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::@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#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#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::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::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#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
(void()) init_font_hex((byte*) init_font_hex::charset)
(byte~) init_font_hex::$0
(byte~) init_font_hex::$1
(byte~) init_font_hex::$2
(bool~) init_font_hex::$3
(bool~) init_font_hex::$4
(bool~) init_font_hex::$5
(label) init_font_hex::@1
(label) init_font_hex::@2
(label) init_font_hex::@3
(label) init_font_hex::@4
(label) init_font_hex::@5
(label) init_font_hex::@return
(byte) init_font_hex::c
(byte) init_font_hex::c#0
(byte) init_font_hex::c#1
(byte) init_font_hex::c#2
(byte) init_font_hex::c#3
(byte) init_font_hex::c#4
(byte) init_font_hex::c#5
(byte) init_font_hex::c#6
(byte) init_font_hex::c1
(byte) init_font_hex::c1#0
(byte) init_font_hex::c1#1
(byte) init_font_hex::c1#2
(byte) init_font_hex::c1#3
(byte) init_font_hex::c1#4
(byte*) init_font_hex::charset
(byte*) init_font_hex::charset#0
(byte*) init_font_hex::charset#1
(byte*) init_font_hex::charset#2
(byte*) init_font_hex::charset#3
(byte*) init_font_hex::charset#4
(byte*) init_font_hex::charset#5
(byte*) init_font_hex::charset#6
(byte*) init_font_hex::charset#7
(byte) init_font_hex::i
(byte) init_font_hex::i#0
(byte) init_font_hex::i#1
(byte) init_font_hex::i#2
(byte) init_font_hex::idx
(byte) init_font_hex::idx#0
(byte) init_font_hex::idx#1
(byte) init_font_hex::idx#2
(byte) init_font_hex::idx#3
(byte) init_font_hex::idx#4
(byte) init_font_hex::idx#5
(byte) init_font_hex::idx#6
(byte*) init_font_hex::proto_hi
(byte*) init_font_hex::proto_hi#0
(byte*) init_font_hex::proto_hi#1
(byte*) init_font_hex::proto_hi#2
(byte*) init_font_hex::proto_hi#3
(byte*) init_font_hex::proto_hi#4
(byte*) init_font_hex::proto_hi#5
(byte*) init_font_hex::proto_hi#6
(byte*) init_font_hex::proto_lo
(byte*) init_font_hex::proto_lo#0
(byte*) init_font_hex::proto_lo#1
(byte*) init_font_hex::proto_lo#2
(byte*) init_font_hex::proto_lo#3
(byte*) init_font_hex::proto_lo#4
(void()) init_squares()
(byte~) init_squares::$0
(void*~) init_squares::$1
(number~) init_squares::$2
(number~) init_squares::$3
(number~) init_squares::$4
(bool~) init_squares::$5
(label) init_squares::@1
(label) init_squares::@3
(label) init_squares::@return
(byte) init_squares::i
(byte) init_squares::i#0
(byte) init_squares::i#1
(byte) init_squares::i#2
(word) init_squares::sqr
(word) init_squares::sqr#0
(word) init_squares::sqr#1
(word) init_squares::sqr#2
(word*) init_squares::squares
(word*) init_squares::squares#0
(word*) init_squares::squares#1
(word*) init_squares::squares#2
(void()) main()
(byte~) main::$1
(dword~) main::$4
(dword~) main::$5
(byte~) main::$7
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@return
(byte*) main::BASE_CHARSET
(byte*) main::BASE_CHARSET#0
(byte*) main::BASE_SCREEN
(byte*) main::BASE_SCREEN#0
(dword) main::cyclecount
(dword) main::cyclecount#0
(label) main::toD0181
(word~) main::toD0181_$0
(word~) main::toD0181_$0#0
(number~) main::toD0181_$1
(number~) main::toD0181_$1#0
(number~) main::toD0181_$2
(number~) main::toD0181_$2#0
(number~) main::toD0181_$3
(number~) main::toD0181_$3#0
(word~) main::toD0181_$4
(word~) main::toD0181_$4#0
(byte~) main::toD0181_$5
(byte~) main::toD0181_$5#0
(number~) main::toD0181_$6
(number~) main::toD0181_$6#0
(number~) main::toD0181_$7
(number~) main::toD0181_$7#0
(number~) main::toD0181_$8
(number~) main::toD0181_$8#0
(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
(word~) main::toD0182_$0#0
(number~) main::toD0182_$1
(number~) main::toD0182_$1#0
(number~) main::toD0182_$2
(number~) main::toD0182_$2#0
(number~) main::toD0182_$3
(number~) main::toD0182_$3#0
(word~) main::toD0182_$4
(word~) main::toD0182_$4#0
(byte~) main::toD0182_$5
(byte~) main::toD0182_$5#0
(number~) main::toD0182_$6
(number~) main::toD0182_$6#0
(number~) main::toD0182_$7
(number~) main::toD0182_$7#0
(number~) main::toD0182_$8
(number~) main::toD0182_$8#0
(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*()) 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
(word) malloc::size
(word) malloc::size#0
(word) malloc::size#1
(void()) print_byte_at((byte) print_byte_at::b , (byte*) print_byte_at::at)
(byte~) print_byte_at::$0
(number~) print_byte_at::$2
(byte*~) print_byte_at::$3
(label) print_byte_at::@1
(label) print_byte_at::@2
(label) print_byte_at::@return
(byte*) print_byte_at::at
(byte*) print_byte_at::at#0
(byte*) print_byte_at::at#1
(byte*) print_byte_at::at#2
(byte*) print_byte_at::at#3
(byte) print_byte_at::b
(byte) print_byte_at::b#0
(byte) print_byte_at::b#1
(byte) print_byte_at::b#2
(byte) print_byte_at::b#3
(void()) print_char_at((byte) print_char_at::ch , (byte*) print_char_at::at)
(label) print_char_at::@return
(byte*) print_char_at::at
(byte*) print_char_at::at#0
(byte*) print_char_at::at#1
(byte*) print_char_at::at#2
(byte) print_char_at::ch
(byte) print_char_at::ch#0
(byte) print_char_at::ch#1
(byte) print_char_at::ch#2
(void()) print_dword_at((dword) print_dword_at::dw , (byte*) print_dword_at::at)
(word~) print_dword_at::$0
(word~) print_dword_at::$2
(byte*~) print_dword_at::$3
(label) print_dword_at::@1
(label) print_dword_at::@2
(label) print_dword_at::@return
(byte*) print_dword_at::at
(byte*) print_dword_at::at#0
(byte*) print_dword_at::at#1
(byte*) print_dword_at::at#2
(dword) print_dword_at::dw
(dword) print_dword_at::dw#0
(dword) print_dword_at::dw#1
(dword) print_dword_at::dw#2
(byte[]) print_hextab
(byte[]) print_hextab#0
(void()) print_word_at((word) print_word_at::w , (byte*) print_word_at::at)
(byte~) print_word_at::$0
(byte~) print_word_at::$2
(byte*~) print_word_at::$3
(label) print_word_at::@1
(label) print_word_at::@2
(label) print_word_at::@return
(byte*) print_word_at::at
(byte*) print_word_at::at#0
(byte*) print_word_at::at#1
(byte*) print_word_at::at#2
(byte*) print_word_at::at#3
(word) print_word_at::w
(word) print_word_at::w#0
(word) print_word_at::w#1
(word) print_word_at::w#2
(word) print_word_at::w#3
(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

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) $ff in (byte) NUM_SQUARES#0 ← (number) $ff
Adding number conversion cast (unumber) 0 in (word) init_squares::sqr#0 ← (number) 0
Adding number conversion cast (unumber) 1 in (number~) init_squares::$2 ← (byte) NUM_SQUARES#7 - (number) 1
Adding number conversion cast (unumber) init_squares::$2 in (number~) init_squares::$2 ← (byte) NUM_SQUARES#7 - (unumber)(number) 1
Adding number conversion cast (unumber) 2 in (number~) init_squares::$3 ← (byte) init_squares::i#2 * (number) 2
Adding number conversion cast (unumber) init_squares::$3 in (number~) init_squares::$3 ← (byte) init_squares::i#2 * (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 (unumber) 0 in (byte) CIA_TIMER_CONTROL_STOP#0 ← (number) 0
Adding number conversion cast (unumber) 1 in (byte) CIA_TIMER_CONTROL_START#0 ← (number) 1
Adding number conversion cast (unumber) 0 in (byte) CIA_TIMER_CONTROL_CONTINUOUS#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0 ← (number) 0
Adding number conversion cast (unumber) $40 in (byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 ← (number) $40
Adding number conversion cast (unumber) 0 in (byte) init_font_hex::idx#0 ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0
Adding number conversion cast (unumber) 4 in (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#2 + (byte) init_font_hex::i#2) << (number) 4
Adding number conversion cast (unumber) 1 in (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#2 + (byte) init_font_hex::i#2) << (number) 1
Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (number) 0
Adding number conversion cast (unumber) 5 in (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#3 + (number) 5
Adding number conversion cast (unumber) 8 in (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#4 + (number) 8
Adding number conversion cast (unumber) 5 in (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#3 + (number) 5
Adding number conversion cast (unumber) $12 in (dword) CLOCKS_PER_INIT#0 ← (number) $12
Adding number conversion cast (unumber) $ffffffff in (number~) clock::$0 ← (number) $ffffffff - *((dword*) CIA2_TIMER_AB#0)
Adding number conversion cast (unumber) clock::$0 in (number~) clock::$0 ← (unumber)(number) $ffffffff - *((dword*) CIA2_TIMER_AB#0)
Adding number conversion cast (unumber) $ffffffff in *((dword*) CIA2_TIMER_AB#0) ← (number) $ffffffff
Adding number conversion cast (unumber) 2 in (byte*~) print_word_at::$3 ← (byte*) print_word_at::at#3 + (number) 2
Adding number conversion cast (unumber) 4 in (byte*~) print_dword_at::$3 ← (byte*) print_dword_at::at#2 + (number) 4
Adding number conversion cast (unumber) 4 in (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#2 >> (number) 4
Adding number conversion cast (unumber) $f in (number~) print_byte_at::$2 ← (byte) print_byte_at::b#3 & (number) $f
Adding number conversion cast (unumber) print_byte_at::$2 in (number~) print_byte_at::$2 ← (byte) print_byte_at::b#3 & (unumber)(number) $f
Adding number conversion cast (unumber) 1 in (byte*~) print_byte_at::$3 ← (byte*) print_byte_at::at#3 + (number) 1
Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (number) $3fff
Adding number conversion cast (unumber) main::toD0181_$1#0 in (number~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (unumber)(number) $3fff
Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$2#0 ← (unumber~) main::toD0181_$1#0 * (number) 4
Adding number conversion cast (unumber) main::toD0181_$2#0 in (number~) main::toD0181_$2#0 ← (unumber~) main::toD0181_$1#0 * (unumber)(number) 4
Adding number conversion cast (unumber) main::toD0181_$3#0 in (number~) main::toD0181_$3#0 ← > (unumber~) main::toD0181_$2#0
Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (number) 4
Adding number conversion cast (unumber) main::toD0181_$6#0 in (number~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (unumber)(number) 4
Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7#0 ← (unumber~) main::toD0181_$6#0 & (number) $f
Adding number conversion cast (unumber) main::toD0181_$7#0 in (number~) main::toD0181_$7#0 ← (unumber~) main::toD0181_$6#0 & (unumber)(number) $f
Adding number conversion cast (unumber) main::toD0181_$8#0 in (number~) main::toD0181_$8#0 ← (unumber~) main::toD0181_$3#0 | (unumber~) main::toD0181_$7#0
Adding number conversion cast (unumber) $3fff in (number~) main::toD0182_$1#0 ← (word~) main::toD0182_$0#0 & (number) $3fff
Adding number conversion cast (unumber) main::toD0182_$1#0 in (number~) main::toD0182_$1#0 ← (word~) main::toD0182_$0#0 & (unumber)(number) $3fff
Adding number conversion cast (unumber) 4 in (number~) main::toD0182_$2#0 ← (unumber~) main::toD0182_$1#0 * (number) 4
Adding number conversion cast (unumber) main::toD0182_$2#0 in (number~) main::toD0182_$2#0 ← (unumber~) main::toD0182_$1#0 * (unumber)(number) 4
Adding number conversion cast (unumber) main::toD0182_$3#0 in (number~) main::toD0182_$3#0 ← > (unumber~) main::toD0182_$2#0
Adding number conversion cast (unumber) 4 in (number~) main::toD0182_$6#0 ← (byte~) main::toD0182_$5#0 / (number) 4
Adding number conversion cast (unumber) main::toD0182_$6#0 in (number~) main::toD0182_$6#0 ← (byte~) main::toD0182_$5#0 / (unumber)(number) 4
Adding number conversion cast (unumber) $f in (number~) main::toD0182_$7#0 ← (unumber~) main::toD0182_$6#0 & (number) $f
Adding number conversion cast (unumber) main::toD0182_$7#0 in (number~) main::toD0182_$7#0 ← (unumber~) main::toD0182_$6#0 & (unumber)(number) $f
Adding number conversion cast (unumber) main::toD0182_$8#0 in (number~) main::toD0182_$8#0 ← (unumber~) main::toD0182_$3#0 | (unumber~) main::toD0182_$7#0
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#47 ← phi( init_dist_screen::@2/(byte*) heap_head#48 init_dist_screen::@3/(byte*) heap_head#49 )
  (byte) init_dist_screen::y#11 ← phi( init_dist_screen::@2/(byte) init_dist_screen::y#12 init_dist_screen::@3/(byte) init_dist_screen::y#13 )
  (byte*) init_dist_screen::screen_bottomline#10 ← 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#10 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 )
  (byte) NUM_SQUARES#37 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#38 init_dist_screen::@3/(byte) NUM_SQUARES#39 )
  (word*) SQUARES#18 ← phi( init_dist_screen::@2/(word*) SQUARES#28 init_dist_screen::@3/(word*) SQUARES#29 )
  (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) 0 in (byte) init_dist_screen::x#0 ← (number) 0
Adding number conversion cast (unumber) $27 in (byte) init_dist_screen::xb#0 ← (number) $27
Adding number conversion cast (unumber) 2 in (number~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 * (number) 2
Adding number conversion cast (unumber) init_dist_screen::$10 in (number~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 * (unumber)(number) 2
Adding number conversion cast (unumber) $27 in (bool~) init_dist_screen::$11 ← (byte) init_dist_screen::x2#0 >= (number) $27
Adding number conversion cast (unumber) $27 in (number~) init_dist_screen::$14 ← (byte) init_dist_screen::x2#1 - (number) $27
Adding number conversion cast (unumber) init_dist_screen::$14 in (number~) init_dist_screen::$14 ← (byte) init_dist_screen::x2#1 - (unumber)(number) $27
Adding number conversion cast (unumber) init_dist_screen::$15 in (number~) init_dist_screen::$15 ← (unumber~) init_dist_screen::$14
Adding number conversion cast (unumber) $27 in (number~) init_dist_screen::$12 ← (number) $27 - (byte) init_dist_screen::x2#2
Adding number conversion cast (unumber) init_dist_screen::$12 in (number~) init_dist_screen::$12 ← (unumber)(number) $27 - (byte) init_dist_screen::x2#2
Adding number conversion cast (unumber) init_dist_screen::$13 in (number~) init_dist_screen::$13 ← (unumber~) init_dist_screen::$12
Adding number conversion cast (unumber) init_dist_screen::$16 in (byte*) heap_head#37 ← phi( init_dist_screen::@6/(byte*) heap_head#41 init_dist_screen::@7/(byte*) heap_head#42 )
  (byte) init_dist_screen::y#6 ← phi( init_dist_screen::@6/(byte) init_dist_screen::y#7 init_dist_screen::@7/(byte) init_dist_screen::y#8 )
  (byte) init_dist_screen::xb#4 ← phi( init_dist_screen::@6/(byte) init_dist_screen::xb#5 init_dist_screen::@7/(byte) init_dist_screen::xb#6 )
  (byte*) init_dist_screen::screen_bottomline#5 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_bottomline#6 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#7 )
  (byte) init_dist_screen::x#5 ← phi( init_dist_screen::@6/(byte) init_dist_screen::x#6 init_dist_screen::@7/(byte) init_dist_screen::x#7 )
  (byte*) init_dist_screen::screen_topline#5 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_topline#6 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#7 )
  (byte) NUM_SQUARES#20 ← phi( init_dist_screen::@6/(byte) NUM_SQUARES#26 init_dist_screen::@7/(byte) NUM_SQUARES#27 )
  (word) init_dist_screen::yds#2 ← phi( init_dist_screen::@6/(word) init_dist_screen::yds#3 init_dist_screen::@7/(word) init_dist_screen::yds#4 )
  (word*) SQUARES#19 ← phi( init_dist_screen::@6/(word*) SQUARES#30 init_dist_screen::@7/(word*) SQUARES#31 )
  (number~) init_dist_screen::$16 ← phi( init_dist_screen::@6/(unumber~) init_dist_screen::$15 init_dist_screen::@7/(unumber~) init_dist_screen::$13 )
Adding number conversion cast (unumber) $13 in (bool~) init_dist_screen::$20 ← (byte) init_dist_screen::x#1 <= (number) $13
Adding number conversion cast (unumber) $28 in (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#3 + (number) $28
Adding number conversion cast (unumber) $28 in (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#3 - (number) $28
Successful SSA optimization PassNAddNumberTypeConversions
Adding number conversion cast (byte) to elements in (byte[]) FONT_HEX_PROTO#0 ← { (byte)(number) 2, (byte)(number) 5, (byte)(number) 5, (byte)(number) 5, (byte)(number) 2, (byte)(number) 6, (byte)(number) 2, (byte)(number) 2, (byte)(number) 2, (byte)(number) 7, (byte)(number) 6, (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 7, (byte)(number) 6, (byte)(number) 1, (byte)(number) 2, (byte)(number) 1, (byte)(number) 6, (byte)(number) 5, (byte)(number) 5, (byte)(number) 7, (byte)(number) 1, (byte)(number) 1, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 1, (byte)(number) 6, (byte)(number) 3, (byte)(number) 4, (byte)(number) 6, (byte)(number) 5, (byte)(number) 2, (byte)(number) 7, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 2, (byte)(number) 5, (byte)(number) 2, (byte)(number) 5, (byte)(number) 2, (byte)(number) 2, (byte)(number) 5, (byte)(number) 3, (byte)(number) 1, (byte)(number) 1, (byte)(number) 2, (byte)(number) 5, (byte)(number) 7, (byte)(number) 5, (byte)(number) 5, (byte)(number) 6, (byte)(number) 5, (byte)(number) 6, (byte)(number) 5, (byte)(number) 6, (byte)(number) 2, (byte)(number) 5, (byte)(number) 4, (byte)(number) 5, (byte)(number) 2, (byte)(number) 6, (byte)(number) 5, (byte)(number) 5, (byte)(number) 5, (byte)(number) 6, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 4, (byte)(number) 7, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 4, (byte)(number) 4 }
Successful SSA optimization PassNAddArrayNumberTypeConversions
Inlining cast (byte*) HEAP_TOP#0 ← (byte*)(number) $a000
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 (byte) NUM_SQUARES#0 ← (unumber)(number) $ff
Inlining cast (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1
Inlining cast (word) init_squares::sqr#0 ← (unumber)(number) 0
Inlining cast (byte~) sqrt::$2 ← (byte)(word~) sqrt::$1
Inlining cast (byte*) D018#0 ← (byte*)(number) $d018
Inlining cast (dword*) CIA2_TIMER_AB#0 ← (dword*)(number) $dd04
Inlining cast (byte*) CIA2_TIMER_A_CONTROL#0 ← (byte*)(number) $dd0e
Inlining cast (byte*) CIA2_TIMER_B_CONTROL#0 ← (byte*)(number) $dd0f
Inlining cast (byte) CIA_TIMER_CONTROL_STOP#0 ← (unumber)(number) 0
Inlining cast (byte) CIA_TIMER_CONTROL_START#0 ← (unumber)(number) 1
Inlining cast (byte) CIA_TIMER_CONTROL_CONTINUOUS#0 ← (unumber)(number) 0
Inlining cast (byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0 ← (unumber)(number) 0
Inlining cast (byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 ← (unumber)(number) $40
Inlining cast (byte) init_font_hex::idx#0 ← (unumber)(number) 0
Inlining cast *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (unumber)(number) 0
Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (unumber)(number) 0
Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (unumber)(number) 0
Inlining cast (dword) CLOCKS_PER_INIT#0 ← (unumber)(number) $12
Inlining cast *((dword*) CIA2_TIMER_AB#0) ← (unumber)(number) $ffffffff
Inlining cast (byte*) CHARSET#0 ← (byte*)(number) $2000
Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $2800
Inlining cast (word~) main::toD0181_$0#0 ← (word)(byte*) main::toD0181_screen#1
Inlining cast (word~) main::toD0181_$4#0 ← (word)(byte*) main::toD0181_gfx#1
Inlining cast (byte*) main::BASE_SCREEN#0 ← (byte*)(number) $400
Inlining cast (byte*) main::BASE_CHARSET#0 ← (byte*)(number) $1000
Inlining cast (word~) main::toD0182_$0#0 ← (word)(byte*) main::toD0182_screen#1
Inlining cast (word~) main::toD0182_$4#0 ← (word)(byte*) main::toD0182_gfx#1
Inlining cast (byte) NUM_SQUARES#3 ← (unumber)(number) $30
Inlining cast (byte) init_dist_screen::x#0 ← (unumber)(number) 0
Inlining cast (byte) init_dist_screen::xb#0 ← (unumber)(number) $27
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 40960
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 $ff
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 1
Simplifying constant pointer cast (byte*) 53272
Simplifying constant pointer cast (dword*) 56580
Simplifying constant pointer cast (byte*) 56590
Simplifying constant pointer cast (byte*) 56591
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $40
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 4
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 5
Simplifying constant integer cast 8
Simplifying constant integer cast 5
Simplifying constant integer cast 2
Simplifying constant integer cast 5
Simplifying constant integer cast 5
Simplifying constant integer cast 5
Simplifying constant integer cast 2
Simplifying constant integer cast 6
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 7
Simplifying constant integer cast 6
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 4
Simplifying constant integer cast 7
Simplifying constant integer cast 6
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 1
Simplifying constant integer cast 6
Simplifying constant integer cast 5
Simplifying constant integer cast 5
Simplifying constant integer cast 7
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 7
Simplifying constant integer cast 4
Simplifying constant integer cast 6
Simplifying constant integer cast 1
Simplifying constant integer cast 6
Simplifying constant integer cast 3
Simplifying constant integer cast 4
Simplifying constant integer cast 6
Simplifying constant integer cast 5
Simplifying constant integer cast 2
Simplifying constant integer cast 7
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 5
Simplifying constant integer cast 2
Simplifying constant integer cast 5
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 5
Simplifying constant integer cast 3
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 5
Simplifying constant integer cast 7
Simplifying constant integer cast 5
Simplifying constant integer cast 5
Simplifying constant integer cast 6
Simplifying constant integer cast 5
Simplifying constant integer cast 6
Simplifying constant integer cast 5
Simplifying constant integer cast 6
Simplifying constant integer cast 2
Simplifying constant integer cast 5
Simplifying constant integer cast 4
Simplifying constant integer cast 5
Simplifying constant integer cast 2
Simplifying constant integer cast 6
Simplifying constant integer cast 5
Simplifying constant integer cast 5
Simplifying constant integer cast 5
Simplifying constant integer cast 6
Simplifying constant integer cast 7
Simplifying constant integer cast 4
Simplifying constant integer cast 6
Simplifying constant integer cast 4
Simplifying constant integer cast 7
Simplifying constant integer cast 7
Simplifying constant integer cast 4
Simplifying constant integer cast 6
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast $12
Simplifying constant integer cast $ffffffff
Simplifying constant integer cast $ffffffff
Simplifying constant integer cast 2
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast $f
Simplifying constant integer cast 1
Simplifying constant pointer cast (byte*) 8192
Simplifying constant pointer cast (byte*) 10240
Simplifying constant integer cast $3fff
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast $f
Simplifying constant pointer cast (byte*) 1024
Simplifying constant pointer cast (byte*) 4096
Simplifying constant integer cast $3fff
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast $f
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 0
Simplifying constant integer cast $27
Simplifying constant integer cast 2
Simplifying constant integer cast $27
Simplifying constant integer cast $27
Simplifying constant integer cast $27
Simplifying constant integer cast $13
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 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) $ff
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 5
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 5
Finalized unsigned number type (byte) $12
Finalized unsigned number type (dword) $ffffffff
Finalized unsigned number type (dword) $ffffffff
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $f
Finalized unsigned number type (byte) 1
Finalized unsigned number type (word) $3fff
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $f
Finalized unsigned number type (word) $3fff
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $f
Finalized unsigned number type (byte) $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) 0
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) $13
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
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::$2 ← (byte) NUM_SQUARES#7 - (byte) 1
Inferred type updated to byte in (unumber~) init_squares::$3 ← (byte) init_squares::i#2 * (byte) 2
Inferred type updated to byte in (unumber~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
Inferred type updated to dword in (unumber~) clock::$0 ← (dword) $ffffffff - *((dword*) CIA2_TIMER_AB#0)
Inferred type updated to byte in (unumber~) print_byte_at::$2 ← (byte) print_byte_at::b#3 & (byte) $f
Inferred type updated to word in (unumber~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (word) $3fff
Inferred type updated to word in (unumber~) main::toD0181_$2#0 ← (word~) main::toD0181_$1#0 * (byte) 4
Inferred type updated to byte in (unumber~) main::toD0181_$3#0 ← > (word~) main::toD0181_$2#0
Inferred type updated to byte in (unumber~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (byte) 4
Inferred type updated to byte in (unumber~) main::toD0181_$7#0 ← (byte~) main::toD0181_$6#0 & (byte) $f
Inferred type updated to byte in (unumber~) main::toD0181_$8#0 ← (byte~) main::toD0181_$3#0 | (byte~) main::toD0181_$7#0
Inferred type updated to word in (unumber~) main::toD0182_$1#0 ← (word~) main::toD0182_$0#0 & (word) $3fff
Inferred type updated to word in (unumber~) main::toD0182_$2#0 ← (word~) main::toD0182_$1#0 * (byte) 4
Inferred type updated to byte in (unumber~) main::toD0182_$3#0 ← > (word~) main::toD0182_$2#0
Inferred type updated to byte in (unumber~) main::toD0182_$6#0 ← (byte~) main::toD0182_$5#0 / (byte) 4
Inferred type updated to byte in (unumber~) main::toD0182_$7#0 ← (byte~) main::toD0182_$6#0 & (byte) $f
Inferred type updated to byte in (unumber~) main::toD0182_$8#0 ← (byte~) main::toD0182_$3#0 | (byte~) main::toD0182_$7#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::$10 ← (byte) init_dist_screen::x#2 * (byte) 2
Inferred type updated to byte in (unumber~) init_dist_screen::$14 ← (byte) init_dist_screen::x2#1 - (byte) $27
Inferred type updated to byte in (unumber~) init_dist_screen::$15 ← (byte~) init_dist_screen::$14
Inferred type updated to byte in (unumber~) init_dist_screen::$12 ← (byte) $27 - (byte) init_dist_screen::x2#2
Inferred type updated to byte in (unumber~) init_dist_screen::$13 ← (byte~) init_dist_screen::$12
Inferred type updated to byte for (unumber~) init_dist_screen::$16
Inversing boolean not [25] (bool~) bsearch16u::$12 ← (signed word) bsearch16u::result#0 != (signed byte) 0 from [24] (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#0 == (signed byte) 0
Inversing boolean not [32] (bool~) bsearch16u::$14 ← (signed word) bsearch16u::result#1 <= (signed byte) 0 from [31] (bool~) bsearch16u::$13 ← (signed word) bsearch16u::result#1 > (signed byte) 0
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte*) HEAP_TOP#0 = (byte*) heap_head#0 (byte*) heap_head#43 (byte*) heap_head#38 (byte*) heap_head#34 (byte*) heap_head#30 (byte*) heap_head#29 (byte*) heap_head#25 
Alias (byte*) malloc::mem#0 = (byte*~) malloc::$0 
Alias (void*) malloc::return#0 = (void*) malloc::return#3 (void*) malloc::return#1 
Alias (byte*) heap_head#1 = (byte*) heap_head#11 (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 (word) malloc::size#0 = (byte~) init_squares::$0 
Alias (void*) malloc::return#2 = (void*) malloc::return#4 
Alias (byte) NUM_SQUARES#6 = (byte) NUM_SQUARES#7 
Alias (byte*) heap_head#12 = (byte*) heap_head#3 
Alias (byte*) heap_head#13 = (byte*) heap_head#20 (byte*) heap_head#4 
Alias (word*) SQUARES#17 = (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 (byte) NUM_SQUARES#0 = (byte) NUM_SQUARES#32 (byte) NUM_SQUARES#28 (byte) NUM_SQUARES#23 (byte) NUM_SQUARES#22 (byte) NUM_SQUARES#17 
Alias (word*) SQUARES#0 = (word*) SQUARES#43 (word*) SQUARES#39 (word*) SQUARES#34 (word*) SQUARES#33 (word*) SQUARES#25 
Alias (byte*) init_font_hex::charset#3 = (byte*) init_font_hex::charset#4 
Alias (byte) init_font_hex::idx#2 = (byte) init_font_hex::idx#6 
Alias (byte*) init_font_hex::proto_lo#2 = (byte*) init_font_hex::proto_lo#3 
Alias (byte) init_font_hex::c1#2 = (byte) init_font_hex::c1#3 
Alias (byte*) init_font_hex::proto_hi#2 = (byte*) init_font_hex::proto_hi#5 (byte*) init_font_hex::proto_hi#3 
Alias (byte) init_font_hex::c#2 = (byte) init_font_hex::c#3 (byte) init_font_hex::c#4 
Alias (byte*) init_font_hex::charset#0 = (byte*) init_font_hex::charset#7 
Alias (dword) clock::return#0 = (dword~) clock::$0 (dword) clock::return#3 (dword) clock::return#1 
Alias (byte) print_byte_at::b#0 = (byte~) print_word_at::$0 
Alias (word) print_word_at::w#2 = (word) print_word_at::w#3 
Alias (byte*) print_word_at::at#2 = (byte*) print_word_at::at#3 
Alias (byte) print_byte_at::b#1 = (byte~) print_word_at::$2 
Alias (byte*) print_byte_at::at#1 = (byte*~) print_word_at::$3 
Alias (word) print_word_at::w#0 = (word~) print_dword_at::$0 
Alias (dword) print_dword_at::dw#1 = (dword) print_dword_at::dw#2 
Alias (byte*) print_dword_at::at#1 = (byte*) print_dword_at::at#2 
Alias (word) print_word_at::w#1 = (word~) print_dword_at::$2 
Alias (byte*) print_word_at::at#1 = (byte*~) print_dword_at::$3 
Alias (byte) print_byte_at::b#2 = (byte) print_byte_at::b#3 
Alias (byte*) print_byte_at::at#2 = (byte*) print_byte_at::at#3 
Alias (byte*) print_char_at::at#1 = (byte*~) print_byte_at::$3 
Alias (byte) NUM_SQUARES#14 = (byte) NUM_SQUARES#33 (byte) NUM_SQUARES#36 (byte) NUM_SQUARES#29 (byte) NUM_SQUARES#24 (byte) NUM_SQUARES#18 
Alias (byte*) heap_head#21 = (byte*) heap_head#39 (byte*) heap_head#44 (byte*) heap_head#35 (byte*) heap_head#31 (byte*) heap_head#26 
Alias (word*) SQUARES#21 = (word*) SQUARES#44 (word*) SQUARES#46 (word*) SQUARES#40 (word*) SQUARES#35 (word*) SQUARES#26 
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#0 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$1 
Alias (byte) NUM_SQUARES#1 = (byte) NUM_SQUARES#9 (byte) NUM_SQUARES#34 (byte) NUM_SQUARES#30 (byte) NUM_SQUARES#25 (byte) NUM_SQUARES#19 (byte) NUM_SQUARES#15 (byte) NUM_SQUARES#10 (byte) NUM_SQUARES#2 
Alias (byte*) heap_head#14 = (byte*) heap_head#5 (byte*) heap_head#40 (byte*) heap_head#36 (byte*) heap_head#32 (byte*) heap_head#27 (byte*) heap_head#22 (byte*) heap_head#15 (byte*) heap_head#6 
Alias (word*) SQUARES#12 = (word*) SQUARES#3 (word*) SQUARES#45 (word*) SQUARES#41 (word*) SQUARES#36 (word*) SQUARES#27 (word*) SQUARES#22 (word*) SQUARES#13 (word*) SQUARES#4 
Alias (dword) clock::return#2 = (dword) clock::return#4 
Alias (dword) main::cyclecount#0 = (dword~) main::$5 
Alias (byte*) main::BASE_SCREEN#0 = (byte*) main::toD0182_screen#0 (byte*) main::toD0182_screen#1 
Alias (byte*) main::BASE_CHARSET#0 = (byte*) main::toD0182_gfx#0 (byte*) main::toD0182_gfx#1 
Alias (byte) main::toD0182_return#0 = (byte~) main::toD0182_$8#0 (byte) main::toD0182_return#2 (byte) main::toD0182_return#1 (byte) main::toD0182_return#3 (byte~) main::$7 
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#41 
Alias (byte*) heap_head#16 = (byte*) heap_head#7 
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#28 = (word*) SQUARES#37 (word*) SQUARES#29 
Alias (byte) NUM_SQUARES#38 = (byte) NUM_SQUARES#40 (byte) NUM_SQUARES#39 
Alias (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#13 (byte*) init_dist_screen::screen_topline#12 
Alias (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#13 (byte*) init_dist_screen::screen_bottomline#12 
Alias (byte) init_dist_screen::y#12 = (byte) init_dist_screen::y#2 (byte) init_dist_screen::y#13 
Alias (byte*) heap_head#48 = (byte*) heap_head#50 (byte*) heap_head#49 
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 (word*) SQUARES#18 = (word*) SQUARES#42 
Alias (byte) NUM_SQUARES#35 = (byte) NUM_SQUARES#37 
Alias (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#9 
Alias (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#9 
Alias (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#11 
Alias (byte*) heap_head#46 = (byte*) heap_head#47 
Alias (word) init_dist_screen::yds#0 = (word~) init_dist_screen::$9 
Alias (byte) init_dist_screen::x2#0 = (byte~) init_dist_screen::$10 (byte) init_dist_screen::x2#1 (byte) init_dist_screen::x2#2 
Alias (word*) SQUARES#30 = (word*) SQUARES#38 (word*) SQUARES#31 
Alias (word) init_dist_screen::yds#3 = (word) init_dist_screen::yds#5 (word) init_dist_screen::yds#4 
Alias (byte) NUM_SQUARES#26 = (byte) NUM_SQUARES#31 (byte) NUM_SQUARES#27 
Alias (byte*) init_dist_screen::screen_topline#6 = (byte*) init_dist_screen::screen_topline#8 (byte*) init_dist_screen::screen_topline#7 
Alias (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#6 (byte) init_dist_screen::x#7 
Alias (byte*) init_dist_screen::screen_bottomline#6 = (byte*) init_dist_screen::screen_bottomline#8 (byte*) init_dist_screen::screen_bottomline#7 
Alias (byte) init_dist_screen::xb#5 = (byte) init_dist_screen::xb#7 (byte) init_dist_screen::xb#6 
Alias (byte) init_dist_screen::y#7 = (byte) init_dist_screen::y#9 (byte) init_dist_screen::y#8 
Alias (byte*) heap_head#41 = (byte*) heap_head#45 (byte*) heap_head#42 
Alias (byte~) init_dist_screen::$15 = (byte~) init_dist_screen::$14 
Alias (byte~) init_dist_screen::$13 = (byte~) init_dist_screen::$12 
Alias (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 
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#6 
Alias (word*) SQUARES#15 = (word*) SQUARES#20 (word*) SQUARES#19 (word*) SQUARES#32 (word*) SQUARES#24 (word*) SQUARES#6 
Alias (byte) NUM_SQUARES#11 = (byte) NUM_SQUARES#13 (byte) NUM_SQUARES#20 (byte) NUM_SQUARES#21 (byte) NUM_SQUARES#16 (byte) NUM_SQUARES#4 
Alias (byte*) init_dist_screen::screen_topline#2 = (byte*) init_dist_screen::screen_topline#4 (byte*) init_dist_screen::screen_topline#5 (byte*) init_dist_screen::screen_topline#3 
Alias (byte) init_dist_screen::x#3 = (byte) init_dist_screen::x#4 (byte) init_dist_screen::x#5 
Alias (byte*) init_dist_screen::screen_bottomline#2 = (byte*) init_dist_screen::screen_bottomline#4 (byte*) init_dist_screen::screen_bottomline#5 (byte*) init_dist_screen::screen_bottomline#3 
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#3 = (byte) init_dist_screen::y#5 (byte) init_dist_screen::y#6 (byte) init_dist_screen::y#4 
Alias (byte*) heap_head#17 = (byte*) heap_head#33 (byte*) heap_head#37 (byte*) heap_head#28 (byte*) heap_head#24 (byte*) heap_head#8 
Alias (word) init_dist_screen::xds#0 = (word~) init_dist_screen::$17 
Alias (word) init_dist_screen::ds#0 = (word~) init_dist_screen::$18 
Alias (byte) sqrt::return#2 = (byte) sqrt::return#4 
Alias (byte) init_dist_screen::d#0 = (byte~) init_dist_screen::$19 
Alias (byte) NUM_SQUARES#12 = (byte) NUM_SQUARES#5 
Alias (byte*) heap_head#18 = (byte*) heap_head#9 
Alias (word*) SQUARES#16 = (word*) SQUARES#7 
Successful SSA optimization Pass2AliasElimination
Alias (word) bsearch16u::key#1 = (word) bsearch16u::key#5 
Alias (word*) SQUARES#18 = (word*) SQUARES#28 
Alias (byte) NUM_SQUARES#35 = (byte) NUM_SQUARES#38 
Alias (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#11 
Alias (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#11 
Alias (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#12 
Alias (byte*) heap_head#46 = (byte*) heap_head#48 
Alias (word*) SQUARES#15 = (word*) SQUARES#30 
Alias (word) init_dist_screen::yds#1 = (word) init_dist_screen::yds#3 
Alias (byte) NUM_SQUARES#11 = (byte) NUM_SQUARES#26 
Alias (byte*) init_dist_screen::screen_topline#2 = (byte*) init_dist_screen::screen_topline#6 
Alias (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#3 
Alias (byte*) init_dist_screen::screen_bottomline#2 = (byte*) init_dist_screen::screen_bottomline#6 
Alias (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#5 
Alias (byte) init_dist_screen::y#3 = (byte) init_dist_screen::y#7 
Alias (byte*) heap_head#17 = (byte*) heap_head#41 
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (word) bsearch16u::key#1
Self Phi Eliminated (byte*) heap_head#13
Self Phi Eliminated (word*) SQUARES#17
Self Phi Eliminated (byte*) init_font_hex::proto_hi#2
Self Phi Eliminated (byte*) init_font_hex::proto_lo#2
Self Phi Eliminated (byte*) init_font_hex::charset#3
Self Phi Eliminated (byte) init_font_hex::c1#2
Self Phi Eliminated (byte) init_font_hex::c#2
Self Phi Eliminated (word*) SQUARES#15
Self Phi Eliminated (word) init_dist_screen::yds#1
Self Phi Eliminated (byte) NUM_SQUARES#11
Self Phi Eliminated (byte*) init_dist_screen::screen_topline#2
Self Phi Eliminated (byte*) init_dist_screen::screen_bottomline#2
Self Phi Eliminated (byte) init_dist_screen::y#3
Self Phi Eliminated (byte*) heap_head#17
Successful SSA optimization Pass2SelfPhiElimination
Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#19
Identical Phi Values (word) malloc::size#1 (word) malloc::size#0
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#6 (byte) NUM_SQUARES#3
Identical Phi Values (byte*) heap_head#19 (byte*) heap_head#23
Identical Phi Values (byte*) heap_head#12 (byte*) heap_head#1
Identical Phi Values (byte*) heap_head#13 (byte*) heap_head#12
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 (byte*) init_font_hex::charset#6 (byte*) init_font_hex::charset#1
Identical Phi Values (byte*) init_font_hex::proto_hi#2 (byte*) init_font_hex::proto_hi#4
Identical Phi Values (byte*) init_font_hex::proto_lo#2 (byte*) init_font_hex::proto_lo#4
Identical Phi Values (byte*) init_font_hex::charset#3 (byte*) init_font_hex::charset#2
Identical Phi Values (byte) init_font_hex::c1#2 (byte) init_font_hex::c1#4
Identical Phi Values (byte) init_font_hex::c#2 (byte) init_font_hex::c#5
Identical Phi Values (dword) print_dword_at::dw#1 (dword) print_dword_at::dw#0
Identical Phi Values (byte*) print_dword_at::at#1 (byte*) print_dword_at::at#0
Identical Phi Values (byte) NUM_SQUARES#14 (byte) NUM_SQUARES#0
Identical Phi Values (byte*) heap_head#21 (byte*) HEAP_TOP#0
Identical Phi Values (word*) SQUARES#21 (word*) SQUARES#0
Identical Phi Values (byte) NUM_SQUARES#1 (byte) NUM_SQUARES#11
Identical Phi Values (byte*) heap_head#14 (byte*) heap_head#17
Identical Phi Values (word*) SQUARES#12 (word*) SQUARES#15
Identical Phi Values (byte*) heap_head#23 (byte*) heap_head#21
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#16 (byte*) heap_head#13
Identical Phi Values (word*) SQUARES#14 (word*) SQUARES#17
Identical Phi Values (word*) SQUARES#15 (word*) SQUARES#18
Identical Phi Values (word) init_dist_screen::yds#1 (word) init_dist_screen::yds#0
Identical Phi Values (byte) NUM_SQUARES#11 (byte) NUM_SQUARES#35
Identical Phi Values (byte*) init_dist_screen::screen_topline#2 (byte*) init_dist_screen::screen_topline#10
Identical Phi Values (byte*) init_dist_screen::screen_bottomline#2 (byte*) init_dist_screen::screen_bottomline#10
Identical Phi Values (byte) init_dist_screen::y#3 (byte) init_dist_screen::y#10
Identical Phi Values (byte*) heap_head#17 (byte*) heap_head#46
Identical Phi Values (byte) NUM_SQUARES#12 (byte) NUM_SQUARES#1
Identical Phi Values (byte*) heap_head#18 (byte*) heap_head#14
Identical Phi Values (word*) SQUARES#16 (word*) SQUARES#12
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (word*) SQUARES#9 (word*) SQUARES#18
Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [163] (byte~) clock_start::$2 ← (byte) CIA_TIMER_CONTROL_STOP#0 | (byte) CIA_TIMER_CONTROL_CONTINUOUS#0
Identified duplicate assignment right side [170] (byte~) clock_start::$6 ← (byte) CIA_TIMER_CONTROL_START#0 | (byte) CIA_TIMER_CONTROL_CONTINUOUS#0
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) bsearch16u::$5 [14] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@7
Simple Condition (bool~) bsearch16u::$12 [26] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@9
Simple Condition (bool~) bsearch16u::$0 [29] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@1
Simple Condition (bool~) bsearch16u::$14 [33] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10
Simple Condition (bool~) init_squares::$5 [78] if((byte) init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1
Simple Condition (bool~) init_font_hex::$3 [135] if((byte) init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3
Simple Condition (bool~) init_font_hex::$4 [145] if((byte) init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2
Simple Condition (bool~) init_font_hex::$5 [150] if((byte) init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1
Simple Condition (bool~) init_dist_screen::$3 [297] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
Simple Condition (bool~) init_dist_screen::$11 [318] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6
Simple Condition (bool~) init_dist_screen::$20 [348] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5
Simple Condition (bool~) init_dist_screen::$21 [354] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [42] (byte~) bsearch16u::$17 ← (byte) 1 * (const byte) SIZEOF_WORD
Constant right-side identified [49] (byte~) bsearch16u::$18 ← (byte) 1 * (const byte) SIZEOF_WORD
Constant right-side identified [153] (byte[]) FONT_HEX_PROTO#0 ← { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 }
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) HEAP_TOP#0 = (byte*) 40960
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 byte*) D018#0 = (byte*) 53272
Constant (const dword*) CIA2_TIMER_AB#0 = (dword*) 56580
Constant (const byte*) CIA2_TIMER_A_CONTROL#0 = (byte*) 56590
Constant (const byte*) CIA2_TIMER_B_CONTROL#0 = (byte*) 56591
Constant (const byte) CIA_TIMER_CONTROL_STOP#0 = 0
Constant (const byte) CIA_TIMER_CONTROL_START#0 = 1
Constant (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 = 0
Constant (const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0 = 0
Constant (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 = $40
Constant (const byte) init_font_hex::c#0 = 0
Constant (const byte) init_font_hex::c1#0 = 0
Constant (const byte) init_font_hex::idx#0 = 0
Constant (const byte) init_font_hex::i#0 = 0
Constant (const byte[]) FONT_HEX_PROTO#0 = { 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4 }
Constant (const dword) CLOCKS_PER_INIT#0 = $12
Constant (const byte[]) print_hextab#0 = $1
Constant (const byte*) CHARSET#0 = (byte*) 8192
Constant (const byte*) SCREEN#0 = (byte*) 10240
Constant (const byte*) main::BASE_SCREEN#0 = (byte*) 1024
Constant (const byte*) main::BASE_CHARSET#0 = (byte*) 4096
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
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) init_font_hex::proto_hi#0 = FONT_HEX_PROTO#0
Constant (const byte*) init_font_hex::proto_lo#0 = FONT_HEX_PROTO#0
Constant (const byte*) init_font_hex::charset#1 = CHARSET#0
Constant (const byte*) main::toD0181_screen#0 = SCREEN#0
Constant (const byte*) main::toD0181_gfx#0 = CHARSET#0
Constant (const byte*) init_dist_screen::screen#0 = SCREEN#0
Constant (const byte*) print_dword_at::at#0 = main::BASE_SCREEN#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print_word_at::at#0 = print_dword_at::at#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (word)main::toD0181_screen#0 in [225] (word~) main::toD0181_$0#0 ← (word)(const byte*) main::toD0181_screen#0
Constant value identified (word)main::toD0181_gfx#0 in [229] (word~) main::toD0181_$4#0 ← (word)(const byte*) main::toD0181_gfx#0
Constant value identified (word)main::BASE_SCREEN#0 in [263] (word~) main::toD0182_$0#0 ← (word)(const byte*) main::BASE_SCREEN#0
Constant value identified (word)main::BASE_CHARSET#0 in [267] (word~) main::toD0182_$4#0 ← (word)(const byte*) main::BASE_CHARSET#0
Successful SSA optimization Pass2ConstantValues
Resolved ranged next value [133] init_font_hex::i#1 ← ++ init_font_hex::i#2 to ++
Resolved ranged comparison value [135] if(init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 to (number) 5
Resolved ranged next value [143] init_font_hex::c1#1 ← ++ init_font_hex::c1#4 to ++
Resolved ranged comparison value [145] if(init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 to (number) $10
Resolved ranged next value [148] init_font_hex::c#1 ← ++ init_font_hex::c#5 to ++
Resolved ranged comparison value [150] if(init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 to (number) $10
Resolved ranged next value [352] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++
Resolved ranged comparison value [354] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d
Rewriting conditional comparison [348] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5
Simplifying expression containing zero init_font_hex::charset#2 in [124] *((byte*) init_font_hex::charset#2 + (const byte) init_font_hex::idx#0) ← (byte) 0
Simplifying expression containing zero CIA_TIMER_CONTROL_CONTINUOUS#0 in [160] (byte~) clock_start::$0 ← (const byte) CIA_TIMER_CONTROL_STOP#0 | (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0
Simplifying expression containing zero clock_start::$0 in [161] (byte~) clock_start::$1 ← (byte~) clock_start::$0 | (const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0
Simplifying expression containing zero CIA_TIMER_CONTROL_START#0 in [167] (byte~) clock_start::$4 ← (const byte) CIA_TIMER_CONTROL_START#0 | (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0
Simplifying expression containing zero clock_start::$6 in [171] (byte~) clock_start::$7 ← (byte~) clock_start::$6 | (const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused variable (byte) init_font_hex::idx#4 and assignment [68] (byte) init_font_hex::idx#4 ← ++ (byte) init_font_hex::idx#3
Eliminating unused variable - keeping the phi block (byte*) heap_head#46
Eliminating unused constant (const byte) NUM_SQUARES#0
Eliminating unused constant (const word*) SQUARES#0
Eliminating unused constant (const byte) CIA_TIMER_CONTROL_STOP#0
Eliminating unused constant (const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0
Successful SSA optimization PassNEliminateUnusedVars
Eliminating unused variable (byte*) heap_head#1 and assignment [1] (byte*) heap_head#1 ← (byte*) malloc::mem#0
Successful SSA optimization PassNEliminateUnusedVars
Adding number conversion cast (unumber) 5 in if((byte) init_font_hex::i#1!=(number) 5) goto init_font_hex::@3
Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c1#1!=(number) $10) goto init_font_hex::@2
Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c#1!=(number) $10) goto init_font_hex::@1
Adding number conversion cast (unumber) $13+1 in if((byte) init_dist_screen::x#1<(byte) $13+(number) 1) goto init_dist_screen::@5
Adding number conversion cast (unumber) 1 in if((byte) init_dist_screen::x#1<(unumber)(byte) $13+(number) 1) goto init_dist_screen::@5
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 5
Simplifying constant integer cast $10
Simplifying constant integer cast $10
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) 5
Finalized unsigned number type (byte) $10
Finalized unsigned number type (byte) $10
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $d
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte~) clock_start::$1 = (byte~) clock_start::$0 (byte~) clock_start::$2 
Alias (byte~) clock_start::$6 = (byte~) clock_start::$4 (byte~) clock_start::$7 
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (byte*) init_font_hex::proto_hi#4
Self Phi Eliminated (byte) init_font_hex::c#5
Self Phi Eliminated (word*) SQUARES#18
Self Phi Eliminated (byte) NUM_SQUARES#35
Successful SSA optimization Pass2SelfPhiElimination
Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6
Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6
Identical Phi Values (word*) SQUARES#18 (word*) SQUARES#1
Identical Phi Values (byte) NUM_SQUARES#35 (const byte) NUM_SQUARES#3
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [22] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD
Constant right-side identified [28] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1
Constant right-side identified [55] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0
Constant right-side identified [102] (byte*) print_word_at::at#1 ← (const byte*) print_dword_at::at#0 + (byte) 4
Constant right-side identified [149] (byte*) init_dist_screen::screen_bottomline#0 ← (const byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word) malloc::size#0 = NUM_SQUARES#3*SIZEOF_WORD
Constant (const byte) init_squares::$2 = NUM_SQUARES#3-1
Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#3
Constant (const byte) init_font_hex::idx#1 = ++init_font_hex::idx#0
Constant (const byte) clock_start::$1 = CIA_TIMER_CONTROL_CONTINUOUS#0
Constant (const byte) clock_start::$6 = CIA_TIMER_CONTROL_START#0
Constant (const byte*) print_word_at::at#1 = print_dword_at::at#0+4
Constant (const word) main::toD0181_$0#0 = (word)main::toD0181_screen#0
Constant (const word) main::toD0181_$4#0 = (word)main::toD0181_gfx#0
Constant (const word) main::toD0182_$0#0 = (word)main::BASE_SCREEN#0
Constant (const word) main::toD0182_$4#0 = (word)main::BASE_CHARSET#0
Constant (const byte*) init_dist_screen::screen_bottomline#0 = init_dist_screen::screen#0+(word)$28*$18
Successful SSA optimization Pass2ConstantIdentification
Resolved ranged next value [35] init_squares::i#1 ← ++ init_squares::i#2 to ++
Resolved ranged comparison value [36] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1
Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 in [81] (byte~) clock_start::$3 ← (const byte) clock_start::$1 | (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0
Successful SSA optimization PassNSimplifyExpressionWithZero
Adding number conversion cast (unumber) init_squares::$2+1 in if((byte) init_squares::i#1!=(const byte) init_squares::$2+(number) 1) goto init_squares::@1
Adding number conversion cast (unumber) 1 in if((byte) init_squares::i#1!=(unumber)(const byte) init_squares::$2+(number) 1) goto init_squares::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast (const byte) init_squares::$2+(unumber)(number) 1
Simplifying constant integer cast 1
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
Successful SSA optimization PassNFinalizeNumberTypeConversions
Constant right-side identified [0] (byte*) malloc::mem#0 ← (const byte*) HEAP_TOP#0 - (const word) malloc::size#0
Constant right-side identified [77] (byte~) clock_start::$5 ← (const byte) clock_start::$6 | (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0
Constant right-side identified [108] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff
Constant right-side identified [111] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0
Constant right-side identified [124] (word~) main::toD0182_$1#0 ← (const word) main::toD0182_$0#0 & (word) $3fff
Constant right-side identified [127] (byte~) main::toD0182_$5#0 ← > (const word) main::toD0182_$4#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) malloc::mem#0 = HEAP_TOP#0-malloc::size#0
Constant (const byte) clock_start::$3 = CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0
Constant (const byte) clock_start::$5 = clock_start::$6|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0
Constant (const word) main::toD0181_$1#0 = main::toD0181_$0#0&$3fff
Constant (const byte) main::toD0181_$5#0 = >main::toD0181_$4#0
Constant (const word) main::toD0182_$1#0 = main::toD0182_$0#0&$3fff
Constant (const byte) main::toD0182_$5#0 = >main::toD0182_$4#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (void*)malloc::mem#0 in [1] (void*) malloc::return#0 ← (void*)(const byte*) malloc::mem#0
Successful SSA optimization Pass2ConstantValues
Constant right-side identified [105] (word~) main::toD0181_$2#0 ← (const word) main::toD0181_$1#0 * (byte) 4
Constant right-side identified [107] (byte~) main::toD0181_$6#0 ← (const byte) main::toD0181_$5#0 / (byte) 4
Constant right-side identified [119] (word~) main::toD0182_$2#0 ← (const word) main::toD0182_$1#0 * (byte) 4
Constant right-side identified [121] (byte~) main::toD0182_$6#0 ← (const byte) main::toD0182_$5#0 / (byte) 4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const void*) malloc::return#0 = (void*)malloc::mem#0
Constant (const word) main::toD0181_$2#0 = main::toD0181_$1#0*4
Constant (const byte) main::toD0181_$6#0 = main::toD0181_$5#0/4
Constant (const word) main::toD0182_$2#0 = main::toD0182_$1#0*4
Constant (const byte) main::toD0182_$6#0 = main::toD0182_$5#0/4
Successful SSA optimization Pass2ConstantIdentification
Constant (const void*) malloc::return#2 = malloc::return#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const void*) init_squares::$1 = malloc::return#2
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (word*)init_squares::$1 in [24] (word*) SQUARES#1 ← (word*)(const void*) init_squares::$1
Successful SSA optimization Pass2ConstantValues
Constant right-side identified [102] (byte~) main::toD0181_$3#0 ← > (const word) main::toD0181_$2#0
Constant right-side identified [103] (byte~) main::toD0181_$7#0 ← (const byte) main::toD0181_$6#0 & (byte) $f
Constant right-side identified [114] (byte~) main::toD0182_$3#0 ← > (const word) main::toD0182_$2#0
Constant right-side identified [115] (byte~) main::toD0182_$7#0 ← (const byte) main::toD0182_$6#0 & (byte) $f
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word*) SQUARES#1 = (word*)init_squares::$1
Constant (const byte) main::toD0181_$3#0 = >main::toD0181_$2#0
Constant (const byte) main::toD0181_$7#0 = main::toD0181_$6#0&$f
Constant (const byte) main::toD0182_$3#0 = >main::toD0182_$2#0
Constant (const byte) main::toD0182_$7#0 = main::toD0182_$6#0&$f
Successful SSA optimization Pass2ConstantIdentification
Constant (const word*) init_squares::squares#0 = SQUARES#1
Constant (const word*) bsearch16u::items#1 = SQUARES#1
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [99] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3#0 | (const byte) main::toD0181_$7#0
Constant right-side identified [109] (byte) main::toD0182_return#0 ← (const byte) main::toD0182_$3#0 | (const byte) main::toD0182_$7#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0
Constant (const byte) main::toD0182_return#0 = main::toD0182_$3#0|main::toD0182_$7#0
Successful SSA optimization Pass2ConstantIdentification
Inlining Noop Cast [6] (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#0 keeping bsearch16u::key#0
Inlining Noop Cast [7] (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0) keeping *(bsearch16u::pivot#0)
Successful SSA optimization Pass2NopCastInlining
Rewriting multiplication to use shift [4] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [24] (byte~) init_squares::$3 ← (byte) init_squares::i#2 * (byte) 2
Rewriting multiplication to use shift [31] (byte~) sqr::$0 ← (byte) sqr::val#2 * (const byte) SIZEOF_WORD
Rewriting division to use shift [39] (word~) sqrt::$1 ← (word~) sqrt::$3 / (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [112] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2
Rewriting multiplication to use shift [122] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 * (byte) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with different constant siblings (const void*) malloc::return#2
Inlining constant with var siblings (const byte) bsearch16u::num#2
Inlining constant with var siblings (const word*) bsearch16u::items#1
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*) init_squares::squares#0
Inlining constant with var siblings (const byte) init_font_hex::c#0
Inlining constant with var siblings (const byte) init_font_hex::c1#0
Inlining constant with var siblings (const byte) init_font_hex::idx#0
Inlining constant with var siblings (const byte) init_font_hex::i#0
Inlining constant with var siblings (const byte*) init_font_hex::proto_hi#0
Inlining constant with var siblings (const byte*) init_font_hex::proto_lo#0
Inlining constant with var siblings (const byte*) init_font_hex::charset#1
Inlining constant with var siblings (const byte) init_font_hex::idx#1
Inlining constant with var siblings (const byte*) print_word_at::at#0
Inlining constant with var siblings (const byte*) print_word_at::at#1
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 byte*) init_dist_screen::screen_bottomline#0
Constant inlined init_squares::squares#0 = (const word*) SQUARES#1
Constant inlined init_font_hex::proto_hi#0 = (const byte[]) FONT_HEX_PROTO#0
Constant inlined clock_start::$5 = (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0
Constant inlined clock_start::$6 = (const byte) CIA_TIMER_CONTROL_START#0
Constant inlined $1 = (const byte[]) print_hextab#0
Constant inlined clock_start::$3 = (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0
Constant inlined init_dist_screen::x#0 = (byte) 0
Constant inlined print_dword_at::at#0 = (const byte*) main::BASE_SCREEN#0
Constant inlined malloc::return#2 = (const void*) malloc::return#0
Constant inlined bsearch16u::num#2 = (const byte) NUM_SQUARES#3
Constant inlined main::toD0182_$4#0 = (word)(const byte*) main::BASE_CHARSET#0
Constant inlined main::toD0182_$6#0 = >(word)(const byte*) main::BASE_CHARSET#0/(byte) 4
Constant inlined main::toD0181_$1#0 = (word)(const byte*) SCREEN#0&(word) $3fff
Constant inlined main::toD0181_$7#0 = >(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f
Constant inlined init_dist_screen::screen#0 = (const byte*) SCREEN#0
Constant inlined init_font_hex::idx#1 = ++(byte) 0
Constant inlined init_font_hex::idx#0 = (byte) 0
Constant inlined init_dist_screen::screen_bottomline#0 = (const byte*) SCREEN#0+(word)(number) $28*(number) $18
Constant inlined main::toD0182_$0#0 = (word)(const byte*) main::BASE_SCREEN#0
Constant inlined init_squares::i#0 = (byte) 0
Constant inlined main::toD0181_$3#0 = >(word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4
Constant inlined main::toD0182_$2#0 = (word)(const byte*) main::BASE_SCREEN#0&(word) $3fff*(byte) 4
Constant inlined main::toD0181_$5#0 = >(word)(const byte*) CHARSET#0
Constant inlined init_font_hex::proto_lo#0 = (const byte[]) FONT_HEX_PROTO#0
Constant inlined bsearch16u::items#1 = (const word*) SQUARES#1
Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN#0
Constant inlined main::toD0181_gfx#0 = (const byte*) CHARSET#0
Constant inlined init_squares::sqr#0 = (byte) 0
Constant inlined init_dist_screen::y#0 = (byte) 0
Constant inlined init_dist_screen::xb#0 = (byte) $27
Constant inlined init_font_hex::charset#1 = (const byte*) CHARSET#0
Constant inlined init_font_hex::c1#0 = (byte) 0
Constant inlined main::toD0182_$3#0 = >(word)(const byte*) main::BASE_SCREEN#0&(word) $3fff*(byte) 4
Constant inlined main::toD0181_$0#0 = (word)(const byte*) SCREEN#0
Constant inlined main::toD0182_$5#0 = >(word)(const byte*) main::BASE_CHARSET#0
Constant inlined init_font_hex::i#0 = (byte) 0
Constant inlined main::toD0182_$7#0 = >(word)(const byte*) main::BASE_CHARSET#0/(byte) 4&(byte) $f
Constant inlined bsearch16u::$17 = (byte) 1*(const byte) SIZEOF_WORD
Constant inlined bsearch16u::$18 = (byte) 1*(const byte) SIZEOF_WORD
Constant inlined clock_start::$1 = (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0
Constant inlined main::toD0181_$6#0 = >(word)(const byte*) CHARSET#0/(byte) 4
Constant inlined main::toD0181_$2#0 = (word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4
Constant inlined main::toD0181_$4#0 = (word)(const byte*) CHARSET#0
Constant inlined main::toD0182_$1#0 = (word)(const byte*) main::BASE_SCREEN#0&(word) $3fff
Constant inlined init_font_hex::c#0 = (byte) 0
Constant inlined init_squares::$1 = (const void*) malloc::return#0
Constant inlined print_word_at::at#1 = (const byte*) main::BASE_SCREEN#0+(byte) 4
Constant inlined print_word_at::at#0 = (const byte*) main::BASE_SCREEN#0
Constant inlined init_squares::$2 = (const byte) NUM_SQUARES#3-(byte) 1
Successful SSA optimization Pass2ConstantInlining
Simplifying constant integer increment ++0
Successful SSA optimization Pass2ConstantSimplification
Added new block during phi lifting bsearch16u::@18(between bsearch16u::@9 and bsearch16u::@10)
Added new block during phi lifting init_squares::@4(between init_squares::@1 and init_squares::@1)
Added new block during phi lifting init_font_hex::@7(between init_font_hex::@5 and init_font_hex::@1)
Added new block during phi lifting init_font_hex::@8(between init_font_hex::@4 and init_font_hex::@2)
Added new block during phi lifting init_font_hex::@9(between init_font_hex::@3 and init_font_hex::@3)
Added new block during phi lifting init_dist_screen::@19(between init_dist_screen::@11 and init_dist_screen::@1)
Added new block during phi lifting init_dist_screen::@20(between init_dist_screen::@18 and init_dist_screen::@5)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @4
Adding NOP phi() at start of @12
Adding NOP phi() at start of @15
Adding NOP phi() at start of @20
Adding NOP phi() at start of @38
Adding NOP phi() at start of @45
Adding NOP phi() at start of @47
Adding NOP phi() at start of @48
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::toD0181_@return
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of main::@7
Adding NOP phi() at start of main::toD0182
Adding NOP phi() at start of main::toD0182_@return
Adding NOP phi() at start of print_dword_at::@2
Adding NOP phi() at start of print_word_at::@2
Adding NOP phi() at start of print_byte_at::@2
Adding NOP phi() at start of init_dist_screen
Adding NOP phi() at start of init_dist_screen::@15
Adding NOP phi() at start of bsearch16u
Adding NOP phi() at start of init_squares
Adding NOP phi() at start of init_squares::@3
Adding NOP phi() at start of malloc
Adding NOP phi() at start of init_font_hex
CALL GRAPH
Calls in [] to main:8 
Calls in [main] to init_font_hex:12 clock_start:17 init_dist_screen:19 clock:21 print_dword_at:26 
Calls in [print_dword_at] to print_word_at:34 print_word_at:37 
Calls in [print_word_at] to print_byte_at:45 print_byte_at:50 
Calls in [print_byte_at] to print_char_at:59 print_char_at:65 
Calls in [init_dist_screen] to init_squares:74 sqr:84 sqr:95 sqrt:100 
Calls in [sqrt] to bsearch16u:125 
Calls in [init_squares] to malloc:165 

Created 31 initial phi equivalence classes
Coalesced [33] print_word_at::w#4 ← print_word_at::w#0
Coalesced [36] print_word_at::w#5 ← print_word_at::w#1
Coalesced [43] print_byte_at::b#4 ← print_byte_at::b#0
Coalesced [44] print_byte_at::at#4 ← print_byte_at::at#0
Coalesced [48] print_byte_at::b#5 ← print_byte_at::b#1
Coalesced [49] print_byte_at::at#5 ← print_byte_at::at#1
Coalesced [57] print_char_at::ch#3 ← print_char_at::ch#0
Coalesced [58] print_char_at::at#3 ← print_char_at::at#0
Coalesced [63] print_char_at::ch#4 ← print_char_at::ch#1
Coalesced [64] print_char_at::at#4 ← print_char_at::at#1
Coalesced [80] init_dist_screen::yd#2 ← init_dist_screen::$5
Coalesced [83] sqr::val#3 ← sqr::val#0
Coalesced [91] init_dist_screen::xd#2 ← init_dist_screen::$13
Coalesced [94] sqr::val#4 ← sqr::val#1
Coalesced [115] init_dist_screen::y#14 ← init_dist_screen::y#1
Coalesced [116] init_dist_screen::screen_topline#14 ← init_dist_screen::screen_topline#1
Coalesced [117] init_dist_screen::screen_bottomline#14 ← init_dist_screen::screen_bottomline#1
Coalesced [118] init_dist_screen::x#8 ← init_dist_screen::x#1
Coalesced [119] init_dist_screen::xb#8 ← init_dist_screen::xb#1
Coalesced [121] init_dist_screen::xd#1 ← init_dist_screen::$15
Coalesced [123] init_dist_screen::yd#1 ← init_dist_screen::$7
Coalesced [137] bsearch16u::return#9 ← bsearch16u::$2
Coalesced [139] bsearch16u::return#7 ← bsearch16u::return#2
Coalesced [142] bsearch16u::return#8 ← bsearch16u::items#2
Not coalescing [148] bsearch16u::return#6 ← bsearch16u::pivot#0
Coalesced [152] bsearch16u::num#10 ← bsearch16u::num#1
Coalesced [153] bsearch16u::items#11 ← bsearch16u::items#0
Coalesced [156] bsearch16u::num#9 ← bsearch16u::num#0
Coalesced [157] bsearch16u::items#10 ← bsearch16u::items#8
Coalesced [158] bsearch16u::num#11 ← bsearch16u::num#3
Coalesced (already) [159] bsearch16u::items#12 ← bsearch16u::items#2
Coalesced [176] init_squares::sqr#3 ← init_squares::sqr#1
Coalesced [177] init_squares::squares#3 ← init_squares::squares#1
Coalesced [178] init_squares::i#3 ← init_squares::i#1
Coalesced [189] init_font_hex::charset#9 ← init_font_hex::charset#5
Coalesced [211] init_font_hex::charset#8 ← init_font_hex::charset#0
Coalesced [212] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1
Coalesced [213] init_font_hex::c#7 ← init_font_hex::c#1
Coalesced (already) [214] init_font_hex::charset#10 ← init_font_hex::charset#0
Coalesced [215] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1
Coalesced [216] init_font_hex::c1#5 ← init_font_hex::c1#1
Coalesced [217] init_font_hex::i#3 ← init_font_hex::i#1
Coalesced [218] init_font_hex::idx#7 ← init_font_hex::idx#2
Coalesced down to 27 phi equivalence classes
Culled Empty Block (label) @4
Culled Empty Block (label) @12
Culled Empty Block (label) @15
Culled Empty Block (label) @20
Culled Empty Block (label) @38
Culled Empty Block (label) @45
Culled Empty Block (label) @48
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::toD0181_@return
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::toD0182_@return
Culled Empty Block (label) print_dword_at::@2
Culled Empty Block (label) print_word_at::@2
Culled Empty Block (label) print_byte_at::@2
Culled Empty Block (label) init_dist_screen::@15
Culled Empty Block (label) init_dist_screen::@19
Culled Empty Block (label) init_dist_screen::@20
Culled Empty Block (label) bsearch16u::@1
Culled Empty Block (label) bsearch16u::@18
Culled Empty Block (label) init_squares::@3
Culled Empty Block (label) init_squares::@4
Culled Empty Block (label) init_font_hex::@7
Culled Empty Block (label) init_font_hex::@8
Culled Empty Block (label) init_font_hex::@9
Renumbering block @47 to @1
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 sqrt::@2 to sqrt::@1
Renumbering block main::@4 to main::@3
Renumbering block main::@5 to main::@4
Renumbering block main::@6 to main::@5
Renumbering block init_dist_screen::@11 to init_dist_screen::@9
Renumbering block init_dist_screen::@16 to init_dist_screen::@10
Renumbering block init_dist_screen::@17 to init_dist_screen::@11
Renumbering block init_dist_screen::@18 to init_dist_screen::@12
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::toD0182
Adding NOP phi() at start of init_dist_screen
Adding NOP phi() at start of bsearch16u
Adding NOP phi() at start of init_squares
Adding NOP phi() at start of malloc
Adding NOP phi() at start of init_font_hex

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @1
  [3] phi()
main: scope:[main]  from @1
  [4] phi()
  [5] call init_font_hex 
  to:main::toD0181
main::toD0181: scope:[main]  from main
  [6] phi()
  to:main::@1
main::@1: scope:[main]  from main::toD0181
  [7] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
  [8] call clock_start 
  to:main::@3
main::@3: scope:[main]  from main::@1
  [9] phi()
  [10] call init_dist_screen 
  to:main::@4
main::@4: scope:[main]  from main::@3
  [11] phi()
  [12] call clock 
  [13] (dword) clock::return#2 ← (dword) clock::return#0
  to:main::@5
main::@5: scope:[main]  from main::@4
  [14] (dword~) main::$4 ← (dword) clock::return#2
  [15] (dword) main::cyclecount#0 ← (dword~) main::$4 - (const dword) CLOCKS_PER_INIT#0
  [16] (dword) print_dword_at::dw#0 ← (dword) main::cyclecount#0
  [17] call print_dword_at 
  to:main::toD0182
main::toD0182: scope:[main]  from main::@5
  [18] phi()
  to:main::@2
main::@2: scope:[main]  from main::toD0182
  [19] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0
  to:main::@return
main::@return: scope:[main]  from main::@2
  [20] return 
  to:@return
print_dword_at: scope:[print_dword_at]  from main::@5
  [21] (word) print_word_at::w#0 ← > (dword) print_dword_at::dw#0
  [22] call print_word_at 
  to:print_dword_at::@1
print_dword_at::@1: scope:[print_dword_at]  from print_dword_at
  [23] (word) print_word_at::w#1 ← < (dword) print_dword_at::dw#0
  [24] call print_word_at 
  to:print_dword_at::@return
print_dword_at::@return: scope:[print_dword_at]  from print_dword_at::@1
  [25] return 
  to:@return
print_word_at: scope:[print_word_at]  from print_dword_at print_dword_at::@1
  [26] (byte*) print_word_at::at#2 ← phi( print_dword_at/(const byte*) main::BASE_SCREEN#0 print_dword_at::@1/(const byte*) main::BASE_SCREEN#0+(byte) 4 )
  [26] (word) print_word_at::w#2 ← phi( print_dword_at/(word) print_word_at::w#0 print_dword_at::@1/(word) print_word_at::w#1 )
  [27] (byte) print_byte_at::b#0 ← > (word) print_word_at::w#2
  [28] (byte*) print_byte_at::at#0 ← (byte*) print_word_at::at#2
  [29] call print_byte_at 
  to:print_word_at::@1
print_word_at::@1: scope:[print_word_at]  from print_word_at
  [30] (byte) print_byte_at::b#1 ← < (word) print_word_at::w#2
  [31] (byte*) print_byte_at::at#1 ← (byte*) print_word_at::at#2 + (byte) 2
  [32] call print_byte_at 
  to:print_word_at::@return
print_word_at::@return: scope:[print_word_at]  from print_word_at::@1
  [33] return 
  to:@return
print_byte_at: scope:[print_byte_at]  from print_word_at print_word_at::@1
  [34] (byte*) print_byte_at::at#2 ← phi( print_word_at/(byte*) print_byte_at::at#0 print_word_at::@1/(byte*) print_byte_at::at#1 )
  [34] (byte) print_byte_at::b#2 ← phi( print_word_at/(byte) print_byte_at::b#0 print_word_at::@1/(byte) print_byte_at::b#1 )
  [35] (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#2 >> (byte) 4
  [36] (byte) print_char_at::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$0)
  [37] (byte*) print_char_at::at#0 ← (byte*) print_byte_at::at#2
  [38] call print_char_at 
  to:print_byte_at::@1
print_byte_at::@1: scope:[print_byte_at]  from print_byte_at
  [39] (byte~) print_byte_at::$2 ← (byte) print_byte_at::b#2 & (byte) $f
  [40] (byte*) print_char_at::at#1 ← (byte*) print_byte_at::at#2 + (byte) 1
  [41] (byte) print_char_at::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$2)
  [42] call print_char_at 
  to:print_byte_at::@return
print_byte_at::@return: scope:[print_byte_at]  from print_byte_at::@1
  [43] return 
  to:@return
print_char_at: scope:[print_char_at]  from print_byte_at print_byte_at::@1
  [44] (byte*) print_char_at::at#2 ← phi( print_byte_at/(byte*) print_char_at::at#0 print_byte_at::@1/(byte*) print_char_at::at#1 )
  [44] (byte) print_char_at::ch#2 ← phi( print_byte_at/(byte) print_char_at::ch#0 print_byte_at::@1/(byte) print_char_at::ch#1 )
  [45] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2
  to:print_char_at::@return
print_char_at::@return: scope:[print_char_at]  from print_char_at
  [46] return 
  to:@return
clock: scope:[clock]  from main::@4
  [47] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0)
  to:clock::@return
clock::@return: scope:[clock]  from clock
  [48] return 
  to:@return
init_dist_screen: scope:[init_dist_screen]  from main::@3
  [49] phi()
  [50] call init_squares 
  to:init_dist_screen::@1
init_dist_screen::@1: scope:[init_dist_screen]  from init_dist_screen init_dist_screen::@9
  [51] (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen/(const byte*) SCREEN#0+(word)(number) $28*(number) $18 )
  [51] (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#1 init_dist_screen/(const byte*) SCREEN#0 )
  [51] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen/(byte) 0 )
  [52] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1
  [53] 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
  [54] (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
  [55] (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 )
  [56] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
  [57] call sqr 
  [58] (word) sqr::return#2 ← (word) sqr::return#0
  to:init_dist_screen::@10
init_dist_screen::@10: scope:[init_dist_screen]  from init_dist_screen::@4
  [59] (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::@10 init_dist_screen::@12
  [60] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@10/(byte) $27 init_dist_screen::@12/(byte) init_dist_screen::xb#1 )
  [60] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@10/(byte) 0 init_dist_screen::@12/(byte) init_dist_screen::x#1 )
  [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1
  [62] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6
  to:init_dist_screen::@7
init_dist_screen::@7: scope:[init_dist_screen]  from init_dist_screen::@5
  [63] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0
  to:init_dist_screen::@8
init_dist_screen::@8: scope:[init_dist_screen]  from init_dist_screen::@6 init_dist_screen::@7
  [64] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@6/(byte~) init_dist_screen::$15 init_dist_screen::@7/(byte~) init_dist_screen::$13 )
  [65] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
  [66] call sqr 
  [67] (word) sqr::return#3 ← (word) sqr::return#0
  to:init_dist_screen::@11
init_dist_screen::@11: scope:[init_dist_screen]  from init_dist_screen::@8
  [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
  [69] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0
  [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
  [71] call sqrt 
  [72] (byte) sqrt::return#2 ← (byte) sqrt::return#0
  to:init_dist_screen::@12
init_dist_screen::@12: scope:[init_dist_screen]  from init_dist_screen::@11
  [73] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
  [74] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
  [75] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
  [76] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
  [77] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
  [78] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2
  [79] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2
  [80] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5
  to:init_dist_screen::@9
init_dist_screen::@9: scope:[init_dist_screen]  from init_dist_screen::@12
  [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28
  [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28
  [83] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10
  [84] 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::@9
  [85] return 
  to:@return
init_dist_screen::@6: scope:[init_dist_screen]  from init_dist_screen::@5
  [86] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27
  to:init_dist_screen::@8
init_dist_screen::@2: scope:[init_dist_screen]  from init_dist_screen::@1
  [87] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18
  to:init_dist_screen::@4
sqrt: scope:[sqrt]  from init_dist_screen::@11
  [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0
  [89] call bsearch16u 
  [90] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
  to:sqrt::@1
sqrt::@1: scope:[sqrt]  from sqrt
  [91] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
  [92] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (const word*) SQUARES#1
  [93] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1
  [94] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1
  to:sqrt::@return
sqrt::@return: scope:[sqrt]  from sqrt::@1
  [95] return 
  to:@return
bsearch16u: scope:[bsearch16u]  from sqrt
  [96] phi()
  to:bsearch16u::@3
bsearch16u::@3: scope:[bsearch16u]  from bsearch16u bsearch16u::@7
  [97] (word*) bsearch16u::items#2 ← phi( bsearch16u/(const word*) SQUARES#1 bsearch16u::@7/(word*) bsearch16u::items#8 )
  [97] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 )
  [98] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4
  to:bsearch16u::@5
bsearch16u::@5: scope:[bsearch16u]  from bsearch16u::@3
  [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2
  to:bsearch16u::@1
bsearch16u::@1: scope:[bsearch16u]  from bsearch16u::@5
  [100] (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
  [101] (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
  [102] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 )
  [103] return 
  to:@return
bsearch16u::@4: scope:[bsearch16u]  from bsearch16u::@3
  [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1
  [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1
  [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16
  [107] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0)
  [108] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6
  to:bsearch16u::@8
bsearch16u::@8: scope:[bsearch16u]  from bsearch16u::@4
  [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0
  to:bsearch16u::@return
bsearch16u::@6: scope:[bsearch16u]  from bsearch16u::@4
  [110] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7
  to:bsearch16u::@9
bsearch16u::@9: scope:[bsearch16u]  from bsearch16u::@6
  [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD
  [112] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3
  to:bsearch16u::@7
bsearch16u::@7: scope:[bsearch16u]  from bsearch16u::@6 bsearch16u::@9
  [113] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 )
  [113] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 )
  [114] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1
  to:bsearch16u::@3
sqr: scope:[sqr]  from init_dist_screen::@4 init_dist_screen::@8
  [115] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 )
  [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1
  [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0)
  to:sqr::@return
sqr::@return: scope:[sqr]  from sqr
  [118] return 
  to:@return
init_squares: scope:[init_squares]  from init_dist_screen
  [119] phi()
  [120] call malloc 
  to:init_squares::@1
init_squares::@1: scope:[init_squares]  from init_squares init_squares::@1
  [121] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares/(byte) 0 )
  [121] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares/(const word*) SQUARES#1 )
  [121] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares/(byte) 0 )
  [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2
  [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD
  [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1
  [125] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
  [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4
  [127] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2
  [128] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1
  to:init_squares::@return
init_squares::@return: scope:[init_squares]  from init_squares::@1
  [129] return 
  to:@return
malloc: scope:[malloc]  from init_squares
  [130] phi()
  to:malloc::@return
malloc::@return: scope:[malloc]  from malloc
  [131] return 
  to:@return
clock_start: scope:[clock_start]  from main::@1
  [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0
  [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0
  [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff
  [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0
  [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0
  to:clock_start::@return
clock_start::@return: scope:[clock_start]  from clock_start
  [137] return 
  to:@return
init_font_hex: scope:[init_font_hex]  from main
  [138] phi()
  to:init_font_hex::@1
init_font_hex::@1: scope:[init_font_hex]  from init_font_hex init_font_hex::@5
  [139] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 )
  [139] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 )
  [139] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 )
  to:init_font_hex::@2
init_font_hex::@2: scope:[init_font_hex]  from init_font_hex::@1 init_font_hex::@4
  [140] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 )
  [140] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 )
  [140] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 )
  [141] *((byte*) init_font_hex::charset#2) ← (byte) 0
  to:init_font_hex::@3
init_font_hex::@3: scope:[init_font_hex]  from init_font_hex::@2 init_font_hex::@3
  [142] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 )
  [142] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 )
  [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4
  [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1
  [145] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1
  [146] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2
  [147] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5
  [148] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2
  [149] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3
  to:init_font_hex::@4
init_font_hex::@4: scope:[init_font_hex]  from init_font_hex::@3
  [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0
  [151] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2
  [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0
  [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5
  [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8
  [155] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4
  [156] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2
  to:init_font_hex::@5
init_font_hex::@5: scope:[init_font_hex]  from init_font_hex::@4
  [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5
  [158] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6
  [159] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1
  to:init_font_hex::@return
init_font_hex::@return: scope:[init_font_hex]  from init_font_hex::@5
  [160] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(byte*) CHARSET
(dword*) CIA2_TIMER_AB
(byte*) CIA2_TIMER_A_CONTROL
(byte*) CIA2_TIMER_B_CONTROL
(byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES
(byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
(byte) CIA_TIMER_CONTROL_CONTINUOUS
(byte) CIA_TIMER_CONTROL_START
(byte) CIA_TIMER_CONTROL_STOP
(dword) CLOCKS_PER_INIT
(byte*) D018
(byte[]) FONT_HEX_PROTO
(byte*) HEAP_TOP
(byte) NUM_SQUARES
(byte*) SCREEN
(word*) SQUARES
(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#2 334.33333333333337
(word*) bsearch16u::items#8 1501.5
(word) bsearch16u::key
(word) bsearch16u::key#0 0.2857142857142857
(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
(dword()) clock()
(dword) clock::return
(dword) clock::return#0 1.3333333333333333
(dword) clock::return#2 4.0
(void()) clock_start()
(byte*) heap_head
(void()) init_dist_screen((byte*) init_dist_screen::screen)
(byte~) init_dist_screen::$13 202.0
(byte~) init_dist_screen::$15 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_bottomline
(byte*) init_dist_screen::screen_bottomline#1 7.333333333333333
(byte*) init_dist_screen::screen_bottomline#10 6.787878787878788
(byte*) init_dist_screen::screen_topline
(byte*) init_dist_screen::screen_topline#1 5.5
(byte*) init_dist_screen::screen_topline#10 7.0
(byte) init_dist_screen::x
(byte) init_dist_screen::x#1 101.0
(byte) init_dist_screen::x#2 26.578947368421055
(byte) init_dist_screen::x2
(byte) init_dist_screen::x2#0 202.0
(byte) init_dist_screen::xb
(byte) init_dist_screen::xb#1 101.0
(byte) init_dist_screen::xb#2 20.2
(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_font_hex((byte*) init_font_hex::charset)
(byte~) init_font_hex::$0 1001.0
(byte~) init_font_hex::$1 2002.0
(byte~) init_font_hex::$2 2002.0
(byte) init_font_hex::c
(byte) init_font_hex::c#1 16.5
(byte) init_font_hex::c#6 1.1578947368421053
(byte) init_font_hex::c1
(byte) init_font_hex::c1#1 151.5
(byte) init_font_hex::c1#4 13.466666666666667
(byte*) init_font_hex::charset
(byte*) init_font_hex::charset#0 35.5
(byte*) init_font_hex::charset#2 108.35714285714285
(byte*) init_font_hex::charset#5 22.0
(byte) init_font_hex::i
(byte) init_font_hex::i#1 1501.5
(byte) init_font_hex::i#2 667.3333333333334
(byte) init_font_hex::idx
(byte) init_font_hex::idx#2 551.0
(byte) init_font_hex::idx#3 202.0
(byte) init_font_hex::idx#5 600.5999999999999
(byte*) init_font_hex::proto_hi
(byte*) init_font_hex::proto_hi#1 7.333333333333333
(byte*) init_font_hex::proto_hi#6 56.83333333333334
(byte*) init_font_hex::proto_lo
(byte*) init_font_hex::proto_lo#1 50.5
(byte*) init_font_hex::proto_lo#4 92.53846153846155
(void()) init_squares()
(byte~) init_squares::$3 22.0
(byte~) init_squares::$4 22.0
(byte) init_squares::i
(byte) init_squares::i#1 16.5
(byte) init_squares::i#2 5.5
(word) init_squares::sqr
(word) init_squares::sqr#1 7.333333333333333
(word) init_squares::sqr#2 6.6000000000000005
(word*) init_squares::squares
(word*) init_squares::squares#1 3.6666666666666665
(word*) init_squares::squares#2 16.5
(void()) main()
(dword~) main::$4 4.0
(byte*) main::BASE_CHARSET
(byte*) main::BASE_SCREEN
(dword) main::cyclecount
(dword) main::cyclecount#0 4.0
(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
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(byte*) main::toD0181_screen
(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
(byte*) main::toD0182_gfx
(byte) main::toD0182_return
(byte*) main::toD0182_screen
(void*()) malloc((word) malloc::size)
(byte*) malloc::mem
(void*) malloc::return
(word) malloc::size
(void()) print_byte_at((byte) print_byte_at::b , (byte*) print_byte_at::at)
(byte~) print_byte_at::$0 4.0
(byte~) print_byte_at::$2 2.0
(byte*) print_byte_at::at
(byte*) print_byte_at::at#0 4.0
(byte*) print_byte_at::at#1 4.0
(byte*) print_byte_at::at#2 1.3333333333333333
(byte) print_byte_at::b
(byte) print_byte_at::b#0 2.0
(byte) print_byte_at::b#1 2.0
(byte) print_byte_at::b#2 1.6
(void()) print_char_at((byte) print_char_at::ch , (byte*) print_char_at::at)
(byte*) print_char_at::at
(byte*) print_char_at::at#0 4.0
(byte*) print_char_at::at#1 2.0
(byte*) print_char_at::at#2 6.0
(byte) print_char_at::ch
(byte) print_char_at::ch#0 2.0
(byte) print_char_at::ch#1 4.0
(byte) print_char_at::ch#2 6.0
(void()) print_dword_at((dword) print_dword_at::dw , (byte*) print_dword_at::at)
(byte*) print_dword_at::at
(dword) print_dword_at::dw
(dword) print_dword_at::dw#0 2.0
(byte[]) print_hextab
(void()) print_word_at((word) print_word_at::w , (byte*) print_word_at::at)
(byte*) print_word_at::at
(byte*) print_word_at::at#2 0.8
(word) print_word_at::w
(word) print_word_at::w#0 4.0
(word) print_word_at::w#1 4.0
(word) print_word_at::w#2 2.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
[ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ]
[ print_word_at::at#2 ]
[ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ]
[ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ]
[ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
[ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
[ init_dist_screen::y#10 init_dist_screen::y#1 ]
[ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ]
[ init_dist_screen::screen_bottomline#10 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::$15 init_dist_screen::$13 ]
[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 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#0 sqr::val#1 ]
[ init_squares::sqr#2 init_squares::sqr#1 ]
[ init_squares::squares#2 init_squares::squares#1 ]
[ init_squares::i#2 init_squares::i#1 ]
[ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
[ init_font_hex::c#6 init_font_hex::c#1 ]
[ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
[ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
[ init_font_hex::c1#4 init_font_hex::c1#1 ]
[ init_font_hex::i#2 init_font_hex::i#1 ]
[ init_font_hex::idx#5 init_font_hex::idx#2 ]
Added variable clock::return#2 to zero page equivalence class [ clock::return#2 ]
Added variable main::$4 to zero page equivalence class [ main::$4 ]
Added variable main::cyclecount#0 to zero page equivalence class [ main::cyclecount#0 ]
Added variable print_dword_at::dw#0 to zero page equivalence class [ print_dword_at::dw#0 ]
Added variable print_byte_at::$0 to zero page equivalence class [ print_byte_at::$0 ]
Added variable print_byte_at::$2 to zero page equivalence class [ print_byte_at::$2 ]
Added variable clock::return#0 to zero page equivalence class [ clock::return#0 ]
Added variable init_dist_screen::y2#0 to zero page equivalence class [ init_dist_screen::y2#0 ]
Added variable sqr::return#2 to zero page equivalence class [ sqr::return#2 ]
Added variable init_dist_screen::yds#0 to zero page equivalence class [ init_dist_screen::yds#0 ]
Added variable init_dist_screen::x2#0 to zero page equivalence class [ init_dist_screen::x2#0 ]
Added variable sqr::return#3 to zero page equivalence class [ sqr::return#3 ]
Added variable init_dist_screen::xds#0 to zero page equivalence class [ init_dist_screen::xds#0 ]
Added variable init_dist_screen::ds#0 to zero page equivalence class [ init_dist_screen::ds#0 ]
Added variable sqrt::val#0 to zero page equivalence class [ sqrt::val#0 ]
Added variable sqrt::return#2 to zero page equivalence class [ sqrt::return#2 ]
Added variable init_dist_screen::d#0 to zero page equivalence class [ init_dist_screen::d#0 ]
Added variable bsearch16u::key#0 to zero page equivalence class [ bsearch16u::key#0 ]
Added variable bsearch16u::return#3 to zero page equivalence class [ bsearch16u::return#3 ]
Added variable sqrt::found#0 to zero page equivalence class [ sqrt::found#0 ]
Added variable sqrt::$3 to zero page equivalence class [ sqrt::$3 ]
Added variable sqrt::$1 to zero page equivalence class [ sqrt::$1 ]
Added variable sqrt::return#0 to zero page equivalence class [ sqrt::return#0 ]
Added variable bsearch16u::$6 to zero page equivalence class [ bsearch16u::$6 ]
Added variable bsearch16u::$16 to zero page equivalence class [ bsearch16u::$16 ]
Added variable bsearch16u::pivot#0 to zero page equivalence class [ bsearch16u::pivot#0 ]
Added variable bsearch16u::result#0 to zero page equivalence class [ bsearch16u::result#0 ]
Added variable sqr::$0 to zero page equivalence class [ sqr::$0 ]
Added variable sqr::return#0 to zero page equivalence class [ sqr::return#0 ]
Added variable init_squares::$3 to zero page equivalence class [ init_squares::$3 ]
Added variable init_squares::$4 to zero page equivalence class [ init_squares::$4 ]
Added variable init_font_hex::$0 to zero page equivalence class [ init_font_hex::$0 ]
Added variable init_font_hex::$1 to zero page equivalence class [ init_font_hex::$1 ]
Added variable init_font_hex::$2 to zero page equivalence class [ init_font_hex::$2 ]
Added variable init_font_hex::idx#3 to zero page equivalence class [ init_font_hex::idx#3 ]
Complete equivalence classes
[ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ]
[ print_word_at::at#2 ]
[ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ]
[ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ]
[ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
[ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
[ init_dist_screen::y#10 init_dist_screen::y#1 ]
[ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ]
[ init_dist_screen::screen_bottomline#10 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::$15 init_dist_screen::$13 ]
[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 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#0 sqr::val#1 ]
[ init_squares::sqr#2 init_squares::sqr#1 ]
[ init_squares::squares#2 init_squares::squares#1 ]
[ init_squares::i#2 init_squares::i#1 ]
[ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
[ init_font_hex::c#6 init_font_hex::c#1 ]
[ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
[ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
[ init_font_hex::c1#4 init_font_hex::c1#1 ]
[ init_font_hex::i#2 init_font_hex::i#1 ]
[ init_font_hex::idx#5 init_font_hex::idx#2 ]
[ clock::return#2 ]
[ main::$4 ]
[ main::cyclecount#0 ]
[ print_dword_at::dw#0 ]
[ print_byte_at::$0 ]
[ print_byte_at::$2 ]
[ clock::return#0 ]
[ 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 ]
[ init_squares::$3 ]
[ init_squares::$4 ]
[ init_font_hex::$0 ]
[ init_font_hex::$1 ]
[ init_font_hex::$2 ]
[ init_font_hex::idx#3 ]
Allocated zp ZP_WORD:2 [ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ]
Allocated zp ZP_WORD:4 [ print_word_at::at#2 ]
Allocated zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ]
Allocated zp ZP_WORD:9 [ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ]
Allocated zp ZP_BYTE:11 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
Allocated zp ZP_WORD:12 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Allocated zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Allocated zp ZP_WORD:15 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ]
Allocated zp ZP_WORD:17 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ]
Allocated zp ZP_BYTE:19 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
Allocated zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Allocated zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Allocated zp ZP_BYTE:22 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ]
Allocated zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ]
Allocated zp ZP_BYTE:25 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
Allocated zp ZP_BYTE:26 [ sqr::val#2 sqr::val#0 sqr::val#1 ]
Allocated zp ZP_WORD:27 [ init_squares::sqr#2 init_squares::sqr#1 ]
Allocated zp ZP_WORD:29 [ init_squares::squares#2 init_squares::squares#1 ]
Allocated zp ZP_BYTE:31 [ init_squares::i#2 init_squares::i#1 ]
Allocated zp ZP_WORD:32 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
Allocated zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ]
Allocated zp ZP_WORD:35 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
Allocated zp ZP_WORD:37 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
Allocated zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Allocated zp ZP_BYTE:40 [ init_font_hex::i#2 init_font_hex::i#1 ]
Allocated zp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Allocated zp ZP_DWORD:42 [ clock::return#2 ]
Allocated zp ZP_DWORD:46 [ main::$4 ]
Allocated zp ZP_DWORD:50 [ main::cyclecount#0 ]
Allocated zp ZP_DWORD:54 [ print_dword_at::dw#0 ]
Allocated zp ZP_BYTE:58 [ print_byte_at::$0 ]
Allocated zp ZP_BYTE:59 [ print_byte_at::$2 ]
Allocated zp ZP_DWORD:60 [ clock::return#0 ]
Allocated zp ZP_BYTE:64 [ init_dist_screen::y2#0 ]
Allocated zp ZP_WORD:65 [ sqr::return#2 ]
Allocated zp ZP_WORD:67 [ init_dist_screen::yds#0 ]
Allocated zp ZP_BYTE:69 [ init_dist_screen::x2#0 ]
Allocated zp ZP_WORD:70 [ sqr::return#3 ]
Allocated zp ZP_WORD:72 [ init_dist_screen::xds#0 ]
Allocated zp ZP_WORD:74 [ init_dist_screen::ds#0 ]
Allocated zp ZP_WORD:76 [ sqrt::val#0 ]
Allocated zp ZP_BYTE:78 [ sqrt::return#2 ]
Allocated zp ZP_BYTE:79 [ init_dist_screen::d#0 ]
Allocated zp ZP_WORD:80 [ bsearch16u::key#0 ]
Allocated zp ZP_WORD:82 [ bsearch16u::return#3 ]
Allocated zp ZP_WORD:84 [ sqrt::found#0 ]
Allocated zp ZP_WORD:86 [ sqrt::$3 ]
Allocated zp ZP_WORD:88 [ sqrt::$1 ]
Allocated zp ZP_BYTE:90 [ sqrt::return#0 ]
Allocated zp ZP_BYTE:91 [ bsearch16u::$6 ]
Allocated zp ZP_BYTE:92 [ bsearch16u::$16 ]
Allocated zp ZP_WORD:93 [ bsearch16u::pivot#0 ]
Allocated zp ZP_WORD:95 [ bsearch16u::result#0 ]
Allocated zp ZP_BYTE:97 [ sqr::$0 ]
Allocated zp ZP_WORD:98 [ sqr::return#0 ]
Allocated zp ZP_BYTE:100 [ init_squares::$3 ]
Allocated zp ZP_BYTE:101 [ init_squares::$4 ]
Allocated zp ZP_BYTE:102 [ init_font_hex::$0 ]
Allocated zp ZP_BYTE:103 [ init_font_hex::$1 ]
Allocated zp ZP_BYTE:104 [ init_font_hex::$2 ]
Allocated zp ZP_BYTE:105 [ init_font_hex::idx#3 ]

INITIAL ASM
  // File Comments
// Calculate the distance to the center of the screen - and show it using font-hex
  // Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .const SIZEOF_WORD = 2
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  .label D018 = $d018
  // CIA #2 Timer A+B Value (32-bit)
  .label CIA2_TIMER_AB = $dd04
  // CIA #2 Timer A Control Register
  .label CIA2_TIMER_A_CONTROL = $dd0e
  // CIA #2 Timer B Control Register
  .label CIA2_TIMER_B_CONTROL = $dd0f
  // Timer Control - Start/stop timer (0:stop, 1: start)
  .const CIA_TIMER_CONTROL_START = 1
  // Timer Control - Time CONTINUOUS/ONE-SHOT (0:CONTINUOUS, 1: ONE-SHOT)
  .const CIA_TIMER_CONTROL_CONTINUOUS = 0
  // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high)
  .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40
  // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine.
  // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code.
  .const CLOCKS_PER_INIT = $12
  .label CHARSET = $2000
  .label SCREEN = $2800
  .const NUM_SQUARES = $30
  .label SQUARES = malloc.return
  // @begin
bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
  jmp b1
  // @1
b1:
  // [2] call main 
  // [4] phi from @1 to main [phi:@1->main]
main_from_b1:
  jsr main
  // [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
  jmp bend
  // @end
bend:
  // main
main: {
    .label BASE_SCREEN = $400
    .label BASE_CHARSET = $1000
    .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
    .const toD0182_return = (>(BASE_SCREEN&$3fff)*4)|(>BASE_CHARSET)/4&$f
    .label _4 = $2e
    .label cyclecount = $32
    // [5] call init_font_hex 
    // [138] phi from main to init_font_hex [phi:main->init_font_hex]
  init_font_hex_from_main:
    jsr init_font_hex
    // [6] phi from main to main::toD0181 [phi:main->main::toD0181]
  toD0181_from_main:
    jmp toD0181
    // main::toD0181
  toD0181:
    jmp b1
    // main::@1
  b1:
    // [7] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // [8] call clock_start 
    jsr clock_start
    // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
  b3_from_b1:
    jmp b3
    // main::@3
  b3:
    // [10] call init_dist_screen 
    // [49] phi from main::@3 to init_dist_screen [phi:main::@3->init_dist_screen]
  init_dist_screen_from_b3:
    jsr init_dist_screen
    // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  b4_from_b3:
    jmp b4
    // main::@4
  b4:
    // [12] call clock 
    jsr clock
    // [13] (dword) clock::return#2 ← (dword) clock::return#0 -- vduz1=vduz2 
    lda clock.return
    sta clock.return_2
    lda clock.return+1
    sta clock.return_2+1
    lda clock.return+2
    sta clock.return_2+2
    lda clock.return+3
    sta clock.return_2+3
    jmp b5
    // main::@5
  b5:
    // [14] (dword~) main::$4 ← (dword) clock::return#2 -- vduz1=vduz2 
    lda clock.return_2
    sta _4
    lda clock.return_2+1
    sta _4+1
    lda clock.return_2+2
    sta _4+2
    lda clock.return_2+3
    sta _4+3
    // [15] (dword) main::cyclecount#0 ← (dword~) main::$4 - (const dword) CLOCKS_PER_INIT#0 -- vduz1=vduz2_minus_vduc1 
    lda _4
    sec
    sbc #<CLOCKS_PER_INIT
    sta cyclecount
    lda _4+1
    sbc #>CLOCKS_PER_INIT
    sta cyclecount+1
    lda _4+2
    sbc #<CLOCKS_PER_INIT>>$10
    sta cyclecount+2
    lda _4+3
    sbc #>CLOCKS_PER_INIT>>$10
    sta cyclecount+3
    // [16] (dword) print_dword_at::dw#0 ← (dword) main::cyclecount#0 -- vduz1=vduz2 
    lda cyclecount
    sta print_dword_at.dw
    lda cyclecount+1
    sta print_dword_at.dw+1
    lda cyclecount+2
    sta print_dword_at.dw+2
    lda cyclecount+3
    sta print_dword_at.dw+3
    // [17] call print_dword_at 
    jsr print_dword_at
    // [18] phi from main::@5 to main::toD0182 [phi:main::@5->main::toD0182]
  toD0182_from_b5:
    jmp toD0182
    // main::toD0182
  toD0182:
    jmp b2
    // main::@2
  b2:
    // [19] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0182_return
    sta D018
    jmp breturn
    // main::@return
  breturn:
    // [20] return 
    rts
}
  // print_dword_at
// Print a dword as HEX at a specific position
// print_dword_at(dword zeropage($36) dw)
print_dword_at: {
    .label dw = $36
    // [21] (word) print_word_at::w#0 ← > (dword) print_dword_at::dw#0 -- vwuz1=_hi_vduz2 
    lda dw+2
    sta print_word_at.w
    lda dw+3
    sta print_word_at.w+1
    // [22] call print_word_at 
    // [26] phi from print_dword_at to print_word_at [phi:print_dword_at->print_word_at]
  print_word_at_from_print_dword_at:
    // [26] phi (byte*) print_word_at::at#2 = (const byte*) main::BASE_SCREEN#0 [phi:print_dword_at->print_word_at#0] -- pbuz1=pbuc1 
    lda #<main.BASE_SCREEN
    sta print_word_at.at
    lda #>main.BASE_SCREEN
    sta print_word_at.at+1
    // [26] phi (word) print_word_at::w#2 = (word) print_word_at::w#0 [phi:print_dword_at->print_word_at#1] -- register_copy 
    jsr print_word_at
    jmp b1
    // print_dword_at::@1
  b1:
    // [23] (word) print_word_at::w#1 ← < (dword) print_dword_at::dw#0 -- vwuz1=_lo_vduz2 
    lda dw
    sta print_word_at.w
    lda dw+1
    sta print_word_at.w+1
    // [24] call print_word_at 
    // [26] phi from print_dword_at::@1 to print_word_at [phi:print_dword_at::@1->print_word_at]
  print_word_at_from_b1:
    // [26] phi (byte*) print_word_at::at#2 = (const byte*) main::BASE_SCREEN#0+(byte) 4 [phi:print_dword_at::@1->print_word_at#0] -- pbuz1=pbuc1 
    lda #<main.BASE_SCREEN+4
    sta print_word_at.at
    lda #>main.BASE_SCREEN+4
    sta print_word_at.at+1
    // [26] phi (word) print_word_at::w#2 = (word) print_word_at::w#1 [phi:print_dword_at::@1->print_word_at#1] -- register_copy 
    jsr print_word_at
    jmp breturn
    // print_dword_at::@return
  breturn:
    // [25] return 
    rts
}
  // print_word_at
// Print a word as HEX at a specific position
// print_word_at(word zeropage(2) w, byte* zeropage(4) at)
print_word_at: {
    .label w = 2
    .label at = 4
    // [27] (byte) print_byte_at::b#0 ← > (word) print_word_at::w#2 -- vbuz1=_hi_vwuz2 
    lda w+1
    sta print_byte_at.b
    // [28] (byte*) print_byte_at::at#0 ← (byte*) print_word_at::at#2 -- pbuz1=pbuz2 
    lda at
    sta print_byte_at.at
    lda at+1
    sta print_byte_at.at+1
    // [29] call print_byte_at 
    // [34] phi from print_word_at to print_byte_at [phi:print_word_at->print_byte_at]
  print_byte_at_from_print_word_at:
    // [34] phi (byte*) print_byte_at::at#2 = (byte*) print_byte_at::at#0 [phi:print_word_at->print_byte_at#0] -- register_copy 
    // [34] phi (byte) print_byte_at::b#2 = (byte) print_byte_at::b#0 [phi:print_word_at->print_byte_at#1] -- register_copy 
    jsr print_byte_at
    jmp b1
    // print_word_at::@1
  b1:
    // [30] (byte) print_byte_at::b#1 ← < (word) print_word_at::w#2 -- vbuz1=_lo_vwuz2 
    lda w
    sta print_byte_at.b
    // [31] (byte*) print_byte_at::at#1 ← (byte*) print_word_at::at#2 + (byte) 2 -- pbuz1=pbuz2_plus_2 
    lda at
    clc
    adc #2
    sta print_byte_at.at
    lda at+1
    adc #0
    sta print_byte_at.at+1
    // [32] call print_byte_at 
    // [34] phi from print_word_at::@1 to print_byte_at [phi:print_word_at::@1->print_byte_at]
  print_byte_at_from_b1:
    // [34] phi (byte*) print_byte_at::at#2 = (byte*) print_byte_at::at#1 [phi:print_word_at::@1->print_byte_at#0] -- register_copy 
    // [34] phi (byte) print_byte_at::b#2 = (byte) print_byte_at::b#1 [phi:print_word_at::@1->print_byte_at#1] -- register_copy 
    jsr print_byte_at
    jmp breturn
    // print_word_at::@return
  breturn:
    // [33] return 
    rts
}
  // print_byte_at
// Print a byte as HEX at a specific position
// print_byte_at(byte zeropage(6) b, byte* zeropage(9) at)
print_byte_at: {
    .label _0 = $3a
    .label _2 = $3b
    .label b = 6
    .label at = 9
    // [35] (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#2 >> (byte) 4 -- vbuz1=vbuz2_ror_4 
    lda b
    lsr
    lsr
    lsr
    lsr
    sta _0
    // [36] (byte) print_char_at::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$0) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy _0
    lda print_hextab,y
    sta print_char_at.ch
    // [37] (byte*) print_char_at::at#0 ← (byte*) print_byte_at::at#2 -- pbuz1=pbuz2 
    lda at
    sta print_char_at.at
    lda at+1
    sta print_char_at.at+1
    // [38] call print_char_at 
    // [44] phi from print_byte_at to print_char_at [phi:print_byte_at->print_char_at]
  print_char_at_from_print_byte_at:
    // [44] phi (byte*) print_char_at::at#2 = (byte*) print_char_at::at#0 [phi:print_byte_at->print_char_at#0] -- register_copy 
    // [44] phi (byte) print_char_at::ch#2 = (byte) print_char_at::ch#0 [phi:print_byte_at->print_char_at#1] -- register_copy 
    jsr print_char_at
    jmp b1
    // print_byte_at::@1
  b1:
    // [39] (byte~) print_byte_at::$2 ← (byte) print_byte_at::b#2 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 
    lda #$f
    and b
    sta _2
    // [40] (byte*) print_char_at::at#1 ← (byte*) print_byte_at::at#2 + (byte) 1 -- pbuz1=pbuz2_plus_1 
    lda at
    clc
    adc #1
    sta print_char_at.at
    lda at+1
    adc #0
    sta print_char_at.at+1
    // [41] (byte) print_char_at::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$2) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy _2
    lda print_hextab,y
    sta print_char_at.ch
    // [42] call print_char_at 
    // [44] phi from print_byte_at::@1 to print_char_at [phi:print_byte_at::@1->print_char_at]
  print_char_at_from_b1:
    // [44] phi (byte*) print_char_at::at#2 = (byte*) print_char_at::at#1 [phi:print_byte_at::@1->print_char_at#0] -- register_copy 
    // [44] phi (byte) print_char_at::ch#2 = (byte) print_char_at::ch#1 [phi:print_byte_at::@1->print_char_at#1] -- register_copy 
    jsr print_char_at
    jmp breturn
    // print_byte_at::@return
  breturn:
    // [43] return 
    rts
}
  // print_char_at
// Print a single char
// print_char_at(byte zeropage($b) ch, byte* zeropage($c) at)
print_char_at: {
    .label ch = $b
    .label at = $c
    // [45] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 -- _deref_pbuz1=vbuz2 
    lda ch
    ldy #0
    sta (at),y
    jmp breturn
    // print_char_at::@return
  breturn:
    // [46] return 
    rts
}
  // clock
// Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program).
// This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start()
clock: {
    .label return = $3c
    .label return_2 = $2a
    // [47] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) -- vduz1=vduc1_minus__deref_pduc2 
    lda #<$ffffffff
    sec
    sbc CIA2_TIMER_AB
    sta return
    lda #>$ffffffff
    sbc CIA2_TIMER_AB+1
    sta return+1
    lda #<$ffffffff>>$10
    sbc CIA2_TIMER_AB+2
    sta return+2
    lda #>$ffffffff>>$10
    sbc CIA2_TIMER_AB+3
    sta return+3
    jmp breturn
    // clock::@return
  breturn:
    // [48] return 
    rts
}
  // 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: {
    .label _5 = $13
    .label _7 = $13
    .label _13 = $16
    .label _15 = $16
    .label y2 = $40
    .label yd = $13
    .label yds = $43
    .label x2 = $45
    .label xd = $16
    .label xds = $48
    .label ds = $4a
    .label d = $4f
    .label x = $14
    .label xb = $15
    .label screen_topline = $f
    .label screen_bottomline = $11
    .label y = $e
    // [50] call init_squares 
    // [119] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
  init_squares_from_init_dist_screen:
    jsr init_squares
    // [51] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1]
  b1_from_init_dist_screen:
    // [51] phi (byte*) init_dist_screen::screen_bottomline#10 = (const byte*) SCREEN#0+(word)(number) $28*(number) $18 [phi:init_dist_screen->init_dist_screen::@1#0] -- pbuz1=pbuc1 
    lda #<SCREEN+$28*$18
    sta screen_bottomline
    lda #>SCREEN+$28*$18
    sta screen_bottomline+1
    // [51] phi (byte*) init_dist_screen::screen_topline#10 = (const byte*) SCREEN#0 [phi:init_dist_screen->init_dist_screen::@1#1] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta screen_topline
    lda #>SCREEN
    sta screen_topline+1
    // [51] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta y
    jmp b1
    // [51] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1]
  b1_from_b9:
    // [51] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy 
    // [51] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy 
    // [51] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy 
    jmp b1
    // init_dist_screen::@1
  b1:
    // [52] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda y
    asl
    sta y2
    // [53] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuz1_ge_vbuc1_then_la1 
    lda y2
    cmp #$18
    bcs b2
    jmp b3
    // init_dist_screen::@3
  b3:
    // [54] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuz1=vbuc1_minus_vbuz2 
    lda #$18
    sec
    sbc y2
    sta _5
    // [55] 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:
    // [55] 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:
    // [56] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 
    lda yd
    sta sqr.val
    // [57] call sqr 
    // [115] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
  sqr_from_b4:
    // [115] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
    jsr sqr
    // [58] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
    lda sqr.return
    sta sqr.return_2
    lda sqr.return+1
    sta sqr.return_2+1
    jmp b10
    // init_dist_screen::@10
  b10:
    // [59] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 -- vwuz1=vwuz2 
    lda sqr.return_2
    sta yds
    lda sqr.return_2+1
    sta yds+1
    // [60] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5]
  b5_from_b10:
    // [60] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 
    lda #$27
    sta xb
    // [60] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 
    lda #0
    sta x
    jmp b5
    // [60] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
  b5_from_b12:
    // [60] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- register_copy 
    // [60] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- register_copy 
    jmp b5
    // init_dist_screen::@5
  b5:
    // [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda x
    asl
    sta x2
    // [62] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuz1_ge_vbuc1_then_la1 
    lda x2
    cmp #$27
    bcs b6
    jmp b7
    // init_dist_screen::@7
  b7:
    // [63] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 
    lda #$27
    sec
    sbc x2
    sta _13
    // [64] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8]
  b8_from_b6:
  b8_from_b7:
    // [64] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy 
    jmp b8
    // init_dist_screen::@8
  b8:
    // [65] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 
    lda xd
    sta sqr.val
    // [66] call sqr 
    // [115] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr]
  sqr_from_b8:
    // [115] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy 
    jsr sqr
    // [67] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 
    lda sqr.return
    sta sqr.return_3
    lda sqr.return+1
    sta sqr.return_3+1
    jmp b11
    // init_dist_screen::@11
  b11:
    // [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 
    lda sqr.return_3
    sta xds
    lda sqr.return_3+1
    sta xds+1
    // [69] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 
    lda xds
    clc
    adc yds
    sta ds
    lda xds+1
    adc yds+1
    sta ds+1
    // [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 
    lda ds
    sta sqrt.val
    lda ds+1
    sta sqrt.val+1
    // [71] call sqrt 
    jsr sqrt
    // [72] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 
    lda sqrt.return
    sta sqrt.return_2
    jmp b12
    // init_dist_screen::@12
  b12:
    // [73] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 
    lda sqrt.return_2
    sta d
    // [74] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda d
    ldy x
    sta (screen_topline),y
    // [75] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda d
    ldy x
    sta (screen_bottomline),y
    // [76] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda d
    ldy xb
    sta (screen_topline),y
    // [77] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda d
    ldy xb
    sta (screen_bottomline),y
    // [78] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc x
    // [79] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec xb
    // [80] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 
    lda x
    cmp #$13+1
    bcc b5_from_b12
    jmp b9
    // init_dist_screen::@9
  b9:
    // [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc screen_topline
    sta screen_topline
    bcc !+
    inc screen_topline+1
  !:
    // [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
    lda screen_bottomline
    sec
    sbc #<$28
    sta screen_bottomline
    lda screen_bottomline+1
    sbc #>$28
    sta screen_bottomline+1
    // [83] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
    inc y
    // [84] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$d
    cmp y
    bne b1_from_b9
    jmp breturn
    // init_dist_screen::@return
  breturn:
    // [85] return 
    rts
    // init_dist_screen::@6
  b6:
    // [86] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1 
    lax x2
    axs #$27
    stx _15
    jmp b8_from_b6
    // init_dist_screen::@2
  b2:
    // [87] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuz1=vbuz2_minus_vbuc1 
    lax y2
    axs #$18
    stx _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 zeropage($4c) val)
sqrt: {
    .label _1 = $58
    .label _3 = $56
    .label found = $54
    .label return = $5a
    .label val = $4c
    .label return_2 = $4e
    // [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 
    lda val
    sta bsearch16u.key
    lda val+1
    sta bsearch16u.key+1
    // [89] call bsearch16u 
    // [96] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
  bsearch16u_from_sqrt:
    jsr bsearch16u
    // [90] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2 
    lda bsearch16u.return
    sta bsearch16u.return_3
    lda bsearch16u.return+1
    sta bsearch16u.return_3+1
    jmp b1
    // sqrt::@1
  b1:
    // [91] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2 
    lda bsearch16u.return_3
    sta found
    lda bsearch16u.return_3+1
    sta found+1
    // [92] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (const word*) SQUARES#1 -- vwuz1=pwuz2_minus_pwuc1 
    lda found
    sec
    sbc #<SQUARES
    sta _3
    lda found+1
    sbc #>SQUARES
    sta _3+1
    // [93] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz2_ror_1 
    lda _3+1
    lsr
    sta _1+1
    lda _3
    ror
    sta _1
    // [94] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 
    lda _1
    sta return
    jmp breturn
    // sqrt::@return
  breturn:
    // [95] 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 zeropage($50) key, word* zeropage($17) items, byte zeropage($19) num)
bsearch16u: {
    .label _2 = $17
    .label _6 = $5b
    .label _16 = $5c
    .label pivot = $5d
    .label result = $5f
    .label return = $17
    .label num = $19
    .label items = $17
    .label key = $50
    .label return_3 = $52
    // [97] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
  b3_from_bsearch16u:
    // [97] phi (word*) bsearch16u::items#2 = (const word*) SQUARES#1 [phi:bsearch16u->bsearch16u::@3#0] -- pwuz1=pwuc1 
    lda #<SQUARES
    sta items
    lda #>SQUARES
    sta items+1
    // [97] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 
    lda #NUM_SQUARES
    sta num
    jmp b3
    // bsearch16u::@3
  b3:
    // [98] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 
    lda num
    bne b4
    jmp b5
    // bsearch16u::@5
  b5:
    // [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
    ldy #1
    lda (items),y
    cmp key+1
    bne !+
    dey
    lda (items),y
    cmp key
    beq b2_from_b5
  !:
    bcc b2_from_b5
    jmp b1
    // bsearch16u::@1
  b1:
    // [100] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
    lda _2
    sec
    sbc #<1*SIZEOF_WORD
    sta _2
    lda _2+1
    sbc #>1*SIZEOF_WORD
    sta _2+1
    // [101] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
  b2_from_b1:
  b2_from_b5:
    // [101] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
    jmp b2
    // bsearch16u::@2
  b2:
    // [102] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
  breturn_from_b2:
  breturn_from_b8:
    // [102] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
    jmp breturn
    // bsearch16u::@return
  breturn:
    // [103] return 
    rts
    // bsearch16u::@4
  b4:
    // [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 
    lda num
    lsr
    sta _6
    // [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda _6
    asl
    sta _16
    // [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 
    lda _16
    clc
    adc items
    sta pivot
    lda #0
    adc items+1
    sta pivot+1
    // [107] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 
    sec
    lda key
    ldy #0
    sbc (pivot),y
    sta result
    lda key+1
    iny
    sbc (pivot),y
    sta result+1
    // [108] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
    lda result+1
    bne b6
    lda result
    bne b6
    jmp b8
    // bsearch16u::@8
  b8:
    // [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
    lda pivot
    sta return
    lda pivot+1
    sta return+1
    jmp breturn_from_b8
    // bsearch16u::@6
  b6:
    // [110] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
    lda result+1
    bmi b7_from_b6
    bne !+
    lda result
    beq b7_from_b6
  !:
    jmp b9
    // bsearch16u::@9
  b9:
    // [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
    lda #1*SIZEOF_WORD
    clc
    adc pivot
    sta items
    lda #0
    adc pivot+1
    sta items+1
    // [112] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 
    dec num
    // [113] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
  b7_from_b6:
  b7_from_b9:
    // [113] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
    // [113] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
    jmp b7
    // bsearch16u::@7
  b7:
    // [114] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 
    lsr num
    // [97] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
  b3_from_b7:
    // [97] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
    // [97] 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 zeropage($1a) val)
sqr: {
    .label _0 = $61
    .label return = $62
    .label val = $1a
    .label return_2 = $41
    .label return_3 = $46
    // [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda val
    asl
    sta _0
    // [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuc1_derefidx_vbuz2 
    ldy _0
    lda SQUARES,y
    sta return
    lda SQUARES+1,y
    sta return+1
    jmp breturn
    // sqr::@return
  breturn:
    // [118] return 
    rts
}
  // init_squares
// Initialize squares table
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
init_squares: {
    .label _3 = $64
    .label _4 = $65
    .label squares = $1d
    .label sqr = $1b
    .label i = $1f
    // [120] call malloc 
    // [130] phi from init_squares to malloc [phi:init_squares->malloc]
  malloc_from_init_squares:
    jsr malloc
    // [121] phi from init_squares to init_squares::@1 [phi:init_squares->init_squares::@1]
  b1_from_init_squares:
    // [121] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares->init_squares::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta i
    // [121] phi (word*) init_squares::squares#2 = (const word*) SQUARES#1 [phi:init_squares->init_squares::@1#1] -- pwuz1=pwuc1 
    lda #<SQUARES
    sta squares
    lda #>SQUARES
    sta squares+1
    // [121] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vbuc1 
    lda #<0
    sta sqr
    lda #>0
    sta sqr+1
    jmp b1
    // [121] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
  b1_from_b1:
    // [121] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy 
    // [121] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy 
    // [121] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy 
    jmp b1
    // init_squares::@1
  b1:
    // [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 
    ldy #0
    lda sqr
    sta (squares),y
    iny
    lda sqr+1
    sta (squares),y
    // [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
    lda #SIZEOF_WORD
    clc
    adc squares
    sta squares
    bcc !+
    inc squares+1
  !:
    // [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda i
    asl
    sta _3
    // [125] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 
    ldy _3
    iny
    sty _4
    // [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 
    lda _4
    clc
    adc sqr
    sta sqr
    bcc !+
    inc sqr+1
  !:
    // [127] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 
    inc i
    // [128] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_SQUARES-1+1
    cmp i
    bne b1_from_b1
    jmp breturn
    // init_squares::@return
  breturn:
    // [129] return 
    rts
}
  // 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: {
    .const size = NUM_SQUARES*SIZEOF_WORD
    .label mem = HEAP_TOP-size
    .label return = mem
    jmp breturn
    // malloc::@return
  breturn:
    // [131] return 
    rts
}
  // clock_start
// Reset & start the processor clock time. The value can be read using clock().
// This uses CIA #2 Timer A+B on the C64
clock_start: {
    // [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 
    // Setup CIA#2 timer A to count (down) CPU cycles
    lda #CIA_TIMER_CONTROL_CONTINUOUS
    sta CIA2_TIMER_A_CONTROL
    // [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 
    lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
    sta CIA2_TIMER_B_CONTROL
    // [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 
    lda #<$ffffffff
    sta CIA2_TIMER_AB
    lda #>$ffffffff
    sta CIA2_TIMER_AB+1
    lda #<$ffffffff>>$10
    sta CIA2_TIMER_AB+2
    lda #>$ffffffff>>$10
    sta CIA2_TIMER_AB+3
    // [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 
    lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
    sta CIA2_TIMER_B_CONTROL
    // [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 
    lda #CIA_TIMER_CONTROL_START
    sta CIA2_TIMER_A_CONTROL
    jmp breturn
    // clock_start::@return
  breturn:
    // [137] return 
    rts
}
  // init_font_hex
// Make charset from proto chars
// init_font_hex(byte* zeropage($23) charset)
init_font_hex: {
    .label _0 = $66
    .label _1 = $67
    .label _2 = $68
    .label idx = $29
    .label i = $28
    .label idx_3 = $69
    .label proto_lo = $25
    .label charset = $23
    .label c1 = $27
    .label proto_hi = $20
    .label c = $22
    // [139] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1]
  b1_from_init_font_hex:
    // [139] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta c
    // [139] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 
    lda #<FONT_HEX_PROTO
    sta proto_hi
    lda #>FONT_HEX_PROTO
    sta proto_hi+1
    // [139] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 
    lda #<CHARSET
    sta charset
    lda #>CHARSET
    sta charset+1
    jmp b1
    // [139] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1]
  b1_from_b5:
    // [139] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy 
    // [139] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy 
    // [139] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy 
    jmp b1
    // init_font_hex::@1
  b1:
    // [140] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2]
  b2_from_b1:
    // [140] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta c1
    // [140] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 
    lda #<FONT_HEX_PROTO
    sta proto_lo
    lda #>FONT_HEX_PROTO
    sta proto_lo+1
    // [140] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy 
    jmp b2
    // [140] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2]
  b2_from_b4:
    // [140] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy 
    // [140] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy 
    // [140] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy 
    jmp b2
    // init_font_hex::@2
  b2:
    // [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 
    lda #0
    ldy #0
    sta (charset),y
    // [142] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3]
  b3_from_b2:
    // [142] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 
    lda #1
    sta idx
    // [142] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuz1=vbuc1 
    lda #0
    sta i
    jmp b3
    // [142] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3]
  b3_from_b3:
    // [142] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy 
    // [142] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy 
    jmp b3
    // init_font_hex::@3
  b3:
    // [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuz3_rol_4 
    ldy i
    lda (proto_hi),y
    asl
    asl
    asl
    asl
    sta _0
    // [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuz1=pbuz2_derefidx_vbuz3_rol_1 
    ldy i
    lda (proto_lo),y
    asl
    sta _1
    // [145] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuz1=vbuz2_bor_vbuz3 
    lda _0
    ora _1
    sta _2
    // [146] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda _2
    ldy idx
    sta (charset),y
    // [147] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 
    inc idx
    // [148] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuz1=_inc_vbuz1 
    inc i
    // [149] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuz1_neq_vbuc1_then_la1 
    lda #5
    cmp i
    bne b3_from_b3
    jmp b4
    // init_font_hex::@4
  b4:
    // [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 
    lda #0
    ldy idx
    sta (charset),y
    // [151] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuz1=_inc_vbuz2 
    ldy idx
    iny
    sty idx_3
    // [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 
    lda #0
    ldy idx_3
    sta (charset),y
    // [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 
    lda #5
    clc
    adc proto_lo
    sta proto_lo
    bcc !+
    inc proto_lo+1
  !:
    // [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
    lda #8
    clc
    adc charset
    sta charset
    bcc !+
    inc charset+1
  !:
    // [155] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 
    inc c1
    // [156] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 
    lda #$10
    cmp c1
    bne b2_from_b4
    jmp b5
    // init_font_hex::@5
  b5:
    // [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 
    lda #5
    clc
    adc proto_hi
    sta proto_hi
    bcc !+
    inc proto_hi+1
  !:
    // [158] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 
    inc c
    // [159] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$10
    cmp c
    bne b1_from_b5
    jmp breturn
    // init_font_hex::@return
  breturn:
    // [160] return 
    rts
}
  // File Data
  // Bit patterns for symbols 0-f (3x5 pixels) used in font hex
  FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4
  print_hextab: .text "0123456789abcdef"

REGISTER UPLIFT POTENTIAL REGISTERS
Statement [7] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [13] (dword) clock::return#2 ← (dword) clock::return#0 [ clock::return#2 ] ( main:2 [ clock::return#2 ] ) always clobbers reg byte a 
Statement [14] (dword~) main::$4 ← (dword) clock::return#2 [ main::$4 ] ( main:2 [ main::$4 ] ) always clobbers reg byte a 
Statement [15] (dword) main::cyclecount#0 ← (dword~) main::$4 - (const dword) CLOCKS_PER_INIT#0 [ main::cyclecount#0 ] ( main:2 [ main::cyclecount#0 ] ) always clobbers reg byte a 
Statement [16] (dword) print_dword_at::dw#0 ← (dword) main::cyclecount#0 [ print_dword_at::dw#0 ] ( main:2 [ print_dword_at::dw#0 ] ) always clobbers reg byte a 
Statement [19] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [21] (word) print_word_at::w#0 ← > (dword) print_dword_at::dw#0 [ print_dword_at::dw#0 print_word_at::w#0 ] ( main:2::print_dword_at:17 [ print_dword_at::dw#0 print_word_at::w#0 ] ) always clobbers reg byte a 
Statement [23] (word) print_word_at::w#1 ← < (dword) print_dword_at::dw#0 [ print_word_at::w#1 ] ( main:2::print_dword_at:17 [ print_word_at::w#1 ] ) always clobbers reg byte a 
Statement [27] (byte) print_byte_at::b#0 ← > (word) print_word_at::w#2 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 ] ( main:2::print_dword_at:17::print_word_at:22 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 ] main:2::print_dword_at:17::print_word_at:24 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 ] ) always clobbers reg byte a 
Statement [28] (byte*) print_byte_at::at#0 ← (byte*) print_word_at::at#2 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 print_byte_at::at#0 ] ( main:2::print_dword_at:17::print_word_at:22 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 print_byte_at::at#0 ] main:2::print_dword_at:17::print_word_at:24 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 print_byte_at::at#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ]
Statement [30] (byte) print_byte_at::b#1 ← < (word) print_word_at::w#2 [ print_word_at::at#2 print_byte_at::b#1 ] ( main:2::print_dword_at:17::print_word_at:22 [ print_dword_at::dw#0 print_word_at::at#2 print_byte_at::b#1 ] main:2::print_dword_at:17::print_word_at:24 [ print_word_at::at#2 print_byte_at::b#1 ] ) always clobbers reg byte a 
Statement [31] (byte*) print_byte_at::at#1 ← (byte*) print_word_at::at#2 + (byte) 2 [ print_byte_at::b#1 print_byte_at::at#1 ] ( main:2::print_dword_at:17::print_word_at:22 [ print_dword_at::dw#0 print_byte_at::b#1 print_byte_at::at#1 ] main:2::print_dword_at:17::print_word_at:24 [ print_byte_at::b#1 print_byte_at::at#1 ] ) always clobbers reg byte a 
Statement [35] (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#2 >> (byte) 4 [ print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] ) always clobbers reg byte a 
Statement [37] (byte*) print_char_at::at#0 ← (byte*) print_byte_at::at#2 [ print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
Statement [39] (byte~) print_byte_at::$2 ← (byte) print_byte_at::b#2 & (byte) $f [ print_byte_at::at#2 print_byte_at::$2 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::at#2 print_byte_at::$2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::at#2 print_byte_at::$2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::at#2 print_byte_at::$2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::at#2 print_byte_at::$2 ] ) always clobbers reg byte a 
Statement [40] (byte*) print_char_at::at#1 ← (byte*) print_byte_at::at#2 + (byte) 1 [ print_byte_at::$2 print_char_at::at#1 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::$2 print_char_at::at#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:59 [ print_byte_at::$2 ]
Statement [45] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 [ ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29::print_char_at:38 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29::print_char_at:38 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32::print_char_at:38 [ print_dword_at::dw#0 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32::print_char_at:38 [ print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:29::print_char_at:42 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29::print_char_at:42 [ print_word_at::w#2 print_word_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32::print_char_at:42 [ print_dword_at::dw#0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32::print_char_at:42 [ ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ]
Statement [47] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) [ clock::return#0 ] ( main:2::clock:12 [ clock::return#0 ] ) always clobbers reg byte a 
Statement [52] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Statement [54] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 ] ) always clobbers reg byte a 
Statement [58] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 ] ) always clobbers reg byte a 
Statement [59] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 ] ) always clobbers reg byte a 
Statement [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Statement [63] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 ] ) always clobbers reg byte a 
Statement [67] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 ] ) always clobbers reg byte a 
Statement [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 ] ) always clobbers reg byte a 
Statement [69] (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#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 ] ) always clobbers reg byte a 
Statement [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 ] ) always clobbers reg byte a 
Statement [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 ] ) always clobbers reg byte a 
Statement [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ) always clobbers reg byte a 
Statement [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 ] ) always clobbers reg byte a 
Statement [90] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ bsearch16u::return#3 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::return#3 ] ) always clobbers reg byte a 
Statement [91] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ sqrt::found#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::found#0 ] ) always clobbers reg byte a 
Statement [92] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (const word*) SQUARES#1 [ sqrt::$3 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::$3 ] ) always clobbers reg byte a 
Statement [93] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ sqrt::$1 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::$1 ] ) always clobbers reg byte a 
Statement [94] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 ] ) always clobbers reg byte a 
Statement [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Statement [100] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::$2 ] ) always clobbers reg byte a 
Statement [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 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 ZP_BYTE:25 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
Statement [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
Statement [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [107] (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:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 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 ZP_BYTE:25 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
Statement [108] 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:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
Statement [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::return#6 ] ) always clobbers reg byte a 
Statement [110] 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:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
Statement [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ sqr::$0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::$0 ] main:2::init_dist_screen:10::sqr:66 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::$0 ] ) always clobbers reg byte a 
Statement [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 ] main:2::init_dist_screen:10::sqr:66 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 ] ) always clobbers reg byte a 
Statement [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ init_squares::i#2 init_squares::i#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:31 [ init_squares::i#2 init_squares::i#1 ]
Statement [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
Statement [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Statement [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:40 [ init_font_hex::i#2 init_font_hex::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Statement [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:102 [ init_font_hex::$0 ]
Statement [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a 
Statement [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a 
Statement [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a 
Statement [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a 
Statement [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:2::init_font_hex:5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a 
Statement [7] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [13] (dword) clock::return#2 ← (dword) clock::return#0 [ clock::return#2 ] ( main:2 [ clock::return#2 ] ) always clobbers reg byte a 
Statement [14] (dword~) main::$4 ← (dword) clock::return#2 [ main::$4 ] ( main:2 [ main::$4 ] ) always clobbers reg byte a 
Statement [15] (dword) main::cyclecount#0 ← (dword~) main::$4 - (const dword) CLOCKS_PER_INIT#0 [ main::cyclecount#0 ] ( main:2 [ main::cyclecount#0 ] ) always clobbers reg byte a 
Statement [16] (dword) print_dword_at::dw#0 ← (dword) main::cyclecount#0 [ print_dword_at::dw#0 ] ( main:2 [ print_dword_at::dw#0 ] ) always clobbers reg byte a 
Statement [19] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [21] (word) print_word_at::w#0 ← > (dword) print_dword_at::dw#0 [ print_dword_at::dw#0 print_word_at::w#0 ] ( main:2::print_dword_at:17 [ print_dword_at::dw#0 print_word_at::w#0 ] ) always clobbers reg byte a 
Statement [23] (word) print_word_at::w#1 ← < (dword) print_dword_at::dw#0 [ print_word_at::w#1 ] ( main:2::print_dword_at:17 [ print_word_at::w#1 ] ) always clobbers reg byte a 
Statement [27] (byte) print_byte_at::b#0 ← > (word) print_word_at::w#2 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 ] ( main:2::print_dword_at:17::print_word_at:22 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 ] main:2::print_dword_at:17::print_word_at:24 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 ] ) always clobbers reg byte a 
Statement [28] (byte*) print_byte_at::at#0 ← (byte*) print_word_at::at#2 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 print_byte_at::at#0 ] ( main:2::print_dword_at:17::print_word_at:22 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 print_byte_at::at#0 ] main:2::print_dword_at:17::print_word_at:24 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 print_byte_at::at#0 ] ) always clobbers reg byte a 
Statement [30] (byte) print_byte_at::b#1 ← < (word) print_word_at::w#2 [ print_word_at::at#2 print_byte_at::b#1 ] ( main:2::print_dword_at:17::print_word_at:22 [ print_dword_at::dw#0 print_word_at::at#2 print_byte_at::b#1 ] main:2::print_dword_at:17::print_word_at:24 [ print_word_at::at#2 print_byte_at::b#1 ] ) always clobbers reg byte a 
Statement [31] (byte*) print_byte_at::at#1 ← (byte*) print_word_at::at#2 + (byte) 2 [ print_byte_at::b#1 print_byte_at::at#1 ] ( main:2::print_dword_at:17::print_word_at:22 [ print_dword_at::dw#0 print_byte_at::b#1 print_byte_at::at#1 ] main:2::print_dword_at:17::print_word_at:24 [ print_byte_at::b#1 print_byte_at::at#1 ] ) always clobbers reg byte a 
Statement [35] (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#2 >> (byte) 4 [ print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] ) always clobbers reg byte a 
Statement [37] (byte*) print_char_at::at#0 ← (byte*) print_byte_at::at#2 [ print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] ) always clobbers reg byte a 
Statement [39] (byte~) print_byte_at::$2 ← (byte) print_byte_at::b#2 & (byte) $f [ print_byte_at::at#2 print_byte_at::$2 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::at#2 print_byte_at::$2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::at#2 print_byte_at::$2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::at#2 print_byte_at::$2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::at#2 print_byte_at::$2 ] ) always clobbers reg byte a 
Statement [40] (byte*) print_char_at::at#1 ← (byte*) print_byte_at::at#2 + (byte) 1 [ print_byte_at::$2 print_char_at::at#1 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::$2 print_char_at::at#1 ] ) always clobbers reg byte a 
Statement [45] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 [ ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29::print_char_at:38 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29::print_char_at:38 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32::print_char_at:38 [ print_dword_at::dw#0 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32::print_char_at:38 [ print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:29::print_char_at:42 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29::print_char_at:42 [ print_word_at::w#2 print_word_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32::print_char_at:42 [ print_dword_at::dw#0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32::print_char_at:42 [ ] ) always clobbers reg byte a reg byte y 
Statement [47] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) [ clock::return#0 ] ( main:2::clock:12 [ clock::return#0 ] ) always clobbers reg byte a 
Statement [52] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 ] ) always clobbers reg byte a 
Statement [54] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 ] ) always clobbers reg byte a 
Statement [58] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 ] ) always clobbers reg byte a 
Statement [59] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 ] ) always clobbers reg byte a 
Statement [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 ] ) always clobbers reg byte a 
Statement [63] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 ] ) always clobbers reg byte a 
Statement [67] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 ] ) always clobbers reg byte a 
Statement [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 ] ) always clobbers reg byte a 
Statement [69] (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#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 ] ) always clobbers reg byte a 
Statement [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 ] ) always clobbers reg byte a 
Statement [74] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:79 [ init_dist_screen::d#0 ]
Statement [75] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ) always clobbers reg byte y 
Statement [76] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ) always clobbers reg byte y 
Statement [77] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 ] ) always clobbers reg byte y 
Statement [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 ] ) always clobbers reg byte a 
Statement [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ) always clobbers reg byte a 
Statement [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 ] ) always clobbers reg byte a 
Statement [90] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ bsearch16u::return#3 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::return#3 ] ) always clobbers reg byte a 
Statement [91] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ sqrt::found#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::found#0 ] ) always clobbers reg byte a 
Statement [92] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (const word*) SQUARES#1 [ sqrt::$3 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::$3 ] ) always clobbers reg byte a 
Statement [93] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ sqrt::$1 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::$1 ] ) always clobbers reg byte a 
Statement [94] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 ] ) always clobbers reg byte a 
Statement [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
Statement [100] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::$2 ] ) always clobbers reg byte a 
Statement [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a 
Statement [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
Statement [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [107] (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:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
Statement [108] 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:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
Statement [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::return#6 ] ) always clobbers reg byte a 
Statement [110] 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:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
Statement [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ sqr::$0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::$0 ] main:2::init_dist_screen:10::sqr:66 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::$0 ] ) always clobbers reg byte a 
Statement [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 ] main:2::init_dist_screen:10::sqr:66 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 ] ) always clobbers reg byte a 
Statement [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y 
Statement [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
Statement [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y 
Statement [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a 
Statement [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a 
Statement [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a 
Statement [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a 
Statement [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a 
Statement [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a 
Statement [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:2::init_font_hex:5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a 
Statement [7] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [13] (dword) clock::return#2 ← (dword) clock::return#0 [ clock::return#2 ] ( main:2 [ clock::return#2 ] ) always clobbers reg byte a 
Statement [14] (dword~) main::$4 ← (dword) clock::return#2 [ main::$4 ] ( main:2 [ main::$4 ] ) always clobbers reg byte a 
Statement [15] (dword) main::cyclecount#0 ← (dword~) main::$4 - (const dword) CLOCKS_PER_INIT#0 [ main::cyclecount#0 ] ( main:2 [ main::cyclecount#0 ] ) always clobbers reg byte a 
Statement [16] (dword) print_dword_at::dw#0 ← (dword) main::cyclecount#0 [ print_dword_at::dw#0 ] ( main:2 [ print_dword_at::dw#0 ] ) always clobbers reg byte a 
Statement [19] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [21] (word) print_word_at::w#0 ← > (dword) print_dword_at::dw#0 [ print_dword_at::dw#0 print_word_at::w#0 ] ( main:2::print_dword_at:17 [ print_dword_at::dw#0 print_word_at::w#0 ] ) always clobbers reg byte a 
Statement [23] (word) print_word_at::w#1 ← < (dword) print_dword_at::dw#0 [ print_word_at::w#1 ] ( main:2::print_dword_at:17 [ print_word_at::w#1 ] ) always clobbers reg byte a 
Statement [27] (byte) print_byte_at::b#0 ← > (word) print_word_at::w#2 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 ] ( main:2::print_dword_at:17::print_word_at:22 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 ] main:2::print_dword_at:17::print_word_at:24 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 ] ) always clobbers reg byte a 
Statement [28] (byte*) print_byte_at::at#0 ← (byte*) print_word_at::at#2 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 print_byte_at::at#0 ] ( main:2::print_dword_at:17::print_word_at:22 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 print_byte_at::at#0 ] main:2::print_dword_at:17::print_word_at:24 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#0 print_byte_at::at#0 ] ) always clobbers reg byte a 
Statement [30] (byte) print_byte_at::b#1 ← < (word) print_word_at::w#2 [ print_word_at::at#2 print_byte_at::b#1 ] ( main:2::print_dword_at:17::print_word_at:22 [ print_dword_at::dw#0 print_word_at::at#2 print_byte_at::b#1 ] main:2::print_dword_at:17::print_word_at:24 [ print_word_at::at#2 print_byte_at::b#1 ] ) always clobbers reg byte a 
Statement [31] (byte*) print_byte_at::at#1 ← (byte*) print_word_at::at#2 + (byte) 2 [ print_byte_at::b#1 print_byte_at::at#1 ] ( main:2::print_dword_at:17::print_word_at:22 [ print_dword_at::dw#0 print_byte_at::b#1 print_byte_at::at#1 ] main:2::print_dword_at:17::print_word_at:24 [ print_byte_at::b#1 print_byte_at::at#1 ] ) always clobbers reg byte a 
Statement [35] (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#2 >> (byte) 4 [ print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::b#2 print_byte_at::at#2 print_byte_at::$0 ] ) always clobbers reg byte a 
Statement [37] (byte*) print_char_at::at#0 ← (byte*) print_byte_at::at#2 [ print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::b#2 print_byte_at::at#2 print_char_at::ch#0 print_char_at::at#0 ] ) always clobbers reg byte a 
Statement [39] (byte~) print_byte_at::$2 ← (byte) print_byte_at::b#2 & (byte) $f [ print_byte_at::at#2 print_byte_at::$2 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::at#2 print_byte_at::$2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::at#2 print_byte_at::$2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::at#2 print_byte_at::$2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::at#2 print_byte_at::$2 ] ) always clobbers reg byte a 
Statement [40] (byte*) print_char_at::at#1 ← (byte*) print_byte_at::at#2 + (byte) 1 [ print_byte_at::$2 print_char_at::at#1 ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32 [ print_dword_at::dw#0 print_byte_at::$2 print_char_at::at#1 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32 [ print_byte_at::$2 print_char_at::at#1 ] ) always clobbers reg byte a 
Statement [45] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 [ ] ( main:2::print_dword_at:17::print_word_at:22::print_byte_at:29::print_char_at:38 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29::print_char_at:38 [ print_word_at::w#2 print_word_at::at#2 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32::print_char_at:38 [ print_dword_at::dw#0 print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32::print_char_at:38 [ print_byte_at::b#2 print_byte_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:29::print_char_at:42 [ print_dword_at::dw#0 print_word_at::w#2 print_word_at::at#2 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:29::print_char_at:42 [ print_word_at::w#2 print_word_at::at#2 ] main:2::print_dword_at:17::print_word_at:22::print_byte_at:32::print_char_at:42 [ print_dword_at::dw#0 ] main:2::print_dword_at:17::print_word_at:24::print_byte_at:32::print_char_at:42 [ ] ) always clobbers reg byte a reg byte y 
Statement [47] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) [ clock::return#0 ] ( main:2::clock:12 [ clock::return#0 ] ) always clobbers reg byte a 
Statement [52] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 ] ) always clobbers reg byte a 
Statement [54] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 ] ) always clobbers reg byte a 
Statement [58] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 ] ) always clobbers reg byte a 
Statement [59] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 ] ) always clobbers reg byte a 
Statement [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 ] ) always clobbers reg byte a 
Statement [63] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 ] ) always clobbers reg byte a 
Statement [67] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 ] ) always clobbers reg byte a 
Statement [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 ] ) always clobbers reg byte a 
Statement [69] (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#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 ] ) always clobbers reg byte a 
Statement [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 ] ) always clobbers reg byte a 
Statement [74] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ) always clobbers reg byte y 
Statement [75] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ) always clobbers reg byte y 
Statement [76] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 ] ) always clobbers reg byte y 
Statement [77] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 ] ) always clobbers reg byte y 
Statement [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 ] ) always clobbers reg byte a 
Statement [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ( main:2::init_dist_screen:10 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 ] ) always clobbers reg byte a 
Statement [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 ] ) always clobbers reg byte a 
Statement [90] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ bsearch16u::return#3 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::return#3 ] ) always clobbers reg byte a 
Statement [91] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ sqrt::found#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::found#0 ] ) always clobbers reg byte a 
Statement [92] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (const word*) SQUARES#1 [ sqrt::$3 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::$3 ] ) always clobbers reg byte a 
Statement [93] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ sqrt::$1 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::$1 ] ) always clobbers reg byte a 
Statement [94] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 ] ( main:2::init_dist_screen:10::sqrt:71 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 ] ) always clobbers reg byte a 
Statement [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
Statement [100] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::$2 ] ) always clobbers reg byte a 
Statement [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a 
Statement [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
Statement [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [107] (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:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
Statement [108] 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:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
Statement [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::return#6 ] ) always clobbers reg byte a 
Statement [110] 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:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:10::sqrt:71::bsearch16u:89 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
Statement [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ sqr::$0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::$0 ] main:2::init_dist_screen:10::sqr:66 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::$0 ] ) always clobbers reg byte a 
Statement [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 ] ( main:2::init_dist_screen:10::sqr:57 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 ] main:2::init_dist_screen:10::sqr:66 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 ] ) always clobbers reg byte a 
Statement [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y 
Statement [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
Statement [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 [ ] ( main:2::clock_start:8 [ ] ) always clobbers reg byte a 
Statement [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a reg byte y 
Statement [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ) always clobbers reg byte a 
Statement [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ) always clobbers reg byte a 
Statement [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::idx#2 ] ) always clobbers reg byte a 
Statement [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ) always clobbers reg byte a 
Statement [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a 
Statement [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::c1#4 init_font_hex::proto_lo#1 ] ) always clobbers reg byte a 
Statement [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ( main:2::init_font_hex:5 [ init_font_hex::c#6 init_font_hex::charset#0 init_font_hex::proto_hi#1 ] ) always clobbers reg byte a 
Potential registers zp ZP_WORD:2 [ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] : zp ZP_WORD:2 , 
Potential registers zp ZP_WORD:4 [ print_word_at::at#2 ] : zp ZP_WORD:4 , 
Potential registers zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] : zp ZP_BYTE:6 , reg byte x , 
Potential registers zp ZP_WORD:9 [ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] : zp ZP_WORD:9 , 
Potential registers zp ZP_BYTE:11 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:12 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] : zp ZP_WORD:12 , 
Potential registers zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ] : zp ZP_BYTE:14 , reg byte x , 
Potential registers zp ZP_WORD:15 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] : zp ZP_WORD:15 , 
Potential registers zp ZP_WORD:17 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] : zp ZP_WORD:17 , 
Potential registers zp ZP_BYTE:19 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ] : zp ZP_BYTE:20 , reg byte x , 
Potential registers zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] : zp ZP_BYTE:21 , reg byte x , 
Potential registers zp ZP_BYTE:22 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] : zp ZP_WORD:23 , 
Potential registers zp ZP_BYTE:25 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] : zp ZP_BYTE:25 , reg byte x , 
Potential registers zp ZP_BYTE:26 [ sqr::val#2 sqr::val#0 sqr::val#1 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:27 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:27 , 
Potential registers zp ZP_WORD:29 [ init_squares::squares#2 init_squares::squares#1 ] : zp ZP_WORD:29 , 
Potential registers zp ZP_BYTE:31 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:31 , reg byte x , 
Potential registers zp ZP_WORD:32 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] : zp ZP_WORD:32 , 
Potential registers zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ] : zp ZP_BYTE:34 , reg byte x , 
Potential registers zp ZP_WORD:35 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] : zp ZP_WORD:35 , 
Potential registers zp ZP_WORD:37 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] : zp ZP_WORD:37 , 
Potential registers zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ] : zp ZP_BYTE:39 , reg byte x , 
Potential registers zp ZP_BYTE:40 [ init_font_hex::i#2 init_font_hex::i#1 ] : zp ZP_BYTE:40 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ] : zp ZP_BYTE:41 , reg byte x , reg byte y , 
Potential registers zp ZP_DWORD:42 [ clock::return#2 ] : zp ZP_DWORD:42 , 
Potential registers zp ZP_DWORD:46 [ main::$4 ] : zp ZP_DWORD:46 , 
Potential registers zp ZP_DWORD:50 [ main::cyclecount#0 ] : zp ZP_DWORD:50 , 
Potential registers zp ZP_DWORD:54 [ print_dword_at::dw#0 ] : zp ZP_DWORD:54 , 
Potential registers zp ZP_BYTE:58 [ print_byte_at::$0 ] : zp ZP_BYTE:58 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:59 [ print_byte_at::$2 ] : zp ZP_BYTE:59 , reg byte x , reg byte y , 
Potential registers zp ZP_DWORD:60 [ clock::return#0 ] : zp ZP_DWORD:60 , 
Potential registers zp ZP_BYTE:64 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:64 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:65 [ sqr::return#2 ] : zp ZP_WORD:65 , 
Potential registers zp ZP_WORD:67 [ init_dist_screen::yds#0 ] : zp ZP_WORD:67 , 
Potential registers zp ZP_BYTE:69 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:69 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:70 [ sqr::return#3 ] : zp ZP_WORD:70 , 
Potential registers zp ZP_WORD:72 [ init_dist_screen::xds#0 ] : zp ZP_WORD:72 , 
Potential registers zp ZP_WORD:74 [ init_dist_screen::ds#0 ] : zp ZP_WORD:74 , 
Potential registers zp ZP_WORD:76 [ sqrt::val#0 ] : zp ZP_WORD:76 , 
Potential registers zp ZP_BYTE:78 [ sqrt::return#2 ] : zp ZP_BYTE:78 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:79 [ init_dist_screen::d#0 ] : zp ZP_BYTE:79 , reg byte a , reg byte x , 
Potential registers zp ZP_WORD:80 [ bsearch16u::key#0 ] : zp ZP_WORD:80 , 
Potential registers zp ZP_WORD:82 [ bsearch16u::return#3 ] : zp ZP_WORD:82 , 
Potential registers zp ZP_WORD:84 [ sqrt::found#0 ] : zp ZP_WORD:84 , 
Potential registers zp ZP_WORD:86 [ sqrt::$3 ] : zp ZP_WORD:86 , 
Potential registers zp ZP_WORD:88 [ sqrt::$1 ] : zp ZP_WORD:88 , 
Potential registers zp ZP_BYTE:90 [ sqrt::return#0 ] : zp ZP_BYTE:90 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:91 [ bsearch16u::$6 ] : zp ZP_BYTE:91 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:92 [ bsearch16u::$16 ] : zp ZP_BYTE:92 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:93 [ bsearch16u::pivot#0 ] : zp ZP_WORD:93 , 
Potential registers zp ZP_WORD:95 [ bsearch16u::result#0 ] : zp ZP_WORD:95 , 
Potential registers zp ZP_BYTE:97 [ sqr::$0 ] : zp ZP_BYTE:97 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:98 [ sqr::return#0 ] : zp ZP_WORD:98 , 
Potential registers zp ZP_BYTE:100 [ init_squares::$3 ] : zp ZP_BYTE:100 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:101 [ init_squares::$4 ] : zp ZP_BYTE:101 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:102 [ init_font_hex::$0 ] : zp ZP_BYTE:102 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:103 [ init_font_hex::$1 ] : zp ZP_BYTE:103 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:104 [ init_font_hex::$2 ] : zp ZP_BYTE:104 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:105 [ init_font_hex::idx#3 ] : zp ZP_BYTE:105 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [bsearch16u] 7,563.11: zp ZP_BYTE:25 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,852.83: zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] 2,002: zp ZP_BYTE:91 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:92 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:95 [ bsearch16u::result#0 ] 501: zp ZP_WORD:93 [ bsearch16u::pivot#0 ] 4: zp ZP_WORD:82 [ bsearch16u::return#3 ] 0.29: zp ZP_WORD:80 [ bsearch16u::key#0 ] 
Uplift Scope [init_font_hex] 2,168.83: zp ZP_BYTE:40 [ init_font_hex::i#2 init_font_hex::i#1 ] 2,002: zp ZP_BYTE:103 [ init_font_hex::$1 ] 2,002: zp ZP_BYTE:104 [ init_font_hex::$2 ] 1,151.6: zp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 1,001: zp ZP_BYTE:102 [ init_font_hex::$0 ] 202: zp ZP_BYTE:105 [ init_font_hex::idx#3 ] 165.86: zp ZP_WORD:35 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 164.97: zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 143.04: zp ZP_WORD:37 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 64.17: zp ZP_WORD:32 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 17.66: zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ] 
Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:22 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] 202: zp ZP_BYTE:69 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:72 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:74 [ init_dist_screen::ds#0 ] 127.58: zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:79 [ init_dist_screen::d#0 ] 121.2: zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 77: zp ZP_BYTE:19 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:64 [ init_dist_screen::y2#0 ] 17.47: zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.12: zp ZP_WORD:17 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] 12.5: zp ZP_WORD:15 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] 4.87: zp ZP_WORD:67 [ init_dist_screen::yds#0 ] 
Uplift Scope [sqr] 338: zp ZP_BYTE:26 [ sqr::val#2 sqr::val#0 sqr::val#1 ] 202: zp ZP_WORD:70 [ sqr::return#3 ] 28.5: zp ZP_WORD:98 [ sqr::return#0 ] 22: zp ZP_WORD:65 [ sqr::return#2 ] 4: zp ZP_BYTE:97 [ sqr::$0 ] 
Uplift Scope [sqrt] 202: zp ZP_BYTE:78 [ sqrt::return#2 ] 103: zp ZP_WORD:76 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:90 [ sqrt::return#0 ] 4: zp ZP_WORD:84 [ sqrt::found#0 ] 4: zp ZP_WORD:86 [ sqrt::$3 ] 2: zp ZP_WORD:88 [ sqrt::$1 ] 
Uplift Scope [init_squares] 22: zp ZP_BYTE:31 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:100 [ init_squares::$3 ] 22: zp ZP_BYTE:101 [ init_squares::$4 ] 20.17: zp ZP_WORD:29 [ init_squares::squares#2 init_squares::squares#1 ] 13.93: zp ZP_WORD:27 [ init_squares::sqr#2 init_squares::sqr#1 ] 
Uplift Scope [print_char_at] 12: zp ZP_BYTE:11 [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] 12: zp ZP_WORD:12 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] 
Uplift Scope [print_byte_at] 9.33: zp ZP_WORD:9 [ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] 5.6: zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] 4: zp ZP_BYTE:58 [ print_byte_at::$0 ] 2: zp ZP_BYTE:59 [ print_byte_at::$2 ] 
Uplift Scope [print_word_at] 10: zp ZP_WORD:2 [ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] 0.8: zp ZP_WORD:4 [ print_word_at::at#2 ] 
Uplift Scope [main] 4: zp ZP_DWORD:46 [ main::$4 ] 4: zp ZP_DWORD:50 [ main::cyclecount#0 ] 
Uplift Scope [clock] 4: zp ZP_DWORD:42 [ clock::return#2 ] 1.33: zp ZP_DWORD:60 [ clock::return#0 ] 
Uplift Scope [print_dword_at] 2: zp ZP_DWORD:54 [ print_dword_at::dw#0 ] 
Uplift Scope [malloc] 
Uplift Scope [RADIX] 
Uplift Scope [clock_start] 
Uplift Scope [] 

Uplifting [bsearch16u] best 263251 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp ZP_WORD:95 [ bsearch16u::result#0 ] zp ZP_WORD:93 [ bsearch16u::pivot#0 ] zp ZP_WORD:82 [ bsearch16u::return#3 ] zp ZP_WORD:80 [ bsearch16u::key#0 ] 
Uplifting [init_font_hex] best 244251 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp ZP_BYTE:102 [ init_font_hex::$0 ] zp ZP_BYTE:105 [ init_font_hex::idx#3 ] zp ZP_WORD:35 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp ZP_WORD:37 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp ZP_WORD:32 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ] 
Limited combination testing to 100 combinations of 6912 possible.
Uplifting [init_dist_screen] best 241051 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] reg byte a [ init_dist_screen::x2#0 ] zp ZP_WORD:72 [ init_dist_screen::xds#0 ] zp ZP_WORD:74 [ init_dist_screen::ds#0 ] zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] zp ZP_BYTE:19 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:64 [ init_dist_screen::y2#0 ] zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:17 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] zp ZP_WORD:15 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] zp ZP_WORD:67 [ init_dist_screen::yds#0 ] 
Limited combination testing to 100 combinations of 6144 possible.
Uplifting [sqr] best 240714 combination reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ] zp ZP_WORD:70 [ sqr::return#3 ] zp ZP_WORD:98 [ sqr::return#0 ] zp ZP_WORD:65 [ sqr::return#2 ] reg byte a [ sqr::$0 ] 
Uplifting [sqrt] best 239811 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:76 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:84 [ sqrt::found#0 ] zp ZP_WORD:86 [ sqrt::$3 ] zp ZP_WORD:88 [ sqrt::$1 ] 
Uplifting [init_squares] best 239611 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 ZP_WORD:29 [ init_squares::squares#2 init_squares::squares#1 ] zp ZP_WORD:27 [ init_squares::sqr#2 init_squares::sqr#1 ] 
Uplifting [print_char_at] best 239604 combination reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ] zp ZP_WORD:12 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ] 
Uplifting [print_byte_at] best 239596 combination zp ZP_WORD:9 [ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] reg byte a [ print_byte_at::$0 ] reg byte y [ print_byte_at::$2 ] 
Uplifting [print_word_at] best 239596 combination zp ZP_WORD:2 [ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ] zp ZP_WORD:4 [ print_word_at::at#2 ] 
Uplifting [main] best 239596 combination zp ZP_DWORD:46 [ main::$4 ] zp ZP_DWORD:50 [ main::cyclecount#0 ] 
Uplifting [clock] best 239596 combination zp ZP_DWORD:42 [ clock::return#2 ] zp ZP_DWORD:60 [ clock::return#0 ] 
Uplifting [print_dword_at] best 239596 combination zp ZP_DWORD:54 [ print_dword_at::dw#0 ] 
Uplifting [malloc] best 239596 combination 
Uplifting [RADIX] best 239596 combination 
Uplifting [clock_start] best 239596 combination 
Uplifting [] best 239596 combination 
Attempting to uplift remaining variables inzp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Uplifting [init_font_hex] best 239596 combination zp ZP_BYTE:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:102 [ init_font_hex::$0 ]
Uplifting [init_font_hex] best 239596 combination zp ZP_BYTE:102 [ init_font_hex::$0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:105 [ init_font_hex::idx#3 ]
Uplifting [init_font_hex] best 238996 combination reg byte y [ init_font_hex::idx#3 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Uplifting [init_font_hex] best 238996 combination zp ZP_BYTE:39 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Uplifting [init_dist_screen] best 238996 combination zp ZP_BYTE:20 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Uplifting [init_dist_screen] best 238996 combination zp ZP_BYTE:21 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:19 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
Uplifting [init_dist_screen] best 238926 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:64 [ init_dist_screen::y2#0 ]
Uplifting [init_dist_screen] best 238826 combination reg byte a [ init_dist_screen::y2#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ]
Uplifting [init_font_hex] best 238826 combination zp ZP_BYTE:34 [ init_font_hex::c#6 init_font_hex::c#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Uplifting [init_dist_screen] best 238826 combination zp ZP_BYTE:14 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ]
Uplifting [print_byte_at] best 238826 combination zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ] 
Coalescing zero page register with common assignment [ zp ZP_WORD:4 [ print_word_at::at#2 ] ] with [ zp ZP_WORD:9 [ print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] ] with [ zp ZP_WORD:82 [ bsearch16u::return#3 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:42 [ clock::return#2 ] ] with [ zp ZP_DWORD:46 [ main::$4 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:42 [ clock::return#2 main::$4 ] ] with [ zp ZP_DWORD:60 [ clock::return#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:50 [ main::cyclecount#0 ] ] with [ zp ZP_DWORD:54 [ print_dword_at::dw#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:65 [ sqr::return#2 ] ] with [ zp ZP_WORD:67 [ init_dist_screen::yds#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:70 [ sqr::return#3 ] ] with [ zp ZP_WORD:72 [ init_dist_screen::xds#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:70 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:98 [ sqr::return#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:74 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:76 [ sqrt::val#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:84 [ sqrt::found#0 ] ] with [ zp ZP_WORD:86 [ sqrt::$3 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 ] ] with [ zp ZP_WORD:84 [ sqrt::found#0 sqrt::$3 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:42 [ clock::return#2 main::$4 clock::return#0 ] ] with [ zp ZP_DWORD:50 [ main::cyclecount#0 print_dword_at::dw#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:70 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:74 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp ZP_WORD:88 [ sqrt::$1 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:70 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:80 [ bsearch16u::key#0 ] ] - score: 1
Allocated (was zp ZP_WORD:12) zp ZP_WORD:9 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
Allocated (was zp ZP_BYTE:14) zp ZP_BYTE:11 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Allocated (was zp ZP_WORD:15) zp ZP_WORD:12 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ]
Allocated (was zp ZP_WORD:17) zp ZP_WORD:14 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ]
Allocated (was zp ZP_BYTE:20) zp ZP_BYTE:16 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Allocated (was zp ZP_BYTE:21) zp ZP_BYTE:17 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Allocated (was zp ZP_WORD:23) zp ZP_WORD:18 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ]
Allocated (was zp ZP_WORD:27) zp ZP_WORD:20 [ init_squares::sqr#2 init_squares::sqr#1 ]
Allocated (was zp ZP_WORD:29) zp ZP_WORD:22 [ init_squares::squares#2 init_squares::squares#1 ]
Allocated (was zp ZP_WORD:32) zp ZP_WORD:24 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
Allocated (was zp ZP_BYTE:34) zp ZP_BYTE:26 [ init_font_hex::c#6 init_font_hex::c#1 ]
Allocated (was zp ZP_WORD:35) zp ZP_WORD:27 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
Allocated (was zp ZP_WORD:37) zp ZP_WORD:29 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
Allocated (was zp ZP_BYTE:39) zp ZP_BYTE:31 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
Allocated (was zp ZP_BYTE:41) zp ZP_BYTE:32 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
Allocated (was zp ZP_DWORD:42) zp ZP_DWORD:33 [ clock::return#2 main::$4 clock::return#0 main::cyclecount#0 print_dword_at::dw#0 ]
Allocated (was zp ZP_WORD:65) zp ZP_WORD:37 [ sqr::return#2 init_dist_screen::yds#0 ]
Allocated (was zp ZP_WORD:70) zp ZP_WORD:39 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ]
Allocated (was zp ZP_WORD:93) zp ZP_WORD:41 [ bsearch16u::pivot#0 ]
Allocated (was zp ZP_WORD:95) zp ZP_WORD:43 [ bsearch16u::result#0 ]
Allocated (was zp ZP_BYTE:102) zp ZP_BYTE:45 [ init_font_hex::$0 ]

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
// Calculate the distance to the center of the screen - and show it using font-hex
  // Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .const SIZEOF_WORD = 2
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  .label D018 = $d018
  // CIA #2 Timer A+B Value (32-bit)
  .label CIA2_TIMER_AB = $dd04
  // CIA #2 Timer A Control Register
  .label CIA2_TIMER_A_CONTROL = $dd0e
  // CIA #2 Timer B Control Register
  .label CIA2_TIMER_B_CONTROL = $dd0f
  // Timer Control - Start/stop timer (0:stop, 1: start)
  .const CIA_TIMER_CONTROL_START = 1
  // Timer Control - Time CONTINUOUS/ONE-SHOT (0:CONTINUOUS, 1: ONE-SHOT)
  .const CIA_TIMER_CONTROL_CONTINUOUS = 0
  // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high)
  .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40
  // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine.
  // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code.
  .const CLOCKS_PER_INIT = $12
  .label CHARSET = $2000
  .label SCREEN = $2800
  .const NUM_SQUARES = $30
  .label SQUARES = malloc.return
  // @begin
bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
  jmp b1
  // @1
b1:
  // [2] call main 
  // [4] phi from @1 to main [phi:@1->main]
main_from_b1:
  jsr main
  // [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
  jmp bend
  // @end
bend:
  // main
main: {
    .label BASE_SCREEN = $400
    .label BASE_CHARSET = $1000
    .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
    .const toD0182_return = (>(BASE_SCREEN&$3fff)*4)|(>BASE_CHARSET)/4&$f
    .label _4 = $21
    .label cyclecount = $21
    // [5] call init_font_hex 
    // [138] phi from main to init_font_hex [phi:main->init_font_hex]
  init_font_hex_from_main:
    jsr init_font_hex
    // [6] phi from main to main::toD0181 [phi:main->main::toD0181]
  toD0181_from_main:
    jmp toD0181
    // main::toD0181
  toD0181:
    jmp b1
    // main::@1
  b1:
    // [7] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // [8] call clock_start 
    jsr clock_start
    // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
  b3_from_b1:
    jmp b3
    // main::@3
  b3:
    // [10] call init_dist_screen 
    // [49] phi from main::@3 to init_dist_screen [phi:main::@3->init_dist_screen]
  init_dist_screen_from_b3:
    jsr init_dist_screen
    // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  b4_from_b3:
    jmp b4
    // main::@4
  b4:
    // [12] call clock 
    jsr clock
    // [13] (dword) clock::return#2 ← (dword) clock::return#0
    jmp b5
    // main::@5
  b5:
    // [14] (dword~) main::$4 ← (dword) clock::return#2
    // [15] (dword) main::cyclecount#0 ← (dword~) main::$4 - (const dword) CLOCKS_PER_INIT#0 -- vduz1=vduz1_minus_vduc1 
    lda cyclecount
    sec
    sbc #<CLOCKS_PER_INIT
    sta cyclecount
    lda cyclecount+1
    sbc #>CLOCKS_PER_INIT
    sta cyclecount+1
    lda cyclecount+2
    sbc #<CLOCKS_PER_INIT>>$10
    sta cyclecount+2
    lda cyclecount+3
    sbc #>CLOCKS_PER_INIT>>$10
    sta cyclecount+3
    // [16] (dword) print_dword_at::dw#0 ← (dword) main::cyclecount#0
    // [17] call print_dword_at 
    jsr print_dword_at
    // [18] phi from main::@5 to main::toD0182 [phi:main::@5->main::toD0182]
  toD0182_from_b5:
    jmp toD0182
    // main::toD0182
  toD0182:
    jmp b2
    // main::@2
  b2:
    // [19] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0182_return
    sta D018
    jmp breturn
    // main::@return
  breturn:
    // [20] return 
    rts
}
  // print_dword_at
// Print a dword as HEX at a specific position
// print_dword_at(dword zeropage($21) dw)
print_dword_at: {
    .label dw = $21
    // [21] (word) print_word_at::w#0 ← > (dword) print_dword_at::dw#0 -- vwuz1=_hi_vduz2 
    lda dw+2
    sta print_word_at.w
    lda dw+3
    sta print_word_at.w+1
    // [22] call print_word_at 
    // [26] phi from print_dword_at to print_word_at [phi:print_dword_at->print_word_at]
  print_word_at_from_print_dword_at:
    // [26] phi (byte*) print_word_at::at#2 = (const byte*) main::BASE_SCREEN#0 [phi:print_dword_at->print_word_at#0] -- pbuz1=pbuc1 
    lda #<main.BASE_SCREEN
    sta print_word_at.at
    lda #>main.BASE_SCREEN
    sta print_word_at.at+1
    // [26] phi (word) print_word_at::w#2 = (word) print_word_at::w#0 [phi:print_dword_at->print_word_at#1] -- register_copy 
    jsr print_word_at
    jmp b1
    // print_dword_at::@1
  b1:
    // [23] (word) print_word_at::w#1 ← < (dword) print_dword_at::dw#0 -- vwuz1=_lo_vduz2 
    lda dw
    sta print_word_at.w
    lda dw+1
    sta print_word_at.w+1
    // [24] call print_word_at 
    // [26] phi from print_dword_at::@1 to print_word_at [phi:print_dword_at::@1->print_word_at]
  print_word_at_from_b1:
    // [26] phi (byte*) print_word_at::at#2 = (const byte*) main::BASE_SCREEN#0+(byte) 4 [phi:print_dword_at::@1->print_word_at#0] -- pbuz1=pbuc1 
    lda #<main.BASE_SCREEN+4
    sta print_word_at.at
    lda #>main.BASE_SCREEN+4
    sta print_word_at.at+1
    // [26] phi (word) print_word_at::w#2 = (word) print_word_at::w#1 [phi:print_dword_at::@1->print_word_at#1] -- register_copy 
    jsr print_word_at
    jmp breturn
    // print_dword_at::@return
  breturn:
    // [25] return 
    rts
}
  // print_word_at
// Print a word as HEX at a specific position
// print_word_at(word zeropage(2) w, byte* zeropage(4) at)
print_word_at: {
    .label w = 2
    .label at = 4
    // [27] (byte) print_byte_at::b#0 ← > (word) print_word_at::w#2 -- vbuz1=_hi_vwuz2 
    lda w+1
    sta print_byte_at.b
    // [28] (byte*) print_byte_at::at#0 ← (byte*) print_word_at::at#2
    // [29] call print_byte_at 
    // [34] phi from print_word_at to print_byte_at [phi:print_word_at->print_byte_at]
  print_byte_at_from_print_word_at:
    // [34] phi (byte*) print_byte_at::at#2 = (byte*) print_byte_at::at#0 [phi:print_word_at->print_byte_at#0] -- register_copy 
    // [34] phi (byte) print_byte_at::b#2 = (byte) print_byte_at::b#0 [phi:print_word_at->print_byte_at#1] -- register_copy 
    jsr print_byte_at
    jmp b1
    // print_word_at::@1
  b1:
    // [30] (byte) print_byte_at::b#1 ← < (word) print_word_at::w#2 -- vbuz1=_lo_vwuz2 
    lda w
    sta print_byte_at.b
    // [31] (byte*) print_byte_at::at#1 ← (byte*) print_word_at::at#2 + (byte) 2 -- pbuz1=pbuz1_plus_2 
    lda print_byte_at.at
    clc
    adc #2
    sta print_byte_at.at
    bcc !+
    inc print_byte_at.at+1
  !:
    // [32] call print_byte_at 
    // [34] phi from print_word_at::@1 to print_byte_at [phi:print_word_at::@1->print_byte_at]
  print_byte_at_from_b1:
    // [34] phi (byte*) print_byte_at::at#2 = (byte*) print_byte_at::at#1 [phi:print_word_at::@1->print_byte_at#0] -- register_copy 
    // [34] phi (byte) print_byte_at::b#2 = (byte) print_byte_at::b#1 [phi:print_word_at::@1->print_byte_at#1] -- register_copy 
    jsr print_byte_at
    jmp breturn
    // print_word_at::@return
  breturn:
    // [33] return 
    rts
}
  // print_byte_at
// Print a byte as HEX at a specific position
// print_byte_at(byte zeropage(6) b, byte* zeropage(4) at)
print_byte_at: {
    .label b = 6
    .label at = 4
    // [35] (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#2 >> (byte) 4 -- vbuaa=vbuz1_ror_4 
    lda b
    lsr
    lsr
    lsr
    lsr
    // [36] (byte) print_char_at::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$0) -- vbuxx=pbuc1_derefidx_vbuaa 
    tay
    ldx print_hextab,y
    // [37] (byte*) print_char_at::at#0 ← (byte*) print_byte_at::at#2 -- pbuz1=pbuz2 
    lda at
    sta print_char_at.at
    lda at+1
    sta print_char_at.at+1
    // [38] call print_char_at 
    // [44] phi from print_byte_at to print_char_at [phi:print_byte_at->print_char_at]
  print_char_at_from_print_byte_at:
    // [44] phi (byte*) print_char_at::at#2 = (byte*) print_char_at::at#0 [phi:print_byte_at->print_char_at#0] -- register_copy 
    // [44] phi (byte) print_char_at::ch#2 = (byte) print_char_at::ch#0 [phi:print_byte_at->print_char_at#1] -- register_copy 
    jsr print_char_at
    jmp b1
    // print_byte_at::@1
  b1:
    // [39] (byte~) print_byte_at::$2 ← (byte) print_byte_at::b#2 & (byte) $f -- vbuyy=vbuz1_band_vbuc1 
    lda #$f
    and b
    tay
    // [40] (byte*) print_char_at::at#1 ← (byte*) print_byte_at::at#2 + (byte) 1 -- pbuz1=pbuz2_plus_1 
    lda at
    clc
    adc #1
    sta print_char_at.at
    lda at+1
    adc #0
    sta print_char_at.at+1
    // [41] (byte) print_char_at::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$2) -- vbuxx=pbuc1_derefidx_vbuyy 
    ldx print_hextab,y
    // [42] call print_char_at 
    // [44] phi from print_byte_at::@1 to print_char_at [phi:print_byte_at::@1->print_char_at]
  print_char_at_from_b1:
    // [44] phi (byte*) print_char_at::at#2 = (byte*) print_char_at::at#1 [phi:print_byte_at::@1->print_char_at#0] -- register_copy 
    // [44] phi (byte) print_char_at::ch#2 = (byte) print_char_at::ch#1 [phi:print_byte_at::@1->print_char_at#1] -- register_copy 
    jsr print_char_at
    jmp breturn
    // print_byte_at::@return
  breturn:
    // [43] return 
    rts
}
  // print_char_at
// Print a single char
// print_char_at(byte register(X) ch, byte* zeropage(9) at)
print_char_at: {
    .label at = 9
    // [45] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 -- _deref_pbuz1=vbuxx 
    txa
    ldy #0
    sta (at),y
    jmp breturn
    // print_char_at::@return
  breturn:
    // [46] return 
    rts
}
  // clock
// Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program).
// This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start()
clock: {
    .label return = $21
    // [47] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) -- vduz1=vduc1_minus__deref_pduc2 
    lda #<$ffffffff
    sec
    sbc CIA2_TIMER_AB
    sta return
    lda #>$ffffffff
    sbc CIA2_TIMER_AB+1
    sta return+1
    lda #<$ffffffff>>$10
    sbc CIA2_TIMER_AB+2
    sta return+2
    lda #>$ffffffff>>$10
    sbc CIA2_TIMER_AB+3
    sta return+3
    jmp breturn
    // clock::@return
  breturn:
    // [48] return 
    rts
}
  // 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: {
    .label yds = $25
    .label xds = $27
    .label ds = $27
    .label x = $10
    .label xb = $11
    .label screen_topline = $c
    .label screen_bottomline = $e
    .label y = $b
    // [50] call init_squares 
    // [119] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
  init_squares_from_init_dist_screen:
    jsr init_squares
    // [51] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1]
  b1_from_init_dist_screen:
    // [51] phi (byte*) init_dist_screen::screen_bottomline#10 = (const byte*) SCREEN#0+(word)(number) $28*(number) $18 [phi:init_dist_screen->init_dist_screen::@1#0] -- pbuz1=pbuc1 
    lda #<SCREEN+$28*$18
    sta screen_bottomline
    lda #>SCREEN+$28*$18
    sta screen_bottomline+1
    // [51] phi (byte*) init_dist_screen::screen_topline#10 = (const byte*) SCREEN#0 [phi:init_dist_screen->init_dist_screen::@1#1] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta screen_topline
    lda #>SCREEN
    sta screen_topline+1
    // [51] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta y
    jmp b1
    // [51] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1]
  b1_from_b9:
    // [51] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy 
    // [51] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy 
    // [51] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy 
    jmp b1
    // init_dist_screen::@1
  b1:
    // [52] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda y
    asl
    // [53] 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:
    // [54] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$18+1
    // [55] 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:
    // [55] 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:
    // [56] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
    // [57] call sqr 
    // [115] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
  sqr_from_b4:
    // [115] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
    jsr sqr
    // [58] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
    lda sqr.return
    sta sqr.return_2
    lda sqr.return+1
    sta sqr.return_2+1
    jmp b10
    // init_dist_screen::@10
  b10:
    // [59] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
    // [60] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5]
  b5_from_b10:
    // [60] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 
    lda #$27
    sta xb
    // [60] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 
    lda #0
    sta x
    jmp b5
    // [60] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
  b5_from_b12:
    // [60] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- register_copy 
    // [60] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- register_copy 
    jmp b5
    // init_dist_screen::@5
  b5:
    // [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda x
    asl
    // [62] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuaa_ge_vbuc1_then_la1 
    cmp #$27
    bcs b6
    jmp b7
    // init_dist_screen::@7
  b7:
    // [63] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // [64] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8]
  b8_from_b6:
  b8_from_b7:
    // [64] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy 
    jmp b8
    // init_dist_screen::@8
  b8:
    // [65] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
    // [66] call sqr 
    // [115] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr]
  sqr_from_b8:
    // [115] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy 
    jsr sqr
    // [67] (word) sqr::return#3 ← (word) sqr::return#0
    jmp b11
    // init_dist_screen::@11
  b11:
    // [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
    // [69] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 
    lda ds
    clc
    adc yds
    sta ds
    lda ds+1
    adc yds+1
    sta ds+1
    // [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
    // [71] call sqrt 
    jsr sqrt
    // [72] (byte) sqrt::return#2 ← (byte) sqrt::return#0
    jmp b12
    // init_dist_screen::@12
  b12:
    // [73] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
    // [74] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy x
    sta (screen_topline),y
    // [75] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy x
    sta (screen_bottomline),y
    // [76] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy xb
    sta (screen_topline),y
    // [77] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy xb
    sta (screen_bottomline),y
    // [78] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc x
    // [79] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec xb
    // [80] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 
    lda x
    cmp #$13+1
    bcc b5_from_b12
    jmp b9
    // init_dist_screen::@9
  b9:
    // [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc screen_topline
    sta screen_topline
    bcc !+
    inc screen_topline+1
  !:
    // [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
    lda screen_bottomline
    sec
    sbc #<$28
    sta screen_bottomline
    lda screen_bottomline+1
    sbc #>$28
    sta screen_bottomline+1
    // [83] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
    inc y
    // [84] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$d
    cmp y
    bne b1_from_b9
    jmp breturn
    // init_dist_screen::@return
  breturn:
    // [85] return 
    rts
    // init_dist_screen::@6
  b6:
    // [86] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 
    sec
    sbc #$27
    jmp b8_from_b6
    // init_dist_screen::@2
  b2:
    // [87] (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 zeropage($27) val)
sqrt: {
    .label _1 = $12
    .label _3 = $12
    .label found = $12
    .label val = $27
    // [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0
    // [89] call bsearch16u 
    // [96] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
  bsearch16u_from_sqrt:
    jsr bsearch16u
    // [90] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
    jmp b1
    // sqrt::@1
  b1:
    // [91] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
    // [92] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (const word*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuc1 
    lda _3
    sec
    sbc #<SQUARES
    sta _3
    lda _3+1
    sbc #>SQUARES
    sta _3+1
    // [93] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr _1+1
    ror _1
    // [94] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 
    lda _1
    jmp breturn
    // sqrt::@return
  breturn:
    // [95] 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 zeropage($27) key, word* zeropage($12) items, byte register(X) num)
bsearch16u: {
    .label _2 = $12
    .label pivot = $29
    .label result = $2b
    .label return = $12
    .label items = $12
    .label key = $27
    // [97] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
  b3_from_bsearch16u:
    // [97] phi (word*) bsearch16u::items#2 = (const word*) SQUARES#1 [phi:bsearch16u->bsearch16u::@3#0] -- pwuz1=pwuc1 
    lda #<SQUARES
    sta items
    lda #>SQUARES
    sta items+1
    // [97] 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:
    // [98] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 
    cpx #0
    bne b4
    jmp b5
    // bsearch16u::@5
  b5:
    // [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
    ldy #1
    lda (items),y
    cmp key+1
    bne !+
    dey
    lda (items),y
    cmp key
    beq b2_from_b5
  !:
    bcc b2_from_b5
    jmp b1
    // bsearch16u::@1
  b1:
    // [100] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
    lda _2
    sec
    sbc #<1*SIZEOF_WORD
    sta _2
    lda _2+1
    sbc #>1*SIZEOF_WORD
    sta _2+1
    // [101] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
  b2_from_b1:
  b2_from_b5:
    // [101] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
    jmp b2
    // bsearch16u::@2
  b2:
    // [102] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
  breturn_from_b2:
  breturn_from_b8:
    // [102] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
    jmp breturn
    // bsearch16u::@return
  breturn:
    // [103] return 
    rts
    // bsearch16u::@4
  b4:
    // [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 
    txa
    lsr
    // [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa 
    clc
    adc items
    sta pivot
    lda #0
    adc items+1
    sta pivot+1
    // [107] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 
    sec
    lda key
    ldy #0
    sbc (pivot),y
    sta result
    lda key+1
    iny
    sbc (pivot),y
    sta result+1
    // [108] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
    lda result+1
    bne b6
    lda result
    bne b6
    jmp b8
    // bsearch16u::@8
  b8:
    // [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
    lda pivot
    sta return
    lda pivot+1
    sta return+1
    jmp breturn_from_b8
    // bsearch16u::@6
  b6:
    // [110] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
    lda result+1
    bmi b7_from_b6
    bne !+
    lda result
    beq b7_from_b6
  !:
    jmp b9
    // bsearch16u::@9
  b9:
    // [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
    lda #1*SIZEOF_WORD
    clc
    adc pivot
    sta items
    lda #0
    adc pivot+1
    sta items+1
    // [112] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx 
    dex
    // [113] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
  b7_from_b6:
  b7_from_b9:
    // [113] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
    // [113] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
    jmp b7
    // bsearch16u::@7
  b7:
    // [114] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 
    txa
    lsr
    tax
    // [97] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
  b3_from_b7:
    // [97] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
    // [97] 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 = $27
    .label return_2 = $25
    // [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuc1_derefidx_vbuaa 
    tay
    lda SQUARES,y
    sta return
    lda SQUARES+1,y
    sta return+1
    jmp breturn
    // sqr::@return
  breturn:
    // [118] return 
    rts
}
  // init_squares
// Initialize squares table
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
init_squares: {
    .label squares = $16
    .label sqr = $14
    // [120] call malloc 
    // [130] phi from init_squares to malloc [phi:init_squares->malloc]
  malloc_from_init_squares:
    jsr malloc
    // [121] phi from init_squares to init_squares::@1 [phi:init_squares->init_squares::@1]
  b1_from_init_squares:
    // [121] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares->init_squares::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [121] phi (word*) init_squares::squares#2 = (const word*) SQUARES#1 [phi:init_squares->init_squares::@1#1] -- pwuz1=pwuc1 
    lda #<SQUARES
    sta squares
    lda #>SQUARES
    sta squares+1
    // [121] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vbuc1 
    lda #<0
    sta sqr
    lda #>0
    sta sqr+1
    jmp b1
    // [121] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
  b1_from_b1:
    // [121] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy 
    // [121] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy 
    // [121] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy 
    jmp b1
    // init_squares::@1
  b1:
    // [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 
    ldy #0
    lda sqr
    sta (squares),y
    iny
    lda sqr+1
    sta (squares),y
    // [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
    lda #SIZEOF_WORD
    clc
    adc squares
    sta squares
    bcc !+
    inc squares+1
  !:
    // [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [125] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 
    clc
    adc #1
    // [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa 
    clc
    adc sqr
    sta sqr
    bcc !+
    inc sqr+1
  !:
    // [127] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [128] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #NUM_SQUARES-1+1
    bne b1_from_b1
    jmp breturn
    // init_squares::@return
  breturn:
    // [129] return 
    rts
}
  // 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: {
    .const size = NUM_SQUARES*SIZEOF_WORD
    .label mem = HEAP_TOP-size
    .label return = mem
    jmp breturn
    // malloc::@return
  breturn:
    // [131] return 
    rts
}
  // clock_start
// Reset & start the processor clock time. The value can be read using clock().
// This uses CIA #2 Timer A+B on the C64
clock_start: {
    // [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 
    // Setup CIA#2 timer A to count (down) CPU cycles
    lda #CIA_TIMER_CONTROL_CONTINUOUS
    sta CIA2_TIMER_A_CONTROL
    // [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 
    lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
    sta CIA2_TIMER_B_CONTROL
    // [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 
    lda #<$ffffffff
    sta CIA2_TIMER_AB
    lda #>$ffffffff
    sta CIA2_TIMER_AB+1
    lda #<$ffffffff>>$10
    sta CIA2_TIMER_AB+2
    lda #>$ffffffff>>$10
    sta CIA2_TIMER_AB+3
    // [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 
    lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
    sta CIA2_TIMER_B_CONTROL
    // [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 
    lda #CIA_TIMER_CONTROL_START
    sta CIA2_TIMER_A_CONTROL
    jmp breturn
    // clock_start::@return
  breturn:
    // [137] return 
    rts
}
  // init_font_hex
// Make charset from proto chars
// init_font_hex(byte* zeropage($1b) charset)
init_font_hex: {
    .label _0 = $2d
    .label idx = $20
    .label proto_lo = $1d
    .label charset = $1b
    .label c1 = $1f
    .label proto_hi = $18
    .label c = $1a
    // [139] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1]
  b1_from_init_font_hex:
    // [139] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta c
    // [139] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 
    lda #<FONT_HEX_PROTO
    sta proto_hi
    lda #>FONT_HEX_PROTO
    sta proto_hi+1
    // [139] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 
    lda #<CHARSET
    sta charset
    lda #>CHARSET
    sta charset+1
    jmp b1
    // [139] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1]
  b1_from_b5:
    // [139] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy 
    // [139] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy 
    // [139] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy 
    jmp b1
    // init_font_hex::@1
  b1:
    // [140] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2]
  b2_from_b1:
    // [140] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta c1
    // [140] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 
    lda #<FONT_HEX_PROTO
    sta proto_lo
    lda #>FONT_HEX_PROTO
    sta proto_lo+1
    // [140] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy 
    jmp b2
    // [140] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2]
  b2_from_b4:
    // [140] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy 
    // [140] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy 
    // [140] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy 
    jmp b2
    // init_font_hex::@2
  b2:
    // [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 
    lda #0
    ldy #0
    sta (charset),y
    // [142] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3]
  b3_from_b2:
    // [142] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 
    lda #1
    sta idx
    // [142] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 
    ldx #0
    jmp b3
    // [142] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3]
  b3_from_b3:
    // [142] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy 
    // [142] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy 
    jmp b3
    // init_font_hex::@3
  b3:
    // [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4 
    txa
    tay
    lda (proto_hi),y
    asl
    asl
    asl
    asl
    sta _0
    // [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1 
    txa
    tay
    lda (proto_lo),y
    asl
    // [145] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa 
    ora _0
    // [146] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy idx
    sta (charset),y
    // [147] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 
    inc idx
    // [148] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [149] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 
    cpx #5
    bne b3_from_b3
    jmp b4
    // init_font_hex::@4
  b4:
    // [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 
    lda #0
    ldy idx
    sta (charset),y
    // [151] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 
    ldy idx
    iny
    // [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 
    lda #0
    sta (charset),y
    // [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 
    lda #5
    clc
    adc proto_lo
    sta proto_lo
    bcc !+
    inc proto_lo+1
  !:
    // [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
    lda #8
    clc
    adc charset
    sta charset
    bcc !+
    inc charset+1
  !:
    // [155] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 
    inc c1
    // [156] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 
    lda #$10
    cmp c1
    bne b2_from_b4
    jmp b5
    // init_font_hex::@5
  b5:
    // [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 
    lda #5
    clc
    adc proto_hi
    sta proto_hi
    bcc !+
    inc proto_hi+1
  !:
    // [158] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 
    inc c
    // [159] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$10
    cmp c
    bne b1_from_b5
    jmp breturn
    // init_font_hex::@return
  breturn:
    // [160] return 
    rts
}
  // File Data
  // Bit patterns for symbols 0-f (3x5 pixels) used in font hex
  FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4
  print_hextab: .text "0123456789abcdef"

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b1
Removing instruction jmp bend
Removing instruction jmp toD0181
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp toD0182
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b10
Removing instruction jmp b5
Removing instruction jmp b7
Removing instruction jmp b8
Removing instruction jmp b11
Removing instruction jmp b12
Removing instruction jmp b9
Removing instruction jmp breturn
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 b1
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldy x
Removing instruction ldy xb
Removing instruction lda result+1
Replacing instruction lda #<0 with TXA
Removing instruction lda #>0
Replacing instruction ldy #0 with TAY
Removing instruction ldy idx
Removing instruction lda #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b5_from_b12 with b5
Replacing label b1_from_b9 with b1
Replacing label b8_from_b6 with b8
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
Replacing label b1_from_b1 with b1
Replacing label b3_from_b3 with b3
Replacing label b2_from_b4 with b2
Replacing label b1_from_b5 with b1
Removing instruction b1_from_bbegin:
Removing instruction b1:
Removing instruction main_from_b1:
Removing instruction bend_from_b1:
Removing instruction toD0181_from_main:
Removing instruction toD0181:
Removing instruction b3_from_b1:
Removing instruction init_dist_screen_from_b3:
Removing instruction b4_from_b3:
Removing instruction toD0182_from_b5:
Removing instruction toD0182:
Removing instruction b1_from_b9:
Removing instruction b4_from_b2:
Removing instruction b4_from_b3:
Removing instruction sqr_from_b4:
Removing instruction b5_from_b10:
Removing instruction b5_from_b12:
Removing instruction b8_from_b6:
Removing instruction b8_from_b7:
Removing instruction sqr_from_b8:
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:
Removing instruction b1_from_b1:
Removing instruction b1_from_b5:
Removing instruction b2_from_b1:
Removing instruction b2_from_b4:
Removing instruction b3_from_b3:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction init_font_hex_from_main:
Removing instruction b1:
Removing instruction b3:
Removing instruction b4:
Removing instruction b5:
Removing instruction b2:
Removing instruction breturn:
Removing instruction print_word_at_from_print_dword_at:
Removing instruction b1:
Removing instruction print_word_at_from_b1:
Removing instruction breturn:
Removing instruction print_byte_at_from_print_word_at:
Removing instruction b1:
Removing instruction print_byte_at_from_b1:
Removing instruction breturn:
Removing instruction print_char_at_from_print_byte_at:
Removing instruction b1:
Removing instruction print_char_at_from_b1:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction init_squares_from_init_dist_screen:
Removing instruction b1_from_init_dist_screen:
Removing instruction b3:
Removing instruction b10:
Removing instruction b7:
Removing instruction b11:
Removing instruction b12:
Removing instruction b9:
Removing instruction breturn:
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 b1_from_init_squares:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction b1_from_init_font_hex:
Removing instruction b3_from_b2:
Removing instruction b4:
Removing instruction b5:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Replacing jump to rts with rts in jmp b2
Succesful ASM optimization Pass5DoubleJumpElimination
Removing instruction jmp b1
Removing instruction jmp b5
Removing instruction jmp b1
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination

FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(byte*) CHARSET
(const byte*) CHARSET#0 CHARSET = (byte*) 8192
(dword*) CIA2_TIMER_AB
(const dword*) CIA2_TIMER_AB#0 CIA2_TIMER_AB = (dword*) 56580
(byte*) CIA2_TIMER_A_CONTROL
(const byte*) CIA2_TIMER_A_CONTROL#0 CIA2_TIMER_A_CONTROL = (byte*) 56590
(byte*) CIA2_TIMER_B_CONTROL
(const byte*) CIA2_TIMER_B_CONTROL#0 CIA2_TIMER_B_CONTROL = (byte*) 56591
(byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES
(byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40
(byte) CIA_TIMER_CONTROL_CONTINUOUS
(const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 CIA_TIMER_CONTROL_CONTINUOUS = (byte) 0
(byte) CIA_TIMER_CONTROL_START
(const byte) CIA_TIMER_CONTROL_START#0 CIA_TIMER_CONTROL_START = (byte) 1
(byte) CIA_TIMER_CONTROL_STOP
(dword) CLOCKS_PER_INIT
(const dword) CLOCKS_PER_INIT#0 CLOCKS_PER_INIT = (byte) $12
(byte*) D018
(const byte*) D018#0 D018 = (byte*) 53272
(byte[]) FONT_HEX_PROTO
(const byte[]) FONT_HEX_PROTO#0 FONT_HEX_PROTO = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 }
(byte*) HEAP_TOP
(const byte*) HEAP_TOP#0 HEAP_TOP = (byte*) 40960
(byte) NUM_SQUARES
(const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30
(const byte) RADIX::BINARY BINARY = (number) 2
(const byte) RADIX::DECIMAL DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL OCTAL = (number) 8
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = (byte*) 10240
(const byte) SIZEOF_WORD SIZEOF_WORD = (byte) 2
(word*) SQUARES
(const word*) SQUARES#1 SQUARES = (word*)(const void*) malloc::return#0
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
(byte~) bsearch16u::$16 reg byte a 2002.0
(word*~) bsearch16u::$2 $2 zp ZP_WORD:18 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 ZP_WORD:18 1001.0
(word*) bsearch16u::items#2 items zp ZP_WORD:18 334.33333333333337
(word*) bsearch16u::items#8 items zp ZP_WORD:18 1501.5
(word) bsearch16u::key
(word) bsearch16u::key#0 key zp ZP_WORD:39 0.2857142857142857
(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 ZP_WORD:41 501.0
(signed word) bsearch16u::result
(signed word) bsearch16u::result#0 result zp ZP_WORD:43 1501.5
(word*) bsearch16u::return
(word*) bsearch16u::return#1 return zp ZP_WORD:18 2.0
(word*) bsearch16u::return#2 return zp ZP_WORD:18 6.0
(word*) bsearch16u::return#3 return zp ZP_WORD:18 4.0
(word*~) bsearch16u::return#6 return zp ZP_WORD:18 4.0
(dword()) clock()
(label) clock::@return
(dword) clock::return
(dword) clock::return#0 return zp ZP_DWORD:33 1.3333333333333333
(dword) clock::return#2 return zp ZP_DWORD:33 4.0
(void()) clock_start()
(label) clock_start::@return
(byte*) heap_head
(void()) init_dist_screen((byte*) init_dist_screen::screen)
(byte~) init_dist_screen::$13 reg byte a 202.0
(byte~) init_dist_screen::$15 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::@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 ZP_WORD:39 202.0
(byte*) init_dist_screen::screen
(byte*) init_dist_screen::screen_bottomline
(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:14 7.333333333333333
(byte*) init_dist_screen::screen_bottomline#10 screen_bottomline zp ZP_WORD:14 6.787878787878788
(byte*) init_dist_screen::screen_topline
(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:12 5.5
(byte*) init_dist_screen::screen_topline#10 screen_topline zp ZP_WORD:12 7.0
(byte) init_dist_screen::x
(byte) init_dist_screen::x#1 x zp ZP_BYTE:16 101.0
(byte) init_dist_screen::x#2 x zp ZP_BYTE:16 26.578947368421055
(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 ZP_BYTE:17 101.0
(byte) init_dist_screen::xb#2 xb zp ZP_BYTE:17 20.2
(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 ZP_WORD:39 202.0
(byte) init_dist_screen::y
(byte) init_dist_screen::y#1 y zp ZP_BYTE:11 16.5
(byte) init_dist_screen::y#10 y zp ZP_BYTE:11 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 ZP_WORD:37 4.869565217391305
(void()) init_font_hex((byte*) init_font_hex::charset)
(byte~) init_font_hex::$0 $0 zp ZP_BYTE:45 1001.0
(byte~) init_font_hex::$1 reg byte a 2002.0
(byte~) init_font_hex::$2 reg byte a 2002.0
(label) init_font_hex::@1
(label) init_font_hex::@2
(label) init_font_hex::@3
(label) init_font_hex::@4
(label) init_font_hex::@5
(label) init_font_hex::@return
(byte) init_font_hex::c
(byte) init_font_hex::c#1 c zp ZP_BYTE:26 16.5
(byte) init_font_hex::c#6 c zp ZP_BYTE:26 1.1578947368421053
(byte) init_font_hex::c1
(byte) init_font_hex::c1#1 c1 zp ZP_BYTE:31 151.5
(byte) init_font_hex::c1#4 c1 zp ZP_BYTE:31 13.466666666666667
(byte*) init_font_hex::charset
(byte*) init_font_hex::charset#0 charset zp ZP_WORD:27 35.5
(byte*) init_font_hex::charset#2 charset zp ZP_WORD:27 108.35714285714285
(byte*) init_font_hex::charset#5 charset zp ZP_WORD:27 22.0
(byte) init_font_hex::i
(byte) init_font_hex::i#1 reg byte x 1501.5
(byte) init_font_hex::i#2 reg byte x 667.3333333333334
(byte) init_font_hex::idx
(byte) init_font_hex::idx#2 idx zp ZP_BYTE:32 551.0
(byte) init_font_hex::idx#3 reg byte y 202.0
(byte) init_font_hex::idx#5 idx zp ZP_BYTE:32 600.5999999999999
(byte*) init_font_hex::proto_hi
(byte*) init_font_hex::proto_hi#1 proto_hi zp ZP_WORD:24 7.333333333333333
(byte*) init_font_hex::proto_hi#6 proto_hi zp ZP_WORD:24 56.83333333333334
(byte*) init_font_hex::proto_lo
(byte*) init_font_hex::proto_lo#1 proto_lo zp ZP_WORD:29 50.5
(byte*) init_font_hex::proto_lo#4 proto_lo zp ZP_WORD:29 92.53846153846155
(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::@return
(byte) init_squares::i
(byte) init_squares::i#1 reg byte x 16.5
(byte) init_squares::i#2 reg byte x 5.5
(word) init_squares::sqr
(word) init_squares::sqr#1 sqr zp ZP_WORD:20 7.333333333333333
(word) init_squares::sqr#2 sqr zp ZP_WORD:20 6.6000000000000005
(word*) init_squares::squares
(word*) init_squares::squares#1 squares zp ZP_WORD:22 3.6666666666666665
(word*) init_squares::squares#2 squares zp ZP_WORD:22 16.5
(void()) main()
(dword~) main::$4 $4 zp ZP_DWORD:33 4.0
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@return
(byte*) main::BASE_CHARSET
(const byte*) main::BASE_CHARSET#0 BASE_CHARSET = (byte*) 4096
(byte*) main::BASE_SCREEN
(const byte*) main::BASE_SCREEN#0 BASE_SCREEN = (byte*) 1024
(dword) main::cyclecount
(dword) main::cyclecount#0 cyclecount zp ZP_DWORD:33 4.0
(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
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f
(byte*) main::toD0181_screen
(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
(byte*) main::toD0182_gfx
(byte) main::toD0182_return
(const byte) main::toD0182_return#0 toD0182_return = >(word)(const byte*) main::BASE_SCREEN#0&(word) $3fff*(byte) 4|>(word)(const byte*) main::BASE_CHARSET#0/(byte) 4&(byte) $f
(byte*) main::toD0182_screen
(void*()) malloc((word) malloc::size)
(label) malloc::@return
(byte*) malloc::mem
(const byte*) malloc::mem#0 mem = (const byte*) HEAP_TOP#0-(const word) malloc::size#0
(void*) malloc::return
(const void*) malloc::return#0 return = (void*)(const byte*) malloc::mem#0
(word) malloc::size
(const word) malloc::size#0 size = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD
(void()) print_byte_at((byte) print_byte_at::b , (byte*) print_byte_at::at)
(byte~) print_byte_at::$0 reg byte a 4.0
(byte~) print_byte_at::$2 reg byte y 2.0
(label) print_byte_at::@1
(label) print_byte_at::@return
(byte*) print_byte_at::at
(byte*) print_byte_at::at#0 at zp ZP_WORD:4 4.0
(byte*) print_byte_at::at#1 at zp ZP_WORD:4 4.0
(byte*) print_byte_at::at#2 at zp ZP_WORD:4 1.3333333333333333
(byte) print_byte_at::b
(byte) print_byte_at::b#0 b zp ZP_BYTE:6 2.0
(byte) print_byte_at::b#1 b zp ZP_BYTE:6 2.0
(byte) print_byte_at::b#2 b zp ZP_BYTE:6 1.6
(void()) print_char_at((byte) print_char_at::ch , (byte*) print_char_at::at)
(label) print_char_at::@return
(byte*) print_char_at::at
(byte*) print_char_at::at#0 at zp ZP_WORD:9 4.0
(byte*) print_char_at::at#1 at zp ZP_WORD:9 2.0
(byte*) print_char_at::at#2 at zp ZP_WORD:9 6.0
(byte) print_char_at::ch
(byte) print_char_at::ch#0 reg byte x 2.0
(byte) print_char_at::ch#1 reg byte x 4.0
(byte) print_char_at::ch#2 reg byte x 6.0
(void()) print_dword_at((dword) print_dword_at::dw , (byte*) print_dword_at::at)
(label) print_dword_at::@1
(label) print_dword_at::@return
(byte*) print_dword_at::at
(dword) print_dword_at::dw
(dword) print_dword_at::dw#0 dw zp ZP_DWORD:33 2.0
(byte[]) print_hextab
(const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef"
(void()) print_word_at((word) print_word_at::w , (byte*) print_word_at::at)
(label) print_word_at::@1
(label) print_word_at::@return
(byte*) print_word_at::at
(byte*) print_word_at::at#2 at zp ZP_WORD:4 0.8
(word) print_word_at::w
(word) print_word_at::w#0 w zp ZP_WORD:2 4.0
(word) print_word_at::w#1 w zp ZP_WORD:2 4.0
(word) print_word_at::w#2 w zp ZP_WORD:2 2.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 ZP_WORD:39 28.5
(word) sqr::return#2 return#2 zp ZP_WORD:37 22.0
(word) sqr::return#3 return zp ZP_WORD:39 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 $1 zp ZP_WORD:18 2.0
(word~) sqrt::$3 $3 zp ZP_WORD:18 4.0
(label) sqrt::@1
(label) sqrt::@return
(word*) sqrt::found
(word*) sqrt::found#0 found zp ZP_WORD:18 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 ZP_WORD:39 103.0

zp ZP_WORD:2 [ print_word_at::w#2 print_word_at::w#0 print_word_at::w#1 ]
zp ZP_WORD:4 [ print_word_at::at#2 print_byte_at::at#2 print_byte_at::at#0 print_byte_at::at#1 ]
zp ZP_BYTE:6 [ print_byte_at::b#2 print_byte_at::b#0 print_byte_at::b#1 ]
reg byte x [ print_char_at::ch#2 print_char_at::ch#0 print_char_at::ch#1 ]
zp ZP_WORD:9 [ print_char_at::at#2 print_char_at::at#0 print_char_at::at#1 ]
zp ZP_BYTE:11 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
zp ZP_WORD:12 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ]
zp ZP_WORD:14 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ]
reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
zp ZP_BYTE:16 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
zp ZP_BYTE:17 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
reg byte a [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ]
zp ZP_WORD:18 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ]
reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ]
zp ZP_WORD:20 [ init_squares::sqr#2 init_squares::sqr#1 ]
zp ZP_WORD:22 [ init_squares::squares#2 init_squares::squares#1 ]
reg byte x [ init_squares::i#2 init_squares::i#1 ]
zp ZP_WORD:24 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
zp ZP_BYTE:26 [ init_font_hex::c#6 init_font_hex::c#1 ]
zp ZP_WORD:27 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
zp ZP_WORD:29 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
zp ZP_BYTE:31 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ]
zp ZP_BYTE:32 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
zp ZP_DWORD:33 [ clock::return#2 main::$4 clock::return#0 main::cyclecount#0 print_dword_at::dw#0 ]
reg byte a [ print_byte_at::$0 ]
reg byte y [ print_byte_at::$2 ]
reg byte a [ init_dist_screen::y2#0 ]
zp ZP_WORD:37 [ sqr::return#2 init_dist_screen::yds#0 ]
reg byte a [ init_dist_screen::x2#0 ]
zp ZP_WORD:39 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#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 ZP_WORD:41 [ bsearch16u::pivot#0 ]
zp ZP_WORD:43 [ bsearch16u::result#0 ]
reg byte a [ sqr::$0 ]
reg byte a [ init_squares::$3 ]
reg byte a [ init_squares::$4 ]
zp ZP_BYTE:45 [ init_font_hex::$0 ]
reg byte a [ init_font_hex::$1 ]
reg byte a [ init_font_hex::$2 ]
reg byte y [ init_font_hex::idx#3 ]


FINAL ASSEMBLER
Score: 203337

  // File Comments
// Calculate the distance to the center of the screen - and show it using font-hex
  // Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
  // Global Constants & labels
  .const SIZEOF_WORD = 2
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  .label D018 = $d018
  // CIA #2 Timer A+B Value (32-bit)
  .label CIA2_TIMER_AB = $dd04
  // CIA #2 Timer A Control Register
  .label CIA2_TIMER_A_CONTROL = $dd0e
  // CIA #2 Timer B Control Register
  .label CIA2_TIMER_B_CONTROL = $dd0f
  // Timer Control - Start/stop timer (0:stop, 1: start)
  .const CIA_TIMER_CONTROL_START = 1
  // Timer Control - Time CONTINUOUS/ONE-SHOT (0:CONTINUOUS, 1: ONE-SHOT)
  .const CIA_TIMER_CONTROL_CONTINUOUS = 0
  // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high)
  .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40
  // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine.
  // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code.
  .const CLOCKS_PER_INIT = $12
  .label CHARSET = $2000
  .label SCREEN = $2800
  .const NUM_SQUARES = $30
  .label SQUARES = malloc.return
  // @begin
  // [1] phi from @begin to @1 [phi:@begin->@1]
  // @1
  // [2] call main 
  // [4] phi from @1 to main [phi:@1->main]
  // [3] phi from @1 to @end [phi:@1->@end]
  // @end
  // main
main: {
    .label BASE_SCREEN = $400
    .label BASE_CHARSET = $1000
    .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
    .const toD0182_return = (>(BASE_SCREEN&$3fff)*4)|(>BASE_CHARSET)/4&$f
    .label _4 = $21
    .label cyclecount = $21
    // init_font_hex(CHARSET)
    // [5] call init_font_hex 
    // [138] phi from main to init_font_hex [phi:main->init_font_hex]
    jsr init_font_hex
    // [6] phi from main to main::toD0181 [phi:main->main::toD0181]
    // main::toD0181
    // main::@1
    // *D018 = toD018(SCREEN, CHARSET)
    // [7] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // clock_start()
    // [8] call clock_start 
    jsr clock_start
    // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
    // main::@3
    // init_dist_screen(SCREEN)
    // [10] call init_dist_screen 
    // [49] phi from main::@3 to init_dist_screen [phi:main::@3->init_dist_screen]
    jsr init_dist_screen
    // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
    // main::@4
    // clock()
    // [12] call clock 
    jsr clock
    // [13] (dword) clock::return#2 ← (dword) clock::return#0
    // main::@5
    // [14] (dword~) main::$4 ← (dword) clock::return#2
    // cyclecount = clock()-CLOCKS_PER_INIT
    // [15] (dword) main::cyclecount#0 ← (dword~) main::$4 - (const dword) CLOCKS_PER_INIT#0 -- vduz1=vduz1_minus_vduc1 
    lda cyclecount
    sec
    sbc #<CLOCKS_PER_INIT
    sta cyclecount
    lda cyclecount+1
    sbc #>CLOCKS_PER_INIT
    sta cyclecount+1
    lda cyclecount+2
    sbc #<CLOCKS_PER_INIT>>$10
    sta cyclecount+2
    lda cyclecount+3
    sbc #>CLOCKS_PER_INIT>>$10
    sta cyclecount+3
    // print_dword_at(cyclecount, BASE_SCREEN)
    // [16] (dword) print_dword_at::dw#0 ← (dword) main::cyclecount#0
    // [17] call print_dword_at 
    jsr print_dword_at
    // [18] phi from main::@5 to main::toD0182 [phi:main::@5->main::toD0182]
    // main::toD0182
    // main::@2
    // *D018 = toD018(BASE_SCREEN, BASE_CHARSET)
    // [19] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0182_return
    sta D018
    // main::@return
    // }
    // [20] return 
    rts
}
  // print_dword_at
// Print a dword as HEX at a specific position
// print_dword_at(dword zeropage($21) dw)
print_dword_at: {
    .label dw = $21
    // print_word_at(>dw, at)
    // [21] (word) print_word_at::w#0 ← > (dword) print_dword_at::dw#0 -- vwuz1=_hi_vduz2 
    lda dw+2
    sta print_word_at.w
    lda dw+3
    sta print_word_at.w+1
    // [22] call print_word_at 
    // [26] phi from print_dword_at to print_word_at [phi:print_dword_at->print_word_at]
    // [26] phi (byte*) print_word_at::at#2 = (const byte*) main::BASE_SCREEN#0 [phi:print_dword_at->print_word_at#0] -- pbuz1=pbuc1 
    lda #<main.BASE_SCREEN
    sta print_word_at.at
    lda #>main.BASE_SCREEN
    sta print_word_at.at+1
    // [26] phi (word) print_word_at::w#2 = (word) print_word_at::w#0 [phi:print_dword_at->print_word_at#1] -- register_copy 
    jsr print_word_at
    // print_dword_at::@1
    // print_word_at(<dw, at+4)
    // [23] (word) print_word_at::w#1 ← < (dword) print_dword_at::dw#0 -- vwuz1=_lo_vduz2 
    lda dw
    sta print_word_at.w
    lda dw+1
    sta print_word_at.w+1
    // [24] call print_word_at 
    // [26] phi from print_dword_at::@1 to print_word_at [phi:print_dword_at::@1->print_word_at]
    // [26] phi (byte*) print_word_at::at#2 = (const byte*) main::BASE_SCREEN#0+(byte) 4 [phi:print_dword_at::@1->print_word_at#0] -- pbuz1=pbuc1 
    lda #<main.BASE_SCREEN+4
    sta print_word_at.at
    lda #>main.BASE_SCREEN+4
    sta print_word_at.at+1
    // [26] phi (word) print_word_at::w#2 = (word) print_word_at::w#1 [phi:print_dword_at::@1->print_word_at#1] -- register_copy 
    jsr print_word_at
    // print_dword_at::@return
    // }
    // [25] return 
    rts
}
  // print_word_at
// Print a word as HEX at a specific position
// print_word_at(word zeropage(2) w, byte* zeropage(4) at)
print_word_at: {
    .label w = 2
    .label at = 4
    // print_byte_at(>w, at)
    // [27] (byte) print_byte_at::b#0 ← > (word) print_word_at::w#2 -- vbuz1=_hi_vwuz2 
    lda w+1
    sta print_byte_at.b
    // [28] (byte*) print_byte_at::at#0 ← (byte*) print_word_at::at#2
    // [29] call print_byte_at 
    // [34] phi from print_word_at to print_byte_at [phi:print_word_at->print_byte_at]
    // [34] phi (byte*) print_byte_at::at#2 = (byte*) print_byte_at::at#0 [phi:print_word_at->print_byte_at#0] -- register_copy 
    // [34] phi (byte) print_byte_at::b#2 = (byte) print_byte_at::b#0 [phi:print_word_at->print_byte_at#1] -- register_copy 
    jsr print_byte_at
    // print_word_at::@1
    // print_byte_at(<w, at+2)
    // [30] (byte) print_byte_at::b#1 ← < (word) print_word_at::w#2 -- vbuz1=_lo_vwuz2 
    lda w
    sta print_byte_at.b
    // [31] (byte*) print_byte_at::at#1 ← (byte*) print_word_at::at#2 + (byte) 2 -- pbuz1=pbuz1_plus_2 
    lda print_byte_at.at
    clc
    adc #2
    sta print_byte_at.at
    bcc !+
    inc print_byte_at.at+1
  !:
    // [32] call print_byte_at 
    // [34] phi from print_word_at::@1 to print_byte_at [phi:print_word_at::@1->print_byte_at]
    // [34] phi (byte*) print_byte_at::at#2 = (byte*) print_byte_at::at#1 [phi:print_word_at::@1->print_byte_at#0] -- register_copy 
    // [34] phi (byte) print_byte_at::b#2 = (byte) print_byte_at::b#1 [phi:print_word_at::@1->print_byte_at#1] -- register_copy 
    jsr print_byte_at
    // print_word_at::@return
    // }
    // [33] return 
    rts
}
  // print_byte_at
// Print a byte as HEX at a specific position
// print_byte_at(byte zeropage(6) b, byte* zeropage(4) at)
print_byte_at: {
    .label b = 6
    .label at = 4
    // b>>4
    // [35] (byte~) print_byte_at::$0 ← (byte) print_byte_at::b#2 >> (byte) 4 -- vbuaa=vbuz1_ror_4 
    lda b
    lsr
    lsr
    lsr
    lsr
    // print_char_at(print_hextab[b>>4], at)
    // [36] (byte) print_char_at::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$0) -- vbuxx=pbuc1_derefidx_vbuaa 
    tay
    ldx print_hextab,y
    // [37] (byte*) print_char_at::at#0 ← (byte*) print_byte_at::at#2 -- pbuz1=pbuz2 
    lda at
    sta print_char_at.at
    lda at+1
    sta print_char_at.at+1
    // [38] call print_char_at 
    // [44] phi from print_byte_at to print_char_at [phi:print_byte_at->print_char_at]
    // [44] phi (byte*) print_char_at::at#2 = (byte*) print_char_at::at#0 [phi:print_byte_at->print_char_at#0] -- register_copy 
    // [44] phi (byte) print_char_at::ch#2 = (byte) print_char_at::ch#0 [phi:print_byte_at->print_char_at#1] -- register_copy 
    jsr print_char_at
    // print_byte_at::@1
    // b&$f
    // [39] (byte~) print_byte_at::$2 ← (byte) print_byte_at::b#2 & (byte) $f -- vbuyy=vbuz1_band_vbuc1 
    lda #$f
    and b
    tay
    // print_char_at(print_hextab[b&$f], at+1)
    // [40] (byte*) print_char_at::at#1 ← (byte*) print_byte_at::at#2 + (byte) 1 -- pbuz1=pbuz2_plus_1 
    lda at
    clc
    adc #1
    sta print_char_at.at
    lda at+1
    adc #0
    sta print_char_at.at+1
    // [41] (byte) print_char_at::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte_at::$2) -- vbuxx=pbuc1_derefidx_vbuyy 
    ldx print_hextab,y
    // [42] call print_char_at 
    // [44] phi from print_byte_at::@1 to print_char_at [phi:print_byte_at::@1->print_char_at]
    // [44] phi (byte*) print_char_at::at#2 = (byte*) print_char_at::at#1 [phi:print_byte_at::@1->print_char_at#0] -- register_copy 
    // [44] phi (byte) print_char_at::ch#2 = (byte) print_char_at::ch#1 [phi:print_byte_at::@1->print_char_at#1] -- register_copy 
    jsr print_char_at
    // print_byte_at::@return
    // }
    // [43] return 
    rts
}
  // print_char_at
// Print a single char
// print_char_at(byte register(X) ch, byte* zeropage(9) at)
print_char_at: {
    .label at = 9
    // *(at) = ch
    // [45] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 -- _deref_pbuz1=vbuxx 
    txa
    ldy #0
    sta (at),y
    // print_char_at::@return
    // }
    // [46] return 
    rts
}
  // clock
// Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program).
// This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start()
clock: {
    .label return = $21
    // 0xffffffff - *CIA2_TIMER_AB
    // [47] (dword) clock::return#0 ← (dword) $ffffffff - *((const dword*) CIA2_TIMER_AB#0) -- vduz1=vduc1_minus__deref_pduc2 
    lda #<$ffffffff
    sec
    sbc CIA2_TIMER_AB
    sta return
    lda #>$ffffffff
    sbc CIA2_TIMER_AB+1
    sta return+1
    lda #<$ffffffff>>$10
    sbc CIA2_TIMER_AB+2
    sta return+2
    lda #>$ffffffff>>$10
    sbc CIA2_TIMER_AB+3
    sta return+3
    // clock::@return
    // }
    // [48] return 
    rts
}
  // 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: {
    .label yds = $25
    .label xds = $27
    .label ds = $27
    .label x = $10
    .label xb = $11
    .label screen_topline = $c
    .label screen_bottomline = $e
    .label y = $b
    // init_squares()
    // [50] call init_squares 
    // [119] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
    jsr init_squares
    // [51] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1]
    // [51] phi (byte*) init_dist_screen::screen_bottomline#10 = (const byte*) SCREEN#0+(word)(number) $28*(number) $18 [phi:init_dist_screen->init_dist_screen::@1#0] -- pbuz1=pbuc1 
    lda #<SCREEN+$28*$18
    sta screen_bottomline
    lda #>SCREEN+$28*$18
    sta screen_bottomline+1
    // [51] phi (byte*) init_dist_screen::screen_topline#10 = (const byte*) SCREEN#0 [phi:init_dist_screen->init_dist_screen::@1#1] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta screen_topline
    lda #>SCREEN
    sta screen_topline+1
    // [51] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta y
    // [51] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1]
    // [51] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy 
    // [51] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy 
    // [51] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy 
    // init_dist_screen::@1
  b1:
    // y2 = y*2
    // [52] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda y
    asl
    // (y2>=24)?(y2-24):(24-y2)
    // [53] 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
    // [54] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$18+1
    // [55] 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]
    // [55] 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)
    // [56] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
    // [57] call sqr 
    // [115] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
    // [115] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
    jsr sqr
    // sqr(yd)
    // [58] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
    lda sqr.return
    sta sqr.return_2
    lda sqr.return+1
    sta sqr.return_2+1
    // init_dist_screen::@10
    // yds = sqr(yd)
    // [59] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
    // [60] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5]
    // [60] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 
    lda #$27
    sta xb
    // [60] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 
    lda #0
    sta x
    // [60] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
    // [60] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- register_copy 
    // [60] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- register_copy 
    // init_dist_screen::@5
  b5:
    // x2 = x*2
    // [61] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda x
    asl
    // (x2>=39)?(x2-39):(39-x2)
    // [62] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuaa_ge_vbuc1_then_la1 
    cmp #$27
    bcs b6
    // init_dist_screen::@7
    // [63] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // [64] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8]
    // [64] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy 
    // init_dist_screen::@8
  b8:
    // sqr(xd)
    // [65] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
    // [66] call sqr 
    // [115] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr]
    // [115] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy 
    jsr sqr
    // sqr(xd)
    // [67] (word) sqr::return#3 ← (word) sqr::return#0
    // init_dist_screen::@11
    // xds = sqr(xd)
    // [68] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
    // ds = xds+yds
    // [69] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 
    lda ds
    clc
    adc yds
    sta ds
    lda ds+1
    adc yds+1
    sta ds+1
    // sqrt(ds)
    // [70] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
    // [71] call sqrt 
    jsr sqrt
    // [72] (byte) sqrt::return#2 ← (byte) sqrt::return#0
    // init_dist_screen::@12
    // d = sqrt(ds)
    // [73] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
    // screen_topline[x] = d
    // [74] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy x
    sta (screen_topline),y
    // screen_bottomline[x] = d
    // [75] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_bottomline),y
    // screen_topline[xb] = d
    // [76] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy xb
    sta (screen_topline),y
    // screen_bottomline[xb] = d
    // [77] *((byte*) init_dist_screen::screen_bottomline#10 + (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--)
    // [78] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc x
    // [79] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec xb
    // [80] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 
    lda x
    cmp #$13+1
    bcc b5
    // init_dist_screen::@9
    // screen_topline += 40
    // [81] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc screen_topline
    sta screen_topline
    bcc !+
    inc screen_topline+1
  !:
    // screen_bottomline -= 40
    // [82] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 
    lda screen_bottomline
    sec
    sbc #<$28
    sta screen_bottomline
    lda screen_bottomline+1
    sbc #>$28
    sta screen_bottomline+1
    // for(byte y: 0..12)
    // [83] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
    inc y
    // [84] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$d
    cmp y
    bne b1
    // init_dist_screen::@return
    // }
    // [85] return 
    rts
    // init_dist_screen::@6
  b6:
    // (x2>=39)?(x2-39):(39-x2)
    // [86] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 
    sec
    sbc #$27
    jmp b8
    // init_dist_screen::@2
  b2:
    // (y2>=24)?(y2-24):(24-y2)
    // [87] (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 zeropage($27) val)
sqrt: {
    .label _1 = $12
    .label _3 = $12
    .label found = $12
    .label val = $27
    // bsearch16u(val, SQUARES, NUM_SQUARES)
    // [88] (word) bsearch16u::key#0 ← (word) sqrt::val#0
    // [89] call bsearch16u 
    // [96] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
    jsr bsearch16u
    // bsearch16u(val, SQUARES, NUM_SQUARES)
    // [90] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
    // sqrt::@1
    // found = bsearch16u(val, SQUARES, NUM_SQUARES)
    // [91] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
    // found-SQUARES
    // [92] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (const word*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuc1 
    lda _3
    sec
    sbc #<SQUARES
    sta _3
    lda _3+1
    sbc #>SQUARES
    sta _3+1
    // [93] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr _1+1
    ror _1
    // (byte)(found-SQUARES)
    // [94] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 
    lda _1
    // sqrt::@return
    // }
    // [95] 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 zeropage($27) key, word* zeropage($12) items, byte register(X) num)
bsearch16u: {
    .label _2 = $12
    .label pivot = $29
    .label result = $2b
    .label return = $12
    .label items = $12
    .label key = $27
    // [97] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
    // [97] phi (word*) bsearch16u::items#2 = (const word*) SQUARES#1 [phi:bsearch16u->bsearch16u::@3#0] -- pwuz1=pwuc1 
    lda #<SQUARES
    sta items
    lda #>SQUARES
    sta items+1
    // [97] 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)
    // [98] 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
    // [99] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
    ldy #1
    lda (items),y
    cmp key+1
    bne !+
    dey
    lda (items),y
    cmp key
    beq b2
  !:
    bcc b2
    // bsearch16u::@1
    // [100] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
    lda _2
    sec
    sbc #<1*SIZEOF_WORD
    sta _2
    lda _2+1
    sbc #>1*SIZEOF_WORD
    sta _2+1
    // [101] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
    // [101] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
    // bsearch16u::@2
  b2:
    // [102] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
    // [102] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
    // bsearch16u::@return
    // }
    // [103] return 
    rts
    // bsearch16u::@4
  b4:
    // num >> 1
    // [104] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 
    txa
    lsr
    // items + (num >> 1)
    // [105] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [106] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa 
    clc
    adc items
    sta pivot
    lda #0
    adc items+1
    sta pivot+1
    // result = (signed int)key-(signed int)*pivot
    // [107] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 
    sec
    lda key
    ldy #0
    sbc (pivot),y
    sta result
    lda key+1
    iny
    sbc (pivot),y
    sta result+1
    // if (result == 0)
    // [108] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
    bne b6
    lda result
    bne b6
    // bsearch16u::@8
    // [109] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
    lda pivot
    sta return
    lda pivot+1
    sta return+1
    rts
    // bsearch16u::@6
  b6:
    // if (result > 0)
    // [110] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
    lda result+1
    bmi b7
    bne !+
    lda result
    beq b7
  !:
    // bsearch16u::@9
    // items = pivot+1
    // [111] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
    lda #1*SIZEOF_WORD
    clc
    adc pivot
    sta items
    lda #0
    adc pivot+1
    sta items+1
    // num--;
    // [112] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx 
    dex
    // [113] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
    // [113] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
    // [113] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
    // bsearch16u::@7
  b7:
    // num >>= 1
    // [114] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 
    txa
    lsr
    tax
    // [97] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
    // [97] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
    // [97] 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 = $27
    .label return_2 = $25
    // return SQUARES[val];
    // [116] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [117] (word) sqr::return#0 ← *((const word*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuc1_derefidx_vbuaa 
    tay
    lda SQUARES,y
    sta return
    lda SQUARES+1,y
    sta return+1
    // sqr::@return
    // }
    // [118] return 
    rts
}
  // init_squares
// Initialize squares table
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
init_squares: {
    .label squares = $16
    .label sqr = $14
    // malloc(NUM_SQUARES*sizeof(word))
    // [120] call malloc 
    // [130] phi from init_squares to malloc [phi:init_squares->malloc]
    jsr malloc
    // [121] phi from init_squares to init_squares::@1 [phi:init_squares->init_squares::@1]
    // [121] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares->init_squares::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [121] phi (word*) init_squares::squares#2 = (const word*) SQUARES#1 [phi:init_squares->init_squares::@1#1] -- pwuz1=pwuc1 
    lda #<SQUARES
    sta squares
    lda #>SQUARES
    sta squares+1
    // [121] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vbuc1 
    txa
    sta sqr
    sta sqr+1
    // [121] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
    // [121] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy 
    // [121] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy 
    // [121] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy 
    // init_squares::@1
  b1:
    // *squares++ = sqr
    // [122] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 
    ldy #0
    lda sqr
    sta (squares),y
    iny
    lda sqr+1
    sta (squares),y
    // *squares++ = sqr;
    // [123] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
    lda #SIZEOF_WORD
    clc
    adc squares
    sta squares
    bcc !+
    inc squares+1
  !:
    // i*2
    // [124] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // i*2+1
    // [125] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 
    clc
    adc #1
    // sqr += i*2+1
    // [126] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa 
    clc
    adc sqr
    sta sqr
    bcc !+
    inc sqr+1
  !:
    // for( byte i: 0..NUM_SQUARES-1)
    // [127] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [128] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #NUM_SQUARES-1+1
    bne b1
    // init_squares::@return
    // }
    // [129] return 
    rts
}
  // 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: {
    .const size = NUM_SQUARES*SIZEOF_WORD
    .label mem = HEAP_TOP-size
    .label return = mem
    // malloc::@return
    // [131] return 
    rts
}
  // clock_start
// Reset & start the processor clock time. The value can be read using clock().
// This uses CIA #2 Timer A+B on the C64
clock_start: {
    // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES
    // [132] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 -- _deref_pbuc1=vbuc2 
    // Setup CIA#2 timer A to count (down) CPU cycles
    lda #CIA_TIMER_CONTROL_CONTINUOUS
    sta CIA2_TIMER_A_CONTROL
    // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
    // [133] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 
    lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
    sta CIA2_TIMER_B_CONTROL
    // *CIA2_TIMER_AB = 0xffffffff
    // [134] *((const dword*) CIA2_TIMER_AB#0) ← (dword) $ffffffff -- _deref_pduc1=vduc2 
    lda #<$ffffffff
    sta CIA2_TIMER_AB
    lda #>$ffffffff
    sta CIA2_TIMER_AB+1
    lda #<$ffffffff>>$10
    sta CIA2_TIMER_AB+2
    lda #>$ffffffff>>$10
    sta CIA2_TIMER_AB+3
    // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
    // [135] *((const byte*) CIA2_TIMER_B_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0|(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 -- _deref_pbuc1=vbuc2 
    lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A
    sta CIA2_TIMER_B_CONTROL
    // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES
    // [136] *((const byte*) CIA2_TIMER_A_CONTROL#0) ← (const byte) CIA_TIMER_CONTROL_START#0 -- _deref_pbuc1=vbuc2 
    lda #CIA_TIMER_CONTROL_START
    sta CIA2_TIMER_A_CONTROL
    // clock_start::@return
    // }
    // [137] return 
    rts
}
  // init_font_hex
// Make charset from proto chars
// init_font_hex(byte* zeropage($1b) charset)
init_font_hex: {
    .label _0 = $2d
    .label idx = $20
    .label proto_lo = $1d
    .label charset = $1b
    .label c1 = $1f
    .label proto_hi = $18
    .label c = $1a
    // [139] phi from init_font_hex to init_font_hex::@1 [phi:init_font_hex->init_font_hex::@1]
    // [139] phi (byte) init_font_hex::c#6 = (byte) 0 [phi:init_font_hex->init_font_hex::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta c
    // [139] phi (byte*) init_font_hex::proto_hi#6 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex->init_font_hex::@1#1] -- pbuz1=pbuc1 
    lda #<FONT_HEX_PROTO
    sta proto_hi
    lda #>FONT_HEX_PROTO
    sta proto_hi+1
    // [139] phi (byte*) init_font_hex::charset#5 = (const byte*) CHARSET#0 [phi:init_font_hex->init_font_hex::@1#2] -- pbuz1=pbuc1 
    lda #<CHARSET
    sta charset
    lda #>CHARSET
    sta charset+1
    // [139] phi from init_font_hex::@5 to init_font_hex::@1 [phi:init_font_hex::@5->init_font_hex::@1]
    // [139] phi (byte) init_font_hex::c#6 = (byte) init_font_hex::c#1 [phi:init_font_hex::@5->init_font_hex::@1#0] -- register_copy 
    // [139] phi (byte*) init_font_hex::proto_hi#6 = (byte*) init_font_hex::proto_hi#1 [phi:init_font_hex::@5->init_font_hex::@1#1] -- register_copy 
    // [139] phi (byte*) init_font_hex::charset#5 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@5->init_font_hex::@1#2] -- register_copy 
    // init_font_hex::@1
  b1:
    // [140] phi from init_font_hex::@1 to init_font_hex::@2 [phi:init_font_hex::@1->init_font_hex::@2]
    // [140] phi (byte) init_font_hex::c1#4 = (byte) 0 [phi:init_font_hex::@1->init_font_hex::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta c1
    // [140] phi (byte*) init_font_hex::proto_lo#4 = (const byte[]) FONT_HEX_PROTO#0 [phi:init_font_hex::@1->init_font_hex::@2#1] -- pbuz1=pbuc1 
    lda #<FONT_HEX_PROTO
    sta proto_lo
    lda #>FONT_HEX_PROTO
    sta proto_lo+1
    // [140] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#5 [phi:init_font_hex::@1->init_font_hex::@2#2] -- register_copy 
    // [140] phi from init_font_hex::@4 to init_font_hex::@2 [phi:init_font_hex::@4->init_font_hex::@2]
    // [140] phi (byte) init_font_hex::c1#4 = (byte) init_font_hex::c1#1 [phi:init_font_hex::@4->init_font_hex::@2#0] -- register_copy 
    // [140] phi (byte*) init_font_hex::proto_lo#4 = (byte*) init_font_hex::proto_lo#1 [phi:init_font_hex::@4->init_font_hex::@2#1] -- register_copy 
    // [140] phi (byte*) init_font_hex::charset#2 = (byte*) init_font_hex::charset#0 [phi:init_font_hex::@4->init_font_hex::@2#2] -- register_copy 
    // init_font_hex::@2
  b2:
    // charset[idx++] = 0
    // [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 -- _deref_pbuz1=vbuc1 
    lda #0
    tay
    sta (charset),y
    // [142] phi from init_font_hex::@2 to init_font_hex::@3 [phi:init_font_hex::@2->init_font_hex::@3]
    // [142] phi (byte) init_font_hex::idx#5 = (byte) 1 [phi:init_font_hex::@2->init_font_hex::@3#0] -- vbuz1=vbuc1 
    lda #1
    sta idx
    // [142] phi (byte) init_font_hex::i#2 = (byte) 0 [phi:init_font_hex::@2->init_font_hex::@3#1] -- vbuxx=vbuc1 
    ldx #0
    // [142] phi from init_font_hex::@3 to init_font_hex::@3 [phi:init_font_hex::@3->init_font_hex::@3]
    // [142] phi (byte) init_font_hex::idx#5 = (byte) init_font_hex::idx#2 [phi:init_font_hex::@3->init_font_hex::@3#0] -- register_copy 
    // [142] phi (byte) init_font_hex::i#2 = (byte) init_font_hex::i#1 [phi:init_font_hex::@3->init_font_hex::@3#1] -- register_copy 
    // init_font_hex::@3
  b3:
    // proto_hi[i]<<4
    // [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 -- vbuz1=pbuz2_derefidx_vbuxx_rol_4 
    txa
    tay
    lda (proto_hi),y
    asl
    asl
    asl
    asl
    sta _0
    // proto_lo[i]<<1
    // [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuxx_rol_1 
    txa
    tay
    lda (proto_lo),y
    asl
    // proto_hi[i]<<4 | proto_lo[i]<<1
    // [145] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 -- vbuaa=vbuz1_bor_vbuaa 
    ora _0
    // charset[idx++] = proto_hi[i]<<4 | proto_lo[i]<<1
    // [146] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy idx
    sta (charset),y
    // charset[idx++] = proto_hi[i]<<4 | proto_lo[i]<<1;
    // [147] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 -- vbuz1=_inc_vbuz1 
    inc idx
    // for( byte i: 0..4)
    // [148] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [149] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 -- vbuxx_neq_vbuc1_then_la1 
    cpx #5
    bne b3
    // init_font_hex::@4
    // charset[idx++] = 0
    // [150] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 
    lda #0
    ldy idx
    sta (charset),y
    // charset[idx++] = 0;
    // [151] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 -- vbuyy=_inc_vbuz1 
    iny
    // charset[idx++] = 0
    // [152] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 
    sta (charset),y
    // proto_lo += 5
    // [153] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 
    lda #5
    clc
    adc proto_lo
    sta proto_lo
    bcc !+
    inc proto_lo+1
  !:
    // charset += 8
    // [154] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 -- pbuz1=pbuz1_plus_vbuc1 
    lda #8
    clc
    adc charset
    sta charset
    bcc !+
    inc charset+1
  !:
    // for( byte c: 0..15 )
    // [155] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 -- vbuz1=_inc_vbuz1 
    inc c1
    // [156] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 -- vbuz1_neq_vbuc1_then_la1 
    lda #$10
    cmp c1
    bne b2
    // init_font_hex::@5
    // proto_hi += 5
    // [157] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 -- pbuz1=pbuz1_plus_vbuc1 
    lda #5
    clc
    adc proto_hi
    sta proto_hi
    bcc !+
    inc proto_hi+1
  !:
    // for( byte c: 0..15 )
    // [158] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 -- vbuz1=_inc_vbuz1 
    inc c
    // [159] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$10
    cmp c
    bne b1
    // init_font_hex::@return
    // }
    // [160] return 
    rts
}
  // File Data
  // Bit patterns for symbols 0-f (3x5 pixels) used in font hex
  FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4
  print_hextab: .text "0123456789abcdef"

