Resolved forward reference rand_seed to (word) rand_seed
Setting inferred volatile on symbol affected by address-of (word) last_time
Setting inferred volatile on symbol affected by address-of (word) rand_seed
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 array-indexing *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) strlen::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean condition (word) main::count
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Culled Empty Block (label) @14
Culled Empty Block (label) @15
Culled Empty Block (label) @16
Culled Empty Block (label) @17
Culled Empty Block (label) @18
Culled Empty Block (label) @19
Culled Empty Block (label) @20
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) @38
Culled Empty Block (label) @39
Culled Empty Block (label) @40
Culled Empty Block (label) @41
Culled Empty Block (label) @42
Culled Empty Block (label) @44
Culled Empty Block (label) rand::@1
Culled Empty Block (label) @46
Culled Empty Block (label) doplasma::@4
Culled Empty Block (label) doplasma::@5
Culled Empty Block (label) doplasma::@6
Culled Empty Block (label) doplasma::@10
Culled Empty Block (label) doplasma::@11
Culled Empty Block (label) doplasma::@12
Culled Empty Block (label) doplasma::@23
Culled Empty Block (label) doplasma::@15
Culled Empty Block (label) doplasma::@24
Culled Empty Block (label) doplasma::@19
Culled Empty Block (label) doplasma::@20
Culled Empty Block (label) doplasma::@21
Culled Empty Block (label) doplasma::@22
Culled Empty Block (label) @47
Culled Empty Block (label) makechar::@19
Culled Empty Block (label) makechar::@3
Culled Empty Block (label) makechar::@20
Culled Empty Block (label) makechar::@16
Culled Empty Block (label) makechar::@17
Culled Empty Block (label) makechar::@11
Culled Empty Block (label) makechar::@12
Culled Empty Block (label) makechar::@14
Culled Empty Block (label) makechar::@15
Culled Empty Block (label) makechar::@18
Culled Empty Block (label) @48
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@7

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  to:@13
@13: scope:[]  from @begin
  (byte*) print_screen#0 ← (byte*)(number) $400
  (byte*) print_line_cursor#0 ← (byte*) print_screen#0
  (byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0
  to:@43

(void()) print_ln()
print_ln: scope:[print_ln]  from end::@2
  (byte*) print_char_cursor#33 ← phi( end::@2/(byte*) print_char_cursor#11 )
  (byte*) print_line_cursor#16 ← phi( end::@2/(byte*) print_line_cursor#17 )
  to:print_ln::@1
print_ln::@1: scope:[print_ln]  from print_ln print_ln::@1
  (byte*) print_char_cursor#17 ← phi( print_ln/(byte*) print_char_cursor#33 print_ln::@1/(byte*) print_char_cursor#17 )
  (byte*) print_line_cursor#8 ← phi( print_ln/(byte*) print_line_cursor#16 print_ln::@1/(byte*) print_line_cursor#1 )
  (byte*~) print_ln::$0 ← (byte*) print_line_cursor#8 + (number) $28
  (byte*) print_line_cursor#1 ← (byte*~) print_ln::$0
  (bool~) print_ln::$1 ← (byte*) print_line_cursor#1 < (byte*) print_char_cursor#17
  if((bool~) print_ln::$1) goto print_ln::@1
  to:print_ln::@2
print_ln::@2: scope:[print_ln]  from print_ln::@1
  (byte*) print_line_cursor#9 ← phi( print_ln::@1/(byte*) print_line_cursor#1 )
  (byte*) print_char_cursor#1 ← (byte*) print_line_cursor#9
  to:print_ln::@return
print_ln::@return: scope:[print_ln]  from print_ln::@2
  (byte*) print_char_cursor#18 ← phi( print_ln::@2/(byte*) print_char_cursor#1 )
  (byte*) print_line_cursor#10 ← phi( print_ln::@2/(byte*) print_line_cursor#9 )
  (byte*) print_line_cursor#2 ← (byte*) print_line_cursor#10
  (byte*) print_char_cursor#2 ← (byte*) print_char_cursor#18
  return 
  to:@return

(void()) print_word((word) print_word::w)
print_word: scope:[print_word]  from end::@1
  (byte*) print_char_cursor#34 ← phi( end::@1/(byte*) print_char_cursor#36 )
  (word) print_word::w#1 ← phi( end::@1/(word) print_word::w#0 )
  (byte~) print_word::$0 ← > (word) print_word::w#1
  (byte) print_byte::b#0 ← (byte~) print_word::$0
  call print_byte 
  to:print_word::@1
print_word::@1: scope:[print_word]  from print_word
  (word) print_word::w#2 ← phi( print_word/(word) print_word::w#1 )
  (byte*) print_char_cursor#19 ← phi( print_word/(byte*) print_char_cursor#8 )
  (byte*) print_char_cursor#3 ← (byte*) print_char_cursor#19
  (byte~) print_word::$2 ← < (word) print_word::w#2
  (byte) print_byte::b#1 ← (byte~) print_word::$2
  call print_byte 
  to:print_word::@2
print_word::@2: scope:[print_word]  from print_word::@1
  (byte*) print_char_cursor#20 ← phi( print_word::@1/(byte*) print_char_cursor#8 )
  (byte*) print_char_cursor#4 ← (byte*) print_char_cursor#20
  to:print_word::@return
print_word::@return: scope:[print_word]  from print_word::@2
  (byte*) print_char_cursor#21 ← phi( print_word::@2/(byte*) print_char_cursor#4 )
  (byte*) print_char_cursor#5 ← (byte*) print_char_cursor#21
  return 
  to:@return

(void()) print_byte((byte) print_byte::b)
print_byte: scope:[print_byte]  from print_word print_word::@1
  (byte*) print_char_cursor#35 ← phi( print_word/(byte*) print_char_cursor#34 print_word::@1/(byte*) print_char_cursor#3 )
  (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
  (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (number) 4
  (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0)
  call print_char 
  to:print_byte::@1
print_byte::@1: scope:[print_byte]  from print_byte
  (byte) print_byte::b#3 ← phi( print_byte/(byte) print_byte::b#2 )
  (byte*) print_char_cursor#22 ← phi( print_byte/(byte*) print_char_cursor#10 )
  (byte*) print_char_cursor#6 ← (byte*) print_char_cursor#22
  (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f
  (byte) print_char::ch#1 ← *((const byte*) print_hextab + (number~) print_byte::$2)
  call print_char 
  to:print_byte::@2
print_byte::@2: scope:[print_byte]  from print_byte::@1
  (byte*) print_char_cursor#23 ← phi( print_byte::@1/(byte*) print_char_cursor#10 )
  (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#23
  to:print_byte::@return
print_byte::@return: scope:[print_byte]  from print_byte::@2
  (byte*) print_char_cursor#24 ← phi( print_byte::@2/(byte*) print_char_cursor#7 )
  (byte*) print_char_cursor#8 ← (byte*) print_char_cursor#24
  return 
  to:@return

(void()) print_char((byte) print_char::ch)
print_char: scope:[print_char]  from print_byte print_byte::@1
  (byte*) print_char_cursor#25 ← phi( print_byte/(byte*) print_char_cursor#35 print_byte::@1/(byte*) print_char_cursor#6 )
  (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 )
  *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2
  (byte*) print_char_cursor#9 ← ++ (byte*) print_char_cursor#25
  to:print_char::@return
print_char::@return: scope:[print_char]  from print_char
  (byte*) print_char_cursor#26 ← phi( print_char/(byte*) print_char_cursor#9 )
  (byte*) print_char_cursor#10 ← (byte*) print_char_cursor#26
  return 
  to:@return
@43: scope:[]  from @13
  (byte*) print_line_cursor#24 ← phi( @13/(byte*) print_line_cursor#0 )
  (byte*) print_char_cursor#42 ← phi( @13/(byte*) print_char_cursor#0 )
  (word) last_time ← (word) 0
  (word) Ticks#0 ← (word) 0
  to:@45

(void()) start()
start: scope:[start]  from end main::@8
  asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1  }
  (word) rand_seed ← (number) $194a
  to:start::@return
start::@return: scope:[start]  from start
  return 
  to:@return

(void()) end()
end: scope:[end]  from main::@3
  (byte*) print_line_cursor#23 ← phi( main::@3/(byte*) print_line_cursor#18 )
  (byte*) print_char_cursor#39 ← phi( main::@3/(byte*) print_char_cursor#37 )
  (word) Ticks#1 ← (word) last_time
  call start 
  to:end::@1
end::@1: scope:[end]  from end
  (byte*) print_line_cursor#20 ← phi( end/(byte*) print_line_cursor#23 )
  (byte*) print_char_cursor#36 ← phi( end/(byte*) print_char_cursor#39 )
  (word) Ticks#7 ← phi( end/(word) Ticks#1 )
  (word) last_time ← (word) last_time - (word) Ticks#7
  (word) Ticks#2 ← (word) last_time
  (word) print_word::w#0 ← (word) Ticks#2
  call print_word 
  to:end::@2
end::@2: scope:[end]  from end::@1
  (word) Ticks#15 ← phi( end::@1/(word) Ticks#2 )
  (byte*) print_line_cursor#17 ← phi( end::@1/(byte*) print_line_cursor#20 )
  (byte*) print_char_cursor#27 ← phi( end::@1/(byte*) print_char_cursor#5 )
  (byte*) print_char_cursor#11 ← (byte*) print_char_cursor#27
  call print_ln 
  to:end::@3
end::@3: scope:[end]  from end::@2
  (word) Ticks#12 ← phi( end::@2/(word) Ticks#15 )
  (byte*) print_char_cursor#28 ← phi( end::@2/(byte*) print_char_cursor#2 )
  (byte*) print_line_cursor#11 ← phi( end::@2/(byte*) print_line_cursor#2 )
  (byte*) print_line_cursor#3 ← (byte*) print_line_cursor#11
  (byte*) print_char_cursor#12 ← (byte*) print_char_cursor#28
  to:end::@return
end::@return: scope:[end]  from end::@3
  (byte*) print_line_cursor#12 ← phi( end::@3/(byte*) print_line_cursor#3 )
  (byte*) print_char_cursor#29 ← phi( end::@3/(byte*) print_char_cursor#12 )
  (word) Ticks#8 ← phi( end::@3/(word) Ticks#12 )
  (word) Ticks#3 ← (word) Ticks#8
  (byte*) print_char_cursor#13 ← (byte*) print_char_cursor#29
  (byte*) print_line_cursor#4 ← (byte*) print_line_cursor#12
  return 
  to:@return
@45: scope:[]  from @43
  (byte*) print_line_cursor#22 ← phi( @43/(byte*) print_line_cursor#24 )
  (byte*) print_char_cursor#41 ← phi( @43/(byte*) print_char_cursor#42 )
  (word) Ticks#17 ← phi( @43/(word) Ticks#0 )
  (word) rand_seed ← (word) 0
  to:@49

(byte()) rand()
rand: scope:[rand]  from makechar::@8
  asm { ldx#8 ldaRAND_SEED+0 __rand_loop: asl rolRAND_SEED+1 bcc__no_eor eor#$2D __no_eor: dex bne__rand_loop staRAND_SEED+0  }
  (byte~) rand::$0 ← ((byte)) (word) rand_seed
  (byte) rand::return#0 ← (byte~) rand::$0
  to:rand::@return
rand::@return: scope:[rand]  from rand
  (byte) rand::return#3 ← phi( rand/(byte) rand::return#0 )
  (byte) rand::return#1 ← (byte) rand::return#3
  return 
  to:@return

(void()) doplasma((byte*) doplasma::scrn)
doplasma: scope:[doplasma]  from main::@10 main::@2
  (byte*) doplasma::scrn#13 ← phi( main::@10/(byte*) doplasma::scrn#2 main::@2/(byte*) doplasma::scrn#1 )
  (byte) doplasma::c1a#0 ← (byte) 0
  (byte) doplasma::c1b#0 ← (byte) 0
  (byte) doplasma::c2a#0 ← (byte) 0
  (byte) doplasma::c2b#0 ← (byte) 0
  (byte) doplasma::c1A#0 ← (byte) 0
  (byte) doplasma::c1B#0 ← (byte) 0
  (byte) doplasma::c2A#0 ← (byte) 0
  (byte) doplasma::c2B#0 ← (byte) 0
  (byte) doplasma::i#0 ← (byte) 0
  (byte) doplasma::ii#0 ← (byte) 0
  (byte) doplasma::j#0 ← (byte) 0
  (byte) doplasma::jj#0 ← (byte) 0
  (byte) doplasma::c1a#1 ← (byte) doplasma::c1A#0
  (byte) doplasma::c1b#1 ← (byte) doplasma::c1B#0
  (byte) doplasma::ii#1 ← (number) 0
  to:doplasma::@1
doplasma::@1: scope:[doplasma]  from doplasma doplasma::@2
  (byte*) doplasma::scrn#12 ← phi( doplasma/(byte*) doplasma::scrn#13 doplasma::@2/(byte*) doplasma::scrn#14 )
  (byte) doplasma::c2B#4 ← phi( doplasma/(byte) doplasma::c2B#0 doplasma::@2/(byte) doplasma::c2B#6 )
  (byte) doplasma::c2A#4 ← phi( doplasma/(byte) doplasma::c2A#0 doplasma::@2/(byte) doplasma::c2A#6 )
  (byte) doplasma::c1B#3 ← phi( doplasma/(byte) doplasma::c1B#0 doplasma::@2/(byte) doplasma::c1B#4 )
  (byte) doplasma::c1A#3 ← phi( doplasma/(byte) doplasma::c1A#0 doplasma::@2/(byte) doplasma::c1A#4 )
  (byte) doplasma::c1b#4 ← phi( doplasma/(byte) doplasma::c1b#1 doplasma::@2/(byte) doplasma::c1b#2 )
  (byte) doplasma::c1a#4 ← phi( doplasma/(byte) doplasma::c1a#1 doplasma::@2/(byte) doplasma::c1a#2 )
  (byte) doplasma::ii#3 ← phi( doplasma/(byte) doplasma::ii#1 doplasma::@2/(byte) doplasma::ii#2 )
  (bool~) doplasma::$0 ← (byte) doplasma::ii#3 < (number) $19
  if((bool~) doplasma::$0) goto doplasma::@2
  to:doplasma::@3
doplasma::@2: scope:[doplasma]  from doplasma::@1
  (byte*) doplasma::scrn#14 ← phi( doplasma::@1/(byte*) doplasma::scrn#12 )
  (byte) doplasma::c2B#6 ← phi( doplasma::@1/(byte) doplasma::c2B#4 )
  (byte) doplasma::c2A#6 ← phi( doplasma::@1/(byte) doplasma::c2A#4 )
  (byte) doplasma::c1B#4 ← phi( doplasma::@1/(byte) doplasma::c1B#3 )
  (byte) doplasma::c1A#4 ← phi( doplasma::@1/(byte) doplasma::c1A#3 )
  (byte) doplasma::ii#4 ← phi( doplasma::@1/(byte) doplasma::ii#3 )
  (byte) doplasma::c1b#3 ← phi( doplasma::@1/(byte) doplasma::c1b#4 )
  (byte) doplasma::c1a#3 ← phi( doplasma::@1/(byte) doplasma::c1a#4 )
  (byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3)
  *((const byte*) ybuf + (byte) doplasma::ii#4) ← (byte~) doplasma::$1
  (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (number) 4
  (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (number) 9
  (byte) doplasma::ii#2 ← ++ (byte) doplasma::ii#4
  to:doplasma::@1
doplasma::@3: scope:[doplasma]  from doplasma::@1
  (byte*) doplasma::scrn#10 ← phi( doplasma::@1/(byte*) doplasma::scrn#12 )
  (byte) doplasma::c2B#2 ← phi( doplasma::@1/(byte) doplasma::c2B#4 )
  (byte) doplasma::c2A#2 ← phi( doplasma::@1/(byte) doplasma::c2A#4 )
  (byte) doplasma::c1B#2 ← phi( doplasma::@1/(byte) doplasma::c1B#3 )
  (byte) doplasma::c1A#2 ← phi( doplasma::@1/(byte) doplasma::c1A#3 )
  (byte) doplasma::c1A#1 ← (byte) doplasma::c1A#2 + (number) 3
  (byte) doplasma::c1B#1 ← (byte) doplasma::c1B#2 - (number) 5
  (byte) doplasma::c2a#1 ← (byte) doplasma::c2A#2
  (byte) doplasma::c2b#1 ← (byte) doplasma::c2B#2
  (byte) doplasma::i#1 ← (number) 0
  to:doplasma::@7
doplasma::@7: scope:[doplasma]  from doplasma::@3 doplasma::@8
  (byte*) doplasma::scrn#9 ← phi( doplasma::@3/(byte*) doplasma::scrn#10 doplasma::@8/(byte*) doplasma::scrn#11 )
  (byte) doplasma::c2B#5 ← phi( doplasma::@3/(byte) doplasma::c2B#2 doplasma::@8/(byte) doplasma::c2B#7 )
  (byte) doplasma::c2A#5 ← phi( doplasma::@3/(byte) doplasma::c2A#2 doplasma::@8/(byte) doplasma::c2A#7 )
  (byte) doplasma::c2b#4 ← phi( doplasma::@3/(byte) doplasma::c2b#1 doplasma::@8/(byte) doplasma::c2b#2 )
  (byte) doplasma::c2a#4 ← phi( doplasma::@3/(byte) doplasma::c2a#1 doplasma::@8/(byte) doplasma::c2a#2 )
  (byte) doplasma::i#3 ← phi( doplasma::@3/(byte) doplasma::i#1 doplasma::@8/(byte) doplasma::i#2 )
  (bool~) doplasma::$2 ← (byte) doplasma::i#3 < (number) $28
  if((bool~) doplasma::$2) goto doplasma::@8
  to:doplasma::@9
doplasma::@8: scope:[doplasma]  from doplasma::@7
  (byte*) doplasma::scrn#11 ← phi( doplasma::@7/(byte*) doplasma::scrn#9 )
  (byte) doplasma::c2B#7 ← phi( doplasma::@7/(byte) doplasma::c2B#5 )
  (byte) doplasma::c2A#7 ← phi( doplasma::@7/(byte) doplasma::c2A#5 )
  (byte) doplasma::i#4 ← phi( doplasma::@7/(byte) doplasma::i#3 )
  (byte) doplasma::c2b#3 ← phi( doplasma::@7/(byte) doplasma::c2b#4 )
  (byte) doplasma::c2a#3 ← phi( doplasma::@7/(byte) doplasma::c2a#4 )
  (byte~) doplasma::$3 ← *((const byte*) sinustable + (byte) doplasma::c2a#3) + *((const byte*) sinustable + (byte) doplasma::c2b#3)
  *((const byte*) xbuf + (byte) doplasma::i#4) ← (byte~) doplasma::$3
  (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (number) 3
  (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (number) 7
  (byte) doplasma::i#2 ← ++ (byte) doplasma::i#4
  to:doplasma::@7
doplasma::@9: scope:[doplasma]  from doplasma::@7
  (byte*) doplasma::scrn#8 ← phi( doplasma::@7/(byte*) doplasma::scrn#9 )
  (byte) doplasma::c2B#3 ← phi( doplasma::@7/(byte) doplasma::c2B#5 )
  (byte) doplasma::c2A#3 ← phi( doplasma::@7/(byte) doplasma::c2A#5 )
  (byte) doplasma::c2A#1 ← (byte) doplasma::c2A#3 + (number) 2
  (byte) doplasma::c2B#1 ← (byte) doplasma::c2B#3 - (number) 3
  (byte) doplasma::jj#1 ← (number) 0
  to:doplasma::@13
doplasma::@13: scope:[doplasma]  from doplasma::@18 doplasma::@9
  (byte*) doplasma::scrn#7 ← phi( doplasma::@18/(byte*) doplasma::scrn#0 doplasma::@9/(byte*) doplasma::scrn#8 )
  (byte) doplasma::jj#3 ← phi( doplasma::@18/(byte) doplasma::jj#2 doplasma::@9/(byte) doplasma::jj#1 )
  (bool~) doplasma::$4 ← (byte) doplasma::jj#3 < (number) $19
  if((bool~) doplasma::$4) goto doplasma::@14
  to:doplasma::@return
doplasma::@14: scope:[doplasma]  from doplasma::@13
  (byte*) doplasma::scrn#6 ← phi( doplasma::@13/(byte*) doplasma::scrn#7 )
  (byte) doplasma::jj#7 ← phi( doplasma::@13/(byte) doplasma::jj#3 )
  (byte) doplasma::j#1 ← (number) 0
  to:doplasma::@16
doplasma::@16: scope:[doplasma]  from doplasma::@14 doplasma::@17
  (byte*) doplasma::scrn#5 ← phi( doplasma::@14/(byte*) doplasma::scrn#6 doplasma::@17/(byte*) doplasma::scrn#3 )
  (byte) doplasma::jj#6 ← phi( doplasma::@14/(byte) doplasma::jj#7 doplasma::@17/(byte) doplasma::jj#4 )
  (byte) doplasma::j#3 ← phi( doplasma::@14/(byte) doplasma::j#1 doplasma::@17/(byte) doplasma::j#2 )
  (bool~) doplasma::$5 ← (byte) doplasma::j#3 < (number) $28
  if((bool~) doplasma::$5) goto doplasma::@17
  to:doplasma::@18
doplasma::@17: scope:[doplasma]  from doplasma::@16
  (byte*) doplasma::scrn#3 ← phi( doplasma::@16/(byte*) doplasma::scrn#5 )
  (byte) doplasma::jj#4 ← phi( doplasma::@16/(byte) doplasma::jj#6 )
  (byte) doplasma::j#4 ← phi( doplasma::@16/(byte) doplasma::j#3 )
  (byte~) doplasma::$6 ← *((const byte*) xbuf + (byte) doplasma::j#4) + *((const byte*) ybuf + (byte) doplasma::jj#4)
  *((byte*) doplasma::scrn#3 + (byte) doplasma::j#4) ← (byte~) doplasma::$6
  (byte) doplasma::j#2 ← ++ (byte) doplasma::j#4
  to:doplasma::@16
doplasma::@18: scope:[doplasma]  from doplasma::@16
  (byte) doplasma::jj#5 ← phi( doplasma::@16/(byte) doplasma::jj#6 )
  (byte*) doplasma::scrn#4 ← phi( doplasma::@16/(byte*) doplasma::scrn#5 )
  (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#4 + (number) $28
  (byte) doplasma::jj#2 ← ++ (byte) doplasma::jj#5
  to:doplasma::@13
doplasma::@return: scope:[doplasma]  from doplasma::@13
  return 
  to:@return

(void()) makechar()
makechar: scope:[makechar]  from main
  (byte) makechar::i#0 ← (byte) 0
  (byte) makechar::ii#0 ← (byte) 0
  (byte) makechar::b#0 ← (byte) 0
  (byte) makechar::s#0 ← (byte) 0
  (word) makechar::c#0 ← (word) 0
  (word) makechar::c#1 ← (number) 0
  to:makechar::@1
makechar::@1: scope:[makechar]  from makechar makechar::@6
  (word) makechar::c#3 ← phi( makechar/(word) makechar::c#1 makechar::@6/(word) makechar::c#2 )
  (bool~) makechar::$0 ← (word) makechar::c#3 < (number) $100
  if((bool~) makechar::$0) goto makechar::@2
  to:makechar::@return
makechar::@2: scope:[makechar]  from makechar::@1
  (word) makechar::c#4 ← phi( makechar::@1/(word) makechar::c#3 )
  (byte~) makechar::$1 ← ((byte)) (word) makechar::c#4
  (byte) makechar::s#1 ← *((const byte*) sinustable + (byte~) makechar::$1)
  (byte) makechar::i#1 ← (number) 0
  to:makechar::@4
makechar::@4: scope:[makechar]  from makechar::@2 makechar::@9
  (byte) makechar::s#7 ← phi( makechar::@2/(byte) makechar::s#1 makechar::@9/(byte) makechar::s#9 )
  (word) makechar::c#7 ← phi( makechar::@2/(word) makechar::c#4 makechar::@9/(word) makechar::c#6 )
  (byte) makechar::i#3 ← phi( makechar::@2/(byte) makechar::i#1 makechar::@9/(byte) makechar::i#2 )
  (bool~) makechar::$2 ← (byte) makechar::i#3 < (number) 8
  if((bool~) makechar::$2) goto makechar::@5
  to:makechar::@6
makechar::@5: scope:[makechar]  from makechar::@4
  (byte) makechar::s#6 ← phi( makechar::@4/(byte) makechar::s#7 )
  (byte) makechar::i#7 ← phi( makechar::@4/(byte) makechar::i#3 )
  (word) makechar::c#10 ← phi( makechar::@4/(word) makechar::c#7 )
  (byte) makechar::b#1 ← (number) 0
  (byte) makechar::ii#1 ← (number) 0
  to:makechar::@7
makechar::@6: scope:[makechar]  from makechar::@4
  (word) makechar::c#5 ← phi( makechar::@4/(word) makechar::c#7 )
  (word) makechar::c#2 ← ++ (word) makechar::c#5
  to:makechar::@1
makechar::@7: scope:[makechar]  from makechar::@10 makechar::@5
  (byte) makechar::s#4 ← phi( makechar::@10/(byte) makechar::s#5 makechar::@5/(byte) makechar::s#6 )
  (byte) makechar::b#5 ← phi( makechar::@10/(byte) makechar::b#7 makechar::@5/(byte) makechar::b#1 )
  (byte) makechar::i#5 ← phi( makechar::@10/(byte) makechar::i#6 makechar::@5/(byte) makechar::i#7 )
  (word) makechar::c#8 ← phi( makechar::@10/(word) makechar::c#9 makechar::@5/(word) makechar::c#10 )
  (byte) makechar::ii#3 ← phi( makechar::@10/(byte) makechar::ii#2 makechar::@5/(byte) makechar::ii#1 )
  (bool~) makechar::$3 ← (byte) makechar::ii#3 < (number) 8
  if((bool~) makechar::$3) goto makechar::@8
  to:makechar::@9
makechar::@8: scope:[makechar]  from makechar::@7
  (byte) makechar::i#10 ← phi( makechar::@7/(byte) makechar::i#5 )
  (word) makechar::c#13 ← phi( makechar::@7/(word) makechar::c#8 )
  (byte) makechar::b#8 ← phi( makechar::@7/(byte) makechar::b#5 )
  (byte) makechar::ii#7 ← phi( makechar::@7/(byte) makechar::ii#3 )
  (byte) makechar::s#3 ← phi( makechar::@7/(byte) makechar::s#4 )
  call rand 
  (byte) rand::return#2 ← (byte) rand::return#1
  to:makechar::@21
makechar::@21: scope:[makechar]  from makechar::@8
  (byte) makechar::i#9 ← phi( makechar::@8/(byte) makechar::i#10 )
  (word) makechar::c#12 ← phi( makechar::@8/(word) makechar::c#13 )
  (byte) makechar::b#6 ← phi( makechar::@8/(byte) makechar::b#8 )
  (byte) makechar::ii#6 ← phi( makechar::@8/(byte) makechar::ii#7 )
  (byte) makechar::s#2 ← phi( makechar::@8/(byte) makechar::s#3 )
  (byte) rand::return#4 ← phi( makechar::@8/(byte) rand::return#2 )
  (byte~) makechar::$4 ← (byte) rand::return#4
  (number~) makechar::$5 ← (byte~) makechar::$4 & (number) $ff
  (bool~) makechar::$6 ← (number~) makechar::$5 > (byte) makechar::s#2
  (bool~) makechar::$7 ← ! (bool~) makechar::$6
  if((bool~) makechar::$7) goto makechar::@10
  to:makechar::@13
makechar::@9: scope:[makechar]  from makechar::@7
  (byte) makechar::s#9 ← phi( makechar::@7/(byte) makechar::s#4 )
  (byte) makechar::b#3 ← phi( makechar::@7/(byte) makechar::b#5 )
  (byte) makechar::i#4 ← phi( makechar::@7/(byte) makechar::i#5 )
  (word) makechar::c#6 ← phi( makechar::@7/(word) makechar::c#8 )
  (word~) makechar::$8 ← (word) makechar::c#6 << (number) 3
  (word~) makechar::$9 ← (word~) makechar::$8 + (byte) makechar::i#4
  *((byte*)(const byte*) CHARSET + (word~) makechar::$9) ← (byte) makechar::b#3
  (byte) makechar::i#2 ← ++ (byte) makechar::i#4
  to:makechar::@4
makechar::@10: scope:[makechar]  from makechar::@13 makechar::@21
  (byte) makechar::s#5 ← phi( makechar::@13/(byte) makechar::s#8 makechar::@21/(byte) makechar::s#2 )
  (byte) makechar::b#7 ← phi( makechar::@13/(byte) makechar::b#2 makechar::@21/(byte) makechar::b#6 )
  (byte) makechar::i#6 ← phi( makechar::@13/(byte) makechar::i#8 makechar::@21/(byte) makechar::i#9 )
  (word) makechar::c#9 ← phi( makechar::@13/(word) makechar::c#11 makechar::@21/(word) makechar::c#12 )
  (byte) makechar::ii#4 ← phi( makechar::@13/(byte) makechar::ii#5 makechar::@21/(byte) makechar::ii#6 )
  (byte) makechar::ii#2 ← ++ (byte) makechar::ii#4
  to:makechar::@7
makechar::@13: scope:[makechar]  from makechar::@21
  (byte) makechar::s#8 ← phi( makechar::@21/(byte) makechar::s#2 )
  (byte) makechar::i#8 ← phi( makechar::@21/(byte) makechar::i#9 )
  (word) makechar::c#11 ← phi( makechar::@21/(word) makechar::c#12 )
  (byte) makechar::ii#5 ← phi( makechar::@21/(byte) makechar::ii#6 )
  (byte) makechar::b#4 ← phi( makechar::@21/(byte) makechar::b#6 )
  (byte) makechar::b#2 ← (byte) makechar::b#4 | *((const byte*) bittab + (byte) makechar::ii#5)
  to:makechar::@10
makechar::@return: scope:[makechar]  from makechar::@1
  return 
  to:@return

(signed word()) main()
main: scope:[main]  from @49
  (byte*) print_line_cursor#29 ← phi( @49/(byte*) print_line_cursor#19 )
  (byte*) print_char_cursor#47 ← phi( @49/(byte*) print_char_cursor#38 )
  (word) Ticks#22 ← phi( @49/(word) Ticks#14 )
  (byte) main::v#0 ← (byte) 0
  (byte) main::block#0 ← (byte) 0
  (word) main::count#0 ← (word) $1f4
  (word) rand_seed ← (number) $194a
  call makechar 
  to:main::@8
main::@8: scope:[main]  from main
  (byte*) print_line_cursor#27 ← phi( main/(byte*) print_line_cursor#29 )
  (byte*) print_char_cursor#45 ← phi( main/(byte*) print_char_cursor#47 )
  (word) Ticks#20 ← phi( main/(word) Ticks#22 )
  (word) main::count#6 ← phi( main/(word) main::count#0 )
  call start 
  to:main::@9
main::@9: scope:[main]  from main::@8
  (byte*) print_line_cursor#26 ← phi( main::@8/(byte*) print_line_cursor#27 )
  (byte*) print_char_cursor#44 ← phi( main::@8/(byte*) print_char_cursor#45 )
  (word) Ticks#19 ← phi( main::@8/(word) Ticks#20 )
  (word) main::count#4 ← phi( main::@8/(word) main::count#6 )
  (byte) main::block#1 ← *((const byte*) CIA2_PORT_A)
  (byte) main::tmp#0 ← (byte) 0
  (number~) main::$2 ← (byte) main::block#1 & (number) $fc
  (byte) main::tmp#1 ← (number~) main::$2
  (byte) main::tmp#2 ← (byte) main::tmp#1 | (byte)(word)(const byte*) SCREEN1>>(number) $e^(number) 3
  *((const byte*) CIA2_PORT_A) ← (byte) main::tmp#2
  (byte) main::v#1 ← *((const byte*) VIC_MEMORY)
  to:main::@1
main::@1: scope:[main]  from main::@11 main::@9
  (byte*) print_line_cursor#21 ← phi( main::@11/(byte*) print_line_cursor#25 main::@9/(byte*) print_line_cursor#26 )
  (byte*) print_char_cursor#40 ← phi( main::@11/(byte*) print_char_cursor#43 main::@9/(byte*) print_char_cursor#44 )
  (word) Ticks#16 ← phi( main::@11/(word) Ticks#18 main::@9/(word) Ticks#19 )
  (byte) main::block#3 ← phi( main::@11/(byte) main::block#4 main::@9/(byte) main::block#1 )
  (byte) main::v#3 ← phi( main::@11/(byte) main::v#4 main::@9/(byte) main::v#1 )
  (word) main::count#2 ← phi( main::@11/(word) main::count#1 main::@9/(word) main::count#4 )
  (bool~) main::$6 ← (number) 0 != (word) main::count#2
  if((bool~) main::$6) goto main::@2
  to:main::@3
main::@2: scope:[main]  from main::@1
  (byte*) print_line_cursor#30 ← phi( main::@1/(byte*) print_line_cursor#21 )
  (byte*) print_char_cursor#48 ← phi( main::@1/(byte*) print_char_cursor#40 )
  (word) Ticks#23 ← phi( main::@1/(word) Ticks#16 )
  (byte) main::block#6 ← phi( main::@1/(byte) main::block#3 )
  (byte) main::v#6 ← phi( main::@1/(byte) main::v#3 )
  (word) main::count#7 ← phi( main::@1/(word) main::count#2 )
  (byte*) doplasma::scrn#1 ← (byte*)(const byte*) SCREEN1
  call doplasma 
  to:main::@10
main::@10: scope:[main]  from main::@2
  (byte*) print_line_cursor#28 ← phi( main::@2/(byte*) print_line_cursor#30 )
  (byte*) print_char_cursor#46 ← phi( main::@2/(byte*) print_char_cursor#48 )
  (word) Ticks#21 ← phi( main::@2/(word) Ticks#23 )
  (byte) main::block#5 ← phi( main::@2/(byte) main::block#6 )
  (byte) main::v#5 ← phi( main::@2/(byte) main::v#6 )
  (word) main::count#5 ← phi( main::@2/(word) main::count#7 )
  *((const byte*) VIC_MEMORY) ← (const byte) PAGE1
  (byte*) doplasma::scrn#2 ← (byte*)(const byte*) SCREEN2
  call doplasma 
  to:main::@11
main::@11: scope:[main]  from main::@10
  (byte*) print_line_cursor#25 ← phi( main::@10/(byte*) print_line_cursor#28 )
  (byte*) print_char_cursor#43 ← phi( main::@10/(byte*) print_char_cursor#46 )
  (word) Ticks#18 ← phi( main::@10/(word) Ticks#21 )
  (byte) main::block#4 ← phi( main::@10/(byte) main::block#5 )
  (byte) main::v#4 ← phi( main::@10/(byte) main::v#5 )
  (word) main::count#3 ← phi( main::@10/(word) main::count#5 )
  *((const byte*) VIC_MEMORY) ← (const byte) PAGE2
  (word) main::count#1 ← -- (word) main::count#3
  to:main::@1
main::@3: scope:[main]  from main::@1
  (byte*) print_line_cursor#18 ← phi( main::@1/(byte*) print_line_cursor#21 )
  (byte*) print_char_cursor#37 ← phi( main::@1/(byte*) print_char_cursor#40 )
  (word) Ticks#13 ← phi( main::@1/(word) Ticks#16 )
  (byte) main::block#2 ← phi( main::@1/(byte) main::block#3 )
  (byte) main::v#2 ← phi( main::@1/(byte) main::v#3 )
  *((const byte*) VIC_MEMORY) ← (byte) main::v#2
  *((const byte*) CIA2_PORT_A) ← (byte) main::block#2
  call end 
  to:main::@12
main::@12: scope:[main]  from main::@3
  (byte*) print_line_cursor#13 ← phi( main::@3/(byte*) print_line_cursor#4 )
  (byte*) print_char_cursor#30 ← phi( main::@3/(byte*) print_char_cursor#13 )
  (word) Ticks#9 ← phi( main::@3/(word) Ticks#3 )
  (word) Ticks#4 ← (word) Ticks#9
  (byte*) print_char_cursor#14 ← (byte*) print_char_cursor#30
  (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#13
  (signed word) main::return#0 ← (number) 0
  to:main::@return
main::@return: scope:[main]  from main::@12
  (byte*) print_line_cursor#14 ← phi( main::@12/(byte*) print_line_cursor#5 )
  (byte*) print_char_cursor#31 ← phi( main::@12/(byte*) print_char_cursor#14 )
  (word) Ticks#10 ← phi( main::@12/(word) Ticks#4 )
  (signed word) main::return#3 ← phi( main::@12/(signed word) main::return#0 )
  (signed word) main::return#1 ← (signed word) main::return#3
  (word) Ticks#5 ← (word) Ticks#10
  (byte*) print_char_cursor#15 ← (byte*) print_char_cursor#31
  (byte*) print_line_cursor#6 ← (byte*) print_line_cursor#14
  return 
  to:@return
@49: scope:[]  from @45
  (byte*) print_line_cursor#19 ← phi( @45/(byte*) print_line_cursor#22 )
  (byte*) print_char_cursor#38 ← phi( @45/(byte*) print_char_cursor#41 )
  (word) Ticks#14 ← phi( @45/(word) Ticks#17 )
  call main 
  (signed word) main::return#2 ← (signed word) main::return#1
  to:@50
@50: scope:[]  from @49
  (byte*) print_line_cursor#15 ← phi( @49/(byte*) print_line_cursor#6 )
  (byte*) print_char_cursor#32 ← phi( @49/(byte*) print_char_cursor#15 )
  (word) Ticks#11 ← phi( @49/(word) Ticks#5 )
  (word) Ticks#6 ← (word) Ticks#11
  (byte*) print_char_cursor#16 ← (byte*) print_char_cursor#32
  (byte*) print_line_cursor#7 ← (byte*) print_line_cursor#15
  to:@end
@end: scope:[]  from @50

SYMBOL TABLE SSA
(label) @13
(label) @43
(label) @45
(label) @49
(label) @50
(label) @begin
(label) @end
(const byte*) CHARSET = (byte*)(number) $e800
(const byte*) CIA2_PORT_A = (byte*)(number) $dd00
(const byte) PAGE1 = (byte)(word)(const byte*) SCREEN1>>(number) 6&(number) $f0|(word)(const byte*) CHARSET>>(number) $a&(number) $e
(const byte) PAGE2 = (byte)(word)(const byte*) SCREEN2>>(number) 6&(number) $f0|(word)(const byte*) CHARSET>>(number) $a&(number) $e
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(const byte*) SCREEN1 = (byte*)(number) $e000
(const byte*) SCREEN2 = (byte*)(number) $e400
(word) Ticks
(word) Ticks#0
(word) Ticks#1
(word) Ticks#10
(word) Ticks#11
(word) Ticks#12
(word) Ticks#13
(word) Ticks#14
(word) Ticks#15
(word) Ticks#16
(word) Ticks#17
(word) Ticks#18
(word) Ticks#19
(word) Ticks#2
(word) Ticks#20
(word) Ticks#21
(word) Ticks#22
(word) Ticks#23
(word) Ticks#3
(word) Ticks#4
(word) Ticks#5
(word) Ticks#6
(word) Ticks#7
(word) Ticks#8
(word) Ticks#9
(const byte*) VIC_MEMORY = (byte*)(number) $d018
(const byte*) bittab[]  = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 }
(void()) doplasma((byte*) doplasma::scrn)
(bool~) doplasma::$0
(byte~) doplasma::$1
(bool~) doplasma::$2
(byte~) doplasma::$3
(bool~) doplasma::$4
(bool~) doplasma::$5
(byte~) doplasma::$6
(label) doplasma::@1
(label) doplasma::@13
(label) doplasma::@14
(label) doplasma::@16
(label) doplasma::@17
(label) doplasma::@18
(label) doplasma::@2
(label) doplasma::@3
(label) doplasma::@7
(label) doplasma::@8
(label) doplasma::@9
(label) doplasma::@return
(byte) doplasma::c1A
(byte) doplasma::c1A#0
(byte) doplasma::c1A#1
(byte) doplasma::c1A#2
(byte) doplasma::c1A#3
(byte) doplasma::c1A#4
(byte) doplasma::c1B
(byte) doplasma::c1B#0
(byte) doplasma::c1B#1
(byte) doplasma::c1B#2
(byte) doplasma::c1B#3
(byte) doplasma::c1B#4
(byte) doplasma::c1a
(byte) doplasma::c1a#0
(byte) doplasma::c1a#1
(byte) doplasma::c1a#2
(byte) doplasma::c1a#3
(byte) doplasma::c1a#4
(byte) doplasma::c1b
(byte) doplasma::c1b#0
(byte) doplasma::c1b#1
(byte) doplasma::c1b#2
(byte) doplasma::c1b#3
(byte) doplasma::c1b#4
(byte) doplasma::c2A
(byte) doplasma::c2A#0
(byte) doplasma::c2A#1
(byte) doplasma::c2A#2
(byte) doplasma::c2A#3
(byte) doplasma::c2A#4
(byte) doplasma::c2A#5
(byte) doplasma::c2A#6
(byte) doplasma::c2A#7
(byte) doplasma::c2B
(byte) doplasma::c2B#0
(byte) doplasma::c2B#1
(byte) doplasma::c2B#2
(byte) doplasma::c2B#3
(byte) doplasma::c2B#4
(byte) doplasma::c2B#5
(byte) doplasma::c2B#6
(byte) doplasma::c2B#7
(byte) doplasma::c2a
(byte) doplasma::c2a#0
(byte) doplasma::c2a#1
(byte) doplasma::c2a#2
(byte) doplasma::c2a#3
(byte) doplasma::c2a#4
(byte) doplasma::c2b
(byte) doplasma::c2b#0
(byte) doplasma::c2b#1
(byte) doplasma::c2b#2
(byte) doplasma::c2b#3
(byte) doplasma::c2b#4
(byte) doplasma::i
(byte) doplasma::i#0
(byte) doplasma::i#1
(byte) doplasma::i#2
(byte) doplasma::i#3
(byte) doplasma::i#4
(byte) doplasma::ii
(byte) doplasma::ii#0
(byte) doplasma::ii#1
(byte) doplasma::ii#2
(byte) doplasma::ii#3
(byte) doplasma::ii#4
(byte) doplasma::j
(byte) doplasma::j#0
(byte) doplasma::j#1
(byte) doplasma::j#2
(byte) doplasma::j#3
(byte) doplasma::j#4
(byte) doplasma::jj
(byte) doplasma::jj#0
(byte) doplasma::jj#1
(byte) doplasma::jj#2
(byte) doplasma::jj#3
(byte) doplasma::jj#4
(byte) doplasma::jj#5
(byte) doplasma::jj#6
(byte) doplasma::jj#7
(byte*) doplasma::scrn
(byte*) doplasma::scrn#0
(byte*) doplasma::scrn#1
(byte*) doplasma::scrn#10
(byte*) doplasma::scrn#11
(byte*) doplasma::scrn#12
(byte*) doplasma::scrn#13
(byte*) doplasma::scrn#14
(byte*) doplasma::scrn#2
(byte*) doplasma::scrn#3
(byte*) doplasma::scrn#4
(byte*) doplasma::scrn#5
(byte*) doplasma::scrn#6
(byte*) doplasma::scrn#7
(byte*) doplasma::scrn#8
(byte*) doplasma::scrn#9
(void()) end()
(label) end::@1
(label) end::@2
(label) end::@3
(label) end::@return
(word) last_time loadstore
(signed word()) main()
(number~) main::$2
(bool~) main::$6
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@2
(label) main::@3
(label) main::@8
(label) main::@9
(label) main::@return
(byte) main::block
(byte) main::block#0
(byte) main::block#1
(byte) main::block#2
(byte) main::block#3
(byte) main::block#4
(byte) main::block#5
(byte) main::block#6
(word) main::count
(word) main::count#0
(word) main::count#1
(word) main::count#2
(word) main::count#3
(word) main::count#4
(word) main::count#5
(word) main::count#6
(word) main::count#7
(signed word) main::return
(signed word) main::return#0
(signed word) main::return#1
(signed word) main::return#2
(signed word) main::return#3
(byte) main::tmp
(byte) main::tmp#0
(byte) main::tmp#1
(byte) main::tmp#2
(byte) main::v
(byte) main::v#0
(byte) main::v#1
(byte) main::v#2
(byte) main::v#3
(byte) main::v#4
(byte) main::v#5
(byte) main::v#6
(void()) makechar()
(bool~) makechar::$0
(byte~) makechar::$1
(bool~) makechar::$2
(bool~) makechar::$3
(byte~) makechar::$4
(number~) makechar::$5
(bool~) makechar::$6
(bool~) makechar::$7
(word~) makechar::$8
(word~) makechar::$9
(label) makechar::@1
(label) makechar::@10
(label) makechar::@13
(label) makechar::@2
(label) makechar::@21
(label) makechar::@4
(label) makechar::@5
(label) makechar::@6
(label) makechar::@7
(label) makechar::@8
(label) makechar::@9
(label) makechar::@return
(byte) makechar::b
(byte) makechar::b#0
(byte) makechar::b#1
(byte) makechar::b#2
(byte) makechar::b#3
(byte) makechar::b#4
(byte) makechar::b#5
(byte) makechar::b#6
(byte) makechar::b#7
(byte) makechar::b#8
(word) makechar::c
(word) makechar::c#0
(word) makechar::c#1
(word) makechar::c#10
(word) makechar::c#11
(word) makechar::c#12
(word) makechar::c#13
(word) makechar::c#2
(word) makechar::c#3
(word) makechar::c#4
(word) makechar::c#5
(word) makechar::c#6
(word) makechar::c#7
(word) makechar::c#8
(word) makechar::c#9
(byte) makechar::i
(byte) makechar::i#0
(byte) makechar::i#1
(byte) makechar::i#10
(byte) makechar::i#2
(byte) makechar::i#3
(byte) makechar::i#4
(byte) makechar::i#5
(byte) makechar::i#6
(byte) makechar::i#7
(byte) makechar::i#8
(byte) makechar::i#9
(byte) makechar::ii
(byte) makechar::ii#0
(byte) makechar::ii#1
(byte) makechar::ii#2
(byte) makechar::ii#3
(byte) makechar::ii#4
(byte) makechar::ii#5
(byte) makechar::ii#6
(byte) makechar::ii#7
(byte) makechar::s
(byte) makechar::s#0
(byte) makechar::s#1
(byte) makechar::s#2
(byte) makechar::s#3
(byte) makechar::s#4
(byte) makechar::s#5
(byte) makechar::s#6
(byte) makechar::s#7
(byte) makechar::s#8
(byte) makechar::s#9
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0
(number~) print_byte::$2
(label) print_byte::@1
(label) print_byte::@2
(label) print_byte::@return
(byte) print_byte::b
(byte) print_byte::b#0
(byte) print_byte::b#1
(byte) print_byte::b#2
(byte) print_byte::b#3
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
(byte) print_char::ch#0
(byte) print_char::ch#1
(byte) print_char::ch#2
(byte*) print_char_cursor
(byte*) print_char_cursor#0
(byte*) print_char_cursor#1
(byte*) print_char_cursor#10
(byte*) print_char_cursor#11
(byte*) print_char_cursor#12
(byte*) print_char_cursor#13
(byte*) print_char_cursor#14
(byte*) print_char_cursor#15
(byte*) print_char_cursor#16
(byte*) print_char_cursor#17
(byte*) print_char_cursor#18
(byte*) print_char_cursor#19
(byte*) print_char_cursor#2
(byte*) print_char_cursor#20
(byte*) print_char_cursor#21
(byte*) print_char_cursor#22
(byte*) print_char_cursor#23
(byte*) print_char_cursor#24
(byte*) print_char_cursor#25
(byte*) print_char_cursor#26
(byte*) print_char_cursor#27
(byte*) print_char_cursor#28
(byte*) print_char_cursor#29
(byte*) print_char_cursor#3
(byte*) print_char_cursor#30
(byte*) print_char_cursor#31
(byte*) print_char_cursor#32
(byte*) print_char_cursor#33
(byte*) print_char_cursor#34
(byte*) print_char_cursor#35
(byte*) print_char_cursor#36
(byte*) print_char_cursor#37
(byte*) print_char_cursor#38
(byte*) print_char_cursor#39
(byte*) print_char_cursor#4
(byte*) print_char_cursor#40
(byte*) print_char_cursor#41
(byte*) print_char_cursor#42
(byte*) print_char_cursor#43
(byte*) print_char_cursor#44
(byte*) print_char_cursor#45
(byte*) print_char_cursor#46
(byte*) print_char_cursor#47
(byte*) print_char_cursor#48
(byte*) print_char_cursor#5
(byte*) print_char_cursor#6
(byte*) print_char_cursor#7
(byte*) print_char_cursor#8
(byte*) print_char_cursor#9
(const byte*) print_hextab[]  = (string) "0123456789abcdef"z
(byte*) print_line_cursor
(byte*) print_line_cursor#0
(byte*) print_line_cursor#1
(byte*) print_line_cursor#10
(byte*) print_line_cursor#11
(byte*) print_line_cursor#12
(byte*) print_line_cursor#13
(byte*) print_line_cursor#14
(byte*) print_line_cursor#15
(byte*) print_line_cursor#16
(byte*) print_line_cursor#17
(byte*) print_line_cursor#18
(byte*) print_line_cursor#19
(byte*) print_line_cursor#2
(byte*) print_line_cursor#20
(byte*) print_line_cursor#21
(byte*) print_line_cursor#22
(byte*) print_line_cursor#23
(byte*) print_line_cursor#24
(byte*) print_line_cursor#25
(byte*) print_line_cursor#26
(byte*) print_line_cursor#27
(byte*) print_line_cursor#28
(byte*) print_line_cursor#29
(byte*) print_line_cursor#3
(byte*) print_line_cursor#30
(byte*) print_line_cursor#4
(byte*) print_line_cursor#5
(byte*) print_line_cursor#6
(byte*) print_line_cursor#7
(byte*) print_line_cursor#8
(byte*) print_line_cursor#9
(void()) print_ln()
(byte*~) print_ln::$0
(bool~) print_ln::$1
(label) print_ln::@1
(label) print_ln::@2
(label) print_ln::@return
(byte*) print_screen
(byte*) print_screen#0
(void()) print_word((word) print_word::w)
(byte~) print_word::$0
(byte~) print_word::$2
(label) print_word::@1
(label) print_word::@2
(label) print_word::@return
(word) print_word::w
(word) print_word::w#0
(word) print_word::w#1
(word) print_word::w#2
(byte()) rand()
(byte~) rand::$0
(label) rand::@return
(const word*) rand::RAND_SEED = &(word) rand_seed
(byte) rand::return
(byte) rand::return#0
(byte) rand::return#1
(byte) rand::return#2
(byte) rand::return#3
(byte) rand::return#4
(word) rand_seed loadstore
(const byte*) sinustable[(number) $100]  = { (byte) $80, (byte) $7d, (byte) $7a, (byte) $77, (byte) $74, (byte) $70, (byte) $6d, (byte) $6a, (byte) $67, (byte) $64, (byte) $61, (byte) $5e, (byte) $5b, (byte) $58, (byte) $55, (byte) $52, (byte) $4f, (byte) $4d, (byte) $4a, (byte) $47, (byte) $44, (byte) $41, (byte) $3f, (byte) $3c, (byte) $39, (byte) $37, (byte) $34, (byte) $32, (byte) $2f, (byte) $2d, (byte) $2b, (byte) $28, (byte) $26, (byte) $24, (byte) $22, (byte) $20, (byte) $1e, (byte) $1c, (byte) $1a, (byte) $18, (byte) $16, (byte) $15, (byte) $13, (byte) $11, (byte) $10, (byte) $f, (byte) $d, (byte) $c, (byte) $b, (byte) $a, (byte) 8, (byte) 7, (byte) 6, (byte) 6, (byte) 5, (byte) 4, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 2, (byte) 2, (byte) 3, (byte) 3, (byte) 4, (byte) 5, (byte) 6, (byte) 6, (byte) 7, (byte) 8, (byte) $a, (byte) $b, (byte) $c, (byte) $d, (byte) $f, (byte) $10, (byte) $11, (byte) $13, (byte) $15, (byte) $16, (byte) $18, (byte) $1a, (byte) $1c, (byte) $1e, (byte) $20, (byte) $22, (byte) $24, (byte) $26, (byte) $28, (byte) $2b, (byte) $2d, (byte) $2f, (byte) $32, (byte) $34, (byte) $37, (byte) $39, (byte) $3c, (byte) $3f, (byte) $41, (byte) $44, (byte) $47, (byte) $4a, (byte) $4d, (byte) $4f, (byte) $52, (byte) $55, (byte) $58, (byte) $5b, (byte) $5e, (byte) $61, (byte) $64, (byte) $67, (byte) $6a, (byte) $6d, (byte) $70, (byte) $74, (byte) $77, (byte) $7a, (byte) $7d, (byte) $80, (byte) $83, (byte) $86, (byte) $89, (byte) $8c, (byte) $90, (byte) $93, (byte) $96, (byte) $99, (byte) $9c, (byte) $9f, (byte) $a2, (byte) $a5, (byte) $a8, (byte) $ab, (byte) $ae, (byte) $b1, (byte) $b3, (byte) $b6, (byte) $b9, (byte) $bc, (byte) $bf, (byte) $c1, (byte) $c4, (byte) $c7, (byte) $c9, (byte) $cc, (byte) $ce, (byte) $d1, (byte) $d3, (byte) $d5, (byte) $d8, (byte) $da, (byte) $dc, (byte) $de, (byte) $e0, (byte) $e2, (byte) $e4, (byte) $e6, (byte) $e8, (byte) $ea, (byte) $eb, (byte) $ed, (byte) $ef, (byte) $f0, (byte) $f1, (byte) $f3, (byte) $f4, (byte) $f5, (byte) $f6, (byte) $f8, (byte) $f9, (byte) $fa, (byte) $fa, (byte) $fb, (byte) $fc, (byte) $fd, (byte) $fd, (byte) $fe, (byte) $fe, (byte) $fe, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $fe, (byte) $fe, (byte) $fe, (byte) $fd, (byte) $fd, (byte) $fc, (byte) $fb, (byte) $fa, (byte) $fa, (byte) $f9, (byte) $f8, (byte) $f6, (byte) $f5, (byte) $f4, (byte) $f3, (byte) $f1, (byte) $f0, (byte) $ef, (byte) $ed, (byte) $eb, (byte) $ea, (byte) $e8, (byte) $e6, (byte) $e4, (byte) $e2, (byte) $e0, (byte) $de, (byte) $dc, (byte) $da, (byte) $d8, (byte) $d5, (byte) $d3, (byte) $d1, (byte) $ce, (byte) $cc, (byte) $c9, (byte) $c7, (byte) $c4, (byte) $c1, (byte) $bf, (byte) $bc, (byte) $b9, (byte) $b6, (byte) $b3, (byte) $b1, (byte) $ae, (byte) $ab, (byte) $a8, (byte) $a5, (byte) $a2, (byte) $9f, (byte) $9c, (byte) $99, (byte) $96, (byte) $93, (byte) $90, (byte) $8c, (byte) $89, (byte) $86, (byte) $83 }
(void()) start()
(label) start::@return
(const word*) start::LAST_TIME = &(word) last_time
(const byte*) xbuf[(number) $28]  = { fill( $28, 0) }
(const byte*) ybuf[(number) $19]  = { fill( $19, 0) }

Adding number conversion cast (unumber) $f0 in 
Adding number conversion cast (unumber) 6 in 
Adding number conversion cast (unumber) $e in 
Adding number conversion cast (unumber) $a in 
Adding number conversion cast (unumber) $f0 in 
Adding number conversion cast (unumber) 6 in 
Adding number conversion cast (unumber) $e in 
Adding number conversion cast (unumber) $a in 
Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#8 + (number) $28
Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (number) 4
Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f
Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f
Adding number conversion cast (unumber) $194a in (word) rand_seed ← (number) $194a
Adding number conversion cast (unumber) 0 in (byte) doplasma::ii#1 ← (number) 0
Adding number conversion cast (unumber) $19 in (bool~) doplasma::$0 ← (byte) doplasma::ii#3 < (number) $19
Adding number conversion cast (unumber) 4 in (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (number) 4
Adding number conversion cast (unumber) 9 in (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (number) 9
Adding number conversion cast (unumber) 3 in (byte) doplasma::c1A#1 ← (byte) doplasma::c1A#2 + (number) 3
Adding number conversion cast (unumber) 5 in (byte) doplasma::c1B#1 ← (byte) doplasma::c1B#2 - (number) 5
Adding number conversion cast (unumber) 0 in (byte) doplasma::i#1 ← (number) 0
Adding number conversion cast (unumber) $28 in (bool~) doplasma::$2 ← (byte) doplasma::i#3 < (number) $28
Adding number conversion cast (unumber) 3 in (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (number) 3
Adding number conversion cast (unumber) 7 in (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (number) 7
Adding number conversion cast (unumber) 2 in (byte) doplasma::c2A#1 ← (byte) doplasma::c2A#3 + (number) 2
Adding number conversion cast (unumber) 3 in (byte) doplasma::c2B#1 ← (byte) doplasma::c2B#3 - (number) 3
Adding number conversion cast (unumber) 0 in (byte) doplasma::jj#1 ← (number) 0
Adding number conversion cast (unumber) $19 in (bool~) doplasma::$4 ← (byte) doplasma::jj#3 < (number) $19
Adding number conversion cast (unumber) 0 in (byte) doplasma::j#1 ← (number) 0
Adding number conversion cast (unumber) $28 in (bool~) doplasma::$5 ← (byte) doplasma::j#3 < (number) $28
Adding number conversion cast (unumber) $28 in (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#4 + (number) $28
Adding number conversion cast (unumber) 0 in (word) makechar::c#1 ← (number) 0
Adding number conversion cast (unumber) $100 in (bool~) makechar::$0 ← (word) makechar::c#3 < (number) $100
Adding number conversion cast (unumber) 0 in (byte) makechar::i#1 ← (number) 0
Adding number conversion cast (unumber) 8 in (bool~) makechar::$2 ← (byte) makechar::i#3 < (number) 8
Adding number conversion cast (unumber) 0 in (byte) makechar::b#1 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) makechar::ii#1 ← (number) 0
Adding number conversion cast (unumber) 8 in (bool~) makechar::$3 ← (byte) makechar::ii#3 < (number) 8
Adding number conversion cast (unumber) $ff in (number~) makechar::$5 ← (byte~) makechar::$4 & (number) $ff
Adding number conversion cast (unumber) makechar::$5 in (number~) makechar::$5 ← (byte~) makechar::$4 & (unumber)(number) $ff
Adding number conversion cast (unumber) 3 in (word~) makechar::$8 ← (word) makechar::c#6 << (number) 3
Adding number conversion cast (unumber) $194a in (word) rand_seed ← (number) $194a
Adding number conversion cast (unumber) $fc in (number~) main::$2 ← (byte) main::block#1 & (number) $fc
Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (byte) main::block#1 & (unumber)(number) $fc
Adding number conversion cast (unumber) 3 in (byte) main::tmp#2 ← (byte) main::tmp#1 | (byte)(word)(const byte*) SCREEN1>>(number) $e^(number) 3
Adding number conversion cast (unumber) $e in (byte) main::tmp#2 ← (byte) main::tmp#1 | (byte)(word)(const byte*) SCREEN1>>(number) $e^(unumber)(number) 3
Adding number conversion cast (unumber) 0 in (bool~) main::$6 ← (number) 0 != (word) main::count#2
Adding number conversion cast (snumber) 0 in (signed word) main::return#0 ← (number) 0
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (word) rand_seed ← (unumber)(number) $194a
Inlining cast (byte~) rand::$0 ← (byte)(word) rand_seed
Inlining cast (byte) doplasma::ii#1 ← (unumber)(number) 0
Inlining cast (byte) doplasma::i#1 ← (unumber)(number) 0
Inlining cast (byte) doplasma::jj#1 ← (unumber)(number) 0
Inlining cast (byte) doplasma::j#1 ← (unumber)(number) 0
Inlining cast (word) makechar::c#1 ← (unumber)(number) 0
Inlining cast (byte~) makechar::$1 ← (byte)(word) makechar::c#4
Inlining cast (byte) makechar::i#1 ← (unumber)(number) 0
Inlining cast (byte) makechar::b#1 ← (unumber)(number) 0
Inlining cast (byte) makechar::ii#1 ← (unumber)(number) 0
Inlining cast (word) rand_seed ← (unumber)(number) $194a
Inlining cast (signed word) main::return#0 ← (snumber)(number) 0
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 53272
Simplifying constant pointer cast (byte*) 56576
Simplifying constant pointer cast (byte*) 57344
Simplifying constant pointer cast (byte*) 58368
Simplifying constant pointer cast (byte*) 59392
Simplifying constant integer cast 6
Simplifying constant integer cast $f0
Simplifying constant integer cast $a
Simplifying constant integer cast $e
Simplifying constant integer cast 6
Simplifying constant integer cast $f0
Simplifying constant integer cast $a
Simplifying constant integer cast $e
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast $28
Simplifying constant integer cast 4
Simplifying constant integer cast $f
Simplifying constant integer cast $194a
Simplifying constant integer cast 0
Simplifying constant integer cast $19
Simplifying constant integer cast 4
Simplifying constant integer cast 9
Simplifying constant integer cast 3
Simplifying constant integer cast 5
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast 3
Simplifying constant integer cast 7
Simplifying constant integer cast 2
Simplifying constant integer cast 3
Simplifying constant integer cast 0
Simplifying constant integer cast $19
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast 0
Simplifying constant integer cast $100
Simplifying constant integer cast 0
Simplifying constant integer cast 8
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 8
Simplifying constant integer cast $ff
Simplifying constant integer cast 3
Simplifying constant integer cast (const byte*) CHARSET
Simplifying constant integer cast $194a
Simplifying constant integer cast $fc
Simplifying constant integer cast $e
Simplifying constant integer cast 3
Simplifying constant integer cast 0
Simplifying constant integer cast (const byte*) SCREEN1
Simplifying constant integer cast (const byte*) SCREEN2
Simplifying constant integer cast 0
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 6
Finalized unsigned number type (byte) $f0
Finalized unsigned number type (byte) $a
Finalized unsigned number type (byte) $e
Finalized unsigned number type (byte) 6
Finalized unsigned number type (byte) $f0
Finalized unsigned number type (byte) $a
Finalized unsigned number type (byte) $e
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $f
Finalized unsigned number type (word) $194a
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $19
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 9
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 5
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $19
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $100
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) 3
Finalized unsigned number type (word) $194a
Finalized unsigned number type (byte) $fc
Finalized unsigned number type (byte) $e
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 0
Finalized signed number type (signed byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f
Inferred type updated to byte in (unumber~) makechar::$5 ← (byte~) makechar::$4 & (byte) $ff
Inferred type updated to byte in (unumber~) main::$2 ← (byte) main::block#1 & (byte) $fc
Inversing boolean not [173] (bool~) makechar::$7 ← (byte~) makechar::$5 <= (byte) makechar::s#2 from [172] (bool~) makechar::$6 ← (byte~) makechar::$5 > (byte) makechar::s#2
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte*) print_char_cursor#0 = (byte*) print_line_cursor#0 (byte*) print_screen#0 (byte*) print_char_cursor#42 (byte*) print_line_cursor#24 (byte*) print_char_cursor#41 (byte*) print_line_cursor#22 (byte*) print_char_cursor#38 (byte*) print_line_cursor#19 
Alias (byte*) print_line_cursor#1 = (byte*~) print_ln::$0 (byte*) print_line_cursor#9 (byte*) print_char_cursor#1 (byte*) print_line_cursor#10 (byte*) print_char_cursor#18 (byte*) print_line_cursor#2 (byte*) print_char_cursor#2 
Alias (byte) print_byte::b#0 = (byte~) print_word::$0 
Alias (word) print_word::w#1 = (word) print_word::w#2 
Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#3 
Alias (byte) print_byte::b#1 = (byte~) print_word::$2 
Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#4 (byte*) print_char_cursor#21 (byte*) print_char_cursor#5 
Alias (byte) print_byte::b#2 = (byte) print_byte::b#3 
Alias (byte*) print_char_cursor#22 = (byte*) print_char_cursor#6 
Alias (byte*) print_char_cursor#23 = (byte*) print_char_cursor#7 (byte*) print_char_cursor#24 (byte*) print_char_cursor#8 
Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#26 (byte*) print_char_cursor#9 
Alias (word) Ticks#1 = (word) Ticks#7 
Alias (byte*) print_char_cursor#36 = (byte*) print_char_cursor#39 
Alias (byte*) print_line_cursor#17 = (byte*) print_line_cursor#20 (byte*) print_line_cursor#23 
Alias (word) Ticks#12 = (word) Ticks#15 (word) Ticks#2 (word) Ticks#8 (word) Ticks#3 
Alias (byte*) print_char_cursor#11 = (byte*) print_char_cursor#27 
Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#3 (byte*) print_line_cursor#12 (byte*) print_line_cursor#4 
Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#28 (byte*) print_char_cursor#29 (byte*) print_char_cursor#13 
Alias (word) Ticks#0 = (word) Ticks#17 (word) Ticks#14 
Alias (byte) rand::return#0 = (byte~) rand::$0 (byte) rand::return#3 (byte) rand::return#1 
Alias (byte) doplasma::c1a#1 = (byte) doplasma::c1A#0 
Alias (byte) doplasma::c1b#1 = (byte) doplasma::c1B#0 
Alias (byte) doplasma::c1a#3 = (byte) doplasma::c1a#4 
Alias (byte) doplasma::c1b#3 = (byte) doplasma::c1b#4 
Alias (byte) doplasma::ii#3 = (byte) doplasma::ii#4 
Alias (byte) doplasma::c1A#2 = (byte) doplasma::c1A#4 (byte) doplasma::c1A#3 
Alias (byte) doplasma::c1B#2 = (byte) doplasma::c1B#4 (byte) doplasma::c1B#3 
Alias (byte) doplasma::c2A#2 = (byte) doplasma::c2A#6 (byte) doplasma::c2A#4 (byte) doplasma::c2a#1 
Alias (byte) doplasma::c2B#2 = (byte) doplasma::c2B#6 (byte) doplasma::c2B#4 (byte) doplasma::c2b#1 
Alias (byte*) doplasma::scrn#10 = (byte*) doplasma::scrn#14 (byte*) doplasma::scrn#12 
Alias (byte) doplasma::c2a#3 = (byte) doplasma::c2a#4 
Alias (byte) doplasma::c2b#3 = (byte) doplasma::c2b#4 
Alias (byte) doplasma::i#3 = (byte) doplasma::i#4 
Alias (byte) doplasma::c2A#3 = (byte) doplasma::c2A#7 (byte) doplasma::c2A#5 
Alias (byte) doplasma::c2B#3 = (byte) doplasma::c2B#7 (byte) doplasma::c2B#5 
Alias (byte*) doplasma::scrn#11 = (byte*) doplasma::scrn#9 (byte*) doplasma::scrn#8 
Alias (byte) doplasma::jj#3 = (byte) doplasma::jj#7 
Alias (byte*) doplasma::scrn#6 = (byte*) doplasma::scrn#7 
Alias (byte) doplasma::j#3 = (byte) doplasma::j#4 
Alias (byte) doplasma::jj#4 = (byte) doplasma::jj#6 (byte) doplasma::jj#5 
Alias (byte*) doplasma::scrn#3 = (byte*) doplasma::scrn#5 (byte*) doplasma::scrn#4 
Alias (word) makechar::c#3 = (word) makechar::c#4 
Alias (word) makechar::c#10 = (word) makechar::c#7 (word) makechar::c#5 
Alias (byte) makechar::i#3 = (byte) makechar::i#7 
Alias (byte) makechar::s#6 = (byte) makechar::s#7 
Alias (byte) makechar::s#2 = (byte) makechar::s#3 (byte) makechar::s#4 (byte) makechar::s#9 (byte) makechar::s#8 
Alias (byte) makechar::ii#3 = (byte) makechar::ii#7 (byte) makechar::ii#6 (byte) makechar::ii#5 
Alias (byte) makechar::b#3 = (byte) makechar::b#8 (byte) makechar::b#5 (byte) makechar::b#6 (byte) makechar::b#4 
Alias (word) makechar::c#11 = (word) makechar::c#13 (word) makechar::c#8 (word) makechar::c#12 (word) makechar::c#6 
Alias (byte) makechar::i#10 = (byte) makechar::i#5 (byte) makechar::i#9 (byte) makechar::i#4 (byte) makechar::i#8 
Alias (byte) rand::return#2 = (byte) rand::return#4 
Alias (word) main::count#0 = (word) main::count#6 (word) main::count#4 
Alias (word) Ticks#19 = (word) Ticks#20 (word) Ticks#22 
Alias (byte*) print_char_cursor#44 = (byte*) print_char_cursor#45 (byte*) print_char_cursor#47 
Alias (byte*) print_line_cursor#26 = (byte*) print_line_cursor#27 (byte*) print_line_cursor#29 
Alias (byte) main::tmp#1 = (byte~) main::$2 
Alias (word) main::count#2 = (word) main::count#7 (word) main::count#5 (word) main::count#3 
Alias (byte) main::v#2 = (byte) main::v#6 (byte) main::v#3 (byte) main::v#5 (byte) main::v#4 
Alias (byte) main::block#2 = (byte) main::block#6 (byte) main::block#3 (byte) main::block#5 (byte) main::block#4 
Alias (word) Ticks#13 = (word) Ticks#23 (word) Ticks#16 (word) Ticks#21 (word) Ticks#18 
Alias (byte*) print_char_cursor#37 = (byte*) print_char_cursor#48 (byte*) print_char_cursor#40 (byte*) print_char_cursor#46 (byte*) print_char_cursor#43 
Alias (byte*) print_line_cursor#18 = (byte*) print_line_cursor#30 (byte*) print_line_cursor#21 (byte*) print_line_cursor#28 (byte*) print_line_cursor#25 
Alias (word) Ticks#10 = (word) Ticks#4 (word) Ticks#9 (word) Ticks#5 
Alias (byte*) print_char_cursor#14 = (byte*) print_char_cursor#30 (byte*) print_char_cursor#31 (byte*) print_char_cursor#15 
Alias (byte*) print_line_cursor#13 = (byte*) print_line_cursor#5 (byte*) print_line_cursor#14 (byte*) print_line_cursor#6 
Alias (signed word) main::return#0 = (signed word) main::return#3 (signed word) main::return#1 
Alias (word) Ticks#11 = (word) Ticks#6 
Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#32 
Alias (byte*) print_line_cursor#15 = (byte*) print_line_cursor#7 
Successful SSA optimization Pass2AliasElimination
Alias (byte) makechar::ii#3 = (byte) makechar::ii#4 
Alias (word) makechar::c#11 = (word) makechar::c#9 
Alias (byte) makechar::i#10 = (byte) makechar::i#6 
Alias (byte) makechar::s#2 = (byte) makechar::s#5 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte*) print_line_cursor#16 (byte*) print_line_cursor#17
Identical Phi Values (byte*) print_char_cursor#33 (byte*) print_char_cursor#11
Identical Phi Values (byte*) print_char_cursor#17 (byte*) print_char_cursor#33
Identical Phi Values (word) print_word::w#1 (word) print_word::w#0
Identical Phi Values (byte*) print_char_cursor#34 (byte*) print_char_cursor#36
Identical Phi Values (byte*) print_char_cursor#19 (byte*) print_char_cursor#23
Identical Phi Values (byte*) print_char_cursor#20 (byte*) print_char_cursor#23
Identical Phi Values (byte*) print_char_cursor#22 (byte*) print_char_cursor#10
Identical Phi Values (byte*) print_char_cursor#23 (byte*) print_char_cursor#10
Identical Phi Values (byte*) print_char_cursor#36 (byte*) print_char_cursor#37
Identical Phi Values (byte*) print_line_cursor#17 (byte*) print_line_cursor#18
Identical Phi Values (byte*) print_char_cursor#11 (byte*) print_char_cursor#20
Identical Phi Values (byte*) print_line_cursor#11 (byte*) print_line_cursor#1
Identical Phi Values (byte*) print_char_cursor#12 (byte*) print_line_cursor#1
Identical Phi Values (byte) doplasma::c1A#2 (byte) doplasma::c1a#1
Identical Phi Values (byte) doplasma::c1B#2 (byte) doplasma::c1b#1
Identical Phi Values (byte) doplasma::c2A#2 (byte) doplasma::c2A#0
Identical Phi Values (byte) doplasma::c2B#2 (byte) doplasma::c2B#0
Identical Phi Values (byte*) doplasma::scrn#10 (byte*) doplasma::scrn#13
Identical Phi Values (byte) doplasma::c2A#3 (byte) doplasma::c2A#2
Identical Phi Values (byte) doplasma::c2B#3 (byte) doplasma::c2B#2
Identical Phi Values (byte*) doplasma::scrn#11 (byte*) doplasma::scrn#10
Identical Phi Values (byte) doplasma::jj#4 (byte) doplasma::jj#3
Identical Phi Values (byte*) doplasma::scrn#3 (byte*) doplasma::scrn#6
Identical Phi Values (word) makechar::c#11 (word) makechar::c#10
Identical Phi Values (byte) makechar::i#10 (byte) makechar::i#3
Identical Phi Values (byte) makechar::s#2 (byte) makechar::s#6
Identical Phi Values (word) Ticks#19 (word) Ticks#0
Identical Phi Values (byte*) print_char_cursor#44 (byte*) print_char_cursor#0
Identical Phi Values (byte*) print_line_cursor#26 (byte*) print_char_cursor#0
Identical Phi Values (byte) main::v#2 (byte) main::v#1
Identical Phi Values (byte) main::block#2 (byte) main::block#1
Identical Phi Values (word) Ticks#13 (word) Ticks#19
Identical Phi Values (byte*) print_char_cursor#37 (byte*) print_char_cursor#44
Identical Phi Values (byte*) print_line_cursor#18 (byte*) print_line_cursor#26
Identical Phi Values (word) Ticks#10 (word) Ticks#12
Identical Phi Values (byte*) print_char_cursor#14 (byte*) print_char_cursor#12
Identical Phi Values (byte*) print_line_cursor#13 (byte*) print_line_cursor#11
Identical Phi Values (word) Ticks#11 (word) Ticks#10
Identical Phi Values (byte*) print_char_cursor#16 (byte*) print_char_cursor#14
Identical Phi Values (byte*) print_line_cursor#15 (byte*) print_line_cursor#13
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (word) makechar::c#10 (word) makechar::c#3
Identical Phi Values (byte) makechar::s#6 (byte) makechar::s#1
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) print_ln::$1 [8] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1
Simple Condition (bool~) doplasma::$0 [100] if((byte) doplasma::ii#3<(byte) $19) goto doplasma::@2
Simple Condition (bool~) doplasma::$2 [115] if((byte) doplasma::i#3<(byte) $28) goto doplasma::@8
Simple Condition (bool~) doplasma::$4 [128] if((byte) doplasma::jj#3<(byte) $19) goto doplasma::@14
Simple Condition (bool~) doplasma::$5 [133] if((byte) doplasma::j#3<(byte) $28) goto doplasma::@17
Simple Condition (bool~) makechar::$0 [150] if((word) makechar::c#3<(word) $100) goto makechar::@2
Simple Condition (bool~) makechar::$2 [157] if((byte) makechar::i#3<(byte) 8) goto makechar::@5
Simple Condition (bool~) makechar::$3 [165] if((byte) makechar::ii#3<(byte) 8) goto makechar::@8
Simple Condition (bool~) makechar::$7 [174] if((byte~) makechar::$5<=(byte) makechar::s#1) goto makechar::@10
Simple Condition (bool~) main::$6 [203] if((byte) 0!=(word) main::count#2) goto main::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) print_char_cursor#0 = (byte*) 1024
Constant (const word) Ticks#0 = 0
Constant (const byte) doplasma::c1a#0 = 0
Constant (const byte) doplasma::c1b#0 = 0
Constant (const byte) doplasma::c2a#0 = 0
Constant (const byte) doplasma::c2b#0 = 0
Constant (const byte) doplasma::c1a#1 = 0
Constant (const byte) doplasma::c1b#1 = 0
Constant (const byte) doplasma::c2A#0 = 0
Constant (const byte) doplasma::c2B#0 = 0
Constant (const byte) doplasma::i#0 = 0
Constant (const byte) doplasma::ii#0 = 0
Constant (const byte) doplasma::j#0 = 0
Constant (const byte) doplasma::jj#0 = 0
Constant (const byte) doplasma::ii#1 = 0
Constant (const byte) doplasma::i#1 = 0
Constant (const byte) doplasma::jj#1 = 0
Constant (const byte) doplasma::j#1 = 0
Constant (const byte) makechar::i#0 = 0
Constant (const byte) makechar::ii#0 = 0
Constant (const byte) makechar::b#0 = 0
Constant (const byte) makechar::s#0 = 0
Constant (const word) makechar::c#0 = 0
Constant (const word) makechar::c#1 = 0
Constant (const byte) makechar::i#1 = 0
Constant (const byte) makechar::b#1 = 0
Constant (const byte) makechar::ii#1 = 0
Constant (const byte) main::v#0 = 0
Constant (const byte) main::block#0 = 0
Constant (const word) main::count#0 = $1f4
Constant (const byte) main::tmp#0 = 0
Constant (const byte*) doplasma::scrn#1 = SCREEN1
Constant (const byte*) doplasma::scrn#2 = SCREEN2
Constant (const signed word) main::return#0 = 0
Successful SSA optimization Pass2ConstantIdentification
Constant (const signed word) main::return#2 = main::return#0
Successful SSA optimization Pass2ConstantIdentification
De-inlining pointer[w] to *(pointer+w)   [178] *((const byte*) CHARSET + (word~) makechar::$9) ← (byte) makechar::b#3
Successful SSA optimization Pass2DeInlineWordDerefIdx
Simplifying constant evaluating to zero (byte)(word)(const byte*) SCREEN1>>(byte) $e^(byte) 3 in [198] (byte) main::tmp#2 ← (byte) main::tmp#1 | (byte)(word)(const byte*) SCREEN1>>(byte) $e^(byte) 3
Successful SSA optimization PassNSimplifyConstantZero
Simplifying expression containing zero 3 in [108] (byte) doplasma::c1A#1 ← (const byte) doplasma::c1a#1 + (byte) 3
Simplifying expression containing zero 5 in [109] (byte) doplasma::c1B#1 ← (const byte) doplasma::c1b#1 - (byte) 5
Simplifying expression containing zero 2 in [123] (byte) doplasma::c2A#1 ← (const byte) doplasma::c2A#0 + (byte) 2
Simplifying expression containing zero 3 in [124] (byte) doplasma::c2B#1 ← (const byte) doplasma::c2B#0 - (byte) 3
Simplifying expression containing zero main::tmp#1 in [198] (byte) main::tmp#2 ← (byte) main::tmp#1 | (byte) 0
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused variable (byte) doplasma::c1A#1 and assignment [45] (byte) doplasma::c1A#1 ← (byte) 3
Eliminating unused variable (byte) doplasma::c1B#1 and assignment [46] (byte) doplasma::c1B#1 ← (byte) 5
Eliminating unused variable (byte) doplasma::c2A#1 and assignment [54] (byte) doplasma::c2A#1 ← (byte) 2
Eliminating unused variable (byte) doplasma::c2B#1 and assignment [55] (byte) doplasma::c2B#1 ← (byte) 3
Eliminating unused constant (const byte) doplasma::c1a#0
Eliminating unused constant (const byte) doplasma::c1b#0
Eliminating unused constant (const byte) doplasma::c2a#0
Eliminating unused constant (const byte) doplasma::c2b#0
Eliminating unused constant (const byte) doplasma::i#0
Eliminating unused constant (const byte) doplasma::ii#0
Eliminating unused constant (const byte) doplasma::j#0
Eliminating unused constant (const byte) doplasma::jj#0
Eliminating unused constant (const byte) makechar::i#0
Eliminating unused constant (const byte) makechar::ii#0
Eliminating unused constant (const byte) makechar::b#0
Eliminating unused constant (const byte) makechar::s#0
Eliminating unused constant (const word) makechar::c#0
Eliminating unused constant (const byte) main::v#0
Eliminating unused constant (const byte) main::block#0
Eliminating unused constant (const byte) main::tmp#0
Eliminating unused constant (const signed word) main::return#2
Eliminating unused constant (const word) Ticks#0
Successful SSA optimization PassNEliminateUnusedVars
Eliminating unused constant (const signed word) main::return#0
Successful SSA optimization PassNEliminateUnusedVars
Simplifying constant integer cast (word)(const byte*) SCREEN1>>(byte) 6&(byte) $f0|(word)(const byte*) CHARSET>>(byte) $a&(byte) $e
Simplifying constant integer cast (word)(const byte*) SCREEN2>>(byte) 6&(byte) $f0|(word)(const byte*) CHARSET>>(byte) $a&(byte) $e
Successful SSA optimization PassNCastSimplification
Alias (byte) main::tmp#1 = (byte) main::tmp#2 
Successful SSA optimization Pass2AliasElimination
Inlining constant with var siblings (const byte) doplasma::c1a#1
Inlining constant with var siblings (const byte) doplasma::c1b#1
Inlining constant with var siblings (const byte) doplasma::ii#1
Inlining constant with var siblings (const byte) doplasma::i#1
Inlining constant with var siblings (const byte) doplasma::jj#1
Inlining constant with var siblings (const byte) doplasma::j#1
Inlining constant with var siblings (const byte*) doplasma::scrn#1
Inlining constant with var siblings (const byte*) doplasma::scrn#2
Inlining constant with var siblings (const word) makechar::c#1
Inlining constant with var siblings (const byte) makechar::i#1
Inlining constant with var siblings (const byte) makechar::b#1
Inlining constant with var siblings (const byte) makechar::ii#1
Inlining constant with var siblings (const word) main::count#0
Inlining constant with var siblings (const byte*) print_char_cursor#0
Constant inlined makechar::c#1 = (byte) 0
Constant inlined makechar::b#1 = (byte) 0
Constant inlined doplasma::i#1 = (byte) 0
Constant inlined makechar::ii#1 = (byte) 0
Constant inlined doplasma::j#1 = (byte) 0
Constant inlined doplasma::ii#1 = (byte) 0
Constant inlined doplasma::jj#1 = (byte) 0
Constant inlined print_char_cursor#0 = (byte*) 1024
Constant inlined main::count#0 = (word) $1f4
Constant inlined doplasma::scrn#2 = (const byte*) SCREEN2
Constant inlined doplasma::scrn#1 = (const byte*) SCREEN1
Constant inlined doplasma::c1a#1 = (byte) 0
Constant inlined doplasma::c1b#1 = (byte) 0
Constant inlined makechar::i#1 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Added new block during phi lifting makechar::@22(between makechar::@21 and makechar::@10)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @13
Adding NOP phi() at start of @49
Adding NOP phi() at start of @50
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@8
Adding NOP phi() at start of main::@12
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of doplasma::@3
Adding NOP phi() at start of doplasma::@14
Adding NOP phi() at start of end::@2
Adding NOP phi() at start of end::@3
Adding NOP phi() at start of print_ln
Adding NOP phi() at start of print_ln::@2
Adding NOP phi() at start of print_word::@2
Adding NOP phi() at start of print_byte::@2
Adding NOP phi() at start of makechar
Adding NOP phi() at start of makechar::@5
Adding NOP phi() at start of makechar::@8
CALL GRAPH
Calls in [] to main:5 
Calls in [main] to makechar:9 start:11 end:20 doplasma:24 doplasma:26 
Calls in [end] to start:68 print_word:72 print_ln:74 
Calls in [print_word] to print_byte:86 print_byte:90 
Calls in [print_byte] to print_char:98 print_char:103 
Calls in [makechar] to rand:133 

Created 21 initial phi equivalence classes
Coalesced [29] main::count#8 ← main::count#1
Coalesced [36] doplasma::scrn#16 ← doplasma::scrn#13
Coalesced [45] doplasma::jj#8 ← doplasma::jj#2
Coalesced [46] doplasma::scrn#15 ← doplasma::scrn#0
Coalesced [50] doplasma::j#5 ← doplasma::j#2
Coalesced [56] doplasma::i#5 ← doplasma::i#2
Coalesced [57] doplasma::c2a#5 ← doplasma::c2a#2
Coalesced [58] doplasma::c2b#5 ← doplasma::c2b#2
Coalesced [64] doplasma::ii#5 ← doplasma::ii#2
Coalesced [65] doplasma::c1a#5 ← doplasma::c1a#2
Coalesced [66] doplasma::c1b#5 ← doplasma::c1b#2
Coalesced [83] print_line_cursor#31 ← print_line_cursor#1
Coalesced [85] print_byte::b#4 ← print_byte::b#0
Coalesced [88] print_byte::b#5 ← print_byte::b#1
Coalesced [89] print_char_cursor#49 ← print_char_cursor#10
Coalesced [96] print_char::ch#3 ← print_char::ch#0
Coalesced [97] print_char_cursor#50 ← print_char_cursor#35
Coalesced [101] print_char::ch#4 ← print_char::ch#1
Coalesced (already) [102] print_char_cursor#51 ← print_char_cursor#10
Coalesced [122] makechar::c#14 ← makechar::c#2
Coalesced [131] makechar::i#11 ← makechar::i#2
Coalesced [139] makechar::b#10 ← makechar::b#2
Coalesced [142] makechar::ii#8 ← makechar::ii#2
Coalesced [143] makechar::b#9 ← makechar::b#7
Coalesced (already) [144] makechar::b#11 ← makechar::b#3
Coalesced down to 18 phi equivalence classes
Culled Empty Block (label) @13
Culled Empty Block (label) @50
Culled Empty Block (label) main::@12
Culled Empty Block (label) doplasma::@3
Culled Empty Block (label) doplasma::@9
Culled Empty Block (label) doplasma::@14
Culled Empty Block (label) end::@3
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) print_ln::@3
Culled Empty Block (label) print_word::@2
Culled Empty Block (label) print_byte::@2
Culled Empty Block (label) makechar::@5
Culled Empty Block (label) makechar::@22
Renumbering block @43 to @1
Renumbering block @45 to @2
Renumbering block @49 to @3
Renumbering block doplasma::@7 to doplasma::@3
Renumbering block doplasma::@8 to doplasma::@4
Renumbering block doplasma::@13 to doplasma::@5
Renumbering block doplasma::@16 to doplasma::@6
Renumbering block doplasma::@17 to doplasma::@7
Renumbering block doplasma::@18 to doplasma::@8
Renumbering block makechar::@4 to makechar::@3
Renumbering block makechar::@6 to makechar::@4
Renumbering block makechar::@7 to makechar::@5
Renumbering block makechar::@8 to makechar::@6
Renumbering block makechar::@9 to makechar::@7
Renumbering block makechar::@10 to makechar::@8
Renumbering block makechar::@13 to makechar::@9
Renumbering block makechar::@21 to makechar::@10
Renumbering block main::@8 to main::@4
Renumbering block main::@9 to main::@5
Renumbering block main::@10 to main::@6
Renumbering block main::@11 to main::@7
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of end::@2
Adding NOP phi() at start of print_ln
Adding NOP phi() at start of makechar
Adding NOP phi() at start of makechar::@6

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  [1] (word) last_time ← (word) 0
  to:@2
@2: scope:[]  from @1
  [2] (word) rand_seed ← (word) 0
  to:@3
@3: scope:[]  from @2
  [3] phi()
  [4] call main 
  to:@end
@end: scope:[]  from @3
  [5] phi()

(signed word()) main()
main: scope:[main]  from @3
  [6] (word) rand_seed ← (word) $194a
  [7] call makechar 
  to:main::@4
main::@4: scope:[main]  from main
  [8] phi()
  [9] call start 
  to:main::@5
main::@5: scope:[main]  from main::@4
  [10] (byte) main::block#1 ← *((const byte*) CIA2_PORT_A)
  [11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc
  [12] *((const byte*) CIA2_PORT_A) ← (byte) main::tmp#1
  [13] (byte) main::v#1 ← *((const byte*) VIC_MEMORY)
  to:main::@1
main::@1: scope:[main]  from main::@5 main::@7
  [14] (word) main::count#2 ← phi( main::@7/(word) main::count#1 main::@5/(word) $1f4 )
  [15] if((byte) 0!=(word) main::count#2) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@1
  [16] *((const byte*) VIC_MEMORY) ← (byte) main::v#1
  [17] *((const byte*) CIA2_PORT_A) ← (byte) main::block#1
  [18] call end 
  to:main::@return
main::@return: scope:[main]  from main::@3
  [19] return 
  to:@return
main::@2: scope:[main]  from main::@1
  [20] phi()
  [21] call doplasma 
  to:main::@6
main::@6: scope:[main]  from main::@2
  [22] *((const byte*) VIC_MEMORY) ← (const byte) PAGE1
  [23] call doplasma 
  to:main::@7
main::@7: scope:[main]  from main::@6
  [24] *((const byte*) VIC_MEMORY) ← (const byte) PAGE2
  [25] (word) main::count#1 ← -- (word) main::count#2
  to:main::@1

(void()) doplasma((byte*) doplasma::scrn)
doplasma: scope:[doplasma]  from main::@2 main::@6
  [26] (byte*) doplasma::scrn#13 ← phi( main::@6/(const byte*) SCREEN2 main::@2/(const byte*) SCREEN1 )
  to:doplasma::@1
doplasma::@1: scope:[doplasma]  from doplasma doplasma::@2
  [27] (byte) doplasma::c1b#3 ← phi( doplasma/(byte) 0 doplasma::@2/(byte) doplasma::c1b#2 )
  [27] (byte) doplasma::c1a#3 ← phi( doplasma/(byte) 0 doplasma::@2/(byte) doplasma::c1a#2 )
  [27] (byte) doplasma::ii#3 ← phi( doplasma/(byte) 0 doplasma::@2/(byte) doplasma::ii#2 )
  [28] if((byte) doplasma::ii#3<(byte) $19) goto doplasma::@2
  to:doplasma::@3
doplasma::@3: scope:[doplasma]  from doplasma::@1 doplasma::@4
  [29] (byte) doplasma::c2b#3 ← phi( doplasma::@1/(const byte) doplasma::c2B#0 doplasma::@4/(byte) doplasma::c2b#2 )
  [29] (byte) doplasma::c2a#3 ← phi( doplasma::@1/(const byte) doplasma::c2A#0 doplasma::@4/(byte) doplasma::c2a#2 )
  [29] (byte) doplasma::i#3 ← phi( doplasma::@1/(byte) 0 doplasma::@4/(byte) doplasma::i#2 )
  [30] if((byte) doplasma::i#3<(byte) $28) goto doplasma::@4
  to:doplasma::@5
doplasma::@5: scope:[doplasma]  from doplasma::@3 doplasma::@8
  [31] (byte*) doplasma::scrn#6 ← phi( doplasma::@8/(byte*) doplasma::scrn#0 doplasma::@3/(byte*) doplasma::scrn#13 )
  [31] (byte) doplasma::jj#3 ← phi( doplasma::@8/(byte) doplasma::jj#2 doplasma::@3/(byte) 0 )
  [32] if((byte) doplasma::jj#3<(byte) $19) goto doplasma::@6
  to:doplasma::@return
doplasma::@return: scope:[doplasma]  from doplasma::@5
  [33] return 
  to:@return
doplasma::@6: scope:[doplasma]  from doplasma::@5 doplasma::@7
  [34] (byte) doplasma::j#3 ← phi( doplasma::@5/(byte) 0 doplasma::@7/(byte) doplasma::j#2 )
  [35] if((byte) doplasma::j#3<(byte) $28) goto doplasma::@7
  to:doplasma::@8
doplasma::@8: scope:[doplasma]  from doplasma::@6
  [36] (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#6 + (byte) $28
  [37] (byte) doplasma::jj#2 ← ++ (byte) doplasma::jj#3
  to:doplasma::@5
doplasma::@7: scope:[doplasma]  from doplasma::@6
  [38] (byte~) doplasma::$6 ← *((const byte*) xbuf + (byte) doplasma::j#3) + *((const byte*) ybuf + (byte) doplasma::jj#3)
  [39] *((byte*) doplasma::scrn#6 + (byte) doplasma::j#3) ← (byte~) doplasma::$6
  [40] (byte) doplasma::j#2 ← ++ (byte) doplasma::j#3
  to:doplasma::@6
doplasma::@4: scope:[doplasma]  from doplasma::@3
  [41] (byte~) doplasma::$3 ← *((const byte*) sinustable + (byte) doplasma::c2a#3) + *((const byte*) sinustable + (byte) doplasma::c2b#3)
  [42] *((const byte*) xbuf + (byte) doplasma::i#3) ← (byte~) doplasma::$3
  [43] (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (byte) 3
  [44] (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (byte) 7
  [45] (byte) doplasma::i#2 ← ++ (byte) doplasma::i#3
  to:doplasma::@3
doplasma::@2: scope:[doplasma]  from doplasma::@1
  [46] (byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3)
  [47] *((const byte*) ybuf + (byte) doplasma::ii#3) ← (byte~) doplasma::$1
  [48] (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (byte) 4
  [49] (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (byte) 9
  [50] (byte) doplasma::ii#2 ← ++ (byte) doplasma::ii#3
  to:doplasma::@1

(void()) end()
end: scope:[end]  from main::@3
  [51] (word) Ticks#1 ← (word) last_time
  [52] call start 
  to:end::@1
end::@1: scope:[end]  from end
  [53] (word) last_time ← (word) last_time - (word) Ticks#1
  [54] (word) Ticks#12 ← (word) last_time
  [55] (word) print_word::w#0 ← (word) Ticks#12
  [56] call print_word 
  to:end::@2
end::@2: scope:[end]  from end::@1
  [57] phi()
  [58] call print_ln 
  to:end::@return
end::@return: scope:[end]  from end::@2
  [59] return 
  to:@return

(void()) print_ln()
print_ln: scope:[print_ln]  from end::@2
  [60] phi()
  to:print_ln::@1
print_ln::@1: scope:[print_ln]  from print_ln print_ln::@1
  [61] (byte*) print_line_cursor#8 ← phi( print_ln/(byte*) 1024 print_ln::@1/(byte*) print_line_cursor#1 )
  [62] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#8 + (byte) $28
  [63] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1
  to:print_ln::@return
print_ln::@return: scope:[print_ln]  from print_ln::@1
  [64] return 
  to:@return

(void()) print_word((word) print_word::w)
print_word: scope:[print_word]  from end::@1
  [65] (byte) print_byte::b#0 ← > (word) print_word::w#0
  [66] call print_byte 
  to:print_word::@1
print_word::@1: scope:[print_word]  from print_word
  [67] (byte) print_byte::b#1 ← < (word) print_word::w#0
  [68] call print_byte 
  to:print_word::@return
print_word::@return: scope:[print_word]  from print_word::@1
  [69] return 
  to:@return

(void()) print_byte((byte) print_byte::b)
print_byte: scope:[print_byte]  from print_word print_word::@1
  [70] (byte*) print_char_cursor#35 ← phi( print_word/(byte*) 1024 print_word::@1/(byte*) print_char_cursor#10 )
  [70] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
  [71] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4
  [72] (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0)
  [73] call print_char 
  to:print_byte::@1
print_byte::@1: scope:[print_byte]  from print_byte
  [74] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f
  [75] (byte) print_char::ch#1 ← *((const byte*) print_hextab + (byte~) print_byte::$2)
  [76] call print_char 
  to:print_byte::@return
print_byte::@return: scope:[print_byte]  from print_byte::@1
  [77] return 
  to:@return

(void()) print_char((byte) print_char::ch)
print_char: scope:[print_char]  from print_byte print_byte::@1
  [78] (byte*) print_char_cursor#25 ← phi( print_byte/(byte*) print_char_cursor#35 print_byte::@1/(byte*) print_char_cursor#10 )
  [78] (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 )
  [79] *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2
  [80] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#25
  to:print_char::@return
print_char::@return: scope:[print_char]  from print_char
  [81] return 
  to:@return

(void()) start()
start: scope:[start]  from end main::@4
  asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1  }
  [83] (word) rand_seed ← (word) $194a
  to:start::@return
start::@return: scope:[start]  from start
  [84] return 
  to:@return

(void()) makechar()
makechar: scope:[makechar]  from main
  [85] phi()
  to:makechar::@1
makechar::@1: scope:[makechar]  from makechar makechar::@4
  [86] (word) makechar::c#3 ← phi( makechar/(byte) 0 makechar::@4/(word) makechar::c#2 )
  [87] if((word) makechar::c#3<(word) $100) goto makechar::@2
  to:makechar::@return
makechar::@return: scope:[makechar]  from makechar::@1
  [88] return 
  to:@return
makechar::@2: scope:[makechar]  from makechar::@1
  [89] (byte~) makechar::$1 ← (byte)(word) makechar::c#3
  [90] (byte) makechar::s#1 ← *((const byte*) sinustable + (byte~) makechar::$1)
  to:makechar::@3
makechar::@3: scope:[makechar]  from makechar::@2 makechar::@7
  [91] (byte) makechar::i#3 ← phi( makechar::@2/(byte) 0 makechar::@7/(byte) makechar::i#2 )
  [92] if((byte) makechar::i#3<(byte) 8) goto makechar::@5
  to:makechar::@4
makechar::@4: scope:[makechar]  from makechar::@3
  [93] (word) makechar::c#2 ← ++ (word) makechar::c#3
  to:makechar::@1
makechar::@5: scope:[makechar]  from makechar::@3 makechar::@8
  [94] (byte) makechar::b#3 ← phi( makechar::@8/(byte) makechar::b#7 makechar::@3/(byte) 0 )
  [94] (byte) makechar::ii#3 ← phi( makechar::@8/(byte) makechar::ii#2 makechar::@3/(byte) 0 )
  [95] if((byte) makechar::ii#3<(byte) 8) goto makechar::@6
  to:makechar::@7
makechar::@7: scope:[makechar]  from makechar::@5
  [96] (word~) makechar::$8 ← (word) makechar::c#3 << (byte) 3
  [97] (word~) makechar::$9 ← (word~) makechar::$8 + (byte) makechar::i#3
  [98] (byte*~) makechar::$10 ← (const byte*) CHARSET + (word~) makechar::$9
  [99] *((byte*~) makechar::$10) ← (byte) makechar::b#3
  [100] (byte) makechar::i#2 ← ++ (byte) makechar::i#3
  to:makechar::@3
makechar::@6: scope:[makechar]  from makechar::@5
  [101] phi()
  [102] call rand 
  [103] (byte) rand::return#2 ← (byte) rand::return#0
  to:makechar::@10
makechar::@10: scope:[makechar]  from makechar::@6
  [104] (byte~) makechar::$4 ← (byte) rand::return#2
  [105] (byte~) makechar::$5 ← (byte~) makechar::$4 & (byte) $ff
  [106] if((byte~) makechar::$5<=(byte) makechar::s#1) goto makechar::@8
  to:makechar::@9
makechar::@9: scope:[makechar]  from makechar::@10
  [107] (byte) makechar::b#2 ← (byte) makechar::b#3 | *((const byte*) bittab + (byte) makechar::ii#3)
  to:makechar::@8
makechar::@8: scope:[makechar]  from makechar::@10 makechar::@9
  [108] (byte) makechar::b#7 ← phi( makechar::@9/(byte) makechar::b#2 makechar::@10/(byte) makechar::b#3 )
  [109] (byte) makechar::ii#2 ← ++ (byte) makechar::ii#3
  to:makechar::@5

(byte()) rand()
rand: scope:[rand]  from makechar::@6
  asm { ldx#8 ldaRAND_SEED+0 __rand_loop: asl rolRAND_SEED+1 bcc__no_eor eor#$2D __no_eor: dex bne__rand_loop staRAND_SEED+0  }
  [111] (byte) rand::return#0 ← (byte)(word) rand_seed
  to:rand::@return
rand::@return: scope:[rand]  from rand
  [112] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(word) Ticks
(word) Ticks#1 2.0
(word) Ticks#12 4.0
(void()) doplasma((byte*) doplasma::scrn)
(byte~) doplasma::$1 202.0
(byte~) doplasma::$3 202.0
(byte~) doplasma::$6 2002.0
(byte) doplasma::c1A
(byte) doplasma::c1B
(byte) doplasma::c1a
(byte) doplasma::c1a#2 67.33333333333333
(byte) doplasma::c1a#3 75.75
(byte) doplasma::c1b
(byte) doplasma::c1b#2 101.0
(byte) doplasma::c1b#3 60.599999999999994
(byte) doplasma::c2A
(byte) doplasma::c2B
(byte) doplasma::c2a
(byte) doplasma::c2a#2 67.33333333333333
(byte) doplasma::c2a#3 75.75
(byte) doplasma::c2b
(byte) doplasma::c2b#2 101.0
(byte) doplasma::c2b#3 60.599999999999994
(byte) doplasma::i
(byte) doplasma::i#2 202.0
(byte) doplasma::i#3 67.33333333333333
(byte) doplasma::ii
(byte) doplasma::ii#2 202.0
(byte) doplasma::ii#3 67.33333333333333
(byte) doplasma::j
(byte) doplasma::j#2 2002.0
(byte) doplasma::j#3 1251.25
(byte) doplasma::jj
(byte) doplasma::jj#2 202.0
(byte) doplasma::jj#3 163.0
(byte*) doplasma::scrn
(byte*) doplasma::scrn#0 101.0
(byte*) doplasma::scrn#13 6.733333333333333
(byte*) doplasma::scrn#6 186.28571428571428
(void()) end()
(word) last_time loadstore 0.4545454545454546
(signed word()) main()
(byte) main::block
(byte) main::block#1 0.46153846153846156
(word) main::count
(word) main::count#1 22.0
(word) main::count#2 4.714285714285714
(signed word) main::return
(byte) main::tmp
(byte) main::tmp#1 4.0
(byte) main::v
(byte) main::v#1 0.4444444444444444
(void()) makechar()
(byte~) makechar::$1 22.0
(byte*~) makechar::$10 202.0
(byte~) makechar::$4 2002.0
(byte~) makechar::$5 2002.0
(word~) makechar::$8 202.0
(word~) makechar::$9 202.0
(byte) makechar::b
(byte) makechar::b#2 2002.0
(byte) makechar::b#3 282.1818181818182
(byte) makechar::b#7 1501.5
(word) makechar::c
(word) makechar::c#2 22.0
(word) makechar::c#3 6.090909090909091
(byte) makechar::i
(byte) makechar::i#2 202.0
(byte) makechar::i#3 23.764705882352942
(byte) makechar::ii
(byte) makechar::ii#2 2002.0
(byte) makechar::ii#3 400.4
(byte) makechar::s
(byte) makechar::s#1 53.26315789473684
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 4.0
(byte~) print_byte::$2 4.0
(byte) print_byte::b
(byte) print_byte::b#0 4.0
(byte) print_byte::b#1 4.0
(byte) print_byte::b#2 2.0
(void()) print_char((byte) print_char::ch)
(byte) print_char::ch
(byte) print_char::ch#0 4.0
(byte) print_char::ch#1 4.0
(byte) print_char::ch#2 6.0
(byte*) print_char_cursor
(byte*) print_char_cursor#10 1.0
(byte*) print_char_cursor#25 4.0
(byte*) print_char_cursor#35 1.3333333333333333
(byte*) print_line_cursor
(byte*) print_line_cursor#1 16.5
(byte*) print_line_cursor#8 22.0
(void()) print_ln()
(byte*) print_screen
(void()) print_word((word) print_word::w)
(word) print_word::w
(word) print_word::w#0 2.0
(byte()) rand()
(byte) rand::return
(byte) rand::return#0 334.33333333333337
(byte) rand::return#2 2002.0
(word) rand_seed loadstore 0.21428571428571427
(void()) start()

Initial phi equivalence classes
[ main::count#2 main::count#1 ]
[ doplasma::ii#3 doplasma::ii#2 ]
[ doplasma::c1a#3 doplasma::c1a#2 ]
[ doplasma::c1b#3 doplasma::c1b#2 ]
[ doplasma::i#3 doplasma::i#2 ]
[ doplasma::c2a#3 doplasma::c2a#2 ]
[ doplasma::c2b#3 doplasma::c2b#2 ]
[ doplasma::jj#3 doplasma::jj#2 ]
[ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ]
[ doplasma::j#3 doplasma::j#2 ]
[ print_line_cursor#8 print_line_cursor#1 ]
[ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
[ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
[ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ]
[ makechar::c#3 makechar::c#2 ]
[ makechar::i#3 makechar::i#2 ]
[ makechar::ii#3 makechar::ii#2 ]
[ makechar::b#3 makechar::b#7 makechar::b#2 ]
Added variable last_time to live range equivalence class [ last_time ]
Added variable rand_seed to live range equivalence class [ rand_seed ]
Added variable main::block#1 to live range equivalence class [ main::block#1 ]
Added variable main::tmp#1 to live range equivalence class [ main::tmp#1 ]
Added variable main::v#1 to live range equivalence class [ main::v#1 ]
Added variable doplasma::$6 to live range equivalence class [ doplasma::$6 ]
Added variable doplasma::$3 to live range equivalence class [ doplasma::$3 ]
Added variable doplasma::$1 to live range equivalence class [ doplasma::$1 ]
Added variable Ticks#1 to live range equivalence class [ Ticks#1 ]
Added variable Ticks#12 to live range equivalence class [ Ticks#12 ]
Added variable print_word::w#0 to live range equivalence class [ print_word::w#0 ]
Added variable print_byte::$0 to live range equivalence class [ print_byte::$0 ]
Added variable print_byte::$2 to live range equivalence class [ print_byte::$2 ]
Added variable makechar::$1 to live range equivalence class [ makechar::$1 ]
Added variable makechar::s#1 to live range equivalence class [ makechar::s#1 ]
Added variable makechar::$8 to live range equivalence class [ makechar::$8 ]
Added variable makechar::$9 to live range equivalence class [ makechar::$9 ]
Added variable makechar::$10 to live range equivalence class [ makechar::$10 ]
Added variable rand::return#2 to live range equivalence class [ rand::return#2 ]
Added variable makechar::$4 to live range equivalence class [ makechar::$4 ]
Added variable makechar::$5 to live range equivalence class [ makechar::$5 ]
Added variable rand::return#0 to live range equivalence class [ rand::return#0 ]
Complete equivalence classes
[ main::count#2 main::count#1 ]
[ doplasma::ii#3 doplasma::ii#2 ]
[ doplasma::c1a#3 doplasma::c1a#2 ]
[ doplasma::c1b#3 doplasma::c1b#2 ]
[ doplasma::i#3 doplasma::i#2 ]
[ doplasma::c2a#3 doplasma::c2a#2 ]
[ doplasma::c2b#3 doplasma::c2b#2 ]
[ doplasma::jj#3 doplasma::jj#2 ]
[ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ]
[ doplasma::j#3 doplasma::j#2 ]
[ print_line_cursor#8 print_line_cursor#1 ]
[ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
[ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
[ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ]
[ makechar::c#3 makechar::c#2 ]
[ makechar::i#3 makechar::i#2 ]
[ makechar::ii#3 makechar::ii#2 ]
[ makechar::b#3 makechar::b#7 makechar::b#2 ]
[ last_time ]
[ rand_seed ]
[ main::block#1 ]
[ main::tmp#1 ]
[ main::v#1 ]
[ doplasma::$6 ]
[ doplasma::$3 ]
[ doplasma::$1 ]
[ Ticks#1 ]
[ Ticks#12 ]
[ print_word::w#0 ]
[ print_byte::$0 ]
[ print_byte::$2 ]
[ makechar::$1 ]
[ makechar::s#1 ]
[ makechar::$8 ]
[ makechar::$9 ]
[ makechar::$10 ]
[ rand::return#2 ]
[ makechar::$4 ]
[ makechar::$5 ]
[ rand::return#0 ]
Allocated zp[2]:2 [ main::count#2 main::count#1 ]
Allocated zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ]
Allocated zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ]
Allocated zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ]
Allocated zp[1]:7 [ doplasma::i#3 doplasma::i#2 ]
Allocated zp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ]
Allocated zp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ]
Allocated zp[1]:10 [ doplasma::jj#3 doplasma::jj#2 ]
Allocated zp[2]:11 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ]
Allocated zp[1]:13 [ doplasma::j#3 doplasma::j#2 ]
Allocated zp[2]:14 [ print_line_cursor#8 print_line_cursor#1 ]
Allocated zp[1]:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Allocated zp[1]:17 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
Allocated zp[2]:18 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ]
Allocated zp[2]:20 [ makechar::c#3 makechar::c#2 ]
Allocated zp[1]:22 [ makechar::i#3 makechar::i#2 ]
Allocated zp[1]:23 [ makechar::ii#3 makechar::ii#2 ]
Allocated zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ]
Allocated zp[2]:25 [ last_time ]
Allocated zp[2]:27 [ rand_seed ]
Allocated zp[1]:29 [ main::block#1 ]
Allocated zp[1]:30 [ main::tmp#1 ]
Allocated zp[1]:31 [ main::v#1 ]
Allocated zp[1]:32 [ doplasma::$6 ]
Allocated zp[1]:33 [ doplasma::$3 ]
Allocated zp[1]:34 [ doplasma::$1 ]
Allocated zp[2]:35 [ Ticks#1 ]
Allocated zp[2]:37 [ Ticks#12 ]
Allocated zp[2]:39 [ print_word::w#0 ]
Allocated zp[1]:41 [ print_byte::$0 ]
Allocated zp[1]:42 [ print_byte::$2 ]
Allocated zp[1]:43 [ makechar::$1 ]
Allocated zp[1]:44 [ makechar::s#1 ]
Allocated zp[2]:45 [ makechar::$8 ]
Allocated zp[2]:47 [ makechar::$9 ]
Allocated zp[2]:49 [ makechar::$10 ]
Allocated zp[1]:51 [ rand::return#2 ]
Allocated zp[1]:52 [ makechar::$4 ]
Allocated zp[1]:53 [ makechar::$5 ]
Allocated zp[1]:54 [ rand::return#0 ]

INITIAL ASM
Target platform is c64basic / MOS6502X
  // File Comments
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(__bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .label VIC_MEMORY = $d018
  // CIA#2 Port A: Serial bus, RS-232, VIC memory bank
  .label CIA2_PORT_A = $dd00
  .label SCREEN1 = $e000
  .label SCREEN2 = $e400
  .label CHARSET = $e800
  .const PAGE1 = SCREEN1>>6&$f0|CHARSET>>$a&$e
  .const PAGE2 = SCREEN2>>6&$f0|CHARSET>>$a&$e
  .label last_time = $19
  .label rand_seed = $1b
  .label print_line_cursor = $e
  .label print_char_cursor = $12
  .label Ticks = $23
  .label Ticks_1 = $25
  // @begin
__bbegin:
  jmp __b1
  // @1
__b1:
  // [1] (word) last_time ← (word) 0 -- vwuz1=vwuc1 
  lda #<0
  sta.z last_time
  lda #>0
  sta.z last_time+1
  jmp __b2
  // @2
__b2:
  // [2] (word) rand_seed ← (word) 0 -- vwuz1=vwuc1 
  lda #<0
  sta.z rand_seed
  lda #>0
  sta.z rand_seed+1
  // [3] phi from @2 to @3 [phi:@2->@3]
__b3_from___b2:
  jmp __b3
  // @3
__b3:
  // [4] call main 
  jsr main
  // [5] phi from @3 to @end [phi:@3->@end]
__bend_from___b3:
  jmp __bend
  // @end
__bend:
  // main
main: {
    .label block = $1d
    .label tmp = $1e
    .label v = $1f
    .label count = 2
    // [6] (word) rand_seed ← (word) $194a -- vwuz1=vwuc1 
    lda #<$194a
    sta.z rand_seed
    lda #>$194a
    sta.z rand_seed+1
    // [7] call makechar 
    // [85] phi from main to makechar [phi:main->makechar]
  makechar_from_main:
    jsr makechar
    // [8] phi from main to main::@4 [phi:main->main::@4]
  __b4_from_main:
    jmp __b4
    // main::@4
  __b4:
    // [9] call start 
    jsr start
    jmp __b5
    // main::@5
  __b5:
    // [10] (byte) main::block#1 ← *((const byte*) CIA2_PORT_A) -- vbuz1=_deref_pbuc1 
    lda CIA2_PORT_A
    sta.z block
    // [11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc -- vbuz1=vbuz2_band_vbuc1 
    lda #$fc
    and.z block
    sta.z tmp
    // [12] *((const byte*) CIA2_PORT_A) ← (byte) main::tmp#1 -- _deref_pbuc1=vbuz1 
    lda.z tmp
    sta CIA2_PORT_A
    // [13] (byte) main::v#1 ← *((const byte*) VIC_MEMORY) -- vbuz1=_deref_pbuc1 
    lda VIC_MEMORY
    sta.z v
    // [14] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
  __b1_from___b5:
    // [14] phi (word) main::count#2 = (word) $1f4 [phi:main::@5->main::@1#0] -- vwuz1=vwuc1 
    lda #<$1f4
    sta.z count
    lda #>$1f4
    sta.z count+1
    jmp __b1
  /* Run the demo until a key was hit */
    // main::@1
  __b1:
    // [15] if((byte) 0!=(word) main::count#2) goto main::@2 -- vwuc1_neq_vwuz1_then_la1 
    lda.z count+1
    cmp #>0
    bne __b2_from___b1
    lda.z count
    cmp #<0
    bne __b2_from___b1
    jmp __b3
    // main::@3
  __b3:
    // [16] *((const byte*) VIC_MEMORY) ← (byte) main::v#1 -- _deref_pbuc1=vbuz1 
    lda.z v
    sta VIC_MEMORY
    // [17] *((const byte*) CIA2_PORT_A) ← (byte) main::block#1 -- _deref_pbuc1=vbuz1 
    lda.z block
    sta CIA2_PORT_A
    // [18] call end 
    jsr end
    jmp __breturn
    // main::@return
  __breturn:
    // [19] return 
    rts
    // [20] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  __b2_from___b1:
    jmp __b2
    // main::@2
  __b2:
    // [21] call doplasma 
    // [26] phi from main::@2 to doplasma [phi:main::@2->doplasma]
  doplasma_from___b2:
    // [26] phi (byte*) doplasma::scrn#13 = (const byte*) SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN1
    sta.z doplasma.scrn
    lda #>SCREEN1
    sta.z doplasma.scrn+1
    jsr doplasma
    jmp __b6
    // main::@6
  __b6:
    // [22] *((const byte*) VIC_MEMORY) ← (const byte) PAGE1 -- _deref_pbuc1=vbuc2 
    lda #PAGE1
    sta VIC_MEMORY
    // [23] call doplasma 
    // [26] phi from main::@6 to doplasma [phi:main::@6->doplasma]
  doplasma_from___b6:
    // [26] phi (byte*) doplasma::scrn#13 = (const byte*) SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN2
    sta.z doplasma.scrn
    lda #>SCREEN2
    sta.z doplasma.scrn+1
    jsr doplasma
    jmp __b7
    // main::@7
  __b7:
    // [24] *((const byte*) VIC_MEMORY) ← (const byte) PAGE2 -- _deref_pbuc1=vbuc2 
    lda #PAGE2
    sta VIC_MEMORY
    // [25] (word) main::count#1 ← -- (word) main::count#2 -- vwuz1=_dec_vwuz1 
    lda.z count
    bne !+
    dec.z count+1
  !:
    dec.z count
    // [14] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
  __b1_from___b7:
    // [14] phi (word) main::count#2 = (word) main::count#1 [phi:main::@7->main::@1#0] -- register_copy 
    jmp __b1
}
  // doplasma
// doplasma(byte* zp($b) scrn)
doplasma: {
    .const c2A = 0
    .const c2B = 0
    .label __1 = $22
    .label __3 = $21
    .label __6 = $20
    .label c1a = 5
    .label c1b = 6
    .label ii = 4
    .label c2a = 8
    .label c2b = 9
    .label i = 7
    .label j = $d
    .label scrn = $b
    .label jj = $a
    // [27] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
  __b1_from_doplasma:
    // [27] phi (byte) doplasma::c1b#3 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z c1b
    // [27] phi (byte) doplasma::c1a#3 = (byte) 0 [phi:doplasma->doplasma::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z c1a
    // [27] phi (byte) doplasma::ii#3 = (byte) 0 [phi:doplasma->doplasma::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z ii
    jmp __b1
    // doplasma::@1
  __b1:
    // [28] if((byte) doplasma::ii#3<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 
    lda.z ii
    cmp #$19
    bcc __b2
    // [29] phi from doplasma::@1 to doplasma::@3 [phi:doplasma::@1->doplasma::@3]
  __b3_from___b1:
    // [29] phi (byte) doplasma::c2b#3 = (const byte) doplasma::c2B#0 [phi:doplasma::@1->doplasma::@3#0] -- vbuz1=vbuc1 
    lda #c2B
    sta.z c2b
    // [29] phi (byte) doplasma::c2a#3 = (const byte) doplasma::c2A#0 [phi:doplasma::@1->doplasma::@3#1] -- vbuz1=vbuc1 
    lda #c2A
    sta.z c2a
    // [29] phi (byte) doplasma::i#3 = (byte) 0 [phi:doplasma::@1->doplasma::@3#2] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b3
    // doplasma::@3
  __b3:
    // [30] if((byte) doplasma::i#3<(byte) $28) goto doplasma::@4 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #$28
    bcc __b4
    // [31] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5]
  __b5_from___b3:
    // [31] phi (byte*) doplasma::scrn#6 = (byte*) doplasma::scrn#13 [phi:doplasma::@3->doplasma::@5#0] -- register_copy 
    // [31] phi (byte) doplasma::jj#3 = (byte) 0 [phi:doplasma::@3->doplasma::@5#1] -- vbuz1=vbuc1 
    lda #0
    sta.z jj
    jmp __b5
    // doplasma::@5
  __b5:
    // [32] if((byte) doplasma::jj#3<(byte) $19) goto doplasma::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda.z jj
    cmp #$19
    bcc __b6_from___b5
    jmp __breturn
    // doplasma::@return
  __breturn:
    // [33] return 
    rts
    // [34] phi from doplasma::@5 to doplasma::@6 [phi:doplasma::@5->doplasma::@6]
  __b6_from___b5:
    // [34] phi (byte) doplasma::j#3 = (byte) 0 [phi:doplasma::@5->doplasma::@6#0] -- vbuz1=vbuc1 
    lda #0
    sta.z j
    jmp __b6
    // doplasma::@6
  __b6:
    // [35] if((byte) doplasma::j#3<(byte) $28) goto doplasma::@7 -- vbuz1_lt_vbuc1_then_la1 
    lda.z j
    cmp #$28
    bcc __b7
    jmp __b8
    // doplasma::@8
  __b8:
    // [36] (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z scrn
    sta.z scrn
    bcc !+
    inc.z scrn+1
  !:
    // [37] (byte) doplasma::jj#2 ← ++ (byte) doplasma::jj#3 -- vbuz1=_inc_vbuz1 
    inc.z jj
    // [31] phi from doplasma::@8 to doplasma::@5 [phi:doplasma::@8->doplasma::@5]
  __b5_from___b8:
    // [31] phi (byte*) doplasma::scrn#6 = (byte*) doplasma::scrn#0 [phi:doplasma::@8->doplasma::@5#0] -- register_copy 
    // [31] phi (byte) doplasma::jj#3 = (byte) doplasma::jj#2 [phi:doplasma::@8->doplasma::@5#1] -- register_copy 
    jmp __b5
    // doplasma::@7
  __b7:
    // [38] (byte~) doplasma::$6 ← *((const byte*) xbuf + (byte) doplasma::j#3) + *((const byte*) ybuf + (byte) doplasma::jj#3) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz3 
    ldy.z j
    lda xbuf,y
    ldy.z jj
    clc
    adc ybuf,y
    sta.z __6
    // [39] *((byte*) doplasma::scrn#6 + (byte) doplasma::j#3) ← (byte~) doplasma::$6 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z __6
    ldy.z j
    sta (scrn),y
    // [40] (byte) doplasma::j#2 ← ++ (byte) doplasma::j#3 -- vbuz1=_inc_vbuz1 
    inc.z j
    // [34] phi from doplasma::@7 to doplasma::@6 [phi:doplasma::@7->doplasma::@6]
  __b6_from___b7:
    // [34] phi (byte) doplasma::j#3 = (byte) doplasma::j#2 [phi:doplasma::@7->doplasma::@6#0] -- register_copy 
    jmp __b6
    // doplasma::@4
  __b4:
    // [41] (byte~) doplasma::$3 ← *((const byte*) sinustable + (byte) doplasma::c2a#3) + *((const byte*) sinustable + (byte) doplasma::c2b#3) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
    ldy.z c2a
    lda sinustable,y
    ldy.z c2b
    clc
    adc sinustable,y
    sta.z __3
    // [42] *((const byte*) xbuf + (byte) doplasma::i#3) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z __3
    ldy.z i
    sta xbuf,y
    // [43] (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c2a
    axs #-[3]
    stx.z c2a
    // [44] (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c2b
    axs #-[7]
    stx.z c2b
    // [45] (byte) doplasma::i#2 ← ++ (byte) doplasma::i#3 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [29] phi from doplasma::@4 to doplasma::@3 [phi:doplasma::@4->doplasma::@3]
  __b3_from___b4:
    // [29] phi (byte) doplasma::c2b#3 = (byte) doplasma::c2b#2 [phi:doplasma::@4->doplasma::@3#0] -- register_copy 
    // [29] phi (byte) doplasma::c2a#3 = (byte) doplasma::c2a#2 [phi:doplasma::@4->doplasma::@3#1] -- register_copy 
    // [29] phi (byte) doplasma::i#3 = (byte) doplasma::i#2 [phi:doplasma::@4->doplasma::@3#2] -- register_copy 
    jmp __b3
    // doplasma::@2
  __b2:
    // [46] (byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
    ldy.z c1a
    lda sinustable,y
    ldy.z c1b
    clc
    adc sinustable,y
    sta.z __1
    // [47] *((const byte*) ybuf + (byte) doplasma::ii#3) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z __1
    ldy.z ii
    sta ybuf,y
    // [48] (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1a
    axs #-[4]
    stx.z c1a
    // [49] (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1b
    axs #-[9]
    stx.z c1b
    // [50] (byte) doplasma::ii#2 ← ++ (byte) doplasma::ii#3 -- vbuz1=_inc_vbuz1 
    inc.z ii
    // [27] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1]
  __b1_from___b2:
    // [27] phi (byte) doplasma::c1b#3 = (byte) doplasma::c1b#2 [phi:doplasma::@2->doplasma::@1#0] -- register_copy 
    // [27] phi (byte) doplasma::c1a#3 = (byte) doplasma::c1a#2 [phi:doplasma::@2->doplasma::@1#1] -- register_copy 
    // [27] phi (byte) doplasma::ii#3 = (byte) doplasma::ii#2 [phi:doplasma::@2->doplasma::@1#2] -- register_copy 
    jmp __b1
}
  // end
end: {
    // [51] (word) Ticks#1 ← (word) last_time -- vwuz1=vwuz2 
    lda.z last_time
    sta.z Ticks
    lda.z last_time+1
    sta.z Ticks+1
    // [52] call start 
    jsr start
    jmp __b1
    // end::@1
  __b1:
    // [53] (word) last_time ← (word) last_time - (word) Ticks#1 -- vwuz1=vwuz1_minus_vwuz2 
    lda.z last_time
    sec
    sbc.z Ticks
    sta.z last_time
    lda.z last_time+1
    sbc.z Ticks+1
    sta.z last_time+1
    // [54] (word) Ticks#12 ← (word) last_time -- vwuz1=vwuz2 
    lda.z last_time
    sta.z Ticks_1
    lda.z last_time+1
    sta.z Ticks_1+1
    // [55] (word) print_word::w#0 ← (word) Ticks#12 -- vwuz1=vwuz2 
    lda.z Ticks_1
    sta.z print_word.w
    lda.z Ticks_1+1
    sta.z print_word.w+1
    // [56] call print_word 
    jsr print_word
    // [57] phi from end::@1 to end::@2 [phi:end::@1->end::@2]
  __b2_from___b1:
    jmp __b2
    // end::@2
  __b2:
    // [58] call print_ln 
    // [60] phi from end::@2 to print_ln [phi:end::@2->print_ln]
  print_ln_from___b2:
    jsr print_ln
    jmp __breturn
    // end::@return
  __breturn:
    // [59] return 
    rts
}
  // print_ln
// Print a newline
print_ln: {
    // [61] phi from print_ln to print_ln::@1 [phi:print_ln->print_ln::@1]
  __b1_from_print_ln:
    // [61] phi (byte*) print_line_cursor#8 = (byte*) 1024 [phi:print_ln->print_ln::@1#0] -- pbuz1=pbuc1 
    lda #<$400
    sta.z print_line_cursor
    lda #>$400
    sta.z print_line_cursor+1
    jmp __b1
    // [61] phi from print_ln::@1 to print_ln::@1 [phi:print_ln::@1->print_ln::@1]
  __b1_from___b1:
    // [61] phi (byte*) print_line_cursor#8 = (byte*) print_line_cursor#1 [phi:print_ln::@1->print_ln::@1#0] -- register_copy 
    jmp __b1
    // print_ln::@1
  __b1:
    // [62] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#8 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z print_line_cursor
    sta.z print_line_cursor
    bcc !+
    inc.z print_line_cursor+1
  !:
    // [63] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 
    lda.z print_line_cursor+1
    cmp.z print_char_cursor+1
    bcc __b1_from___b1
    bne !+
    lda.z print_line_cursor
    cmp.z print_char_cursor
    bcc __b1_from___b1
  !:
    jmp __breturn
    // print_ln::@return
  __breturn:
    // [64] return 
    rts
}
  // print_word
// Print a word as HEX
// print_word(word zp($27) w)
print_word: {
    .label w = $27
    // [65] (byte) print_byte::b#0 ← > (word) print_word::w#0 -- vbuz1=_hi_vwuz2 
    lda.z w+1
    sta.z print_byte.b
    // [66] call print_byte 
    // [70] phi from print_word to print_byte [phi:print_word->print_byte]
  print_byte_from_print_word:
    // [70] phi (byte*) print_char_cursor#35 = (byte*) 1024 [phi:print_word->print_byte#0] -- pbuz1=pbuc1 
    lda #<$400
    sta.z print_char_cursor
    lda #>$400
    sta.z print_char_cursor+1
    // [70] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy 
    jsr print_byte
    jmp __b1
    // print_word::@1
  __b1:
    // [67] (byte) print_byte::b#1 ← < (word) print_word::w#0 -- vbuz1=_lo_vwuz2 
    lda.z w
    sta.z print_byte.b
    // [68] call print_byte 
    // [70] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte]
  print_byte_from___b1:
    // [70] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#10 [phi:print_word::@1->print_byte#0] -- register_copy 
    // [70] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy 
    jsr print_byte
    jmp __breturn
    // print_word::@return
  __breturn:
    // [69] return 
    rts
}
  // print_byte
// Print a byte as HEX
// print_byte(byte zp($10) b)
print_byte: {
    .label __0 = $29
    .label __2 = $2a
    .label b = $10
    // [71] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 -- vbuz1=vbuz2_ror_4 
    lda.z b
    lsr
    lsr
    lsr
    lsr
    sta.z __0
    // [72] (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy.z __0
    lda print_hextab,y
    sta.z print_char.ch
    // [73] call print_char 
    // [78] phi from print_byte to print_char [phi:print_byte->print_char]
  print_char_from_print_byte:
    // [78] phi (byte*) print_char_cursor#25 = (byte*) print_char_cursor#35 [phi:print_byte->print_char#0] -- register_copy 
    // [78] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy 
    jsr print_char
    jmp __b1
    // print_byte::@1
  __b1:
    // [74] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 
    lda #$f
    and.z b
    sta.z __2
    // [75] (byte) print_char::ch#1 ← *((const byte*) print_hextab + (byte~) print_byte::$2) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy.z __2
    lda print_hextab,y
    sta.z print_char.ch
    // [76] call print_char 
    // [78] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
  print_char_from___b1:
    // [78] phi (byte*) print_char_cursor#25 = (byte*) print_char_cursor#10 [phi:print_byte::@1->print_char#0] -- register_copy 
    // [78] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy 
    jsr print_char
    jmp __breturn
    // print_byte::@return
  __breturn:
    // [77] return 
    rts
}
  // print_char
// Print a single char
// print_char(byte zp($11) ch)
print_char: {
    .label ch = $11
    // [79] *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2 -- _deref_pbuz1=vbuz2 
    lda.z ch
    ldy #0
    sta (print_char_cursor),y
    // [80] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#25 -- pbuz1=_inc_pbuz1 
    inc.z print_char_cursor
    bne !+
    inc.z print_char_cursor+1
  !:
    jmp __breturn
    // print_char::@return
  __breturn:
    // [81] return 
    rts
}
  // start
start: {
    .label LAST_TIME = last_time
    // asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1  }
    jsr $ffde
    sta LAST_TIME
    stx LAST_TIME+1
    // [83] (word) rand_seed ← (word) $194a -- vwuz1=vwuc1 
    lda #<$194a
    sta.z rand_seed
    lda #>$194a
    sta.z rand_seed+1
    jmp __breturn
    // start::@return
  __breturn:
    // [84] return 
    rts
}
  // makechar
makechar: {
    .label __1 = $2b
    .label __4 = $34
    .label __5 = $35
    .label __8 = $2d
    .label __9 = $2f
    .label s = $2c
    .label c = $14
    .label i = $16
    .label ii = $17
    .label b = $18
    .label __10 = $31
    // [86] phi from makechar to makechar::@1 [phi:makechar->makechar::@1]
  __b1_from_makechar:
    // [86] phi (word) makechar::c#3 = (byte) 0 [phi:makechar->makechar::@1#0] -- vwuz1=vbuc1 
    lda #<0
    sta.z c
    lda #>0
    sta.z c+1
    jmp __b1
    // makechar::@1
  __b1:
    // [87] if((word) makechar::c#3<(word) $100) goto makechar::@2 -- vwuz1_lt_vwuc1_then_la1 
    lda.z c+1
    cmp #>$100
    bcc __b2
    bne !+
    lda.z c
    cmp #<$100
    bcc __b2
  !:
    jmp __breturn
    // makechar::@return
  __breturn:
    // [88] return 
    rts
    // makechar::@2
  __b2:
    // [89] (byte~) makechar::$1 ← (byte)(word) makechar::c#3 -- vbuz1=_byte_vwuz2 
    lda.z c
    sta.z __1
    // [90] (byte) makechar::s#1 ← *((const byte*) sinustable + (byte~) makechar::$1) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy.z __1
    lda sinustable,y
    sta.z s
    // [91] phi from makechar::@2 to makechar::@3 [phi:makechar::@2->makechar::@3]
  __b3_from___b2:
    // [91] phi (byte) makechar::i#3 = (byte) 0 [phi:makechar::@2->makechar::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b3
    // makechar::@3
  __b3:
    // [92] if((byte) makechar::i#3<(byte) 8) goto makechar::@5 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #8
    bcc __b5_from___b3
    jmp __b4
    // makechar::@4
  __b4:
    // [93] (word) makechar::c#2 ← ++ (word) makechar::c#3 -- vwuz1=_inc_vwuz1 
    inc.z c
    bne !+
    inc.z c+1
  !:
    // [86] phi from makechar::@4 to makechar::@1 [phi:makechar::@4->makechar::@1]
  __b1_from___b4:
    // [86] phi (word) makechar::c#3 = (word) makechar::c#2 [phi:makechar::@4->makechar::@1#0] -- register_copy 
    jmp __b1
    // [94] phi from makechar::@3 to makechar::@5 [phi:makechar::@3->makechar::@5]
  __b5_from___b3:
    // [94] phi (byte) makechar::b#3 = (byte) 0 [phi:makechar::@3->makechar::@5#0] -- vbuz1=vbuc1 
    lda #0
    sta.z b
    // [94] phi (byte) makechar::ii#3 = (byte) 0 [phi:makechar::@3->makechar::@5#1] -- vbuz1=vbuc1 
    lda #0
    sta.z ii
    jmp __b5
    // makechar::@5
  __b5:
    // [95] if((byte) makechar::ii#3<(byte) 8) goto makechar::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda.z ii
    cmp #8
    bcc __b6_from___b5
    jmp __b7
    // makechar::@7
  __b7:
    // [96] (word~) makechar::$8 ← (word) makechar::c#3 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z c
    asl
    sta.z __8
    lda.z c+1
    rol
    sta.z __8+1
    asl.z __8
    rol.z __8+1
    asl.z __8
    rol.z __8+1
    // [97] (word~) makechar::$9 ← (word~) makechar::$8 + (byte) makechar::i#3 -- vwuz1=vwuz2_plus_vbuz3 
    lda.z i
    clc
    adc.z __8
    sta.z __9
    lda #0
    adc.z __8+1
    sta.z __9+1
    // [98] (byte*~) makechar::$10 ← (const byte*) CHARSET + (word~) makechar::$9 -- pbuz1=pbuc1_plus_vwuz2 
    lda.z __9
    clc
    adc #<CHARSET
    sta.z __10
    lda.z __9+1
    adc #>CHARSET
    sta.z __10+1
    // [99] *((byte*~) makechar::$10) ← (byte) makechar::b#3 -- _deref_pbuz1=vbuz2 
    lda.z b
    ldy #0
    sta (__10),y
    // [100] (byte) makechar::i#2 ← ++ (byte) makechar::i#3 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [91] phi from makechar::@7 to makechar::@3 [phi:makechar::@7->makechar::@3]
  __b3_from___b7:
    // [91] phi (byte) makechar::i#3 = (byte) makechar::i#2 [phi:makechar::@7->makechar::@3#0] -- register_copy 
    jmp __b3
    // [101] phi from makechar::@5 to makechar::@6 [phi:makechar::@5->makechar::@6]
  __b6_from___b5:
    jmp __b6
    // makechar::@6
  __b6:
    // [102] call rand 
    jsr rand
    // [103] (byte) rand::return#2 ← (byte) rand::return#0 -- vbuz1=vbuz2 
    lda.z rand.return
    sta.z rand.return_1
    jmp __b10
    // makechar::@10
  __b10:
    // [104] (byte~) makechar::$4 ← (byte) rand::return#2 -- vbuz1=vbuz2 
    lda.z rand.return_1
    sta.z __4
    // [105] (byte~) makechar::$5 ← (byte~) makechar::$4 & (byte) $ff -- vbuz1=vbuz2_band_vbuc1 
    lda #$ff
    and.z __4
    sta.z __5
    // [106] if((byte~) makechar::$5<=(byte) makechar::s#1) goto makechar::@8 -- vbuz1_le_vbuz2_then_la1 
    lda.z s
    cmp.z __5
    bcs __b8_from___b10
    jmp __b9
    // makechar::@9
  __b9:
    // [107] (byte) makechar::b#2 ← (byte) makechar::b#3 | *((const byte*) bittab + (byte) makechar::ii#3) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 
    lda.z b
    ldy.z ii
    ora bittab,y
    sta.z b
    // [108] phi from makechar::@10 makechar::@9 to makechar::@8 [phi:makechar::@10/makechar::@9->makechar::@8]
  __b8_from___b10:
  __b8_from___b9:
    // [108] phi (byte) makechar::b#7 = (byte) makechar::b#3 [phi:makechar::@10/makechar::@9->makechar::@8#0] -- register_copy 
    jmp __b8
    // makechar::@8
  __b8:
    // [109] (byte) makechar::ii#2 ← ++ (byte) makechar::ii#3 -- vbuz1=_inc_vbuz1 
    inc.z ii
    // [94] phi from makechar::@8 to makechar::@5 [phi:makechar::@8->makechar::@5]
  __b5_from___b8:
    // [94] phi (byte) makechar::b#3 = (byte) makechar::b#7 [phi:makechar::@8->makechar::@5#0] -- register_copy 
    // [94] phi (byte) makechar::ii#3 = (byte) makechar::ii#2 [phi:makechar::@8->makechar::@5#1] -- register_copy 
    jmp __b5
}
  // rand
rand: {
    .label RAND_SEED = rand_seed
    .label return = $36
    .label return_1 = $33
    // asm { ldx#8 ldaRAND_SEED+0 __rand_loop: asl rolRAND_SEED+1 bcc__no_eor eor#$2D __no_eor: dex bne__rand_loop staRAND_SEED+0  }
    ldx #8
    lda RAND_SEED+0
  __rand_loop:
    asl
    rol RAND_SEED+1
    bcc __no_eor
    eor #$2d
  __no_eor:
    dex
    bne __rand_loop
    sta RAND_SEED+0
    // [111] (byte) rand::return#0 ← (byte)(word) rand_seed -- vbuz1=_byte_vwuz2 
    lda.z rand_seed
    sta.z return
    jmp __breturn
    // rand::@return
  __breturn:
    // [112] return 
    rts
}
  // File Data
  print_hextab: .text "0123456789abcdef"
  .align $100
  sinustable: .byte $80, $7d, $7a, $77, $74, $70, $6d, $6a, $67, $64, $61, $5e, $5b, $58, $55, $52, $4f, $4d, $4a, $47, $44, $41, $3f, $3c, $39, $37, $34, $32, $2f, $2d, $2b, $28, $26, $24, $22, $20, $1e, $1c, $1a, $18, $16, $15, $13, $11, $10, $f, $d, $c, $b, $a, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, $a, $b, $c, $d, $f, $10, $11, $13, $15, $16, $18, $1a, $1c, $1e, $20, $22, $24, $26, $28, $2b, $2d, $2f, $32, $34, $37, $39, $3c, $3f, $41, $44, $47, $4a, $4d, $4f, $52, $55, $58, $5b, $5e, $61, $64, $67, $6a, $6d, $70, $74, $77, $7a, $7d, $80, $83, $86, $89, $8c, $90, $93, $96, $99, $9c, $9f, $a2, $a5, $a8, $ab, $ae, $b1, $b3, $b6, $b9, $bc, $bf, $c1, $c4, $c7, $c9, $cc, $ce, $d1, $d3, $d5, $d8, $da, $dc, $de, $e0, $e2, $e4, $e6, $e8, $ea, $eb, $ed, $ef, $f0, $f1, $f3, $f4, $f5, $f6, $f8, $f9, $fa, $fa, $fb, $fc, $fd, $fd, $fe, $fe, $fe, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $fe, $fe, $fe, $fd, $fd, $fc, $fb, $fa, $fa, $f9, $f8, $f6, $f5, $f4, $f3, $f1, $f0, $ef, $ed, $eb, $ea, $e8, $e6, $e4, $e2, $e0, $de, $dc, $da, $d8, $d5, $d3, $d1, $ce, $cc, $c9, $c7, $c4, $c1, $bf, $bc, $b9, $b6, $b3, $b1, $ae, $ab, $a8, $a5, $a2, $9f, $9c, $99, $96, $93, $90, $8c, $89, $86, $83
  xbuf: .fill $28, 0
  ybuf: .fill $19, 0
  bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80

REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] (word) last_time ← (word) 0 [ last_time ] (  [ last_time ] ) always clobbers reg byte a 
Statement [2] (word) rand_seed ← (word) 0 [ last_time ] (  [ last_time ] ) always clobbers reg byte a 
Statement [6] (word) rand_seed ← (word) $194a [ last_time rand_seed ] ( main:4 [ last_time rand_seed ] ) always clobbers reg byte a 
Statement [15] if((byte) 0!=(word) main::count#2) goto main::@2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:29 [ main::block#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:31 [ main::v#1 ]
Statement [22] *((const byte*) VIC_MEMORY) ← (const byte) PAGE1 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] ) always clobbers reg byte a 
Statement [24] *((const byte*) VIC_MEMORY) ← (const byte) PAGE2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] ) always clobbers reg byte a 
Statement [25] (word) main::count#1 ← -- (word) main::count#2 [ last_time main::block#1 main::v#1 main::count#1 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#1 ] ) always clobbers reg byte a 
Statement [36] (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#6 + (byte) $28 [ doplasma::jj#3 doplasma::scrn#0 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:10 [ doplasma::jj#3 doplasma::jj#2 ]
Statement [38] (byte~) doplasma::$6 ← *((const byte*) xbuf + (byte) doplasma::j#3) + *((const byte*) ybuf + (byte) doplasma::jj#3) [ doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:13 [ doplasma::j#3 doplasma::j#2 ]
Statement [41] (byte~) doplasma::$3 ← *((const byte*) sinustable + (byte) doplasma::c2a#3) + *((const byte*) sinustable + (byte) doplasma::c2b#3) [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:7 [ doplasma::i#3 doplasma::i#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ]
Statement [43] (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (byte) 3 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] ) always clobbers reg byte a 
Statement [44] (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (byte) 7 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] ) always clobbers reg byte a 
Statement [46] (byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3) [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ]
Statement [48] (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (byte) 4 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ) always clobbers reg byte a 
Statement [49] (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (byte) 9 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ) always clobbers reg byte a 
Statement [51] (word) Ticks#1 ← (word) last_time [ Ticks#1 ] ( main:4::end:18 [ Ticks#1 ] ) always clobbers reg byte a 
Statement [53] (word) last_time ← (word) last_time - (word) Ticks#1 [ last_time ] ( main:4::end:18 [ last_time ] ) always clobbers reg byte a 
Statement [54] (word) Ticks#12 ← (word) last_time [ Ticks#12 ] ( main:4::end:18 [ Ticks#12 ] ) always clobbers reg byte a 
Statement [55] (word) print_word::w#0 ← (word) Ticks#12 [ print_word::w#0 ] ( main:4::end:18 [ print_word::w#0 ] ) always clobbers reg byte a 
Statement [62] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#8 + (byte) $28 [ print_line_cursor#1 print_char_cursor#10 ] ( main:4::end:18::print_ln:58 [ print_line_cursor#1 print_char_cursor#10 ] ) always clobbers reg byte a 
Statement [63] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#10 ] ( main:4::end:18::print_ln:58 [ print_line_cursor#1 print_char_cursor#10 ] ) always clobbers reg byte a 
Statement [65] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ print_word::w#0 print_byte::b#0 ] ( main:4::end:18::print_word:56 [ print_word::w#0 print_byte::b#0 ] ) always clobbers reg byte a 
Statement [67] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_cursor#10 print_byte::b#1 ] ( main:4::end:18::print_word:56 [ print_char_cursor#10 print_byte::b#1 ] ) always clobbers reg byte a 
Statement [71] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_byte::b#2 print_char_cursor#35 print_byte::$0 ] ( main:4::end:18::print_word:56::print_byte:66 [ print_word::w#0 print_byte::b#2 print_char_cursor#35 print_byte::$0 ] main:4::end:18::print_word:56::print_byte:68 [ print_byte::b#2 print_char_cursor#35 print_byte::$0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Statement [74] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#10 print_byte::$2 ] ( main:4::end:18::print_word:56::print_byte:66 [ print_word::w#0 print_char_cursor#10 print_byte::$2 ] main:4::end:18::print_word:56::print_byte:68 [ print_char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a 
Statement [79] *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2 [ print_char_cursor#25 ] ( main:4::end:18::print_word:56::print_byte:66::print_char:73 [ print_word::w#0 print_byte::b#2 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:68::print_char:73 [ print_byte::b#2 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:66::print_char:76 [ print_word::w#0 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:68::print_char:76 [ print_char_cursor#25 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Statement asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1  } always clobbers reg byte a reg byte x reg byte y 
Statement [83] (word) rand_seed ← (word) $194a [ ] ( main:4::start:9 [ last_time ] main:4::end:18::start:52 [ Ticks#1 ] ) always clobbers reg byte a 
Statement [87] if((word) makechar::c#3<(word) $100) goto makechar::@2 [ rand_seed makechar::c#3 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 ] ) always clobbers reg byte a 
Statement [89] (byte~) makechar::$1 ← (byte)(word) makechar::c#3 [ rand_seed makechar::c#3 makechar::$1 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::$1 ] ) always clobbers reg byte a 
Statement [96] (word~) makechar::$8 ← (word) makechar::c#3 << (byte) 3 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$8 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$8 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:44 [ makechar::s#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:22 [ makechar::i#3 makechar::i#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ]
Statement [97] (word~) makechar::$9 ← (word~) makechar::$8 + (byte) makechar::i#3 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$9 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$9 ] ) always clobbers reg byte a 
Statement [98] (byte*~) makechar::$10 ← (const byte*) CHARSET + (word~) makechar::$9 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$10 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$10 ] ) always clobbers reg byte a 
Statement [99] *((byte*~) makechar::$10) ← (byte) makechar::b#3 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:44 [ makechar::s#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:22 [ makechar::i#3 makechar::i#2 ]
Statement [107] (byte) makechar::b#2 ← (byte) makechar::b#3 | *((const byte*) bittab + (byte) makechar::ii#3) [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#2 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:23 [ makechar::ii#3 makechar::ii#2 ]
Statement asm { ldx#8 ldaRAND_SEED+0 __rand_loop: asl rolRAND_SEED+1 bcc__no_eor eor#$2D __no_eor: dex bne__rand_loop staRAND_SEED+0  } always clobbers reg byte a reg byte x 
Removing always clobbered register reg byte x as potential for zp[1]:44 [ makechar::s#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:22 [ makechar::i#3 makechar::i#2 ]
Removing always clobbered register reg byte x as potential for zp[1]:23 [ makechar::ii#3 makechar::ii#2 ]
Removing always clobbered register reg byte x as potential for zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ]
Statement [111] (byte) rand::return#0 ← (byte)(word) rand_seed [ rand_seed rand::return#0 ] ( main:4::makechar:7::rand:102 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_seed rand::return#0 ] ) always clobbers reg byte a 
Statement [1] (word) last_time ← (word) 0 [ last_time ] (  [ last_time ] ) always clobbers reg byte a 
Statement [2] (word) rand_seed ← (word) 0 [ last_time ] (  [ last_time ] ) always clobbers reg byte a 
Statement [6] (word) rand_seed ← (word) $194a [ last_time rand_seed ] ( main:4 [ last_time rand_seed ] ) always clobbers reg byte a 
Statement [11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc [ last_time main::block#1 main::tmp#1 ] ( main:4 [ last_time main::block#1 main::tmp#1 ] ) always clobbers reg byte a 
Statement [15] if((byte) 0!=(word) main::count#2) goto main::@2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] ) always clobbers reg byte a 
Statement [22] *((const byte*) VIC_MEMORY) ← (const byte) PAGE1 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] ) always clobbers reg byte a 
Statement [24] *((const byte*) VIC_MEMORY) ← (const byte) PAGE2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] ) always clobbers reg byte a 
Statement [25] (word) main::count#1 ← -- (word) main::count#2 [ last_time main::block#1 main::v#1 main::count#1 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#1 ] ) always clobbers reg byte a 
Statement [36] (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#6 + (byte) $28 [ doplasma::jj#3 doplasma::scrn#0 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] ) always clobbers reg byte a 
Statement [38] (byte~) doplasma::$6 ← *((const byte*) xbuf + (byte) doplasma::j#3) + *((const byte*) ybuf + (byte) doplasma::jj#3) [ doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] ) always clobbers reg byte a 
Statement [41] (byte~) doplasma::$3 ← *((const byte*) sinustable + (byte) doplasma::c2a#3) + *((const byte*) sinustable + (byte) doplasma::c2b#3) [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] ) always clobbers reg byte a 
Statement [43] (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (byte) 3 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] ) always clobbers reg byte a 
Statement [44] (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (byte) 7 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] ) always clobbers reg byte a 
Statement [46] (byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3) [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] ) always clobbers reg byte a 
Statement [48] (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (byte) 4 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ) always clobbers reg byte a 
Statement [49] (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (byte) 9 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ) always clobbers reg byte a 
Statement [51] (word) Ticks#1 ← (word) last_time [ Ticks#1 ] ( main:4::end:18 [ Ticks#1 ] ) always clobbers reg byte a 
Statement [53] (word) last_time ← (word) last_time - (word) Ticks#1 [ last_time ] ( main:4::end:18 [ last_time ] ) always clobbers reg byte a 
Statement [54] (word) Ticks#12 ← (word) last_time [ Ticks#12 ] ( main:4::end:18 [ Ticks#12 ] ) always clobbers reg byte a 
Statement [55] (word) print_word::w#0 ← (word) Ticks#12 [ print_word::w#0 ] ( main:4::end:18 [ print_word::w#0 ] ) always clobbers reg byte a 
Statement [62] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#8 + (byte) $28 [ print_line_cursor#1 print_char_cursor#10 ] ( main:4::end:18::print_ln:58 [ print_line_cursor#1 print_char_cursor#10 ] ) always clobbers reg byte a 
Statement [63] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#10 ] ( main:4::end:18::print_ln:58 [ print_line_cursor#1 print_char_cursor#10 ] ) always clobbers reg byte a 
Statement [65] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ print_word::w#0 print_byte::b#0 ] ( main:4::end:18::print_word:56 [ print_word::w#0 print_byte::b#0 ] ) always clobbers reg byte a 
Statement [67] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_cursor#10 print_byte::b#1 ] ( main:4::end:18::print_word:56 [ print_char_cursor#10 print_byte::b#1 ] ) always clobbers reg byte a 
Statement [71] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_byte::b#2 print_char_cursor#35 print_byte::$0 ] ( main:4::end:18::print_word:56::print_byte:66 [ print_word::w#0 print_byte::b#2 print_char_cursor#35 print_byte::$0 ] main:4::end:18::print_word:56::print_byte:68 [ print_byte::b#2 print_char_cursor#35 print_byte::$0 ] ) always clobbers reg byte a 
Statement [74] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#10 print_byte::$2 ] ( main:4::end:18::print_word:56::print_byte:66 [ print_word::w#0 print_char_cursor#10 print_byte::$2 ] main:4::end:18::print_word:56::print_byte:68 [ print_char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a 
Statement [79] *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2 [ print_char_cursor#25 ] ( main:4::end:18::print_word:56::print_byte:66::print_char:73 [ print_word::w#0 print_byte::b#2 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:68::print_char:73 [ print_byte::b#2 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:66::print_char:76 [ print_word::w#0 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:68::print_char:76 [ print_char_cursor#25 ] ) always clobbers reg byte y 
Statement asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1  } always clobbers reg byte a reg byte x reg byte y 
Statement [83] (word) rand_seed ← (word) $194a [ ] ( main:4::start:9 [ last_time ] main:4::end:18::start:52 [ Ticks#1 ] ) always clobbers reg byte a 
Statement [87] if((word) makechar::c#3<(word) $100) goto makechar::@2 [ rand_seed makechar::c#3 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 ] ) always clobbers reg byte a 
Statement [89] (byte~) makechar::$1 ← (byte)(word) makechar::c#3 [ rand_seed makechar::c#3 makechar::$1 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::$1 ] ) always clobbers reg byte a 
Statement [90] (byte) makechar::s#1 ← *((const byte*) sinustable + (byte~) makechar::$1) [ rand_seed makechar::c#3 makechar::s#1 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 ] ) always clobbers reg byte a 
Statement [92] if((byte) makechar::i#3<(byte) 8) goto makechar::@5 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 ] ) always clobbers reg byte a 
Statement [96] (word~) makechar::$8 ← (word) makechar::c#3 << (byte) 3 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$8 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$8 ] ) always clobbers reg byte a 
Statement [97] (word~) makechar::$9 ← (word~) makechar::$8 + (byte) makechar::i#3 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$9 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$9 ] ) always clobbers reg byte a 
Statement [98] (byte*~) makechar::$10 ← (const byte*) CHARSET + (word~) makechar::$9 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$10 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$10 ] ) always clobbers reg byte a 
Statement [99] *((byte*~) makechar::$10) ← (byte) makechar::b#3 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 ] ) always clobbers reg byte a reg byte y 
Statement [107] (byte) makechar::b#2 ← (byte) makechar::b#3 | *((const byte*) bittab + (byte) makechar::ii#3) [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#2 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#2 ] ) always clobbers reg byte a 
Statement asm { ldx#8 ldaRAND_SEED+0 __rand_loop: asl rolRAND_SEED+1 bcc__no_eor eor#$2D __no_eor: dex bne__rand_loop staRAND_SEED+0  } always clobbers reg byte a reg byte x 
Statement [111] (byte) rand::return#0 ← (byte)(word) rand_seed [ rand_seed rand::return#0 ] ( main:4::makechar:7::rand:102 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_seed rand::return#0 ] ) always clobbers reg byte a 
Potential registers zp[2]:2 [ main::count#2 main::count#1 ] : zp[2]:2 , 
Potential registers zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ] : zp[1]:4 , reg byte x , reg byte y , 
Potential registers zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ] : zp[1]:5 , reg byte x , reg byte y , 
Potential registers zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ] : zp[1]:6 , reg byte x , reg byte y , 
Potential registers zp[1]:7 [ doplasma::i#3 doplasma::i#2 ] : zp[1]:7 , reg byte x , reg byte y , 
Potential registers zp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ] : zp[1]:8 , reg byte x , reg byte y , 
Potential registers zp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ] : zp[1]:9 , reg byte x , reg byte y , 
Potential registers zp[1]:10 [ doplasma::jj#3 doplasma::jj#2 ] : zp[1]:10 , reg byte x , reg byte y , 
Potential registers zp[2]:11 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] : zp[2]:11 , 
Potential registers zp[1]:13 [ doplasma::j#3 doplasma::j#2 ] : zp[1]:13 , reg byte x , reg byte y , 
Potential registers zp[2]:14 [ print_line_cursor#8 print_line_cursor#1 ] : zp[2]:14 , 
Potential registers zp[1]:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp[1]:16 , reg byte x , 
Potential registers zp[1]:17 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:18 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ] : zp[2]:18 , 
Potential registers zp[2]:20 [ makechar::c#3 makechar::c#2 ] : zp[2]:20 , 
Potential registers zp[1]:22 [ makechar::i#3 makechar::i#2 ] : zp[1]:22 , 
Potential registers zp[1]:23 [ makechar::ii#3 makechar::ii#2 ] : zp[1]:23 , reg byte y , 
Potential registers zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ] : zp[1]:24 , reg byte y , 
Potential registers zp[2]:25 [ last_time ] : zp[2]:25 , 
Potential registers zp[2]:27 [ rand_seed ] : zp[2]:27 , 
Potential registers zp[1]:29 [ main::block#1 ] : zp[1]:29 , reg byte x , reg byte y , 
Potential registers zp[1]:30 [ main::tmp#1 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:31 [ main::v#1 ] : zp[1]:31 , reg byte x , reg byte y , 
Potential registers zp[1]:32 [ doplasma::$6 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:33 [ doplasma::$3 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:34 [ doplasma::$1 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:35 [ Ticks#1 ] : zp[2]:35 , 
Potential registers zp[2]:37 [ Ticks#12 ] : zp[2]:37 , 
Potential registers zp[2]:39 [ print_word::w#0 ] : zp[2]:39 , 
Potential registers zp[1]:41 [ print_byte::$0 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:42 [ print_byte::$2 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:43 [ makechar::$1 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:44 [ makechar::s#1 ] : zp[1]:44 , 
Potential registers zp[2]:45 [ makechar::$8 ] : zp[2]:45 , 
Potential registers zp[2]:47 [ makechar::$9 ] : zp[2]:47 , 
Potential registers zp[2]:49 [ makechar::$10 ] : zp[2]:49 , 
Potential registers zp[1]:51 [ rand::return#2 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:52 [ makechar::$4 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:53 [ makechar::$5 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:54 [ rand::return#0 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [makechar] 3,785.68: zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ] 2,402.4: zp[1]:23 [ makechar::ii#3 makechar::ii#2 ] 2,002: zp[1]:52 [ makechar::$4 ] 2,002: zp[1]:53 [ makechar::$5 ] 225.76: zp[1]:22 [ makechar::i#3 makechar::i#2 ] 202: zp[2]:45 [ makechar::$8 ] 202: zp[2]:47 [ makechar::$9 ] 202: zp[2]:49 [ makechar::$10 ] 53.26: zp[1]:44 [ makechar::s#1 ] 28.09: zp[2]:20 [ makechar::c#3 makechar::c#2 ] 22: zp[1]:43 [ makechar::$1 ] 
Uplift Scope [doplasma] 3,253.25: zp[1]:13 [ doplasma::j#3 doplasma::j#2 ] 2,002: zp[1]:32 [ doplasma::$6 ] 365: zp[1]:10 [ doplasma::jj#3 doplasma::jj#2 ] 294.02: zp[2]:11 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] 269.33: zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ] 269.33: zp[1]:7 [ doplasma::i#3 doplasma::i#2 ] 202: zp[1]:33 [ doplasma::$3 ] 202: zp[1]:34 [ doplasma::$1 ] 161.6: zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ] 161.6: zp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ] 143.08: zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ] 143.08: zp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ] 
Uplift Scope [rand] 2,002: zp[1]:51 [ rand::return#2 ] 334.33: zp[1]:54 [ rand::return#0 ] 
Uplift Scope [] 38.5: zp[2]:14 [ print_line_cursor#8 print_line_cursor#1 ] 6.33: zp[2]:18 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ] 4: zp[2]:37 [ Ticks#12 ] 2: zp[2]:35 [ Ticks#1 ] 0.45: zp[2]:25 [ last_time ] 0.21: zp[2]:27 [ rand_seed ] 
Uplift Scope [main] 26.71: zp[2]:2 [ main::count#2 main::count#1 ] 4: zp[1]:30 [ main::tmp#1 ] 0.46: zp[1]:29 [ main::block#1 ] 0.44: zp[1]:31 [ main::v#1 ] 
Uplift Scope [print_byte] 10: zp[1]:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp[1]:41 [ print_byte::$0 ] 4: zp[1]:42 [ print_byte::$2 ] 
Uplift Scope [print_char] 14: zp[1]:17 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] 
Uplift Scope [print_word] 2: zp[2]:39 [ print_word::w#0 ] 
Uplift Scope [RADIX] 
Uplift Scope [print_ln] 
Uplift Scope [start] 
Uplift Scope [end] 

Uplifting [makechar] best 165885 combination zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ] reg byte y [ makechar::ii#3 makechar::ii#2 ] reg byte a [ makechar::$4 ] zp[1]:53 [ makechar::$5 ] zp[1]:22 [ makechar::i#3 makechar::i#2 ] zp[2]:45 [ makechar::$8 ] zp[2]:47 [ makechar::$9 ] zp[2]:49 [ makechar::$10 ] zp[1]:44 [ makechar::s#1 ] zp[2]:20 [ makechar::c#3 makechar::c#2 ] reg byte a [ makechar::$1 ] 
Limited combination testing to 100 combinations of 256 possible.
Uplifting [doplasma] best 140985 combination reg byte y [ doplasma::j#3 doplasma::j#2 ] reg byte a [ doplasma::$6 ] reg byte x [ doplasma::jj#3 doplasma::jj#2 ] zp[2]:11 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ] zp[1]:7 [ doplasma::i#3 doplasma::i#2 ] zp[1]:33 [ doplasma::$3 ] zp[1]:34 [ doplasma::$1 ] zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ] zp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ] zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ] zp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ] 
Limited combination testing to 100 combinations of 419904 possible.
Uplifting [rand] best 131982 combination reg byte a [ rand::return#2 ] reg byte a [ rand::return#0 ] 
Uplifting [] best 131982 combination zp[2]:14 [ print_line_cursor#8 print_line_cursor#1 ] zp[2]:18 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ] zp[2]:37 [ Ticks#12 ] zp[2]:35 [ Ticks#1 ] zp[2]:25 [ last_time ] zp[2]:27 [ rand_seed ] 
Uplifting [main] best 131976 combination zp[2]:2 [ main::count#2 main::count#1 ] reg byte a [ main::tmp#1 ] zp[1]:29 [ main::block#1 ] zp[1]:31 [ main::v#1 ] 
Uplifting [print_byte] best 131962 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] 
Uplifting [print_char] best 131953 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] 
Uplifting [print_word] best 131953 combination zp[2]:39 [ print_word::w#0 ] 
Uplifting [RADIX] best 131953 combination 
Uplifting [print_ln] best 131953 combination 
Uplifting [start] best 131953 combination 
Uplifting [end] best 131953 combination 
Attempting to uplift remaining variables inzp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ]
Uplifting [makechar] best 131953 combination zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ] 
Attempting to uplift remaining variables inzp[1]:53 [ makechar::$5 ]
Uplifting [makechar] best 131953 combination zp[1]:53 [ makechar::$5 ] 
Attempting to uplift remaining variables inzp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ]
Uplifting [doplasma] best 131953 combination zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ] 
Attempting to uplift remaining variables inzp[1]:7 [ doplasma::i#3 doplasma::i#2 ]
Uplifting [doplasma] best 131953 combination zp[1]:7 [ doplasma::i#3 doplasma::i#2 ] 
Attempting to uplift remaining variables inzp[1]:22 [ makechar::i#3 makechar::i#2 ]
Uplifting [makechar] best 131953 combination zp[1]:22 [ makechar::i#3 makechar::i#2 ] 
Attempting to uplift remaining variables inzp[1]:33 [ doplasma::$3 ]
Uplifting [doplasma] best 131353 combination reg byte a [ doplasma::$3 ] 
Attempting to uplift remaining variables inzp[1]:34 [ doplasma::$1 ]
Uplifting [doplasma] best 130753 combination reg byte a [ doplasma::$1 ] 
Attempting to uplift remaining variables inzp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ]
Uplifting [doplasma] best 130753 combination zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ] 
Attempting to uplift remaining variables inzp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ]
Uplifting [doplasma] best 130753 combination zp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ] 
Attempting to uplift remaining variables inzp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ]
Uplifting [doplasma] best 130753 combination zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ] 
Attempting to uplift remaining variables inzp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ]
Uplifting [doplasma] best 130753 combination zp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ] 
Attempting to uplift remaining variables inzp[1]:44 [ makechar::s#1 ]
Uplifting [makechar] best 130753 combination zp[1]:44 [ makechar::s#1 ] 
Attempting to uplift remaining variables inzp[1]:29 [ main::block#1 ]
Uplifting [main] best 130753 combination zp[1]:29 [ main::block#1 ] 
Attempting to uplift remaining variables inzp[1]:31 [ main::v#1 ]
Uplifting [main] best 130753 combination zp[1]:31 [ main::v#1 ] 
Coalescing zero page register [ zp[2]:37 [ Ticks#12 ] ] with [ zp[2]:39 [ print_word::w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:45 [ makechar::$8 ] ] with [ zp[2]:47 [ makechar::$9 ] ] - score: 1
Coalescing zero page register [ zp[2]:45 [ makechar::$8 makechar::$9 ] ] with [ zp[2]:49 [ makechar::$10 ] ] - score: 1
Coalescing zero page register [ zp[2]:14 [ print_line_cursor#8 print_line_cursor#1 ] ] with [ zp[2]:2 [ main::count#2 main::count#1 ] ]
Coalescing zero page register [ zp[2]:18 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ] ] with [ zp[2]:11 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] ]
Coalescing zero page register [ zp[1]:22 [ makechar::i#3 makechar::i#2 ] ] with [ zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ] ]
Coalescing zero page register [ zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ] ] with [ zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ] ]
Coalescing zero page register [ zp[2]:35 [ Ticks#1 ] ] with [ zp[2]:20 [ makechar::c#3 makechar::c#2 ] ]
Coalescing zero page register [ zp[1]:44 [ makechar::s#1 ] ] with [ zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ] ]
Coalescing zero page register [ zp[2]:45 [ makechar::$8 makechar::$9 makechar::$10 ] ] with [ zp[2]:37 [ Ticks#12 print_word::w#0 ] ]
Coalescing zero page register [ zp[1]:53 [ makechar::$5 ] ] with [ zp[1]:7 [ doplasma::i#3 doplasma::i#2 ] ]
Allocated (was zp[1]:8) zp[1]:2 [ doplasma::c2a#3 doplasma::c2a#2 ]
Allocated (was zp[1]:9) zp[1]:3 [ doplasma::c2b#3 doplasma::c2b#2 ]
Allocated (was zp[2]:14) zp[2]:4 [ print_line_cursor#8 print_line_cursor#1 main::count#2 main::count#1 ]
Allocated (was zp[2]:18) zp[2]:6 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ]
Allocated (was zp[1]:22) zp[1]:8 [ makechar::i#3 makechar::i#2 doplasma::ii#3 doplasma::ii#2 ]
Allocated (was zp[1]:24) zp[1]:9 [ makechar::b#3 makechar::b#7 makechar::b#2 doplasma::c1a#3 doplasma::c1a#2 ]
Allocated (was zp[2]:25) zp[2]:10 [ last_time ]
Allocated (was zp[2]:27) zp[2]:12 [ rand_seed ]
Allocated (was zp[1]:29) zp[1]:14 [ main::block#1 ]
Allocated (was zp[1]:31) zp[1]:15 [ main::v#1 ]
Allocated (was zp[2]:35) zp[2]:16 [ Ticks#1 makechar::c#3 makechar::c#2 ]
Allocated (was zp[1]:44) zp[1]:18 [ makechar::s#1 doplasma::c1b#3 doplasma::c1b#2 ]
Allocated (was zp[2]:45) zp[2]:19 [ makechar::$8 makechar::$9 makechar::$10 Ticks#12 print_word::w#0 ]
Allocated (was zp[1]:53) zp[1]:21 [ makechar::$5 doplasma::i#3 doplasma::i#2 ]

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(__bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .label VIC_MEMORY = $d018
  // CIA#2 Port A: Serial bus, RS-232, VIC memory bank
  .label CIA2_PORT_A = $dd00
  .label SCREEN1 = $e000
  .label SCREEN2 = $e400
  .label CHARSET = $e800
  .const PAGE1 = SCREEN1>>6&$f0|CHARSET>>$a&$e
  .const PAGE2 = SCREEN2>>6&$f0|CHARSET>>$a&$e
  .label last_time = $a
  .label rand_seed = $c
  .label print_line_cursor = 4
  .label print_char_cursor = 6
  .label Ticks = $10
  .label Ticks_1 = $13
  // @begin
__bbegin:
  jmp __b1
  // @1
__b1:
  // [1] (word) last_time ← (word) 0 -- vwuz1=vwuc1 
  lda #<0
  sta.z last_time
  lda #>0
  sta.z last_time+1
  jmp __b2
  // @2
__b2:
  // [2] (word) rand_seed ← (word) 0 -- vwuz1=vwuc1 
  lda #<0
  sta.z rand_seed
  lda #>0
  sta.z rand_seed+1
  // [3] phi from @2 to @3 [phi:@2->@3]
__b3_from___b2:
  jmp __b3
  // @3
__b3:
  // [4] call main 
  jsr main
  // [5] phi from @3 to @end [phi:@3->@end]
__bend_from___b3:
  jmp __bend
  // @end
__bend:
  // main
main: {
    .label block = $e
    .label v = $f
    .label count = 4
    // [6] (word) rand_seed ← (word) $194a -- vwuz1=vwuc1 
    lda #<$194a
    sta.z rand_seed
    lda #>$194a
    sta.z rand_seed+1
    // [7] call makechar 
    // [85] phi from main to makechar [phi:main->makechar]
  makechar_from_main:
    jsr makechar
    // [8] phi from main to main::@4 [phi:main->main::@4]
  __b4_from_main:
    jmp __b4
    // main::@4
  __b4:
    // [9] call start 
    jsr start
    jmp __b5
    // main::@5
  __b5:
    // [10] (byte) main::block#1 ← *((const byte*) CIA2_PORT_A) -- vbuz1=_deref_pbuc1 
    lda CIA2_PORT_A
    sta.z block
    // [11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc -- vbuaa=vbuz1_band_vbuc1 
    lda #$fc
    and.z block
    // [12] *((const byte*) CIA2_PORT_A) ← (byte) main::tmp#1 -- _deref_pbuc1=vbuaa 
    sta CIA2_PORT_A
    // [13] (byte) main::v#1 ← *((const byte*) VIC_MEMORY) -- vbuz1=_deref_pbuc1 
    lda VIC_MEMORY
    sta.z v
    // [14] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
  __b1_from___b5:
    // [14] phi (word) main::count#2 = (word) $1f4 [phi:main::@5->main::@1#0] -- vwuz1=vwuc1 
    lda #<$1f4
    sta.z count
    lda #>$1f4
    sta.z count+1
    jmp __b1
  /* Run the demo until a key was hit */
    // main::@1
  __b1:
    // [15] if((byte) 0!=(word) main::count#2) goto main::@2 -- vwuc1_neq_vwuz1_then_la1 
    lda.z count+1
    cmp #>0
    bne __b2_from___b1
    lda.z count
    cmp #<0
    bne __b2_from___b1
    jmp __b3
    // main::@3
  __b3:
    // [16] *((const byte*) VIC_MEMORY) ← (byte) main::v#1 -- _deref_pbuc1=vbuz1 
    lda.z v
    sta VIC_MEMORY
    // [17] *((const byte*) CIA2_PORT_A) ← (byte) main::block#1 -- _deref_pbuc1=vbuz1 
    lda.z block
    sta CIA2_PORT_A
    // [18] call end 
    jsr end
    jmp __breturn
    // main::@return
  __breturn:
    // [19] return 
    rts
    // [20] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  __b2_from___b1:
    jmp __b2
    // main::@2
  __b2:
    // [21] call doplasma 
    // [26] phi from main::@2 to doplasma [phi:main::@2->doplasma]
  doplasma_from___b2:
    // [26] phi (byte*) doplasma::scrn#13 = (const byte*) SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN1
    sta.z doplasma.scrn
    lda #>SCREEN1
    sta.z doplasma.scrn+1
    jsr doplasma
    jmp __b6
    // main::@6
  __b6:
    // [22] *((const byte*) VIC_MEMORY) ← (const byte) PAGE1 -- _deref_pbuc1=vbuc2 
    lda #PAGE1
    sta VIC_MEMORY
    // [23] call doplasma 
    // [26] phi from main::@6 to doplasma [phi:main::@6->doplasma]
  doplasma_from___b6:
    // [26] phi (byte*) doplasma::scrn#13 = (const byte*) SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN2
    sta.z doplasma.scrn
    lda #>SCREEN2
    sta.z doplasma.scrn+1
    jsr doplasma
    jmp __b7
    // main::@7
  __b7:
    // [24] *((const byte*) VIC_MEMORY) ← (const byte) PAGE2 -- _deref_pbuc1=vbuc2 
    lda #PAGE2
    sta VIC_MEMORY
    // [25] (word) main::count#1 ← -- (word) main::count#2 -- vwuz1=_dec_vwuz1 
    lda.z count
    bne !+
    dec.z count+1
  !:
    dec.z count
    // [14] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
  __b1_from___b7:
    // [14] phi (word) main::count#2 = (word) main::count#1 [phi:main::@7->main::@1#0] -- register_copy 
    jmp __b1
}
  // doplasma
// doplasma(byte* zp(6) scrn)
doplasma: {
    .const c2A = 0
    .const c2B = 0
    .label c1a = 9
    .label c1b = $12
    .label ii = 8
    .label c2a = 2
    .label c2b = 3
    .label i = $15
    .label scrn = 6
    // [27] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
  __b1_from_doplasma:
    // [27] phi (byte) doplasma::c1b#3 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z c1b
    // [27] phi (byte) doplasma::c1a#3 = (byte) 0 [phi:doplasma->doplasma::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z c1a
    // [27] phi (byte) doplasma::ii#3 = (byte) 0 [phi:doplasma->doplasma::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z ii
    jmp __b1
    // doplasma::@1
  __b1:
    // [28] if((byte) doplasma::ii#3<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 
    lda.z ii
    cmp #$19
    bcc __b2
    // [29] phi from doplasma::@1 to doplasma::@3 [phi:doplasma::@1->doplasma::@3]
  __b3_from___b1:
    // [29] phi (byte) doplasma::c2b#3 = (const byte) doplasma::c2B#0 [phi:doplasma::@1->doplasma::@3#0] -- vbuz1=vbuc1 
    lda #c2B
    sta.z c2b
    // [29] phi (byte) doplasma::c2a#3 = (const byte) doplasma::c2A#0 [phi:doplasma::@1->doplasma::@3#1] -- vbuz1=vbuc1 
    lda #c2A
    sta.z c2a
    // [29] phi (byte) doplasma::i#3 = (byte) 0 [phi:doplasma::@1->doplasma::@3#2] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b3
    // doplasma::@3
  __b3:
    // [30] if((byte) doplasma::i#3<(byte) $28) goto doplasma::@4 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #$28
    bcc __b4
    // [31] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5]
  __b5_from___b3:
    // [31] phi (byte*) doplasma::scrn#6 = (byte*) doplasma::scrn#13 [phi:doplasma::@3->doplasma::@5#0] -- register_copy 
    // [31] phi (byte) doplasma::jj#3 = (byte) 0 [phi:doplasma::@3->doplasma::@5#1] -- vbuxx=vbuc1 
    ldx #0
    jmp __b5
    // doplasma::@5
  __b5:
    // [32] if((byte) doplasma::jj#3<(byte) $19) goto doplasma::@6 -- vbuxx_lt_vbuc1_then_la1 
    cpx #$19
    bcc __b6_from___b5
    jmp __breturn
    // doplasma::@return
  __breturn:
    // [33] return 
    rts
    // [34] phi from doplasma::@5 to doplasma::@6 [phi:doplasma::@5->doplasma::@6]
  __b6_from___b5:
    // [34] phi (byte) doplasma::j#3 = (byte) 0 [phi:doplasma::@5->doplasma::@6#0] -- vbuyy=vbuc1 
    ldy #0
    jmp __b6
    // doplasma::@6
  __b6:
    // [35] if((byte) doplasma::j#3<(byte) $28) goto doplasma::@7 -- vbuyy_lt_vbuc1_then_la1 
    cpy #$28
    bcc __b7
    jmp __b8
    // doplasma::@8
  __b8:
    // [36] (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z scrn
    sta.z scrn
    bcc !+
    inc.z scrn+1
  !:
    // [37] (byte) doplasma::jj#2 ← ++ (byte) doplasma::jj#3 -- vbuxx=_inc_vbuxx 
    inx
    // [31] phi from doplasma::@8 to doplasma::@5 [phi:doplasma::@8->doplasma::@5]
  __b5_from___b8:
    // [31] phi (byte*) doplasma::scrn#6 = (byte*) doplasma::scrn#0 [phi:doplasma::@8->doplasma::@5#0] -- register_copy 
    // [31] phi (byte) doplasma::jj#3 = (byte) doplasma::jj#2 [phi:doplasma::@8->doplasma::@5#1] -- register_copy 
    jmp __b5
    // doplasma::@7
  __b7:
    // [38] (byte~) doplasma::$6 ← *((const byte*) xbuf + (byte) doplasma::j#3) + *((const byte*) ybuf + (byte) doplasma::jj#3) -- vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx 
    lda xbuf,y
    clc
    adc ybuf,x
    // [39] *((byte*) doplasma::scrn#6 + (byte) doplasma::j#3) ← (byte~) doplasma::$6 -- pbuz1_derefidx_vbuyy=vbuaa 
    sta (scrn),y
    // [40] (byte) doplasma::j#2 ← ++ (byte) doplasma::j#3 -- vbuyy=_inc_vbuyy 
    iny
    // [34] phi from doplasma::@7 to doplasma::@6 [phi:doplasma::@7->doplasma::@6]
  __b6_from___b7:
    // [34] phi (byte) doplasma::j#3 = (byte) doplasma::j#2 [phi:doplasma::@7->doplasma::@6#0] -- register_copy 
    jmp __b6
    // doplasma::@4
  __b4:
    // [41] (byte~) doplasma::$3 ← *((const byte*) sinustable + (byte) doplasma::c2a#3) + *((const byte*) sinustable + (byte) doplasma::c2b#3) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
    ldy.z c2a
    lda sinustable,y
    ldy.z c2b
    clc
    adc sinustable,y
    // [42] *((const byte*) xbuf + (byte) doplasma::i#3) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa 
    ldy.z i
    sta xbuf,y
    // [43] (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c2a
    axs #-[3]
    stx.z c2a
    // [44] (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c2b
    axs #-[7]
    stx.z c2b
    // [45] (byte) doplasma::i#2 ← ++ (byte) doplasma::i#3 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [29] phi from doplasma::@4 to doplasma::@3 [phi:doplasma::@4->doplasma::@3]
  __b3_from___b4:
    // [29] phi (byte) doplasma::c2b#3 = (byte) doplasma::c2b#2 [phi:doplasma::@4->doplasma::@3#0] -- register_copy 
    // [29] phi (byte) doplasma::c2a#3 = (byte) doplasma::c2a#2 [phi:doplasma::@4->doplasma::@3#1] -- register_copy 
    // [29] phi (byte) doplasma::i#3 = (byte) doplasma::i#2 [phi:doplasma::@4->doplasma::@3#2] -- register_copy 
    jmp __b3
    // doplasma::@2
  __b2:
    // [46] (byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
    ldy.z c1a
    lda sinustable,y
    ldy.z c1b
    clc
    adc sinustable,y
    // [47] *((const byte*) ybuf + (byte) doplasma::ii#3) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuaa 
    ldy.z ii
    sta ybuf,y
    // [48] (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1a
    axs #-[4]
    stx.z c1a
    // [49] (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1b
    axs #-[9]
    stx.z c1b
    // [50] (byte) doplasma::ii#2 ← ++ (byte) doplasma::ii#3 -- vbuz1=_inc_vbuz1 
    inc.z ii
    // [27] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1]
  __b1_from___b2:
    // [27] phi (byte) doplasma::c1b#3 = (byte) doplasma::c1b#2 [phi:doplasma::@2->doplasma::@1#0] -- register_copy 
    // [27] phi (byte) doplasma::c1a#3 = (byte) doplasma::c1a#2 [phi:doplasma::@2->doplasma::@1#1] -- register_copy 
    // [27] phi (byte) doplasma::ii#3 = (byte) doplasma::ii#2 [phi:doplasma::@2->doplasma::@1#2] -- register_copy 
    jmp __b1
}
  // end
end: {
    // [51] (word) Ticks#1 ← (word) last_time -- vwuz1=vwuz2 
    lda.z last_time
    sta.z Ticks
    lda.z last_time+1
    sta.z Ticks+1
    // [52] call start 
    jsr start
    jmp __b1
    // end::@1
  __b1:
    // [53] (word) last_time ← (word) last_time - (word) Ticks#1 -- vwuz1=vwuz1_minus_vwuz2 
    lda.z last_time
    sec
    sbc.z Ticks
    sta.z last_time
    lda.z last_time+1
    sbc.z Ticks+1
    sta.z last_time+1
    // [54] (word) Ticks#12 ← (word) last_time -- vwuz1=vwuz2 
    lda.z last_time
    sta.z Ticks_1
    lda.z last_time+1
    sta.z Ticks_1+1
    // [55] (word) print_word::w#0 ← (word) Ticks#12
    // [56] call print_word 
    jsr print_word
    // [57] phi from end::@1 to end::@2 [phi:end::@1->end::@2]
  __b2_from___b1:
    jmp __b2
    // end::@2
  __b2:
    // [58] call print_ln 
    // [60] phi from end::@2 to print_ln [phi:end::@2->print_ln]
  print_ln_from___b2:
    jsr print_ln
    jmp __breturn
    // end::@return
  __breturn:
    // [59] return 
    rts
}
  // print_ln
// Print a newline
print_ln: {
    // [61] phi from print_ln to print_ln::@1 [phi:print_ln->print_ln::@1]
  __b1_from_print_ln:
    // [61] phi (byte*) print_line_cursor#8 = (byte*) 1024 [phi:print_ln->print_ln::@1#0] -- pbuz1=pbuc1 
    lda #<$400
    sta.z print_line_cursor
    lda #>$400
    sta.z print_line_cursor+1
    jmp __b1
    // [61] phi from print_ln::@1 to print_ln::@1 [phi:print_ln::@1->print_ln::@1]
  __b1_from___b1:
    // [61] phi (byte*) print_line_cursor#8 = (byte*) print_line_cursor#1 [phi:print_ln::@1->print_ln::@1#0] -- register_copy 
    jmp __b1
    // print_ln::@1
  __b1:
    // [62] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#8 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z print_line_cursor
    sta.z print_line_cursor
    bcc !+
    inc.z print_line_cursor+1
  !:
    // [63] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 
    lda.z print_line_cursor+1
    cmp.z print_char_cursor+1
    bcc __b1_from___b1
    bne !+
    lda.z print_line_cursor
    cmp.z print_char_cursor
    bcc __b1_from___b1
  !:
    jmp __breturn
    // print_ln::@return
  __breturn:
    // [64] return 
    rts
}
  // print_word
// Print a word as HEX
// print_word(word zp($13) w)
print_word: {
    .label w = $13
    // [65] (byte) print_byte::b#0 ← > (word) print_word::w#0 -- vbuxx=_hi_vwuz1 
    lda.z w+1
    tax
    // [66] call print_byte 
    // [70] phi from print_word to print_byte [phi:print_word->print_byte]
  print_byte_from_print_word:
    // [70] phi (byte*) print_char_cursor#35 = (byte*) 1024 [phi:print_word->print_byte#0] -- pbuz1=pbuc1 
    lda #<$400
    sta.z print_char_cursor
    lda #>$400
    sta.z print_char_cursor+1
    // [70] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy 
    jsr print_byte
    jmp __b1
    // print_word::@1
  __b1:
    // [67] (byte) print_byte::b#1 ← < (word) print_word::w#0 -- vbuxx=_lo_vwuz1 
    lda.z w
    tax
    // [68] call print_byte 
    // [70] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte]
  print_byte_from___b1:
    // [70] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#10 [phi:print_word::@1->print_byte#0] -- register_copy 
    // [70] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy 
    jsr print_byte
    jmp __breturn
    // print_word::@return
  __breturn:
    // [69] return 
    rts
}
  // print_byte
// Print a byte as HEX
// print_byte(byte register(X) b)
print_byte: {
    // [71] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 -- vbuaa=vbuxx_ror_4 
    txa
    lsr
    lsr
    lsr
    lsr
    // [72] (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa 
    tay
    lda print_hextab,y
    // [73] call print_char 
    // [78] phi from print_byte to print_char [phi:print_byte->print_char]
  print_char_from_print_byte:
    // [78] phi (byte*) print_char_cursor#25 = (byte*) print_char_cursor#35 [phi:print_byte->print_char#0] -- register_copy 
    // [78] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy 
    jsr print_char
    jmp __b1
    // print_byte::@1
  __b1:
    // [74] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 
    lda #$f
    axs #0
    // [75] (byte) print_char::ch#1 ← *((const byte*) print_hextab + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx 
    lda print_hextab,x
    // [76] call print_char 
    // [78] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
  print_char_from___b1:
    // [78] phi (byte*) print_char_cursor#25 = (byte*) print_char_cursor#10 [phi:print_byte::@1->print_char#0] -- register_copy 
    // [78] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy 
    jsr print_char
    jmp __breturn
    // print_byte::@return
  __breturn:
    // [77] return 
    rts
}
  // print_char
// Print a single char
// print_char(byte register(A) ch)
print_char: {
    // [79] *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2 -- _deref_pbuz1=vbuaa 
    ldy #0
    sta (print_char_cursor),y
    // [80] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#25 -- pbuz1=_inc_pbuz1 
    inc.z print_char_cursor
    bne !+
    inc.z print_char_cursor+1
  !:
    jmp __breturn
    // print_char::@return
  __breturn:
    // [81] return 
    rts
}
  // start
start: {
    .label LAST_TIME = last_time
    // asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1  }
    jsr $ffde
    sta LAST_TIME
    stx LAST_TIME+1
    // [83] (word) rand_seed ← (word) $194a -- vwuz1=vwuc1 
    lda #<$194a
    sta.z rand_seed
    lda #>$194a
    sta.z rand_seed+1
    jmp __breturn
    // start::@return
  __breturn:
    // [84] return 
    rts
}
  // makechar
makechar: {
    .label __5 = $15
    .label __8 = $13
    .label __9 = $13
    .label s = $12
    .label c = $10
    .label i = 8
    .label b = 9
    .label __10 = $13
    // [86] phi from makechar to makechar::@1 [phi:makechar->makechar::@1]
  __b1_from_makechar:
    // [86] phi (word) makechar::c#3 = (byte) 0 [phi:makechar->makechar::@1#0] -- vwuz1=vbuc1 
    lda #<0
    sta.z c
    lda #>0
    sta.z c+1
    jmp __b1
    // makechar::@1
  __b1:
    // [87] if((word) makechar::c#3<(word) $100) goto makechar::@2 -- vwuz1_lt_vwuc1_then_la1 
    lda.z c+1
    cmp #>$100
    bcc __b2
    bne !+
    lda.z c
    cmp #<$100
    bcc __b2
  !:
    jmp __breturn
    // makechar::@return
  __breturn:
    // [88] return 
    rts
    // makechar::@2
  __b2:
    // [89] (byte~) makechar::$1 ← (byte)(word) makechar::c#3 -- vbuaa=_byte_vwuz1 
    lda.z c
    // [90] (byte) makechar::s#1 ← *((const byte*) sinustable + (byte~) makechar::$1) -- vbuz1=pbuc1_derefidx_vbuaa 
    tay
    lda sinustable,y
    sta.z s
    // [91] phi from makechar::@2 to makechar::@3 [phi:makechar::@2->makechar::@3]
  __b3_from___b2:
    // [91] phi (byte) makechar::i#3 = (byte) 0 [phi:makechar::@2->makechar::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b3
    // makechar::@3
  __b3:
    // [92] if((byte) makechar::i#3<(byte) 8) goto makechar::@5 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #8
    bcc __b5_from___b3
    jmp __b4
    // makechar::@4
  __b4:
    // [93] (word) makechar::c#2 ← ++ (word) makechar::c#3 -- vwuz1=_inc_vwuz1 
    inc.z c
    bne !+
    inc.z c+1
  !:
    // [86] phi from makechar::@4 to makechar::@1 [phi:makechar::@4->makechar::@1]
  __b1_from___b4:
    // [86] phi (word) makechar::c#3 = (word) makechar::c#2 [phi:makechar::@4->makechar::@1#0] -- register_copy 
    jmp __b1
    // [94] phi from makechar::@3 to makechar::@5 [phi:makechar::@3->makechar::@5]
  __b5_from___b3:
    // [94] phi (byte) makechar::b#3 = (byte) 0 [phi:makechar::@3->makechar::@5#0] -- vbuz1=vbuc1 
    lda #0
    sta.z b
    // [94] phi (byte) makechar::ii#3 = (byte) 0 [phi:makechar::@3->makechar::@5#1] -- vbuyy=vbuc1 
    ldy #0
    jmp __b5
    // makechar::@5
  __b5:
    // [95] if((byte) makechar::ii#3<(byte) 8) goto makechar::@6 -- vbuyy_lt_vbuc1_then_la1 
    cpy #8
    bcc __b6_from___b5
    jmp __b7
    // makechar::@7
  __b7:
    // [96] (word~) makechar::$8 ← (word) makechar::c#3 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z c
    asl
    sta.z __8
    lda.z c+1
    rol
    sta.z __8+1
    asl.z __8
    rol.z __8+1
    asl.z __8
    rol.z __8+1
    // [97] (word~) makechar::$9 ← (word~) makechar::$8 + (byte) makechar::i#3 -- vwuz1=vwuz1_plus_vbuz2 
    lda.z i
    clc
    adc.z __9
    sta.z __9
    bcc !+
    inc.z __9+1
  !:
    // [98] (byte*~) makechar::$10 ← (const byte*) CHARSET + (word~) makechar::$9 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z __10
    adc #<CHARSET
    sta.z __10
    lda.z __10+1
    adc #>CHARSET
    sta.z __10+1
    // [99] *((byte*~) makechar::$10) ← (byte) makechar::b#3 -- _deref_pbuz1=vbuz2 
    lda.z b
    ldy #0
    sta (__10),y
    // [100] (byte) makechar::i#2 ← ++ (byte) makechar::i#3 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [91] phi from makechar::@7 to makechar::@3 [phi:makechar::@7->makechar::@3]
  __b3_from___b7:
    // [91] phi (byte) makechar::i#3 = (byte) makechar::i#2 [phi:makechar::@7->makechar::@3#0] -- register_copy 
    jmp __b3
    // [101] phi from makechar::@5 to makechar::@6 [phi:makechar::@5->makechar::@6]
  __b6_from___b5:
    jmp __b6
    // makechar::@6
  __b6:
    // [102] call rand 
    jsr rand
    // [103] (byte) rand::return#2 ← (byte) rand::return#0
    jmp __b10
    // makechar::@10
  __b10:
    // [104] (byte~) makechar::$4 ← (byte) rand::return#2
    // [105] (byte~) makechar::$5 ← (byte~) makechar::$4 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 
    and #$ff
    sta.z __5
    // [106] if((byte~) makechar::$5<=(byte) makechar::s#1) goto makechar::@8 -- vbuz1_le_vbuz2_then_la1 
    lda.z s
    cmp.z __5
    bcs __b8_from___b10
    jmp __b9
    // makechar::@9
  __b9:
    // [107] (byte) makechar::b#2 ← (byte) makechar::b#3 | *((const byte*) bittab + (byte) makechar::ii#3) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuyy 
    lda bittab,y
    ora.z b
    sta.z b
    // [108] phi from makechar::@10 makechar::@9 to makechar::@8 [phi:makechar::@10/makechar::@9->makechar::@8]
  __b8_from___b10:
  __b8_from___b9:
    // [108] phi (byte) makechar::b#7 = (byte) makechar::b#3 [phi:makechar::@10/makechar::@9->makechar::@8#0] -- register_copy 
    jmp __b8
    // makechar::@8
  __b8:
    // [109] (byte) makechar::ii#2 ← ++ (byte) makechar::ii#3 -- vbuyy=_inc_vbuyy 
    iny
    // [94] phi from makechar::@8 to makechar::@5 [phi:makechar::@8->makechar::@5]
  __b5_from___b8:
    // [94] phi (byte) makechar::b#3 = (byte) makechar::b#7 [phi:makechar::@8->makechar::@5#0] -- register_copy 
    // [94] phi (byte) makechar::ii#3 = (byte) makechar::ii#2 [phi:makechar::@8->makechar::@5#1] -- register_copy 
    jmp __b5
}
  // rand
rand: {
    .label RAND_SEED = rand_seed
    // asm { ldx#8 ldaRAND_SEED+0 __rand_loop: asl rolRAND_SEED+1 bcc__no_eor eor#$2D __no_eor: dex bne__rand_loop staRAND_SEED+0  }
    ldx #8
    lda RAND_SEED+0
  __rand_loop:
    asl
    rol RAND_SEED+1
    bcc __no_eor
    eor #$2d
  __no_eor:
    dex
    bne __rand_loop
    sta RAND_SEED+0
    // [111] (byte) rand::return#0 ← (byte)(word) rand_seed -- vbuaa=_byte_vwuz1 
    lda.z rand_seed
    jmp __breturn
    // rand::@return
  __breturn:
    // [112] return 
    rts
}
  // File Data
  print_hextab: .text "0123456789abcdef"
  .align $100
  sinustable: .byte $80, $7d, $7a, $77, $74, $70, $6d, $6a, $67, $64, $61, $5e, $5b, $58, $55, $52, $4f, $4d, $4a, $47, $44, $41, $3f, $3c, $39, $37, $34, $32, $2f, $2d, $2b, $28, $26, $24, $22, $20, $1e, $1c, $1a, $18, $16, $15, $13, $11, $10, $f, $d, $c, $b, $a, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, $a, $b, $c, $d, $f, $10, $11, $13, $15, $16, $18, $1a, $1c, $1e, $20, $22, $24, $26, $28, $2b, $2d, $2f, $32, $34, $37, $39, $3c, $3f, $41, $44, $47, $4a, $4d, $4f, $52, $55, $58, $5b, $5e, $61, $64, $67, $6a, $6d, $70, $74, $77, $7a, $7d, $80, $83, $86, $89, $8c, $90, $93, $96, $99, $9c, $9f, $a2, $a5, $a8, $ab, $ae, $b1, $b3, $b6, $b9, $bc, $bf, $c1, $c4, $c7, $c9, $cc, $ce, $d1, $d3, $d5, $d8, $da, $dc, $de, $e0, $e2, $e4, $e6, $e8, $ea, $eb, $ed, $ef, $f0, $f1, $f3, $f4, $f5, $f6, $f8, $f9, $fa, $fa, $fb, $fc, $fd, $fd, $fe, $fe, $fe, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $fe, $fe, $fe, $fd, $fd, $fc, $fb, $fa, $fa, $f9, $f8, $f6, $f5, $f4, $f3, $f1, $f0, $ef, $ed, $eb, $ea, $e8, $e6, $e4, $e2, $e0, $de, $dc, $da, $d8, $d5, $d3, $d1, $ce, $cc, $c9, $c7, $c4, $c1, $bf, $bc, $b9, $b6, $b3, $b1, $ae, $ab, $a8, $a5, $a2, $9f, $9c, $99, $96, $93, $90, $8c, $89, $86, $83
  xbuf: .fill $28, 0
  ybuf: .fill $19, 0
  bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __bend
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __breturn
Removing instruction jmp __b2
Removing instruction jmp __b6
Removing instruction jmp __b7
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __b5
Removing instruction jmp __breturn
Removing instruction jmp __b6
Removing instruction jmp __b8
Removing instruction jmp __b1
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 __breturn
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b7
Removing instruction jmp __b6
Removing instruction jmp __b10
Removing instruction jmp __b9
Removing instruction jmp __b8
Removing instruction jmp __breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #>0
Removing instruction lda #>0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #>0
Replacing instruction ldy #0 with TAY
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label __bbegin with __b1
Replacing label __b2_from___b1 with __b2
Replacing label __b2_from___b1 with __b2
Replacing label __b1_from___b1 with __b1
Replacing label __b1_from___b1 with __b1
Replacing label __b6_from___b5 with __b6
Replacing label __b8_from___b10 with __b8
Removing instruction __bbegin:
Removing instruction __b3_from___b2:
Removing instruction __bend_from___b3:
Removing instruction __b4_from_main:
Removing instruction __b2_from___b1:
Removing instruction doplasma_from___b2:
Removing instruction __b2_from___b1:
Removing instruction print_ln_from___b2:
Removing instruction __b1_from___b1:
Removing instruction __b6_from___b5:
Removing instruction __b8_from___b10:
Removing instruction __b8_from___b9:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction __b2:
Removing instruction __b3:
Removing instruction __bend:
Removing instruction makechar_from_main:
Removing instruction __b4:
Removing instruction __b5:
Removing instruction __b1_from___b5:
Removing instruction __b3:
Removing instruction __breturn:
Removing instruction __b6:
Removing instruction doplasma_from___b6:
Removing instruction __b7:
Removing instruction __b1_from___b7:
Removing instruction __b1_from_doplasma:
Removing instruction __b3_from___b1:
Removing instruction __b5_from___b3:
Removing instruction __breturn:
Removing instruction __b8:
Removing instruction __b5_from___b8:
Removing instruction __b6_from___b7:
Removing instruction __b3_from___b4:
Removing instruction __b1_from___b2:
Removing instruction __b1:
Removing instruction __b2:
Removing instruction __breturn:
Removing instruction __b1_from_print_ln:
Removing instruction __breturn:
Removing instruction print_byte_from_print_word:
Removing instruction __b1:
Removing instruction print_byte_from___b1:
Removing instruction __breturn:
Removing instruction print_char_from_print_byte:
Removing instruction __b1:
Removing instruction print_char_from___b1:
Removing instruction __breturn:
Removing instruction __breturn:
Removing instruction __breturn:
Removing instruction __b1_from_makechar:
Removing instruction __breturn:
Removing instruction __b3_from___b2:
Removing instruction __b4:
Removing instruction __b1_from___b4:
Removing instruction __b7:
Removing instruction __b3_from___b7:
Removing instruction __b10:
Removing instruction __b9:
Removing instruction __b5_from___b8:
Removing instruction __breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Relabelling long label __b6_from___b5 to b1
Relabelling long label __b5_from___b3 to b1
Succesful ASM optimization Pass5RelabelLongLabels
Adding RTS to root block 
Succesful ASM optimization Pass5AddMainRts
Removing instruction jmp __b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #<0
Succesful ASM optimization Pass5UnnecesaryLoadElimination

FINAL SYMBOL TABLE
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(const byte*) CHARSET = (byte*) 59392
(const byte*) CIA2_PORT_A = (byte*) 56576
(const byte) PAGE1 = (word)(const byte*) SCREEN1>>(byte) 6&(byte) $f0|(word)(const byte*) CHARSET>>(byte) $a&(byte) $e
(const byte) PAGE2 = (word)(const byte*) SCREEN2>>(byte) 6&(byte) $f0|(word)(const byte*) CHARSET>>(byte) $a&(byte) $e
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(const byte*) SCREEN1 = (byte*) 57344
(const byte*) SCREEN2 = (byte*) 58368
(word) Ticks
(word) Ticks#1 Ticks zp[2]:16 2.0
(word) Ticks#12 Ticks_1 zp[2]:19 4.0
(const byte*) VIC_MEMORY = (byte*) 53272
(const byte*) bittab[]  = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 }
(void()) doplasma((byte*) doplasma::scrn)
(byte~) doplasma::$1 reg byte a 202.0
(byte~) doplasma::$3 reg byte a 202.0
(byte~) doplasma::$6 reg byte a 2002.0
(label) doplasma::@1
(label) doplasma::@2
(label) doplasma::@3
(label) doplasma::@4
(label) doplasma::@5
(label) doplasma::@6
(label) doplasma::@7
(label) doplasma::@8
(label) doplasma::@return
(byte) doplasma::c1A
(byte) doplasma::c1B
(byte) doplasma::c1a
(byte) doplasma::c1a#2 c1a zp[1]:9 67.33333333333333
(byte) doplasma::c1a#3 c1a zp[1]:9 75.75
(byte) doplasma::c1b
(byte) doplasma::c1b#2 c1b zp[1]:18 101.0
(byte) doplasma::c1b#3 c1b zp[1]:18 60.599999999999994
(byte) doplasma::c2A
(const byte) doplasma::c2A#0 c2A = (byte) 0
(byte) doplasma::c2B
(const byte) doplasma::c2B#0 c2B = (byte) 0
(byte) doplasma::c2a
(byte) doplasma::c2a#2 c2a zp[1]:2 67.33333333333333
(byte) doplasma::c2a#3 c2a zp[1]:2 75.75
(byte) doplasma::c2b
(byte) doplasma::c2b#2 c2b zp[1]:3 101.0
(byte) doplasma::c2b#3 c2b zp[1]:3 60.599999999999994
(byte) doplasma::i
(byte) doplasma::i#2 i zp[1]:21 202.0
(byte) doplasma::i#3 i zp[1]:21 67.33333333333333
(byte) doplasma::ii
(byte) doplasma::ii#2 ii zp[1]:8 202.0
(byte) doplasma::ii#3 ii zp[1]:8 67.33333333333333
(byte) doplasma::j
(byte) doplasma::j#2 reg byte y 2002.0
(byte) doplasma::j#3 reg byte y 1251.25
(byte) doplasma::jj
(byte) doplasma::jj#2 reg byte x 202.0
(byte) doplasma::jj#3 reg byte x 163.0
(byte*) doplasma::scrn
(byte*) doplasma::scrn#0 scrn zp[2]:6 101.0
(byte*) doplasma::scrn#13 scrn zp[2]:6 6.733333333333333
(byte*) doplasma::scrn#6 scrn zp[2]:6 186.28571428571428
(void()) end()
(label) end::@1
(label) end::@2
(label) end::@return
(word) last_time loadstore zp[2]:10 0.4545454545454546
(signed word()) main()
(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::block
(byte) main::block#1 block zp[1]:14 0.46153846153846156
(word) main::count
(word) main::count#1 count zp[2]:4 22.0
(word) main::count#2 count zp[2]:4 4.714285714285714
(signed word) main::return
(byte) main::tmp
(byte) main::tmp#1 reg byte a 4.0
(byte) main::v
(byte) main::v#1 v zp[1]:15 0.4444444444444444
(void()) makechar()
(byte~) makechar::$1 reg byte a 22.0
(byte*~) makechar::$10 zp[2]:19 202.0
(byte~) makechar::$4 reg byte a 2002.0
(byte~) makechar::$5 zp[1]:21 2002.0
(word~) makechar::$8 zp[2]:19 202.0
(word~) makechar::$9 zp[2]:19 202.0
(label) makechar::@1
(label) makechar::@10
(label) makechar::@2
(label) makechar::@3
(label) makechar::@4
(label) makechar::@5
(label) makechar::@6
(label) makechar::@7
(label) makechar::@8
(label) makechar::@9
(label) makechar::@return
(byte) makechar::b
(byte) makechar::b#2 b zp[1]:9 2002.0
(byte) makechar::b#3 b zp[1]:9 282.1818181818182
(byte) makechar::b#7 b zp[1]:9 1501.5
(word) makechar::c
(word) makechar::c#2 c zp[2]:16 22.0
(word) makechar::c#3 c zp[2]:16 6.090909090909091
(byte) makechar::i
(byte) makechar::i#2 i zp[1]:8 202.0
(byte) makechar::i#3 i zp[1]:8 23.764705882352942
(byte) makechar::ii
(byte) makechar::ii#2 reg byte y 2002.0
(byte) makechar::ii#3 reg byte y 400.4
(byte) makechar::s
(byte) makechar::s#1 s zp[1]:18 53.26315789473684
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte x 4.0
(label) print_byte::@1
(label) print_byte::@return
(byte) print_byte::b
(byte) print_byte::b#0 reg byte x 4.0
(byte) print_byte::b#1 reg byte x 4.0
(byte) print_byte::b#2 reg byte x 2.0
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
(byte) print_char::ch#0 reg byte a 4.0
(byte) print_char::ch#1 reg byte a 4.0
(byte) print_char::ch#2 reg byte a 6.0
(byte*) print_char_cursor
(byte*) print_char_cursor#10 print_char_cursor zp[2]:6 1.0
(byte*) print_char_cursor#25 print_char_cursor zp[2]:6 4.0
(byte*) print_char_cursor#35 print_char_cursor zp[2]:6 1.3333333333333333
(const byte*) print_hextab[]  = (string) "0123456789abcdef"z
(byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp[2]:4 16.5
(byte*) print_line_cursor#8 print_line_cursor zp[2]:4 22.0
(void()) print_ln()
(label) print_ln::@1
(label) print_ln::@return
(byte*) print_screen
(void()) print_word((word) print_word::w)
(label) print_word::@1
(label) print_word::@return
(word) print_word::w
(word) print_word::w#0 w zp[2]:19 2.0
(byte()) rand()
(label) rand::@return
(const word*) rand::RAND_SEED = &(word) rand_seed
(byte) rand::return
(byte) rand::return#0 reg byte a 334.33333333333337
(byte) rand::return#2 reg byte a 2002.0
(word) rand_seed loadstore zp[2]:12 0.21428571428571427
(const byte*) sinustable[(number) $100]  = { (byte) $80, (byte) $7d, (byte) $7a, (byte) $77, (byte) $74, (byte) $70, (byte) $6d, (byte) $6a, (byte) $67, (byte) $64, (byte) $61, (byte) $5e, (byte) $5b, (byte) $58, (byte) $55, (byte) $52, (byte) $4f, (byte) $4d, (byte) $4a, (byte) $47, (byte) $44, (byte) $41, (byte) $3f, (byte) $3c, (byte) $39, (byte) $37, (byte) $34, (byte) $32, (byte) $2f, (byte) $2d, (byte) $2b, (byte) $28, (byte) $26, (byte) $24, (byte) $22, (byte) $20, (byte) $1e, (byte) $1c, (byte) $1a, (byte) $18, (byte) $16, (byte) $15, (byte) $13, (byte) $11, (byte) $10, (byte) $f, (byte) $d, (byte) $c, (byte) $b, (byte) $a, (byte) 8, (byte) 7, (byte) 6, (byte) 6, (byte) 5, (byte) 4, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 2, (byte) 2, (byte) 3, (byte) 3, (byte) 4, (byte) 5, (byte) 6, (byte) 6, (byte) 7, (byte) 8, (byte) $a, (byte) $b, (byte) $c, (byte) $d, (byte) $f, (byte) $10, (byte) $11, (byte) $13, (byte) $15, (byte) $16, (byte) $18, (byte) $1a, (byte) $1c, (byte) $1e, (byte) $20, (byte) $22, (byte) $24, (byte) $26, (byte) $28, (byte) $2b, (byte) $2d, (byte) $2f, (byte) $32, (byte) $34, (byte) $37, (byte) $39, (byte) $3c, (byte) $3f, (byte) $41, (byte) $44, (byte) $47, (byte) $4a, (byte) $4d, (byte) $4f, (byte) $52, (byte) $55, (byte) $58, (byte) $5b, (byte) $5e, (byte) $61, (byte) $64, (byte) $67, (byte) $6a, (byte) $6d, (byte) $70, (byte) $74, (byte) $77, (byte) $7a, (byte) $7d, (byte) $80, (byte) $83, (byte) $86, (byte) $89, (byte) $8c, (byte) $90, (byte) $93, (byte) $96, (byte) $99, (byte) $9c, (byte) $9f, (byte) $a2, (byte) $a5, (byte) $a8, (byte) $ab, (byte) $ae, (byte) $b1, (byte) $b3, (byte) $b6, (byte) $b9, (byte) $bc, (byte) $bf, (byte) $c1, (byte) $c4, (byte) $c7, (byte) $c9, (byte) $cc, (byte) $ce, (byte) $d1, (byte) $d3, (byte) $d5, (byte) $d8, (byte) $da, (byte) $dc, (byte) $de, (byte) $e0, (byte) $e2, (byte) $e4, (byte) $e6, (byte) $e8, (byte) $ea, (byte) $eb, (byte) $ed, (byte) $ef, (byte) $f0, (byte) $f1, (byte) $f3, (byte) $f4, (byte) $f5, (byte) $f6, (byte) $f8, (byte) $f9, (byte) $fa, (byte) $fa, (byte) $fb, (byte) $fc, (byte) $fd, (byte) $fd, (byte) $fe, (byte) $fe, (byte) $fe, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $fe, (byte) $fe, (byte) $fe, (byte) $fd, (byte) $fd, (byte) $fc, (byte) $fb, (byte) $fa, (byte) $fa, (byte) $f9, (byte) $f8, (byte) $f6, (byte) $f5, (byte) $f4, (byte) $f3, (byte) $f1, (byte) $f0, (byte) $ef, (byte) $ed, (byte) $eb, (byte) $ea, (byte) $e8, (byte) $e6, (byte) $e4, (byte) $e2, (byte) $e0, (byte) $de, (byte) $dc, (byte) $da, (byte) $d8, (byte) $d5, (byte) $d3, (byte) $d1, (byte) $ce, (byte) $cc, (byte) $c9, (byte) $c7, (byte) $c4, (byte) $c1, (byte) $bf, (byte) $bc, (byte) $b9, (byte) $b6, (byte) $b3, (byte) $b1, (byte) $ae, (byte) $ab, (byte) $a8, (byte) $a5, (byte) $a2, (byte) $9f, (byte) $9c, (byte) $99, (byte) $96, (byte) $93, (byte) $90, (byte) $8c, (byte) $89, (byte) $86, (byte) $83 }
(void()) start()
(label) start::@return
(const word*) start::LAST_TIME = &(word) last_time
(const byte*) xbuf[(number) $28]  = { fill( $28, 0) }
(const byte*) ybuf[(number) $19]  = { fill( $19, 0) }

zp[1]:2 [ doplasma::c2a#3 doplasma::c2a#2 ]
zp[1]:3 [ doplasma::c2b#3 doplasma::c2b#2 ]
reg byte x [ doplasma::jj#3 doplasma::jj#2 ]
reg byte y [ doplasma::j#3 doplasma::j#2 ]
zp[2]:4 [ print_line_cursor#8 print_line_cursor#1 main::count#2 main::count#1 ]
reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
zp[2]:6 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ]
zp[1]:8 [ makechar::i#3 makechar::i#2 doplasma::ii#3 doplasma::ii#2 ]
reg byte y [ makechar::ii#3 makechar::ii#2 ]
zp[1]:9 [ makechar::b#3 makechar::b#7 makechar::b#2 doplasma::c1a#3 doplasma::c1a#2 ]
zp[2]:10 [ last_time ]
zp[2]:12 [ rand_seed ]
zp[1]:14 [ main::block#1 ]
reg byte a [ main::tmp#1 ]
zp[1]:15 [ main::v#1 ]
reg byte a [ doplasma::$6 ]
reg byte a [ doplasma::$3 ]
reg byte a [ doplasma::$1 ]
zp[2]:16 [ Ticks#1 makechar::c#3 makechar::c#2 ]
reg byte a [ print_byte::$0 ]
reg byte x [ print_byte::$2 ]
reg byte a [ makechar::$1 ]
zp[1]:18 [ makechar::s#1 doplasma::c1b#3 doplasma::c1b#2 ]
zp[2]:19 [ makechar::$8 makechar::$9 makechar::$10 Ticks#12 print_word::w#0 ]
reg byte a [ rand::return#2 ]
reg byte a [ makechar::$4 ]
zp[1]:21 [ makechar::$5 doplasma::i#3 doplasma::i#2 ]
reg byte a [ rand::return#0 ]


FINAL ASSEMBLER
Score: 104147

  // File Comments
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(__b1)
.pc = $80d "Program"
  // Global Constants & labels
  .label VIC_MEMORY = $d018
  // CIA#2 Port A: Serial bus, RS-232, VIC memory bank
  .label CIA2_PORT_A = $dd00
  .label SCREEN1 = $e000
  .label SCREEN2 = $e400
  .label CHARSET = $e800
  .const PAGE1 = SCREEN1>>6&$f0|CHARSET>>$a&$e
  .const PAGE2 = SCREEN2>>6&$f0|CHARSET>>$a&$e
  .label last_time = $a
  .label rand_seed = $c
  .label print_line_cursor = 4
  .label print_char_cursor = 6
  .label Ticks = $10
  .label Ticks_1 = $13
  // @begin
  // @1
__b1:
  // last_time
  // [1] (word) last_time ← (word) 0 -- vwuz1=vwuc1 
  lda #<0
  sta.z last_time
  sta.z last_time+1
  // @2
  // rand_seed
  // [2] (word) rand_seed ← (word) 0 -- vwuz1=vwuc1 
  sta.z rand_seed
  sta.z rand_seed+1
  // [3] phi from @2 to @3 [phi:@2->@3]
  // @3
  // [4] call main 
  jsr main
  rts
  // [5] phi from @3 to @end [phi:@3->@end]
  // @end
  // main
main: {
    .label block = $e
    .label v = $f
    .label count = 4
    // rand_seed = 6474
    // [6] (word) rand_seed ← (word) $194a -- vwuz1=vwuc1 
    lda #<$194a
    sta.z rand_seed
    lda #>$194a
    sta.z rand_seed+1
    // makechar()
    // [7] call makechar 
    // [85] phi from main to makechar [phi:main->makechar]
    jsr makechar
    // [8] phi from main to main::@4 [phi:main->main::@4]
    // main::@4
    // start()
    // [9] call start 
    jsr start
    // main::@5
    // block = *CIA2_PORT_A
    // [10] (byte) main::block#1 ← *((const byte*) CIA2_PORT_A) -- vbuz1=_deref_pbuc1 
    lda CIA2_PORT_A
    sta.z block
    // tmp = block & 0xFC
    // [11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc -- vbuaa=vbuz1_band_vbuc1 
    lda #$fc
    and.z block
    // *CIA2_PORT_A = tmp
    // [12] *((const byte*) CIA2_PORT_A) ← (byte) main::tmp#1 -- _deref_pbuc1=vbuaa 
    sta CIA2_PORT_A
    // v = *VIC_MEMORY
    // [13] (byte) main::v#1 ← *((const byte*) VIC_MEMORY) -- vbuz1=_deref_pbuc1 
    lda VIC_MEMORY
    sta.z v
    // [14] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
    // [14] phi (word) main::count#2 = (word) $1f4 [phi:main::@5->main::@1#0] -- vwuz1=vwuc1 
    lda #<$1f4
    sta.z count
    lda #>$1f4
    sta.z count+1
  /* Run the demo until a key was hit */
    // main::@1
  __b1:
    // while (count)
    // [15] if((byte) 0!=(word) main::count#2) goto main::@2 -- vwuc1_neq_vwuz1_then_la1 
    lda.z count+1
    cmp #>0
    bne __b2
    lda.z count
    cmp #<0
    bne __b2
    // main::@3
    // *VIC_MEMORY = v
    // [16] *((const byte*) VIC_MEMORY) ← (byte) main::v#1 -- _deref_pbuc1=vbuz1 
    lda.z v
    sta VIC_MEMORY
    // *CIA2_PORT_A = block
    // [17] *((const byte*) CIA2_PORT_A) ← (byte) main::block#1 -- _deref_pbuc1=vbuz1 
    lda.z block
    sta CIA2_PORT_A
    // end()
    // [18] call end 
    jsr end
    // main::@return
    // }
    // [19] return 
    rts
    // [20] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
    // main::@2
  __b2:
    // doplasma ((char*)SCREEN1)
    // [21] call doplasma 
    // [26] phi from main::@2 to doplasma [phi:main::@2->doplasma]
    // [26] phi (byte*) doplasma::scrn#13 = (const byte*) SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN1
    sta.z doplasma.scrn
    lda #>SCREEN1
    sta.z doplasma.scrn+1
    jsr doplasma
    // main::@6
    // *VIC_MEMORY = PAGE1
    // [22] *((const byte*) VIC_MEMORY) ← (const byte) PAGE1 -- _deref_pbuc1=vbuc2 
    lda #PAGE1
    sta VIC_MEMORY
    // doplasma ((char*)SCREEN2)
    // [23] call doplasma 
    // [26] phi from main::@6 to doplasma [phi:main::@6->doplasma]
    // [26] phi (byte*) doplasma::scrn#13 = (const byte*) SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN2
    sta.z doplasma.scrn
    lda #>SCREEN2
    sta.z doplasma.scrn+1
    jsr doplasma
    // main::@7
    // *VIC_MEMORY = PAGE2
    // [24] *((const byte*) VIC_MEMORY) ← (const byte) PAGE2 -- _deref_pbuc1=vbuc2 
    lda #PAGE2
    sta VIC_MEMORY
    // --count;
    // [25] (word) main::count#1 ← -- (word) main::count#2 -- vwuz1=_dec_vwuz1 
    lda.z count
    bne !+
    dec.z count+1
  !:
    dec.z count
    // [14] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
    // [14] phi (word) main::count#2 = (word) main::count#1 [phi:main::@7->main::@1#0] -- register_copy 
    jmp __b1
}
  // doplasma
// doplasma(byte* zp(6) scrn)
doplasma: {
    .const c2A = 0
    .const c2B = 0
    .label c1a = 9
    .label c1b = $12
    .label ii = 8
    .label c2a = 2
    .label c2b = 3
    .label i = $15
    .label scrn = 6
    // [27] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
    // [27] phi (byte) doplasma::c1b#3 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z c1b
    // [27] phi (byte) doplasma::c1a#3 = (byte) 0 [phi:doplasma->doplasma::@1#1] -- vbuz1=vbuc1 
    sta.z c1a
    // [27] phi (byte) doplasma::ii#3 = (byte) 0 [phi:doplasma->doplasma::@1#2] -- vbuz1=vbuc1 
    sta.z ii
    // doplasma::@1
  __b1:
    // for (ii = 0; ii < 25; ++ii)
    // [28] if((byte) doplasma::ii#3<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 
    lda.z ii
    cmp #$19
    bcc __b2
    // [29] phi from doplasma::@1 to doplasma::@3 [phi:doplasma::@1->doplasma::@3]
    // [29] phi (byte) doplasma::c2b#3 = (const byte) doplasma::c2B#0 [phi:doplasma::@1->doplasma::@3#0] -- vbuz1=vbuc1 
    lda #c2B
    sta.z c2b
    // [29] phi (byte) doplasma::c2a#3 = (const byte) doplasma::c2A#0 [phi:doplasma::@1->doplasma::@3#1] -- vbuz1=vbuc1 
    lda #c2A
    sta.z c2a
    // [29] phi (byte) doplasma::i#3 = (byte) 0 [phi:doplasma::@1->doplasma::@3#2] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    // doplasma::@3
  __b3:
    // for (i = 0; i < 40; ++i)
    // [30] if((byte) doplasma::i#3<(byte) $28) goto doplasma::@4 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #$28
    bcc __b4
    // [31] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5]
    // [31] phi (byte*) doplasma::scrn#6 = (byte*) doplasma::scrn#13 [phi:doplasma::@3->doplasma::@5#0] -- register_copy 
    // [31] phi (byte) doplasma::jj#3 = (byte) 0 [phi:doplasma::@3->doplasma::@5#1] -- vbuxx=vbuc1 
    ldx #0
    // doplasma::@5
  __b5:
    // for (jj = 0; jj < 25; ++jj)
    // [32] if((byte) doplasma::jj#3<(byte) $19) goto doplasma::@6 -- vbuxx_lt_vbuc1_then_la1 
    cpx #$19
    bcc b1
    // doplasma::@return
    // }
    // [33] return 
    rts
    // [34] phi from doplasma::@5 to doplasma::@6 [phi:doplasma::@5->doplasma::@6]
  b1:
    // [34] phi (byte) doplasma::j#3 = (byte) 0 [phi:doplasma::@5->doplasma::@6#0] -- vbuyy=vbuc1 
    ldy #0
    // doplasma::@6
  __b6:
    // for (j = 0; j < 40; ++j)
    // [35] if((byte) doplasma::j#3<(byte) $28) goto doplasma::@7 -- vbuyy_lt_vbuc1_then_la1 
    cpy #$28
    bcc __b7
    // doplasma::@8
    // scrn += 40
    // [36] (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z scrn
    sta.z scrn
    bcc !+
    inc.z scrn+1
  !:
    // for (jj = 0; jj < 25; ++jj)
    // [37] (byte) doplasma::jj#2 ← ++ (byte) doplasma::jj#3 -- vbuxx=_inc_vbuxx 
    inx
    // [31] phi from doplasma::@8 to doplasma::@5 [phi:doplasma::@8->doplasma::@5]
    // [31] phi (byte*) doplasma::scrn#6 = (byte*) doplasma::scrn#0 [phi:doplasma::@8->doplasma::@5#0] -- register_copy 
    // [31] phi (byte) doplasma::jj#3 = (byte) doplasma::jj#2 [phi:doplasma::@8->doplasma::@5#1] -- register_copy 
    jmp __b5
    // doplasma::@7
  __b7:
    // xbuf[j] + ybuf[jj]
    // [38] (byte~) doplasma::$6 ← *((const byte*) xbuf + (byte) doplasma::j#3) + *((const byte*) ybuf + (byte) doplasma::jj#3) -- vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx 
    lda xbuf,y
    clc
    adc ybuf,x
    // scrn[j] = (xbuf[j] + ybuf[jj])
    // [39] *((byte*) doplasma::scrn#6 + (byte) doplasma::j#3) ← (byte~) doplasma::$6 -- pbuz1_derefidx_vbuyy=vbuaa 
    sta (scrn),y
    // for (j = 0; j < 40; ++j)
    // [40] (byte) doplasma::j#2 ← ++ (byte) doplasma::j#3 -- vbuyy=_inc_vbuyy 
    iny
    // [34] phi from doplasma::@7 to doplasma::@6 [phi:doplasma::@7->doplasma::@6]
    // [34] phi (byte) doplasma::j#3 = (byte) doplasma::j#2 [phi:doplasma::@7->doplasma::@6#0] -- register_copy 
    jmp __b6
    // doplasma::@4
  __b4:
    // sinustable[c2a] + sinustable[c2b]
    // [41] (byte~) doplasma::$3 ← *((const byte*) sinustable + (byte) doplasma::c2a#3) + *((const byte*) sinustable + (byte) doplasma::c2b#3) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
    ldy.z c2a
    lda sinustable,y
    ldy.z c2b
    clc
    adc sinustable,y
    // xbuf[i] = (sinustable[c2a] + sinustable[c2b])
    // [42] *((const byte*) xbuf + (byte) doplasma::i#3) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa 
    ldy.z i
    sta xbuf,y
    // c2a += 3
    // [43] (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c2a
    axs #-[3]
    stx.z c2a
    // c2b += 7
    // [44] (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c2b
    axs #-[7]
    stx.z c2b
    // for (i = 0; i < 40; ++i)
    // [45] (byte) doplasma::i#2 ← ++ (byte) doplasma::i#3 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [29] phi from doplasma::@4 to doplasma::@3 [phi:doplasma::@4->doplasma::@3]
    // [29] phi (byte) doplasma::c2b#3 = (byte) doplasma::c2b#2 [phi:doplasma::@4->doplasma::@3#0] -- register_copy 
    // [29] phi (byte) doplasma::c2a#3 = (byte) doplasma::c2a#2 [phi:doplasma::@4->doplasma::@3#1] -- register_copy 
    // [29] phi (byte) doplasma::i#3 = (byte) doplasma::i#2 [phi:doplasma::@4->doplasma::@3#2] -- register_copy 
    jmp __b3
    // doplasma::@2
  __b2:
    // sinustable[c1a] + sinustable[c1b]
    // [46] (byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
    ldy.z c1a
    lda sinustable,y
    ldy.z c1b
    clc
    adc sinustable,y
    // ybuf[ii] = (sinustable[c1a] + sinustable[c1b])
    // [47] *((const byte*) ybuf + (byte) doplasma::ii#3) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuaa 
    ldy.z ii
    sta ybuf,y
    // c1a += 4
    // [48] (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1a
    axs #-[4]
    stx.z c1a
    // c1b += 9
    // [49] (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1b
    axs #-[9]
    stx.z c1b
    // for (ii = 0; ii < 25; ++ii)
    // [50] (byte) doplasma::ii#2 ← ++ (byte) doplasma::ii#3 -- vbuz1=_inc_vbuz1 
    inc.z ii
    // [27] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1]
    // [27] phi (byte) doplasma::c1b#3 = (byte) doplasma::c1b#2 [phi:doplasma::@2->doplasma::@1#0] -- register_copy 
    // [27] phi (byte) doplasma::c1a#3 = (byte) doplasma::c1a#2 [phi:doplasma::@2->doplasma::@1#1] -- register_copy 
    // [27] phi (byte) doplasma::ii#3 = (byte) doplasma::ii#2 [phi:doplasma::@2->doplasma::@1#2] -- register_copy 
    jmp __b1
}
  // end
end: {
    // Ticks = last_time
    // [51] (word) Ticks#1 ← (word) last_time -- vwuz1=vwuz2 
    lda.z last_time
    sta.z Ticks
    lda.z last_time+1
    sta.z Ticks+1
    // start()
    // [52] call start 
    jsr start
    // end::@1
    // last_time -= Ticks
    // [53] (word) last_time ← (word) last_time - (word) Ticks#1 -- vwuz1=vwuz1_minus_vwuz2 
    lda.z last_time
    sec
    sbc.z Ticks
    sta.z last_time
    lda.z last_time+1
    sbc.z Ticks+1
    sta.z last_time+1
    // Ticks = last_time
    // [54] (word) Ticks#12 ← (word) last_time -- vwuz1=vwuz2 
    lda.z last_time
    sta.z Ticks_1
    lda.z last_time+1
    sta.z Ticks_1+1
    // print_word(Ticks)
    // [55] (word) print_word::w#0 ← (word) Ticks#12
    // [56] call print_word 
    jsr print_word
    // [57] phi from end::@1 to end::@2 [phi:end::@1->end::@2]
    // end::@2
    // print_ln()
    // [58] call print_ln 
    // [60] phi from end::@2 to print_ln [phi:end::@2->print_ln]
    jsr print_ln
    // end::@return
    // }
    // [59] return 
    rts
}
  // print_ln
// Print a newline
print_ln: {
    // [61] phi from print_ln to print_ln::@1 [phi:print_ln->print_ln::@1]
    // [61] phi (byte*) print_line_cursor#8 = (byte*) 1024 [phi:print_ln->print_ln::@1#0] -- pbuz1=pbuc1 
    lda #<$400
    sta.z print_line_cursor
    lda #>$400
    sta.z print_line_cursor+1
    // [61] phi from print_ln::@1 to print_ln::@1 [phi:print_ln::@1->print_ln::@1]
    // [61] phi (byte*) print_line_cursor#8 = (byte*) print_line_cursor#1 [phi:print_ln::@1->print_ln::@1#0] -- register_copy 
    // print_ln::@1
  __b1:
    // print_line_cursor + $28
    // [62] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#8 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc.z print_line_cursor
    sta.z print_line_cursor
    bcc !+
    inc.z print_line_cursor+1
  !:
    // while (print_line_cursor<print_char_cursor)
    // [63] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 
    lda.z print_line_cursor+1
    cmp.z print_char_cursor+1
    bcc __b1
    bne !+
    lda.z print_line_cursor
    cmp.z print_char_cursor
    bcc __b1
  !:
    // print_ln::@return
    // }
    // [64] return 
    rts
}
  // print_word
// Print a word as HEX
// print_word(word zp($13) w)
print_word: {
    .label w = $13
    // print_byte(>w)
    // [65] (byte) print_byte::b#0 ← > (word) print_word::w#0 -- vbuxx=_hi_vwuz1 
    lda.z w+1
    tax
    // [66] call print_byte 
    // [70] phi from print_word to print_byte [phi:print_word->print_byte]
    // [70] phi (byte*) print_char_cursor#35 = (byte*) 1024 [phi:print_word->print_byte#0] -- pbuz1=pbuc1 
    lda #<$400
    sta.z print_char_cursor
    lda #>$400
    sta.z print_char_cursor+1
    // [70] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy 
    jsr print_byte
    // print_word::@1
    // print_byte(<w)
    // [67] (byte) print_byte::b#1 ← < (word) print_word::w#0 -- vbuxx=_lo_vwuz1 
    lda.z w
    tax
    // [68] call print_byte 
    // [70] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte]
    // [70] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#10 [phi:print_word::@1->print_byte#0] -- register_copy 
    // [70] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy 
    jsr print_byte
    // print_word::@return
    // }
    // [69] return 
    rts
}
  // print_byte
// Print a byte as HEX
// print_byte(byte register(X) b)
print_byte: {
    // b>>4
    // [71] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 -- vbuaa=vbuxx_ror_4 
    txa
    lsr
    lsr
    lsr
    lsr
    // print_char(print_hextab[b>>4])
    // [72] (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa 
    tay
    lda print_hextab,y
    // [73] call print_char 
    // [78] phi from print_byte to print_char [phi:print_byte->print_char]
    // [78] phi (byte*) print_char_cursor#25 = (byte*) print_char_cursor#35 [phi:print_byte->print_char#0] -- register_copy 
    // [78] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy 
    jsr print_char
    // print_byte::@1
    // b&$f
    // [74] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 
    lda #$f
    axs #0
    // print_char(print_hextab[b&$f])
    // [75] (byte) print_char::ch#1 ← *((const byte*) print_hextab + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx 
    lda print_hextab,x
    // [76] call print_char 
    // [78] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
    // [78] phi (byte*) print_char_cursor#25 = (byte*) print_char_cursor#10 [phi:print_byte::@1->print_char#0] -- register_copy 
    // [78] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy 
    jsr print_char
    // print_byte::@return
    // }
    // [77] return 
    rts
}
  // print_char
// Print a single char
// print_char(byte register(A) ch)
print_char: {
    // *(print_char_cursor++) = ch
    // [79] *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2 -- _deref_pbuz1=vbuaa 
    ldy #0
    sta (print_char_cursor),y
    // *(print_char_cursor++) = ch;
    // [80] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#25 -- pbuz1=_inc_pbuz1 
    inc.z print_char_cursor
    bne !+
    inc.z print_char_cursor+1
  !:
    // print_char::@return
    // }
    // [81] return 
    rts
}
  // start
start: {
    .label LAST_TIME = last_time
    // asm
    // asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1  }
    jsr $ffde
    sta LAST_TIME
    stx LAST_TIME+1
    // rand_seed = 6474
    // [83] (word) rand_seed ← (word) $194a -- vwuz1=vwuc1 
    lda #<$194a
    sta.z rand_seed
    lda #>$194a
    sta.z rand_seed+1
    // start::@return
    // }
    // [84] return 
    rts
}
  // makechar
makechar: {
    .label __5 = $15
    .label __8 = $13
    .label __9 = $13
    .label s = $12
    .label c = $10
    .label i = 8
    .label b = 9
    .label __10 = $13
    // [86] phi from makechar to makechar::@1 [phi:makechar->makechar::@1]
    // [86] phi (word) makechar::c#3 = (byte) 0 [phi:makechar->makechar::@1#0] -- vwuz1=vbuc1 
    lda #<0
    sta.z c
    sta.z c+1
    // makechar::@1
  __b1:
    // for (c = 0; c < 0x100; ++c)
    // [87] if((word) makechar::c#3<(word) $100) goto makechar::@2 -- vwuz1_lt_vwuc1_then_la1 
    lda.z c+1
    cmp #>$100
    bcc __b2
    bne !+
    lda.z c
    cmp #<$100
    bcc __b2
  !:
    // makechar::@return
    // }
    // [88] return 
    rts
    // makechar::@2
  __b2:
    // (char)c
    // [89] (byte~) makechar::$1 ← (byte)(word) makechar::c#3 -- vbuaa=_byte_vwuz1 
    lda.z c
    // s = sinustable[(char)c]
    // [90] (byte) makechar::s#1 ← *((const byte*) sinustable + (byte~) makechar::$1) -- vbuz1=pbuc1_derefidx_vbuaa 
    tay
    lda sinustable,y
    sta.z s
    // [91] phi from makechar::@2 to makechar::@3 [phi:makechar::@2->makechar::@3]
    // [91] phi (byte) makechar::i#3 = (byte) 0 [phi:makechar::@2->makechar::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    // makechar::@3
  __b3:
    // for (i = 0; i < 8; ++i)
    // [92] if((byte) makechar::i#3<(byte) 8) goto makechar::@5 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #8
    bcc b1
    // makechar::@4
    // for (c = 0; c < 0x100; ++c)
    // [93] (word) makechar::c#2 ← ++ (word) makechar::c#3 -- vwuz1=_inc_vwuz1 
    inc.z c
    bne !+
    inc.z c+1
  !:
    // [86] phi from makechar::@4 to makechar::@1 [phi:makechar::@4->makechar::@1]
    // [86] phi (word) makechar::c#3 = (word) makechar::c#2 [phi:makechar::@4->makechar::@1#0] -- register_copy 
    jmp __b1
    // [94] phi from makechar::@3 to makechar::@5 [phi:makechar::@3->makechar::@5]
  b1:
    // [94] phi (byte) makechar::b#3 = (byte) 0 [phi:makechar::@3->makechar::@5#0] -- vbuz1=vbuc1 
    lda #0
    sta.z b
    // [94] phi (byte) makechar::ii#3 = (byte) 0 [phi:makechar::@3->makechar::@5#1] -- vbuyy=vbuc1 
    tay
    // makechar::@5
  __b5:
    // for (ii = 0; ii < 8; ++ii)
    // [95] if((byte) makechar::ii#3<(byte) 8) goto makechar::@6 -- vbuyy_lt_vbuc1_then_la1 
    cpy #8
    bcc __b6
    // makechar::@7
    // c<<3
    // [96] (word~) makechar::$8 ← (word) makechar::c#3 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z c
    asl
    sta.z __8
    lda.z c+1
    rol
    sta.z __8+1
    asl.z __8
    rol.z __8+1
    asl.z __8
    rol.z __8+1
    // (c<<3) + i
    // [97] (word~) makechar::$9 ← (word~) makechar::$8 + (byte) makechar::i#3 -- vwuz1=vwuz1_plus_vbuz2 
    lda.z i
    clc
    adc.z __9
    sta.z __9
    bcc !+
    inc.z __9+1
  !:
    // ((char*)CHARSET) [(c<<3) + i] = b
    // [98] (byte*~) makechar::$10 ← (const byte*) CHARSET + (word~) makechar::$9 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z __10
    adc #<CHARSET
    sta.z __10
    lda.z __10+1
    adc #>CHARSET
    sta.z __10+1
    // [99] *((byte*~) makechar::$10) ← (byte) makechar::b#3 -- _deref_pbuz1=vbuz2 
    lda.z b
    ldy #0
    sta (__10),y
    // for (i = 0; i < 8; ++i)
    // [100] (byte) makechar::i#2 ← ++ (byte) makechar::i#3 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [91] phi from makechar::@7 to makechar::@3 [phi:makechar::@7->makechar::@3]
    // [91] phi (byte) makechar::i#3 = (byte) makechar::i#2 [phi:makechar::@7->makechar::@3#0] -- register_copy 
    jmp __b3
    // [101] phi from makechar::@5 to makechar::@6 [phi:makechar::@5->makechar::@6]
    // makechar::@6
  __b6:
    // rand()
    // [102] call rand 
    jsr rand
    // [103] (byte) rand::return#2 ← (byte) rand::return#0
    // makechar::@10
    // [104] (byte~) makechar::$4 ← (byte) rand::return#2
    // rand() & 0xFF
    // [105] (byte~) makechar::$5 ← (byte~) makechar::$4 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 
    and #$ff
    sta.z __5
    // if ((rand() & 0xFF) > s)
    // [106] if((byte~) makechar::$5<=(byte) makechar::s#1) goto makechar::@8 -- vbuz1_le_vbuz2_then_la1 
    lda.z s
    cmp.z __5
    bcs __b8
    // makechar::@9
    // b |= bittab[ii]
    // [107] (byte) makechar::b#2 ← (byte) makechar::b#3 | *((const byte*) bittab + (byte) makechar::ii#3) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuyy 
    lda bittab,y
    ora.z b
    sta.z b
    // [108] phi from makechar::@10 makechar::@9 to makechar::@8 [phi:makechar::@10/makechar::@9->makechar::@8]
    // [108] phi (byte) makechar::b#7 = (byte) makechar::b#3 [phi:makechar::@10/makechar::@9->makechar::@8#0] -- register_copy 
    // makechar::@8
  __b8:
    // for (ii = 0; ii < 8; ++ii)
    // [109] (byte) makechar::ii#2 ← ++ (byte) makechar::ii#3 -- vbuyy=_inc_vbuyy 
    iny
    // [94] phi from makechar::@8 to makechar::@5 [phi:makechar::@8->makechar::@5]
    // [94] phi (byte) makechar::b#3 = (byte) makechar::b#7 [phi:makechar::@8->makechar::@5#0] -- register_copy 
    // [94] phi (byte) makechar::ii#3 = (byte) makechar::ii#2 [phi:makechar::@8->makechar::@5#1] -- register_copy 
    jmp __b5
}
  // rand
rand: {
    .label RAND_SEED = rand_seed
    // asm
    // asm { ldx#8 ldaRAND_SEED+0 __rand_loop: asl rolRAND_SEED+1 bcc__no_eor eor#$2D __no_eor: dex bne__rand_loop staRAND_SEED+0  }
    ldx #8
    lda RAND_SEED+0
  __rand_loop:
    asl
    rol RAND_SEED+1
    bcc __no_eor
    eor #$2d
  __no_eor:
    dex
    bne __rand_loop
    sta RAND_SEED+0
    // (char)rand_seed
    // [111] (byte) rand::return#0 ← (byte)(word) rand_seed -- vbuaa=_byte_vwuz1 
    lda.z rand_seed
    // rand::@return
    // }
    // [112] return 
    rts
}
  // File Data
  print_hextab: .text "0123456789abcdef"
  .align $100
  sinustable: .byte $80, $7d, $7a, $77, $74, $70, $6d, $6a, $67, $64, $61, $5e, $5b, $58, $55, $52, $4f, $4d, $4a, $47, $44, $41, $3f, $3c, $39, $37, $34, $32, $2f, $2d, $2b, $28, $26, $24, $22, $20, $1e, $1c, $1a, $18, $16, $15, $13, $11, $10, $f, $d, $c, $b, $a, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, $a, $b, $c, $d, $f, $10, $11, $13, $15, $16, $18, $1a, $1c, $1e, $20, $22, $24, $26, $28, $2b, $2d, $2f, $32, $34, $37, $39, $3c, $3f, $41, $44, $47, $4a, $4d, $4f, $52, $55, $58, $5b, $5e, $61, $64, $67, $6a, $6d, $70, $74, $77, $7a, $7d, $80, $83, $86, $89, $8c, $90, $93, $96, $99, $9c, $9f, $a2, $a5, $a8, $ab, $ae, $b1, $b3, $b6, $b9, $bc, $bf, $c1, $c4, $c7, $c9, $cc, $ce, $d1, $d3, $d5, $d8, $da, $dc, $de, $e0, $e2, $e4, $e6, $e8, $ea, $eb, $ed, $ef, $f0, $f1, $f3, $f4, $f5, $f6, $f8, $f9, $fa, $fa, $fb, $fc, $fd, $fd, $fe, $fe, $fe, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $fe, $fe, $fe, $fd, $fd, $fc, $fb, $fa, $fa, $f9, $f8, $f6, $f5, $f4, $f3, $f1, $f0, $ef, $ed, $eb, $ea, $e8, $e6, $e4, $e2, $e0, $de, $dc, $da, $d8, $d5, $d3, $d1, $ce, $cc, $c9, $c7, $c4, $c1, $bf, $bc, $b9, $b6, $b3, $b1, $ae, $ab, $a8, $a5, $a2, $9f, $9c, $99, $96, $93, $90, $8c, $89, $86, $83
  xbuf: .fill $28, 0
  ybuf: .fill $19, 0
  bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80

