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*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 
Inlined call (byte~) main::$1 ← call toD018 (byte*) SCREEN1 (byte*) CHARSET 
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) memset::@7
Culled Empty Block (label) memset::@6
Culled Empty Block (label) memset::@8
Culled Empty Block (label) memset::@9
Culled Empty Block (label) memset::@3
Culled Empty Block (label) @7
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Culled Empty Block (label) @13
Culled Empty Block (label) @14
Culled Empty Block (label) @15
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) @41
Culled Empty Block (label) sid_rnd::@1
Culled Empty Block (label) main::toD0181_@1
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@8
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) @44
Culled Empty Block (label) makecharset::@20
Culled Empty Block (label) makecharset::@3
Culled Empty Block (label) makecharset::@21
Culled Empty Block (label) makecharset::@16
Culled Empty Block (label) makecharset::@17
Culled Empty Block (label) makecharset::@11
Culled Empty Block (label) makecharset::@12
Culled Empty Block (label) makecharset::@14
Culled Empty Block (label) makecharset::@15
Culled Empty Block (label) makecharset::@22

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  (byte*) BORDERCOL#0 ← ((byte*)) (number) $d020
  (byte*) BGCOL#0 ← ((byte*)) (number) $d021
  (byte*) D018#0 ← ((byte*)) (number) $d018
  (byte*) COLS#0 ← ((byte*)) (number) $d800
  (byte) BLACK#0 ← (number) 0
  (byte) BLUE#0 ← (number) 6
  to:@16
memset: scope:[memset]  from print_cls
  (byte) memset::c#4 ← phi( print_cls/(byte) memset::c#0 )
  (void*) memset::str#3 ← phi( print_cls/(void*) memset::str#0 )
  (word) memset::num#1 ← phi( print_cls/(word) memset::num#0 )
  (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
  (bool~) memset::$1 ← ! (bool~) memset::$0
  if((bool~) memset::$1) goto memset::@1
  to:memset::@2
memset::@1: scope:[memset]  from memset memset::@4
  (void*) memset::str#1 ← phi( memset/(void*) memset::str#3 memset::@4/(void*) memset::str#4 )
  (void*) memset::return#0 ← (void*) memset::str#1
  to:memset::@return
memset::@2: scope:[memset]  from memset
  (byte) memset::c#3 ← phi( memset/(byte) memset::c#4 )
  (word) memset::num#2 ← phi( memset/(word) memset::num#1 )
  (void*) memset::str#2 ← phi( memset/(void*) memset::str#3 )
  (byte*~) memset::$2 ← ((byte*)) (void*) memset::str#2
  (byte*~) memset::$3 ← (byte*~) memset::$2 + (word) memset::num#2
  (byte*) memset::end#0 ← (byte*~) memset::$3
  (byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#2
  to:memset::@4
memset::@4: scope:[memset]  from memset::@2 memset::@5
  (byte) memset::c#2 ← phi( memset::@2/(byte) memset::c#3 memset::@5/(byte) memset::c#1 )
  (void*) memset::str#4 ← phi( memset::@2/(void*) memset::str#2 memset::@5/(void*) memset::str#5 )
  (byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@5/(byte*) memset::end#2 )
  (byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@5/(byte*) memset::dst#1 )
  (bool~) memset::$4 ← (byte*) memset::dst#2 != (byte*) memset::end#1
  if((bool~) memset::$4) goto memset::@5
  to:memset::@1
memset::@5: scope:[memset]  from memset::@4
  (void*) memset::str#5 ← phi( memset::@4/(void*) memset::str#4 )
  (byte*) memset::end#2 ← phi( memset::@4/(byte*) memset::end#1 )
  (byte*) memset::dst#3 ← phi( memset::@4/(byte*) memset::dst#2 )
  (byte) memset::c#1 ← phi( memset::@4/(byte) memset::c#2 )
  *((byte*) memset::dst#3) ← (byte) memset::c#1
  (byte*) memset::dst#1 ← ++ (byte*) memset::dst#3
  to:memset::@4
memset::@return: scope:[memset]  from memset::@1
  (void*) memset::return#3 ← phi( memset::@1/(void*) memset::return#0 )
  (void*) memset::return#1 ← (void*) memset::return#3
  return 
  to:@return
@16: 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:@40
print_char: scope:[print_char]  from makecharset::@18
  (byte*) print_char_cursor#11 ← phi( makecharset::@18/(byte*) print_char_cursor#20 )
  (byte) print_char::ch#1 ← phi( makecharset::@18/(byte) print_char::ch#0 )
  *((byte*) print_char_cursor#11) ← (byte) print_char::ch#1
  (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#11
  to:print_char::@return
print_char::@return: scope:[print_char]  from print_char
  (byte*) print_char_cursor#12 ← phi( print_char/(byte*) print_char_cursor#1 )
  (byte*) print_char_cursor#2 ← (byte*) print_char_cursor#12
  return 
  to:@return
print_cls: scope:[print_cls]  from makecharset::@23
  (byte*) print_screen#1 ← phi( makecharset::@23/(byte*) print_screen#3 )
  (void*) memset::str#0 ← (void*)(byte*) print_screen#1
  (byte) memset::c#0 ← (byte) ' '
  (word) memset::num#0 ← (number) $3e8
  call memset 
  (void*) memset::return#2 ← (void*) memset::return#1
  to:print_cls::@1
print_cls::@1: scope:[print_cls]  from print_cls
  (byte*) print_screen#2 ← phi( print_cls/(byte*) print_screen#1 )
  (byte*) print_line_cursor#1 ← (byte*) print_screen#2
  (byte*) print_char_cursor#3 ← (byte*) print_line_cursor#1
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls::@1
  (byte*) print_char_cursor#13 ← phi( print_cls::@1/(byte*) print_char_cursor#3 )
  (byte*) print_line_cursor#8 ← phi( print_cls::@1/(byte*) print_line_cursor#1 )
  (byte*) print_line_cursor#2 ← (byte*) print_line_cursor#8
  (byte*) print_char_cursor#4 ← (byte*) print_char_cursor#13
  return 
  to:@return
@40: scope:[]  from @16
  (byte*) print_screen#11 ← phi( @16/(byte*) print_screen#0 )
  (byte*) print_char_cursor#38 ← phi( @16/(byte*) print_char_cursor#0 )
  (byte*) print_line_cursor#31 ← phi( @16/(byte*) print_line_cursor#0 )
  (word*) SID_VOICE3_FREQ#0 ← ((word*)) (number) $d40e
  (byte*) SID_VOICE3_CONTROL#0 ← ((byte*)) (number) $d412
  (byte) SID_CONTROL_NOISE#0 ← (number) $80
  (byte*) SID_VOICE3_OSC#0 ← ((byte*)) (number) $d41b
  to:@42
sid_rnd_init: scope:[sid_rnd_init]  from makecharset
  *((word*) SID_VOICE3_FREQ#0) ← (number) $ffff
  *((byte*) SID_VOICE3_CONTROL#0) ← (byte) SID_CONTROL_NOISE#0
  to:sid_rnd_init::@return
sid_rnd_init::@return: scope:[sid_rnd_init]  from sid_rnd_init
  return 
  to:@return
sid_rnd: scope:[sid_rnd]  from makecharset::@8
  (byte) sid_rnd::return#0 ← *((byte*) SID_VOICE3_OSC#0)
  to:sid_rnd::@return
sid_rnd::@return: scope:[sid_rnd]  from sid_rnd
  (byte) sid_rnd::return#3 ← phi( sid_rnd/(byte) sid_rnd::return#0 )
  (byte) sid_rnd::return#1 ← (byte) sid_rnd::return#3
  return 
  to:@return
@42: scope:[]  from @40
  (byte*) print_screen#10 ← phi( @40/(byte*) print_screen#11 )
  (byte*) print_char_cursor#36 ← phi( @40/(byte*) print_char_cursor#38 )
  (byte*) print_line_cursor#28 ← phi( @40/(byte*) print_line_cursor#31 )
  (byte*) SCREEN1#0 ← ((byte*)) (number) $2800
  (byte*) CHARSET#0 ← ((byte*)) (number) $2000
  (byte[$100]) SINTABLE#0 ← kickasm {{ .for(var i=0;i<$100;i++)
        .byte round(127.5+127.5*sin(toRadians(360*i/256)))
 }}
  to:@43
main: scope:[main]  from @45
  (byte) c2B#31 ← phi( @45/(byte) c2B#17 )
  (byte) c2A#31 ← phi( @45/(byte) c2A#17 )
  (byte) c1B#31 ← phi( @45/(byte) c1B#16 )
  (byte) c1A#31 ← phi( @45/(byte) c1A#16 )
  (byte*) print_screen#7 ← phi( @45/(byte*) print_screen#8 )
  (byte*) print_char_cursor#33 ← phi( @45/(byte*) print_char_cursor#25 )
  (byte*) print_line_cursor#25 ← phi( @45/(byte*) print_line_cursor#18 )
  asm { sei  }
  *((byte*) BORDERCOL#0) ← (byte) BLUE#0
  *((byte*) BGCOL#0) ← (byte) BLUE#0
  (byte*~) main::$2 ← (byte*) COLS#0 + (number) $3e8
  (byte*) main::col#0 ← (byte*) COLS#0
  to:main::@1
main::@1: scope:[main]  from main main::@1
  (byte) c2B#30 ← phi( main/(byte) c2B#31 main::@1/(byte) c2B#30 )
  (byte) c2A#30 ← phi( main/(byte) c2A#31 main::@1/(byte) c2A#30 )
  (byte) c1B#30 ← phi( main/(byte) c1B#31 main::@1/(byte) c1B#30 )
  (byte) c1A#30 ← phi( main/(byte) c1A#31 main::@1/(byte) c1A#30 )
  (byte*) print_screen#6 ← phi( main/(byte*) print_screen#7 main::@1/(byte*) print_screen#6 )
  (byte*) print_char_cursor#26 ← phi( main/(byte*) print_char_cursor#33 main::@1/(byte*) print_char_cursor#26 )
  (byte*) print_line_cursor#19 ← phi( main/(byte*) print_line_cursor#25 main::@1/(byte*) print_line_cursor#19 )
  (byte*) main::col#2 ← phi( main/(byte*) main::col#0 main::@1/(byte*) main::col#1 )
  *((byte*) main::col#2) ← (byte) BLACK#0
  (byte*) main::col#1 ← (byte*) main::col#2 + rangenext(COLS#0,main::$2)
  (bool~) main::$3 ← (byte*) main::col#1 != rangelast(COLS#0,main::$2)
  if((bool~) main::$3) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@1
  (byte) c2B#29 ← phi( main::@1/(byte) c2B#30 )
  (byte) c2A#29 ← phi( main::@1/(byte) c2A#30 )
  (byte) c1B#29 ← phi( main::@1/(byte) c1B#30 )
  (byte) c1A#29 ← phi( main::@1/(byte) c1A#30 )
  (byte*) print_screen#5 ← phi( main::@1/(byte*) print_screen#6 )
  (byte*) print_char_cursor#21 ← phi( main::@1/(byte*) print_char_cursor#26 )
  (byte*) print_line_cursor#14 ← phi( main::@1/(byte*) print_line_cursor#19 )
  (byte*) makecharset::charset#0 ← (byte*) CHARSET#0
  call makecharset 
  to:main::@10
main::@10: scope:[main]  from main::@2
  (byte) c2B#28 ← phi( main::@2/(byte) c2B#29 )
  (byte) c2A#28 ← phi( main::@2/(byte) c2A#29 )
  (byte) c1B#28 ← phi( main::@2/(byte) c1B#29 )
  (byte) c1A#28 ← phi( main::@2/(byte) c1A#29 )
  (byte*) print_char_cursor#14 ← phi( main::@2/(byte*) print_char_cursor#9 )
  (byte*) print_line_cursor#9 ← phi( main::@2/(byte*) print_line_cursor#6 )
  (byte*) print_line_cursor#3 ← (byte*) print_line_cursor#9
  (byte*) print_char_cursor#5 ← (byte*) print_char_cursor#14
  (byte*) main::toD0181_screen#0 ← (byte*) SCREEN1#0
  (byte*) main::toD0181_gfx#0 ← (byte*) CHARSET#0
  to:main::toD0181
main::toD0181: scope:[main]  from main::@10
  (byte) c2B#25 ← phi( main::@10/(byte) c2B#28 )
  (byte) c2A#25 ← phi( main::@10/(byte) c2A#28 )
  (byte) c1B#24 ← phi( main::@10/(byte) c1B#28 )
  (byte) c1A#24 ← phi( main::@10/(byte) c1A#28 )
  (byte*) print_char_cursor#39 ← phi( main::@10/(byte*) print_char_cursor#5 )
  (byte*) print_line_cursor#32 ← phi( main::@10/(byte*) print_line_cursor#3 )
  (byte*) main::toD0181_gfx#1 ← phi( main::@10/(byte*) main::toD0181_gfx#0 )
  (byte*) main::toD0181_screen#1 ← phi( main::@10/(byte*) main::toD0181_screen#0 )
  (word~) main::toD0181_$0#0 ← ((word)) (byte*) main::toD0181_screen#1
  (number~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (number) $3fff
  (number~) main::toD0181_$2#0 ← (number~) main::toD0181_$1#0 * (number) 4
  (number~) main::toD0181_$3#0 ← > (number~) main::toD0181_$2#0
  (word~) main::toD0181_$4#0 ← ((word)) (byte*) main::toD0181_gfx#1
  (byte~) main::toD0181_$5#0 ← > (word~) main::toD0181_$4#0
  (number~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (number) 4
  (number~) main::toD0181_$7#0 ← (number~) main::toD0181_$6#0 & (number) $f
  (number~) main::toD0181_$8#0 ← (number~) main::toD0181_$3#0 | (number~) main::toD0181_$7#0
  (byte) main::toD0181_return#0 ← (number~) main::toD0181_$8#0
  to:main::toD0181_@return
main::toD0181_@return: scope:[main]  from main::toD0181
  (byte) c2B#23 ← phi( main::toD0181/(byte) c2B#25 )
  (byte) c2A#23 ← phi( main::toD0181/(byte) c2A#25 )
  (byte) c1B#21 ← phi( main::toD0181/(byte) c1B#24 )
  (byte) c1A#21 ← phi( main::toD0181/(byte) c1A#24 )
  (byte*) print_char_cursor#34 ← phi( main::toD0181/(byte*) print_char_cursor#39 )
  (byte*) print_line_cursor#26 ← phi( main::toD0181/(byte*) print_line_cursor#32 )
  (byte) main::toD0181_return#2 ← phi( main::toD0181/(byte) main::toD0181_return#0 )
  (byte) main::toD0181_return#1 ← (byte) main::toD0181_return#2
  to:main::@9
main::@9: scope:[main]  from main::toD0181_@return
  (byte) c2B#18 ← phi( main::toD0181_@return/(byte) c2B#23 )
  (byte) c2A#18 ← phi( main::toD0181_@return/(byte) c2A#23 )
  (byte) c1B#17 ← phi( main::toD0181_@return/(byte) c1B#21 )
  (byte) c1A#17 ← phi( main::toD0181_@return/(byte) c1A#21 )
  (byte*) print_char_cursor#28 ← phi( main::toD0181_@return/(byte*) print_char_cursor#34 )
  (byte*) print_line_cursor#21 ← phi( main::toD0181_@return/(byte*) print_line_cursor#26 )
  (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 )
  (byte~) main::$1 ← (byte) main::toD0181_return#3
  *((byte*) D018#0) ← (byte~) main::$1
  to:main::@3
main::@3: scope:[main]  from main::@11 main::@9
  (byte) c2B#13 ← phi( main::@11/(byte) c2B#0 main::@9/(byte) c2B#18 )
  (byte) c2A#13 ← phi( main::@11/(byte) c2A#0 main::@9/(byte) c2A#18 )
  (byte) c1B#13 ← phi( main::@11/(byte) c1B#0 main::@9/(byte) c1B#17 )
  (byte) c1A#13 ← phi( main::@11/(byte) c1A#0 main::@9/(byte) c1A#17 )
  (byte*) print_char_cursor#22 ← phi( main::@11/(byte*) print_char_cursor#27 main::@9/(byte*) print_char_cursor#28 )
  (byte*) print_line_cursor#15 ← phi( main::@11/(byte*) print_line_cursor#20 main::@9/(byte*) print_line_cursor#21 )
  if(true) goto main::@4
  to:main::@return
main::@4: scope:[main]  from main::@3
  (byte*) print_char_cursor#35 ← phi( main::@3/(byte*) print_char_cursor#22 )
  (byte*) print_line_cursor#27 ← phi( main::@3/(byte*) print_line_cursor#15 )
  (byte) c2B#12 ← phi( main::@3/(byte) c2B#13 )
  (byte) c2A#12 ← phi( main::@3/(byte) c2A#13 )
  (byte) c1B#12 ← phi( main::@3/(byte) c1B#13 )
  (byte) c1A#12 ← phi( main::@3/(byte) c1A#13 )
  (byte*) doplasma::screen#0 ← (byte*) SCREEN1#0
  call doplasma 
  to:main::@11
main::@11: scope:[main]  from main::@4
  (byte*) print_char_cursor#27 ← phi( main::@4/(byte*) print_char_cursor#35 )
  (byte*) print_line_cursor#20 ← phi( main::@4/(byte*) print_line_cursor#27 )
  (byte) c2B#6 ← phi( main::@4/(byte) c2B#4 )
  (byte) c2A#6 ← phi( main::@4/(byte) c2A#4 )
  (byte) c1B#6 ← phi( main::@4/(byte) c1B#4 )
  (byte) c1A#6 ← phi( main::@4/(byte) c1A#4 )
  (byte) c1A#0 ← (byte) c1A#6
  (byte) c1B#0 ← (byte) c1B#6
  (byte) c2A#0 ← (byte) c2A#6
  (byte) c2B#0 ← (byte) c2B#6
  to:main::@3
main::@return: scope:[main]  from main::@3
  (byte) c2B#7 ← phi( main::@3/(byte) c2B#13 )
  (byte) c2A#7 ← phi( main::@3/(byte) c2A#13 )
  (byte) c1B#7 ← phi( main::@3/(byte) c1B#13 )
  (byte) c1A#7 ← phi( main::@3/(byte) c1A#13 )
  (byte*) print_char_cursor#15 ← phi( main::@3/(byte*) print_char_cursor#22 )
  (byte*) print_line_cursor#10 ← phi( main::@3/(byte*) print_line_cursor#15 )
  (byte*) print_line_cursor#4 ← (byte*) print_line_cursor#10
  (byte*) print_char_cursor#6 ← (byte*) print_char_cursor#15
  (byte) c1A#1 ← (byte) c1A#7
  (byte) c1B#1 ← (byte) c1B#7
  (byte) c2A#1 ← (byte) c2A#7
  (byte) c2B#1 ← (byte) c2B#7
  return 
  to:@return
@43: scope:[]  from @42
  (byte*) print_screen#9 ← phi( @42/(byte*) print_screen#10 )
  (byte*) print_char_cursor#32 ← phi( @42/(byte*) print_char_cursor#36 )
  (byte*) print_line_cursor#24 ← phi( @42/(byte*) print_line_cursor#28 )
  (byte) c1A#2 ← (number) 0
  (byte) c1B#2 ← (number) 0
  (byte) c2A#2 ← (number) 0
  (byte) c2B#2 ← (number) 0
  to:@45
doplasma: scope:[doplasma]  from main::@4
  (byte*) doplasma::screen#11 ← phi( main::@4/(byte*) doplasma::screen#0 )
  (byte) c2B#19 ← phi( main::@4/(byte) c2B#12 )
  (byte) c2A#19 ← phi( main::@4/(byte) c2A#12 )
  (byte) c1B#8 ← phi( main::@4/(byte) c1B#12 )
  (byte) c1A#8 ← phi( main::@4/(byte) c1A#12 )
  (byte[$28]) doplasma::xbuf#0 ← { fill( $28, 0) }
  (byte[$19]) doplasma::ybuf#0 ← { fill( $19, 0) }
  (byte) doplasma::c1a#0 ← (byte) c1A#8
  (byte) doplasma::c1b#0 ← (byte) c1B#8
  (byte) doplasma::yprev#0 ← (number) 0
  (byte) doplasma::i#0 ← (number) 0
  to:doplasma::@1
doplasma::@1: scope:[doplasma]  from doplasma doplasma::@2
  (byte*) doplasma::screen#10 ← phi( doplasma/(byte*) doplasma::screen#11 doplasma::@2/(byte*) doplasma::screen#12 )
  (byte) c2B#14 ← phi( doplasma/(byte) c2B#19 doplasma::@2/(byte) c2B#20 )
  (byte) c2A#14 ← phi( doplasma/(byte) c2A#19 doplasma::@2/(byte) c2A#20 )
  (byte) c1B#14 ← phi( doplasma/(byte) c1B#8 doplasma::@2/(byte) c1B#18 )
  (byte) c1A#14 ← phi( doplasma/(byte) c1A#8 doplasma::@2/(byte) c1A#18 )
  (byte) doplasma::yprev#3 ← phi( doplasma/(byte) doplasma::yprev#0 doplasma::@2/(byte) doplasma::yprev#1 )
  (byte) doplasma::c1b#3 ← phi( doplasma/(byte) doplasma::c1b#0 doplasma::@2/(byte) doplasma::c1b#1 )
  (byte) doplasma::c1a#3 ← phi( doplasma/(byte) doplasma::c1a#0 doplasma::@2/(byte) doplasma::c1a#1 )
  (byte) doplasma::i#2 ← phi( doplasma/(byte) doplasma::i#0 doplasma::@2/(byte) doplasma::i#1 )
  (bool~) doplasma::$0 ← (byte) doplasma::i#2 < (number) $19
  if((bool~) doplasma::$0) goto doplasma::@2
  to:doplasma::@3
doplasma::@2: scope:[doplasma]  from doplasma::@1
  (byte*) doplasma::screen#12 ← phi( doplasma::@1/(byte*) doplasma::screen#10 )
  (byte) c2B#20 ← phi( doplasma::@1/(byte) c2B#14 )
  (byte) c2A#20 ← phi( doplasma::@1/(byte) c2A#14 )
  (byte) c1B#18 ← phi( doplasma::@1/(byte) c1B#14 )
  (byte) c1A#18 ← phi( doplasma::@1/(byte) c1A#14 )
  (byte) doplasma::i#3 ← phi( doplasma::@1/(byte) doplasma::i#2 )
  (byte) doplasma::yprev#2 ← phi( doplasma::@1/(byte) doplasma::yprev#3 )
  (byte) doplasma::c1b#2 ← phi( doplasma::@1/(byte) doplasma::c1b#3 )
  (byte) doplasma::c1a#2 ← phi( doplasma::@1/(byte) doplasma::c1a#3 )
  (byte~) doplasma::$1 ← *((byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2)
  (byte) doplasma::yval#0 ← (byte~) doplasma::$1
  (byte~) doplasma::$2 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2
  *((byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#3) ← (byte~) doplasma::$2
  (byte) doplasma::yprev#1 ← (byte) doplasma::yval#0
  (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (number) 4
  (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (number) 9
  (byte) doplasma::i#1 ← ++ (byte) doplasma::i#3
  to:doplasma::@1
doplasma::@3: scope:[doplasma]  from doplasma::@1
  (byte*) doplasma::screen#8 ← phi( doplasma::@1/(byte*) doplasma::screen#10 )
  (byte) c2B#8 ← phi( doplasma::@1/(byte) c2B#14 )
  (byte) c2A#8 ← phi( doplasma::@1/(byte) c2A#14 )
  (byte) c1B#9 ← phi( doplasma::@1/(byte) c1B#14 )
  (byte) c1A#9 ← phi( doplasma::@1/(byte) c1A#14 )
  (byte) c1A#3 ← (byte) c1A#9 + (number) 3
  (byte) c1B#3 ← (byte) c1B#9 - (number) 5
  (byte) doplasma::c2a#0 ← (byte) c2A#8
  (byte) doplasma::c2b#0 ← (byte) c2B#8
  (byte) doplasma::i1#0 ← (number) 0
  to:doplasma::@7
doplasma::@7: scope:[doplasma]  from doplasma::@3 doplasma::@8
  (byte*) doplasma::screen#7 ← phi( doplasma::@3/(byte*) doplasma::screen#8 doplasma::@8/(byte*) doplasma::screen#9 )
  (byte) c1B#22 ← phi( doplasma::@3/(byte) c1B#3 doplasma::@8/(byte) c1B#25 )
  (byte) c1A#22 ← phi( doplasma::@3/(byte) c1A#3 doplasma::@8/(byte) c1A#25 )
  (byte) c2B#15 ← phi( doplasma::@3/(byte) c2B#8 doplasma::@8/(byte) c2B#21 )
  (byte) c2A#15 ← phi( doplasma::@3/(byte) c2A#8 doplasma::@8/(byte) c2A#21 )
  (byte) doplasma::c2b#3 ← phi( doplasma::@3/(byte) doplasma::c2b#0 doplasma::@8/(byte) doplasma::c2b#1 )
  (byte) doplasma::c2a#3 ← phi( doplasma::@3/(byte) doplasma::c2a#0 doplasma::@8/(byte) doplasma::c2a#1 )
  (byte) doplasma::i1#2 ← phi( doplasma::@3/(byte) doplasma::i1#0 doplasma::@8/(byte) doplasma::i1#1 )
  (bool~) doplasma::$3 ← (byte) doplasma::i1#2 < (number) $28
  if((bool~) doplasma::$3) goto doplasma::@8
  to:doplasma::@9
doplasma::@8: scope:[doplasma]  from doplasma::@7
  (byte*) doplasma::screen#9 ← phi( doplasma::@7/(byte*) doplasma::screen#7 )
  (byte) c1B#25 ← phi( doplasma::@7/(byte) c1B#22 )
  (byte) c1A#25 ← phi( doplasma::@7/(byte) c1A#22 )
  (byte) c2B#21 ← phi( doplasma::@7/(byte) c2B#15 )
  (byte) c2A#21 ← phi( doplasma::@7/(byte) c2A#15 )
  (byte) doplasma::i1#3 ← phi( doplasma::@7/(byte) doplasma::i1#2 )
  (byte) doplasma::c2b#2 ← phi( doplasma::@7/(byte) doplasma::c2b#3 )
  (byte) doplasma::c2a#2 ← phi( doplasma::@7/(byte) doplasma::c2a#3 )
  (byte~) doplasma::$4 ← *((byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2)
  *((byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#3) ← (byte~) doplasma::$4
  (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (number) 3
  (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (number) 7
  (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#3
  to:doplasma::@7
doplasma::@9: scope:[doplasma]  from doplasma::@7
  (byte*) doplasma::screen#6 ← phi( doplasma::@7/(byte*) doplasma::screen#7 )
  (byte) c1B#20 ← phi( doplasma::@7/(byte) c1B#22 )
  (byte) c1A#20 ← phi( doplasma::@7/(byte) c1A#22 )
  (byte) c2B#9 ← phi( doplasma::@7/(byte) c2B#15 )
  (byte) c2A#9 ← phi( doplasma::@7/(byte) c2A#15 )
  (byte) c2A#3 ← (byte) c2A#9 + (number) 2
  (byte) c2B#3 ← (byte) c2B#9 - (number) 3
  (byte) doplasma::i2#0 ← (number) 0
  to:doplasma::@13
doplasma::@13: scope:[doplasma]  from doplasma::@18 doplasma::@9
  (byte*) doplasma::screen#4 ← phi( doplasma::@18/(byte*) doplasma::screen#5 doplasma::@9/(byte*) doplasma::screen#6 )
  (byte) c2B#16 ← phi( doplasma::@18/(byte) c2B#22 doplasma::@9/(byte) c2B#3 )
  (byte) c2A#16 ← phi( doplasma::@18/(byte) c2A#22 doplasma::@9/(byte) c2A#3 )
  (byte) c1B#15 ← phi( doplasma::@18/(byte) c1B#19 doplasma::@9/(byte) c1B#20 )
  (byte) c1A#15 ← phi( doplasma::@18/(byte) c1A#19 doplasma::@9/(byte) c1A#20 )
  (byte) doplasma::i2#2 ← phi( doplasma::@18/(byte) doplasma::i2#1 doplasma::@9/(byte) doplasma::i2#0 )
  (bool~) doplasma::$5 ← (byte) doplasma::i2#2 < (number) $28
  if((bool~) doplasma::$5) goto doplasma::@14
  to:doplasma::@return
doplasma::@14: scope:[doplasma]  from doplasma::@13
  (byte) c2B#26 ← phi( doplasma::@13/(byte) c2B#16 )
  (byte) c2A#26 ← phi( doplasma::@13/(byte) c2A#16 )
  (byte) c1B#26 ← phi( doplasma::@13/(byte) c1B#15 )
  (byte) c1A#26 ← phi( doplasma::@13/(byte) c1A#15 )
  (byte*) doplasma::screen#3 ← phi( doplasma::@13/(byte*) doplasma::screen#4 )
  (byte) doplasma::i2#3 ← phi( doplasma::@13/(byte) doplasma::i2#2 )
  (byte) doplasma::val#0 ← *((byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#3)
  (byte) doplasma::ii#0 ← (number) 0
  to:doplasma::@16
doplasma::@16: scope:[doplasma]  from doplasma::@14 doplasma::@17
  (byte) c2B#24 ← phi( doplasma::@14/(byte) c2B#26 doplasma::@17/(byte) c2B#27 )
  (byte) c2A#24 ← phi( doplasma::@14/(byte) c2A#26 doplasma::@17/(byte) c2A#27 )
  (byte) c1B#23 ← phi( doplasma::@14/(byte) c1B#26 doplasma::@17/(byte) c1B#27 )
  (byte) c1A#23 ← phi( doplasma::@14/(byte) c1A#26 doplasma::@17/(byte) c1A#27 )
  (byte) doplasma::i2#6 ← phi( doplasma::@14/(byte) doplasma::i2#3 doplasma::@17/(byte) doplasma::i2#4 )
  (byte*) doplasma::screen#2 ← phi( doplasma::@14/(byte*) doplasma::screen#3 doplasma::@17/(byte*) doplasma::screen#1 )
  (byte) doplasma::val#3 ← phi( doplasma::@14/(byte) doplasma::val#0 doplasma::@17/(byte) doplasma::val#1 )
  (byte) doplasma::ii#2 ← phi( doplasma::@14/(byte) doplasma::ii#0 doplasma::@17/(byte) doplasma::ii#1 )
  (bool~) doplasma::$6 ← (byte) doplasma::ii#2 < (number) $19
  unroll if((bool~) doplasma::$6) goto doplasma::@17
  to:doplasma::@18
doplasma::@17: scope:[doplasma]  from doplasma::@16
  (byte) c2B#27 ← phi( doplasma::@16/(byte) c2B#24 )
  (byte) c2A#27 ← phi( doplasma::@16/(byte) c2A#24 )
  (byte) c1B#27 ← phi( doplasma::@16/(byte) c1B#23 )
  (byte) c1A#27 ← phi( doplasma::@16/(byte) c1A#23 )
  (byte) doplasma::i2#4 ← phi( doplasma::@16/(byte) doplasma::i2#6 )
  (byte*) doplasma::screen#1 ← phi( doplasma::@16/(byte*) doplasma::screen#2 )
  (byte) doplasma::ii#3 ← phi( doplasma::@16/(byte) doplasma::ii#2 )
  (byte) doplasma::val#2 ← phi( doplasma::@16/(byte) doplasma::val#3 )
  (byte) doplasma::val#1 ← (byte) doplasma::val#2 + *((byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#3)
  (number~) doplasma::$7 ← (byte) doplasma::ii#3 * (number) $28
  (byte*~) doplasma::$8 ← (byte*) doplasma::screen#1 + (number~) doplasma::$7
  *((byte*~) doplasma::$8 + (byte) doplasma::i2#4) ← (byte) doplasma::val#1
  (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#3
  to:doplasma::@16
doplasma::@18: scope:[doplasma]  from doplasma::@16
  (byte*) doplasma::screen#5 ← phi( doplasma::@16/(byte*) doplasma::screen#2 )
  (byte) c2B#22 ← phi( doplasma::@16/(byte) c2B#24 )
  (byte) c2A#22 ← phi( doplasma::@16/(byte) c2A#24 )
  (byte) c1B#19 ← phi( doplasma::@16/(byte) c1B#23 )
  (byte) c1A#19 ← phi( doplasma::@16/(byte) c1A#23 )
  (byte) doplasma::i2#5 ← phi( doplasma::@16/(byte) doplasma::i2#6 )
  (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#5
  to:doplasma::@13
doplasma::@return: scope:[doplasma]  from doplasma::@13
  (byte) c2B#10 ← phi( doplasma::@13/(byte) c2B#16 )
  (byte) c2A#10 ← phi( doplasma::@13/(byte) c2A#16 )
  (byte) c1B#10 ← phi( doplasma::@13/(byte) c1B#15 )
  (byte) c1A#10 ← phi( doplasma::@13/(byte) c1A#15 )
  (byte) c1A#4 ← (byte) c1A#10
  (byte) c1B#4 ← (byte) c1B#10
  (byte) c2A#4 ← (byte) c2A#10
  (byte) c2B#4 ← (byte) c2B#10
  return 
  to:@return
makecharset: scope:[makecharset]  from main::@2
  (byte*) makecharset::charset#16 ← phi( main::@2/(byte*) makecharset::charset#0 )
  (byte*) print_char_cursor#29 ← phi( main::@2/(byte*) print_char_cursor#21 )
  (byte*) print_line_cursor#22 ← phi( main::@2/(byte*) print_line_cursor#14 )
  (byte*) print_screen#4 ← phi( main::@2/(byte*) print_screen#5 )
  (byte[8]) makecharset::bittab#0 ← { (number) 1, (number) 2, (number) 4, (number) 8, (number) $10, (number) $20, (number) $40, (number) $80 }
  call sid_rnd_init 
  to:makecharset::@23
makecharset::@23: scope:[makecharset]  from makecharset
  (byte*) makecharset::charset#13 ← phi( makecharset/(byte*) makecharset::charset#16 )
  (byte*) print_char_cursor#23 ← phi( makecharset/(byte*) print_char_cursor#29 )
  (byte*) print_line_cursor#16 ← phi( makecharset/(byte*) print_line_cursor#22 )
  (byte*) print_screen#3 ← phi( makecharset/(byte*) print_screen#4 )
  call print_cls 
  to:makecharset::@24
makecharset::@24: scope:[makecharset]  from makecharset::@23
  (byte*) makecharset::charset#12 ← phi( makecharset::@23/(byte*) makecharset::charset#13 )
  (byte*) print_char_cursor#16 ← phi( makecharset::@23/(byte*) print_char_cursor#4 )
  (byte*) print_line_cursor#11 ← phi( makecharset::@23/(byte*) print_line_cursor#2 )
  (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#11
  (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#16
  (word) makecharset::c#0 ← (number) 0
  to:makecharset::@1
makecharset::@1: scope:[makecharset]  from makecharset::@19 makecharset::@24
  (byte*) makecharset::charset#10 ← phi( makecharset::@19/(byte*) makecharset::charset#11 makecharset::@24/(byte*) makecharset::charset#12 )
  (byte*) print_char_cursor#24 ← phi( makecharset::@19/(byte*) print_char_cursor#30 makecharset::@24/(byte*) print_char_cursor#7 )
  (byte*) print_line_cursor#17 ← phi( makecharset::@19/(byte*) print_line_cursor#23 makecharset::@24/(byte*) print_line_cursor#5 )
  (word) makecharset::c#2 ← phi( makecharset::@19/(word) makecharset::c#1 makecharset::@24/(word) makecharset::c#0 )
  (bool~) makecharset::$2 ← (word) makecharset::c#2 < (number) $100
  if((bool~) makecharset::$2) goto makecharset::@2
  to:makecharset::@return
makecharset::@2: scope:[makecharset]  from makecharset::@1
  (byte*) print_line_cursor#35 ← phi( makecharset::@1/(byte*) print_line_cursor#17 )
  (byte*) print_char_cursor#40 ← phi( makecharset::@1/(byte*) print_char_cursor#24 )
  (byte*) makecharset::charset#8 ← phi( makecharset::@1/(byte*) makecharset::charset#10 )
  (word) makecharset::c#3 ← phi( makecharset::@1/(word) makecharset::c#2 )
  (byte~) makecharset::$3 ← < (word) makecharset::c#3
  (byte) makecharset::s#0 ← *((byte[$100]) SINTABLE#0 + (byte~) makecharset::$3)
  (byte) makecharset::i#0 ← (number) 0
  to:makecharset::@4
makecharset::@4: scope:[makecharset]  from makecharset::@2 makecharset::@9
  (byte*) print_line_cursor#33 ← phi( makecharset::@2/(byte*) print_line_cursor#35 makecharset::@9/(byte*) print_line_cursor#36 )
  (byte) makecharset::s#6 ← phi( makecharset::@2/(byte) makecharset::s#0 makecharset::@9/(byte) makecharset::s#8 )
  (byte*) print_char_cursor#37 ← phi( makecharset::@2/(byte*) print_char_cursor#40 makecharset::@9/(byte*) print_char_cursor#41 )
  (byte*) makecharset::charset#5 ← phi( makecharset::@2/(byte*) makecharset::charset#8 makecharset::@9/(byte*) makecharset::charset#1 )
  (word) makecharset::c#7 ← phi( makecharset::@2/(word) makecharset::c#3 makecharset::@9/(word) makecharset::c#5 )
  (byte) makecharset::i#2 ← phi( makecharset::@2/(byte) makecharset::i#0 makecharset::@9/(byte) makecharset::i#1 )
  (bool~) makecharset::$4 ← (byte) makecharset::i#2 < (number) 8
  if((bool~) makecharset::$4) goto makecharset::@5
  to:makecharset::@6
makecharset::@5: scope:[makecharset]  from makecharset::@4
  (byte*) print_line_cursor#39 ← phi( makecharset::@4/(byte*) print_line_cursor#33 )
  (byte*) print_char_cursor#44 ← phi( makecharset::@4/(byte*) print_char_cursor#37 )
  (byte) makecharset::s#5 ← phi( makecharset::@4/(byte) makecharset::s#6 )
  (byte*) makecharset::charset#4 ← phi( makecharset::@4/(byte*) makecharset::charset#5 )
  (byte) makecharset::i#6 ← phi( makecharset::@4/(byte) makecharset::i#2 )
  (word) makecharset::c#11 ← phi( makecharset::@4/(word) makecharset::c#7 )
  (byte) makecharset::b#0 ← (number) 0
  (byte) makecharset::ii#0 ← (number) 0
  to:makecharset::@7
makecharset::@6: scope:[makecharset]  from makecharset::@4
  (byte*) makecharset::charset#15 ← phi( makecharset::@4/(byte*) makecharset::charset#5 )
  (byte*) print_line_cursor#30 ← phi( makecharset::@4/(byte*) print_line_cursor#33 )
  (byte*) print_char_cursor#31 ← phi( makecharset::@4/(byte*) print_char_cursor#37 )
  (word) makecharset::c#4 ← phi( makecharset::@4/(word) makecharset::c#7 )
  (number~) makecharset::$12 ← (word) makecharset::c#4 & (number) 7
  (bool~) makecharset::$13 ← (number~) makecharset::$12 == (number) 0
  (bool~) makecharset::$14 ← ! (bool~) makecharset::$13
  if((bool~) makecharset::$14) goto makecharset::@19
  to:makecharset::@18
makecharset::@7: scope:[makecharset]  from makecharset::@10 makecharset::@5
  (byte*) print_line_cursor#37 ← phi( makecharset::@10/(byte*) print_line_cursor#38 makecharset::@5/(byte*) print_line_cursor#39 )
  (byte*) print_char_cursor#42 ← phi( makecharset::@10/(byte*) print_char_cursor#43 makecharset::@5/(byte*) print_char_cursor#44 )
  (byte) makecharset::s#3 ← phi( makecharset::@10/(byte) makecharset::s#4 makecharset::@5/(byte) makecharset::s#5 )
  (byte*) makecharset::charset#2 ← phi( makecharset::@10/(byte*) makecharset::charset#3 makecharset::@5/(byte*) makecharset::charset#4 )
  (byte) makecharset::b#4 ← phi( makecharset::@10/(byte) makecharset::b#6 makecharset::@5/(byte) makecharset::b#0 )
  (byte) makecharset::i#4 ← phi( makecharset::@10/(byte) makecharset::i#5 makecharset::@5/(byte) makecharset::i#6 )
  (word) makecharset::c#8 ← phi( makecharset::@10/(word) makecharset::c#10 makecharset::@5/(word) makecharset::c#11 )
  (byte) makecharset::ii#2 ← phi( makecharset::@10/(byte) makecharset::ii#1 makecharset::@5/(byte) makecharset::ii#0 )
  (bool~) makecharset::$5 ← (byte) makecharset::ii#2 < (number) 8
  if((bool~) makecharset::$5) goto makecharset::@8
  to:makecharset::@9
makecharset::@8: scope:[makecharset]  from makecharset::@7
  (byte*) print_line_cursor#42 ← phi( makecharset::@7/(byte*) print_line_cursor#37 )
  (byte*) print_char_cursor#47 ← phi( makecharset::@7/(byte*) print_char_cursor#42 )
  (byte*) makecharset::charset#9 ← phi( makecharset::@7/(byte*) makecharset::charset#2 )
  (byte) makecharset::i#9 ← phi( makecharset::@7/(byte) makecharset::i#4 )
  (word) makecharset::c#15 ← phi( makecharset::@7/(word) makecharset::c#8 )
  (byte) makecharset::b#7 ← phi( makecharset::@7/(byte) makecharset::b#4 )
  (byte) makecharset::ii#6 ← phi( makecharset::@7/(byte) makecharset::ii#2 )
  (byte) makecharset::s#2 ← phi( makecharset::@7/(byte) makecharset::s#3 )
  call sid_rnd 
  (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#1
  to:makecharset::@25
makecharset::@25: scope:[makecharset]  from makecharset::@8
  (byte*) print_line_cursor#41 ← phi( makecharset::@8/(byte*) print_line_cursor#42 )
  (byte*) print_char_cursor#46 ← phi( makecharset::@8/(byte*) print_char_cursor#47 )
  (byte*) makecharset::charset#7 ← phi( makecharset::@8/(byte*) makecharset::charset#9 )
  (byte) makecharset::i#8 ← phi( makecharset::@8/(byte) makecharset::i#9 )
  (word) makecharset::c#14 ← phi( makecharset::@8/(word) makecharset::c#15 )
  (byte) makecharset::b#5 ← phi( makecharset::@8/(byte) makecharset::b#7 )
  (byte) makecharset::ii#5 ← phi( makecharset::@8/(byte) makecharset::ii#6 )
  (byte) makecharset::s#1 ← phi( makecharset::@8/(byte) makecharset::s#2 )
  (byte) sid_rnd::return#4 ← phi( makecharset::@8/(byte) sid_rnd::return#2 )
  (byte~) makecharset::$6 ← (byte) sid_rnd::return#4
  (number~) makecharset::$7 ← (byte~) makecharset::$6 & (number) $ff
  (bool~) makecharset::$8 ← (number~) makecharset::$7 > (byte) makecharset::s#1
  (bool~) makecharset::$9 ← ! (bool~) makecharset::$8
  if((bool~) makecharset::$9) goto makecharset::@10
  to:makecharset::@13
makecharset::@9: scope:[makecharset]  from makecharset::@7
  (byte*) print_line_cursor#36 ← phi( makecharset::@7/(byte*) print_line_cursor#37 )
  (byte) makecharset::s#8 ← phi( makecharset::@7/(byte) makecharset::s#3 )
  (byte*) print_char_cursor#41 ← phi( makecharset::@7/(byte*) print_char_cursor#42 )
  (byte*) makecharset::charset#1 ← phi( makecharset::@7/(byte*) makecharset::charset#2 )
  (byte) makecharset::b#2 ← phi( makecharset::@7/(byte) makecharset::b#4 )
  (byte) makecharset::i#3 ← phi( makecharset::@7/(byte) makecharset::i#4 )
  (word) makecharset::c#5 ← phi( makecharset::@7/(word) makecharset::c#8 )
  (number~) makecharset::$10 ← (word) makecharset::c#5 * (number) 8
  (number~) makecharset::$11 ← (number~) makecharset::$10 + (byte) makecharset::i#3
  *((byte*) makecharset::charset#1 + (number~) makecharset::$11) ← (byte) makecharset::b#2
  (byte) makecharset::i#1 ← ++ (byte) makecharset::i#3
  to:makecharset::@4
makecharset::@10: scope:[makecharset]  from makecharset::@13 makecharset::@25
  (byte*) print_line_cursor#38 ← phi( makecharset::@13/(byte*) print_line_cursor#40 makecharset::@25/(byte*) print_line_cursor#41 )
  (byte*) print_char_cursor#43 ← phi( makecharset::@13/(byte*) print_char_cursor#45 makecharset::@25/(byte*) print_char_cursor#46 )
  (byte) makecharset::s#4 ← phi( makecharset::@13/(byte) makecharset::s#7 makecharset::@25/(byte) makecharset::s#1 )
  (byte*) makecharset::charset#3 ← phi( makecharset::@13/(byte*) makecharset::charset#6 makecharset::@25/(byte*) makecharset::charset#7 )
  (byte) makecharset::b#6 ← phi( makecharset::@13/(byte) makecharset::b#1 makecharset::@25/(byte) makecharset::b#5 )
  (byte) makecharset::i#5 ← phi( makecharset::@13/(byte) makecharset::i#7 makecharset::@25/(byte) makecharset::i#8 )
  (word) makecharset::c#10 ← phi( makecharset::@13/(word) makecharset::c#13 makecharset::@25/(word) makecharset::c#14 )
  (byte) makecharset::ii#3 ← phi( makecharset::@13/(byte) makecharset::ii#4 makecharset::@25/(byte) makecharset::ii#5 )
  (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#3
  to:makecharset::@7
makecharset::@13: scope:[makecharset]  from makecharset::@25
  (byte*) print_line_cursor#40 ← phi( makecharset::@25/(byte*) print_line_cursor#41 )
  (byte*) print_char_cursor#45 ← phi( makecharset::@25/(byte*) print_char_cursor#46 )
  (byte) makecharset::s#7 ← phi( makecharset::@25/(byte) makecharset::s#1 )
  (byte*) makecharset::charset#6 ← phi( makecharset::@25/(byte*) makecharset::charset#7 )
  (byte) makecharset::i#7 ← phi( makecharset::@25/(byte) makecharset::i#8 )
  (word) makecharset::c#13 ← phi( makecharset::@25/(word) makecharset::c#14 )
  (byte) makecharset::ii#4 ← phi( makecharset::@25/(byte) makecharset::ii#5 )
  (byte) makecharset::b#3 ← phi( makecharset::@25/(byte) makecharset::b#5 )
  (byte) makecharset::b#1 ← (byte) makecharset::b#3 | *((byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#4)
  to:makecharset::@10
makecharset::@19: scope:[makecharset]  from makecharset::@26 makecharset::@6
  (byte*) makecharset::charset#11 ← phi( makecharset::@26/(byte*) makecharset::charset#14 makecharset::@6/(byte*) makecharset::charset#15 )
  (byte*) print_char_cursor#30 ← phi( makecharset::@26/(byte*) print_char_cursor#8 makecharset::@6/(byte*) print_char_cursor#31 )
  (byte*) print_line_cursor#23 ← phi( makecharset::@26/(byte*) print_line_cursor#29 makecharset::@6/(byte*) print_line_cursor#30 )
  (word) makecharset::c#6 ← phi( makecharset::@26/(word) makecharset::c#9 makecharset::@6/(word) makecharset::c#4 )
  (word) makecharset::c#1 ← ++ (word) makecharset::c#6
  to:makecharset::@1
makecharset::@18: scope:[makecharset]  from makecharset::@6
  (byte*) makecharset::charset#17 ← phi( makecharset::@6/(byte*) makecharset::charset#15 )
  (byte*) print_line_cursor#34 ← phi( makecharset::@6/(byte*) print_line_cursor#30 )
  (word) makecharset::c#12 ← phi( makecharset::@6/(word) makecharset::c#4 )
  (byte*) print_char_cursor#20 ← phi( makecharset::@6/(byte*) print_char_cursor#31 )
  (byte) print_char::ch#0 ← (byte) '.'
  call print_char 
  to:makecharset::@26
makecharset::@26: scope:[makecharset]  from makecharset::@18
  (byte*) makecharset::charset#14 ← phi( makecharset::@18/(byte*) makecharset::charset#17 )
  (byte*) print_line_cursor#29 ← phi( makecharset::@18/(byte*) print_line_cursor#34 )
  (word) makecharset::c#9 ← phi( makecharset::@18/(word) makecharset::c#12 )
  (byte*) print_char_cursor#17 ← phi( makecharset::@18/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#8 ← (byte*) print_char_cursor#17
  to:makecharset::@19
makecharset::@return: scope:[makecharset]  from makecharset::@1
  (byte*) print_char_cursor#18 ← phi( makecharset::@1/(byte*) print_char_cursor#24 )
  (byte*) print_line_cursor#12 ← phi( makecharset::@1/(byte*) print_line_cursor#17 )
  (byte*) print_line_cursor#6 ← (byte*) print_line_cursor#12
  (byte*) print_char_cursor#9 ← (byte*) print_char_cursor#18
  return 
  to:@return
@45: scope:[]  from @43
  (byte*) print_screen#8 ← phi( @43/(byte*) print_screen#9 )
  (byte) c2B#17 ← phi( @43/(byte) c2B#2 )
  (byte) c2A#17 ← phi( @43/(byte) c2A#2 )
  (byte) c1B#16 ← phi( @43/(byte) c1B#2 )
  (byte) c1A#16 ← phi( @43/(byte) c1A#2 )
  (byte*) print_char_cursor#25 ← phi( @43/(byte*) print_char_cursor#32 )
  (byte*) print_line_cursor#18 ← phi( @43/(byte*) print_line_cursor#24 )
  call main 
  to:@46
@46: scope:[]  from @45
  (byte) c2B#11 ← phi( @45/(byte) c2B#1 )
  (byte) c2A#11 ← phi( @45/(byte) c2A#1 )
  (byte) c1B#11 ← phi( @45/(byte) c1B#1 )
  (byte) c1A#11 ← phi( @45/(byte) c1A#1 )
  (byte*) print_char_cursor#19 ← phi( @45/(byte*) print_char_cursor#6 )
  (byte*) print_line_cursor#13 ← phi( @45/(byte*) print_line_cursor#4 )
  (byte*) print_line_cursor#7 ← (byte*) print_line_cursor#13
  (byte*) print_char_cursor#10 ← (byte*) print_char_cursor#19
  (byte) c1A#5 ← (byte) c1A#11
  (byte) c1B#5 ← (byte) c1B#11
  (byte) c2A#5 ← (byte) c2A#11
  (byte) c2B#5 ← (byte) c2B#11
  to:@end
@end: scope:[]  from @46

SYMBOL TABLE SSA
(label) @16
(label) @40
(label) @42
(label) @43
(label) @45
(label) @46
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL#0
(byte) BLACK
(byte) BLACK#0
(byte) BLUE
(byte) BLUE#0
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte*) CHARSET
(byte*) CHARSET#0
(byte*) COLS
(byte*) COLS#0
(byte*) D018
(byte*) D018#0
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(byte*) SCREEN1
(byte*) SCREEN1#0
(byte) SID_CONTROL_NOISE
(byte) SID_CONTROL_NOISE#0
(byte*) SID_VOICE3_CONTROL
(byte*) SID_VOICE3_CONTROL#0
(word*) SID_VOICE3_FREQ
(word*) SID_VOICE3_FREQ#0
(byte*) SID_VOICE3_OSC
(byte*) SID_VOICE3_OSC#0
(byte[$100]) SINTABLE
(byte[$100]) SINTABLE#0
(byte) c1A
(byte) c1A#0
(byte) c1A#1
(byte) c1A#10
(byte) c1A#11
(byte) c1A#12
(byte) c1A#13
(byte) c1A#14
(byte) c1A#15
(byte) c1A#16
(byte) c1A#17
(byte) c1A#18
(byte) c1A#19
(byte) c1A#2
(byte) c1A#20
(byte) c1A#21
(byte) c1A#22
(byte) c1A#23
(byte) c1A#24
(byte) c1A#25
(byte) c1A#26
(byte) c1A#27
(byte) c1A#28
(byte) c1A#29
(byte) c1A#3
(byte) c1A#30
(byte) c1A#31
(byte) c1A#4
(byte) c1A#5
(byte) c1A#6
(byte) c1A#7
(byte) c1A#8
(byte) c1A#9
(byte) c1B
(byte) c1B#0
(byte) c1B#1
(byte) c1B#10
(byte) c1B#11
(byte) c1B#12
(byte) c1B#13
(byte) c1B#14
(byte) c1B#15
(byte) c1B#16
(byte) c1B#17
(byte) c1B#18
(byte) c1B#19
(byte) c1B#2
(byte) c1B#20
(byte) c1B#21
(byte) c1B#22
(byte) c1B#23
(byte) c1B#24
(byte) c1B#25
(byte) c1B#26
(byte) c1B#27
(byte) c1B#28
(byte) c1B#29
(byte) c1B#3
(byte) c1B#30
(byte) c1B#31
(byte) c1B#4
(byte) c1B#5
(byte) c1B#6
(byte) c1B#7
(byte) c1B#8
(byte) c1B#9
(byte) c2A
(byte) c2A#0
(byte) c2A#1
(byte) c2A#10
(byte) c2A#11
(byte) c2A#12
(byte) c2A#13
(byte) c2A#14
(byte) c2A#15
(byte) c2A#16
(byte) c2A#17
(byte) c2A#18
(byte) c2A#19
(byte) c2A#2
(byte) c2A#20
(byte) c2A#21
(byte) c2A#22
(byte) c2A#23
(byte) c2A#24
(byte) c2A#25
(byte) c2A#26
(byte) c2A#27
(byte) c2A#28
(byte) c2A#29
(byte) c2A#3
(byte) c2A#30
(byte) c2A#31
(byte) c2A#4
(byte) c2A#5
(byte) c2A#6
(byte) c2A#7
(byte) c2A#8
(byte) c2A#9
(byte) c2B
(byte) c2B#0
(byte) c2B#1
(byte) c2B#10
(byte) c2B#11
(byte) c2B#12
(byte) c2B#13
(byte) c2B#14
(byte) c2B#15
(byte) c2B#16
(byte) c2B#17
(byte) c2B#18
(byte) c2B#19
(byte) c2B#2
(byte) c2B#20
(byte) c2B#21
(byte) c2B#22
(byte) c2B#23
(byte) c2B#24
(byte) c2B#25
(byte) c2B#26
(byte) c2B#27
(byte) c2B#28
(byte) c2B#29
(byte) c2B#3
(byte) c2B#30
(byte) c2B#31
(byte) c2B#4
(byte) c2B#5
(byte) c2B#6
(byte) c2B#7
(byte) c2B#8
(byte) c2B#9
(void()) doplasma((byte*) doplasma::screen)
(bool~) doplasma::$0
(byte~) doplasma::$1
(byte~) doplasma::$2
(bool~) doplasma::$3
(byte~) doplasma::$4
(bool~) doplasma::$5
(bool~) doplasma::$6
(number~) doplasma::$7
(byte*~) doplasma::$8
(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::c1b
(byte) doplasma::c1b#0
(byte) doplasma::c1b#1
(byte) doplasma::c1b#2
(byte) doplasma::c1b#3
(byte) doplasma::c2a
(byte) doplasma::c2a#0
(byte) doplasma::c2a#1
(byte) doplasma::c2a#2
(byte) doplasma::c2a#3
(byte) doplasma::c2b
(byte) doplasma::c2b#0
(byte) doplasma::c2b#1
(byte) doplasma::c2b#2
(byte) doplasma::c2b#3
(byte) doplasma::i
(byte) doplasma::i#0
(byte) doplasma::i#1
(byte) doplasma::i#2
(byte) doplasma::i#3
(byte) doplasma::i1
(byte) doplasma::i1#0
(byte) doplasma::i1#1
(byte) doplasma::i1#2
(byte) doplasma::i1#3
(byte) doplasma::i2
(byte) doplasma::i2#0
(byte) doplasma::i2#1
(byte) doplasma::i2#2
(byte) doplasma::i2#3
(byte) doplasma::i2#4
(byte) doplasma::i2#5
(byte) doplasma::i2#6
(byte) doplasma::ii
(byte) doplasma::ii#0
(byte) doplasma::ii#1
(byte) doplasma::ii#2
(byte) doplasma::ii#3
(byte*) doplasma::screen
(byte*) doplasma::screen#0
(byte*) doplasma::screen#1
(byte*) doplasma::screen#10
(byte*) doplasma::screen#11
(byte*) doplasma::screen#12
(byte*) doplasma::screen#2
(byte*) doplasma::screen#3
(byte*) doplasma::screen#4
(byte*) doplasma::screen#5
(byte*) doplasma::screen#6
(byte*) doplasma::screen#7
(byte*) doplasma::screen#8
(byte*) doplasma::screen#9
(byte) doplasma::val
(byte) doplasma::val#0
(byte) doplasma::val#1
(byte) doplasma::val#2
(byte) doplasma::val#3
(byte[$28]) doplasma::xbuf
(byte[$28]) doplasma::xbuf#0
(byte[$19]) doplasma::ybuf
(byte[$19]) doplasma::ybuf#0
(byte) doplasma::yprev
(byte) doplasma::yprev#0
(byte) doplasma::yprev#1
(byte) doplasma::yprev#2
(byte) doplasma::yprev#3
(byte) doplasma::yval
(byte) doplasma::yval#0
(void()) main()
(byte~) main::$1
(byte*~) main::$2
(bool~) main::$3
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@9
(label) main::@return
(byte*) main::col
(byte*) main::col#0
(byte*) main::col#1
(byte*) main::col#2
(label) main::toD0181
(word~) main::toD0181_$0
(word~) main::toD0181_$0#0
(number~) main::toD0181_$1
(number~) main::toD0181_$1#0
(number~) main::toD0181_$2
(number~) main::toD0181_$2#0
(number~) main::toD0181_$3
(number~) main::toD0181_$3#0
(word~) main::toD0181_$4
(word~) main::toD0181_$4#0
(byte~) main::toD0181_$5
(byte~) main::toD0181_$5#0
(number~) main::toD0181_$6
(number~) main::toD0181_$6#0
(number~) main::toD0181_$7
(number~) main::toD0181_$7#0
(number~) main::toD0181_$8
(number~) main::toD0181_$8#0
(label) main::toD0181_@return
(byte*) main::toD0181_gfx
(byte*) main::toD0181_gfx#0
(byte*) main::toD0181_gfx#1
(byte) main::toD0181_return
(byte) main::toD0181_return#0
(byte) main::toD0181_return#1
(byte) main::toD0181_return#2
(byte) main::toD0181_return#3
(byte*) main::toD0181_screen
(byte*) main::toD0181_screen#0
(byte*) main::toD0181_screen#1
(void()) makecharset((byte*) makecharset::charset)
(number~) makecharset::$10
(number~) makecharset::$11
(number~) makecharset::$12
(bool~) makecharset::$13
(bool~) makecharset::$14
(bool~) makecharset::$2
(byte~) makecharset::$3
(bool~) makecharset::$4
(bool~) makecharset::$5
(byte~) makecharset::$6
(number~) makecharset::$7
(bool~) makecharset::$8
(bool~) makecharset::$9
(label) makecharset::@1
(label) makecharset::@10
(label) makecharset::@13
(label) makecharset::@18
(label) makecharset::@19
(label) makecharset::@2
(label) makecharset::@23
(label) makecharset::@24
(label) makecharset::@25
(label) makecharset::@26
(label) makecharset::@4
(label) makecharset::@5
(label) makecharset::@6
(label) makecharset::@7
(label) makecharset::@8
(label) makecharset::@9
(label) makecharset::@return
(byte) makecharset::b
(byte) makecharset::b#0
(byte) makecharset::b#1
(byte) makecharset::b#2
(byte) makecharset::b#3
(byte) makecharset::b#4
(byte) makecharset::b#5
(byte) makecharset::b#6
(byte) makecharset::b#7
(byte[8]) makecharset::bittab
(byte[8]) makecharset::bittab#0
(word) makecharset::c
(word) makecharset::c#0
(word) makecharset::c#1
(word) makecharset::c#10
(word) makecharset::c#11
(word) makecharset::c#12
(word) makecharset::c#13
(word) makecharset::c#14
(word) makecharset::c#15
(word) makecharset::c#2
(word) makecharset::c#3
(word) makecharset::c#4
(word) makecharset::c#5
(word) makecharset::c#6
(word) makecharset::c#7
(word) makecharset::c#8
(word) makecharset::c#9
(byte*) makecharset::charset
(byte*) makecharset::charset#0
(byte*) makecharset::charset#1
(byte*) makecharset::charset#10
(byte*) makecharset::charset#11
(byte*) makecharset::charset#12
(byte*) makecharset::charset#13
(byte*) makecharset::charset#14
(byte*) makecharset::charset#15
(byte*) makecharset::charset#16
(byte*) makecharset::charset#17
(byte*) makecharset::charset#2
(byte*) makecharset::charset#3
(byte*) makecharset::charset#4
(byte*) makecharset::charset#5
(byte*) makecharset::charset#6
(byte*) makecharset::charset#7
(byte*) makecharset::charset#8
(byte*) makecharset::charset#9
(byte) makecharset::i
(byte) makecharset::i#0
(byte) makecharset::i#1
(byte) makecharset::i#2
(byte) makecharset::i#3
(byte) makecharset::i#4
(byte) makecharset::i#5
(byte) makecharset::i#6
(byte) makecharset::i#7
(byte) makecharset::i#8
(byte) makecharset::i#9
(byte) makecharset::ii
(byte) makecharset::ii#0
(byte) makecharset::ii#1
(byte) makecharset::ii#2
(byte) makecharset::ii#3
(byte) makecharset::ii#4
(byte) makecharset::ii#5
(byte) makecharset::ii#6
(byte) makecharset::s
(byte) makecharset::s#0
(byte) makecharset::s#1
(byte) makecharset::s#2
(byte) makecharset::s#3
(byte) makecharset::s#4
(byte) makecharset::s#5
(byte) makecharset::s#6
(byte) makecharset::s#7
(byte) makecharset::s#8
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(bool~) memset::$0
(bool~) memset::$1
(byte*~) memset::$2
(byte*~) memset::$3
(bool~) memset::$4
(label) memset::@1
(label) memset::@2
(label) memset::@4
(label) memset::@5
(label) memset::@return
(byte) memset::c
(byte) memset::c#0
(byte) memset::c#1
(byte) memset::c#2
(byte) memset::c#3
(byte) memset::c#4
(byte*) memset::dst
(byte*) memset::dst#0
(byte*) memset::dst#1
(byte*) memset::dst#2
(byte*) memset::dst#3
(byte*) memset::end
(byte*) memset::end#0
(byte*) memset::end#1
(byte*) memset::end#2
(word) memset::num
(word) memset::num#0
(word) memset::num#1
(word) memset::num#2
(void*) memset::return
(void*) memset::return#0
(void*) memset::return#1
(void*) memset::return#2
(void*) memset::return#3
(void*) memset::str
(void*) memset::str#0
(void*) memset::str#1
(void*) memset::str#2
(void*) memset::str#3
(void*) memset::str#4
(void*) memset::str#5
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
(byte) print_char::ch#0
(byte) print_char::ch#1
(byte*) print_char_cursor
(byte*) print_char_cursor#0
(byte*) print_char_cursor#1
(byte*) print_char_cursor#10
(byte*) print_char_cursor#11
(byte*) print_char_cursor#12
(byte*) print_char_cursor#13
(byte*) print_char_cursor#14
(byte*) print_char_cursor#15
(byte*) print_char_cursor#16
(byte*) print_char_cursor#17
(byte*) print_char_cursor#18
(byte*) print_char_cursor#19
(byte*) print_char_cursor#2
(byte*) print_char_cursor#20
(byte*) print_char_cursor#21
(byte*) print_char_cursor#22
(byte*) print_char_cursor#23
(byte*) print_char_cursor#24
(byte*) print_char_cursor#25
(byte*) print_char_cursor#26
(byte*) print_char_cursor#27
(byte*) print_char_cursor#28
(byte*) print_char_cursor#29
(byte*) print_char_cursor#3
(byte*) print_char_cursor#30
(byte*) print_char_cursor#31
(byte*) print_char_cursor#32
(byte*) print_char_cursor#33
(byte*) print_char_cursor#34
(byte*) print_char_cursor#35
(byte*) print_char_cursor#36
(byte*) print_char_cursor#37
(byte*) print_char_cursor#38
(byte*) print_char_cursor#39
(byte*) print_char_cursor#4
(byte*) print_char_cursor#40
(byte*) print_char_cursor#41
(byte*) print_char_cursor#42
(byte*) print_char_cursor#43
(byte*) print_char_cursor#44
(byte*) print_char_cursor#45
(byte*) print_char_cursor#46
(byte*) print_char_cursor#47
(byte*) print_char_cursor#5
(byte*) print_char_cursor#6
(byte*) print_char_cursor#7
(byte*) print_char_cursor#8
(byte*) print_char_cursor#9
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_line_cursor
(byte*) print_line_cursor#0
(byte*) print_line_cursor#1
(byte*) print_line_cursor#10
(byte*) print_line_cursor#11
(byte*) print_line_cursor#12
(byte*) print_line_cursor#13
(byte*) print_line_cursor#14
(byte*) print_line_cursor#15
(byte*) print_line_cursor#16
(byte*) print_line_cursor#17
(byte*) print_line_cursor#18
(byte*) print_line_cursor#19
(byte*) print_line_cursor#2
(byte*) print_line_cursor#20
(byte*) print_line_cursor#21
(byte*) print_line_cursor#22
(byte*) print_line_cursor#23
(byte*) print_line_cursor#24
(byte*) print_line_cursor#25
(byte*) print_line_cursor#26
(byte*) print_line_cursor#27
(byte*) print_line_cursor#28
(byte*) print_line_cursor#29
(byte*) print_line_cursor#3
(byte*) print_line_cursor#30
(byte*) print_line_cursor#31
(byte*) print_line_cursor#32
(byte*) print_line_cursor#33
(byte*) print_line_cursor#34
(byte*) print_line_cursor#35
(byte*) print_line_cursor#36
(byte*) print_line_cursor#37
(byte*) print_line_cursor#38
(byte*) print_line_cursor#39
(byte*) print_line_cursor#4
(byte*) print_line_cursor#40
(byte*) print_line_cursor#41
(byte*) print_line_cursor#42
(byte*) print_line_cursor#5
(byte*) print_line_cursor#6
(byte*) print_line_cursor#7
(byte*) print_line_cursor#8
(byte*) print_line_cursor#9
(byte*) print_screen
(byte*) print_screen#0
(byte*) print_screen#1
(byte*) print_screen#10
(byte*) print_screen#11
(byte*) print_screen#2
(byte*) print_screen#3
(byte*) print_screen#4
(byte*) print_screen#5
(byte*) print_screen#6
(byte*) print_screen#7
(byte*) print_screen#8
(byte*) print_screen#9
(byte()) sid_rnd()
(label) sid_rnd::@return
(byte) sid_rnd::return
(byte) sid_rnd::return#0
(byte) sid_rnd::return#1
(byte) sid_rnd::return#2
(byte) sid_rnd::return#3
(byte) sid_rnd::return#4
(void()) sid_rnd_init()
(label) sid_rnd_init::@return

Adding number conversion cast (unumber) 0 in (byte) BLACK#0 ← (number) 0
Adding number conversion cast (unumber) 6 in (byte) BLUE#0 ← (number) 6
Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8
Adding number conversion cast (unumber) $80 in (byte) SID_CONTROL_NOISE#0 ← (number) $80
Adding number conversion cast (unumber) $ffff in *((word*) SID_VOICE3_FREQ#0) ← (number) $ffff
Adding number conversion cast (unumber) $3e8 in (byte*~) main::$2 ← (byte*) COLS#0 + (number) $3e8
Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (number) $3fff
Adding number conversion cast (unumber) main::toD0181_$1#0 in (number~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (unumber)(number) $3fff
Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$2#0 ← (unumber~) main::toD0181_$1#0 * (number) 4
Adding number conversion cast (unumber) main::toD0181_$2#0 in (number~) main::toD0181_$2#0 ← (unumber~) main::toD0181_$1#0 * (unumber)(number) 4
Adding number conversion cast (unumber) main::toD0181_$3#0 in (number~) main::toD0181_$3#0 ← > (unumber~) main::toD0181_$2#0
Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (number) 4
Adding number conversion cast (unumber) main::toD0181_$6#0 in (number~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (unumber)(number) 4
Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7#0 ← (unumber~) main::toD0181_$6#0 & (number) $f
Adding number conversion cast (unumber) main::toD0181_$7#0 in (number~) main::toD0181_$7#0 ← (unumber~) main::toD0181_$6#0 & (unumber)(number) $f
Adding number conversion cast (unumber) main::toD0181_$8#0 in (number~) main::toD0181_$8#0 ← (unumber~) main::toD0181_$3#0 | (unumber~) main::toD0181_$7#0
Adding number conversion cast (unumber) 0 in (byte) c1A#2 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) c1B#2 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) c2A#2 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) c2B#2 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) doplasma::yprev#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) doplasma::i#0 ← (number) 0
Adding number conversion cast (unumber) $19 in (bool~) doplasma::$0 ← (byte) doplasma::i#2 < (number) $19
Adding number conversion cast (unumber) 4 in (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (number) 4
Adding number conversion cast (unumber) 9 in (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (number) 9
Adding number conversion cast (unumber) 3 in (byte) c1A#3 ← (byte) c1A#9 + (number) 3
Adding number conversion cast (unumber) 5 in (byte) c1B#3 ← (byte) c1B#9 - (number) 5
Adding number conversion cast (unumber) 0 in (byte) doplasma::i1#0 ← (number) 0
Adding number conversion cast (unumber) $28 in (bool~) doplasma::$3 ← (byte) doplasma::i1#2 < (number) $28
Adding number conversion cast (unumber) 3 in (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (number) 3
Adding number conversion cast (unumber) 7 in (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (number) 7
Adding number conversion cast (unumber) 2 in (byte) c2A#3 ← (byte) c2A#9 + (number) 2
Adding number conversion cast (unumber) 3 in (byte) c2B#3 ← (byte) c2B#9 - (number) 3
Adding number conversion cast (unumber) 0 in (byte) doplasma::i2#0 ← (number) 0
Adding number conversion cast (unumber) $28 in (bool~) doplasma::$5 ← (byte) doplasma::i2#2 < (number) $28
Adding number conversion cast (unumber) 0 in (byte) doplasma::ii#0 ← (number) 0
Adding number conversion cast (unumber) $19 in (bool~) doplasma::$6 ← (byte) doplasma::ii#2 < (number) $19
Adding number conversion cast (unumber) $28 in (number~) doplasma::$7 ← (byte) doplasma::ii#3 * (number) $28
Adding number conversion cast (unumber) doplasma::$7 in (number~) doplasma::$7 ← (byte) doplasma::ii#3 * (unumber)(number) $28
Adding number conversion cast (unumber) 0 in (word) makecharset::c#0 ← (number) 0
Adding number conversion cast (unumber) $100 in (bool~) makecharset::$2 ← (word) makecharset::c#2 < (number) $100
Adding number conversion cast (unumber) 0 in (byte) makecharset::i#0 ← (number) 0
Adding number conversion cast (unumber) 8 in (bool~) makecharset::$4 ← (byte) makecharset::i#2 < (number) 8
Adding number conversion cast (unumber) 0 in (byte) makecharset::b#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) makecharset::ii#0 ← (number) 0
Adding number conversion cast (unumber) 7 in (number~) makecharset::$12 ← (word) makecharset::c#4 & (number) 7
Adding number conversion cast (unumber) makecharset::$12 in (number~) makecharset::$12 ← (word) makecharset::c#4 & (unumber)(number) 7
Adding number conversion cast (unumber) 0 in (bool~) makecharset::$13 ← (unumber~) makecharset::$12 == (number) 0
Adding number conversion cast (unumber) 8 in (bool~) makecharset::$5 ← (byte) makecharset::ii#2 < (number) 8
Adding number conversion cast (unumber) $ff in (number~) makecharset::$7 ← (byte~) makecharset::$6 & (number) $ff
Adding number conversion cast (unumber) makecharset::$7 in (number~) makecharset::$7 ← (byte~) makecharset::$6 & (unumber)(number) $ff
Adding number conversion cast (unumber) 8 in (number~) makecharset::$10 ← (word) makecharset::c#5 * (number) 8
Adding number conversion cast (unumber) makecharset::$10 in (number~) makecharset::$10 ← (word) makecharset::c#5 * (unumber)(number) 8
Adding number conversion cast (unumber) makecharset::$11 in (number~) makecharset::$11 ← (unumber~) makecharset::$10 + (byte) makecharset::i#3
Successful SSA optimization PassNAddNumberTypeConversions
Added casts to value list in (byte[8]) makecharset::bittab#0 ← (byte[8]){ (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 }
Successful SSA optimization PassNAddInitializerValueListTypeCasts
Inlining cast (byte*) BORDERCOL#0 ← (byte*)(number) $d020
Inlining cast (byte*) BGCOL#0 ← (byte*)(number) $d021
Inlining cast (byte*) D018#0 ← (byte*)(number) $d018
Inlining cast (byte*) COLS#0 ← (byte*)(number) $d800
Inlining cast (byte) BLACK#0 ← (unumber)(number) 0
Inlining cast (byte) BLUE#0 ← (unumber)(number) 6
Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2
Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2
Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400
Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8
Inlining cast (word*) SID_VOICE3_FREQ#0 ← (word*)(number) $d40e
Inlining cast (byte*) SID_VOICE3_CONTROL#0 ← (byte*)(number) $d412
Inlining cast (byte) SID_CONTROL_NOISE#0 ← (unumber)(number) $80
Inlining cast (byte*) SID_VOICE3_OSC#0 ← (byte*)(number) $d41b
Inlining cast *((word*) SID_VOICE3_FREQ#0) ← (unumber)(number) $ffff
Inlining cast (byte*) SCREEN1#0 ← (byte*)(number) $2800
Inlining cast (byte*) CHARSET#0 ← (byte*)(number) $2000
Inlining cast (word~) main::toD0181_$0#0 ← (word)(byte*) main::toD0181_screen#1
Inlining cast (word~) main::toD0181_$4#0 ← (word)(byte*) main::toD0181_gfx#1
Inlining cast (byte) c1A#2 ← (unumber)(number) 0
Inlining cast (byte) c1B#2 ← (unumber)(number) 0
Inlining cast (byte) c2A#2 ← (unumber)(number) 0
Inlining cast (byte) c2B#2 ← (unumber)(number) 0
Inlining cast (byte) doplasma::yprev#0 ← (unumber)(number) 0
Inlining cast (byte) doplasma::i#0 ← (unumber)(number) 0
Inlining cast (byte) doplasma::i1#0 ← (unumber)(number) 0
Inlining cast (byte) doplasma::i2#0 ← (unumber)(number) 0
Inlining cast (byte) doplasma::ii#0 ← (unumber)(number) 0
Inlining cast (word) makecharset::c#0 ← (unumber)(number) 0
Inlining cast (byte) makecharset::i#0 ← (unumber)(number) 0
Inlining cast (byte) makecharset::b#0 ← (unumber)(number) 0
Inlining cast (byte) makecharset::ii#0 ← (unumber)(number) 0
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 53280
Simplifying constant pointer cast (byte*) 53281
Simplifying constant pointer cast (byte*) 53272
Simplifying constant pointer cast (byte*) 55296
Simplifying constant integer cast 0
Simplifying constant integer cast 6
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast $3e8
Simplifying constant pointer cast (word*) 54286
Simplifying constant pointer cast (byte*) 54290
Simplifying constant integer cast $80
Simplifying constant pointer cast (byte*) 54299
Simplifying constant integer cast $ffff
Simplifying constant pointer cast (byte*) 10240
Simplifying constant pointer cast (byte*) 8192
Simplifying constant integer cast $3e8
Simplifying constant integer cast $3fff
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast $f
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
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 $28
Simplifying constant integer cast 0
Simplifying constant integer cast $19
Simplifying constant integer cast $28
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 4
Simplifying constant integer cast 8
Simplifying constant integer cast $10
Simplifying constant integer cast $20
Simplifying constant integer cast $40
Simplifying constant integer cast $80
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 7
Simplifying constant integer cast 0
Simplifying constant integer cast 8
Simplifying constant integer cast $ff
Simplifying constant integer cast 8
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 6
Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) $80
Finalized unsigned number type (word) $ffff
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (word) $3fff
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $f
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
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) $28
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $19
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) 7
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) 8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to word in (unumber~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (word) $3fff
Inferred type updated to word in (unumber~) main::toD0181_$2#0 ← (word~) main::toD0181_$1#0 * (byte) 4
Inferred type updated to byte in (unumber~) main::toD0181_$3#0 ← > (word~) main::toD0181_$2#0
Inferred type updated to byte in (unumber~) main::toD0181_$6#0 ← (byte~) main::toD0181_$5#0 / (byte) 4
Inferred type updated to byte in (unumber~) main::toD0181_$7#0 ← (byte~) main::toD0181_$6#0 & (byte) $f
Inferred type updated to byte in (unumber~) main::toD0181_$8#0 ← (byte~) main::toD0181_$3#0 | (byte~) main::toD0181_$7#0
Inferred type updated to byte in (unumber~) doplasma::$7 ← (byte) doplasma::ii#3 * (byte) $28
Inferred type updated to byte in (unumber~) makecharset::$12 ← (word) makecharset::c#4 & (byte) 7
Inferred type updated to byte in (unumber~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff
Inferred type updated to word in (unumber~) makecharset::$10 ← (word) makecharset::c#5 * (byte) 8
Inferred type updated to word in (unumber~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#3
Inversing boolean not [8] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [7] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0
Inversing boolean not [208] (bool~) makecharset::$14 ← (byte~) makecharset::$12 != (byte) 0 from [207] (bool~) makecharset::$13 ← (byte~) makecharset::$12 == (byte) 0
Inversing boolean not [220] (bool~) makecharset::$9 ← (byte~) makecharset::$7 <= (byte) makecharset::s#1 from [219] (bool~) makecharset::$8 ← (byte~) makecharset::$7 > (byte) makecharset::s#1
Successful SSA optimization Pass2UnaryNotSimplification
Alias (void*) memset::return#0 = (void*) memset::str#1 (void*) memset::return#3 (void*) memset::return#1 
Alias (void*) memset::str#2 = (void*) memset::str#3 
Alias (word) memset::num#1 = (word) memset::num#2 
Alias (byte) memset::c#3 = (byte) memset::c#4 
Alias (byte*) memset::end#0 = (byte*~) memset::$3 
Alias (byte) memset::c#1 = (byte) memset::c#2 
Alias (byte*) memset::dst#2 = (byte*) memset::dst#3 
Alias (byte*) memset::end#1 = (byte*) memset::end#2 
Alias (void*) memset::str#4 = (void*) memset::str#5 
Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#31 (byte*) print_char_cursor#38 (byte*) print_screen#11 (byte*) print_line_cursor#28 (byte*) print_char_cursor#36 (byte*) print_screen#10 (byte*) print_line_cursor#24 (byte*) print_char_cursor#32 (byte*) print_screen#9 (byte*) print_line_cursor#18 (byte*) print_char_cursor#25 (byte*) print_screen#8 
Alias (byte*) print_char_cursor#1 = (byte*) print_char_cursor#12 (byte*) print_char_cursor#2 
Alias (byte*) print_line_cursor#1 = (byte*) print_screen#2 (byte*) print_screen#1 (byte*) print_char_cursor#3 (byte*) print_line_cursor#8 (byte*) print_char_cursor#13 (byte*) print_line_cursor#2 (byte*) print_char_cursor#4 
Alias (byte) sid_rnd::return#0 = (byte) sid_rnd::return#3 (byte) sid_rnd::return#1 
Alias (byte*) print_line_cursor#14 = (byte*) print_line_cursor#19 
Alias (byte*) print_char_cursor#21 = (byte*) print_char_cursor#26 
Alias (byte*) print_screen#5 = (byte*) print_screen#6 
Alias (byte) c1A#17 = (byte) c1A#29 (byte) c1A#30 (byte) c1A#28 (byte) c1A#24 (byte) c1A#21 
Alias (byte) c1B#17 = (byte) c1B#29 (byte) c1B#30 (byte) c1B#28 (byte) c1B#24 (byte) c1B#21 
Alias (byte) c2A#18 = (byte) c2A#29 (byte) c2A#30 (byte) c2A#28 (byte) c2A#25 (byte) c2A#23 
Alias (byte) c2B#18 = (byte) c2B#29 (byte) c2B#30 (byte) c2B#28 (byte) c2B#25 (byte) c2B#23 
Alias (byte*) print_line_cursor#21 = (byte*) print_line_cursor#3 (byte*) print_line_cursor#9 (byte*) print_line_cursor#32 (byte*) print_line_cursor#26 
Alias (byte*) print_char_cursor#14 = (byte*) print_char_cursor#5 (byte*) print_char_cursor#39 (byte*) print_char_cursor#34 (byte*) print_char_cursor#28 
Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1 
Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 
Alias (byte) main::toD0181_return#0 = (byte~) main::toD0181_$8#0 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$1 
Alias (byte) c1A#1 = (byte) c1A#12 (byte) c1A#13 (byte) c1A#7 
Alias (byte) c1B#1 = (byte) c1B#12 (byte) c1B#13 (byte) c1B#7 
Alias (byte) c2A#1 = (byte) c2A#12 (byte) c2A#13 (byte) c2A#7 
Alias (byte) c2B#1 = (byte) c2B#12 (byte) c2B#13 (byte) c2B#7 
Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#27 (byte*) print_line_cursor#15 (byte*) print_line_cursor#20 (byte*) print_line_cursor#4 
Alias (byte*) print_char_cursor#15 = (byte*) print_char_cursor#35 (byte*) print_char_cursor#22 (byte*) print_char_cursor#27 (byte*) print_char_cursor#6 
Alias (byte) c1A#0 = (byte) c1A#6 
Alias (byte) c1B#0 = (byte) c1B#6 
Alias (byte) c2A#0 = (byte) c2A#6 
Alias (byte) c2B#0 = (byte) c2B#6 
Alias (byte) doplasma::c1a#2 = (byte) doplasma::c1a#3 
Alias (byte) doplasma::c1b#2 = (byte) doplasma::c1b#3 
Alias (byte) doplasma::yprev#2 = (byte) doplasma::yprev#3 
Alias (byte) doplasma::i#2 = (byte) doplasma::i#3 
Alias (byte) c1A#14 = (byte) c1A#18 (byte) c1A#9 
Alias (byte) c1B#14 = (byte) c1B#18 (byte) c1B#9 
Alias (byte) c2A#14 = (byte) c2A#20 (byte) c2A#8 
Alias (byte) c2B#14 = (byte) c2B#20 (byte) c2B#8 
Alias (byte*) doplasma::screen#10 = (byte*) doplasma::screen#12 (byte*) doplasma::screen#8 
Alias (byte) doplasma::yval#0 = (byte~) doplasma::$1 (byte) doplasma::yprev#1 
Alias (byte) doplasma::c2a#2 = (byte) doplasma::c2a#3 
Alias (byte) doplasma::c2b#2 = (byte) doplasma::c2b#3 
Alias (byte) doplasma::i1#2 = (byte) doplasma::i1#3 
Alias (byte) c2A#15 = (byte) c2A#21 (byte) c2A#9 
Alias (byte) c2B#15 = (byte) c2B#21 (byte) c2B#9 
Alias (byte) c1A#20 = (byte) c1A#25 (byte) c1A#22 
Alias (byte) c1B#20 = (byte) c1B#25 (byte) c1B#22 
Alias (byte*) doplasma::screen#6 = (byte*) doplasma::screen#9 (byte*) doplasma::screen#7 
Alias (byte) doplasma::i2#2 = (byte) doplasma::i2#3 
Alias (byte*) doplasma::screen#3 = (byte*) doplasma::screen#4 
Alias (byte) c1A#10 = (byte) c1A#26 (byte) c1A#15 (byte) c1A#4 
Alias (byte) c1B#10 = (byte) c1B#26 (byte) c1B#15 (byte) c1B#4 
Alias (byte) c2A#10 = (byte) c2A#26 (byte) c2A#16 (byte) c2A#4 
Alias (byte) c2B#10 = (byte) c2B#26 (byte) c2B#16 (byte) c2B#4 
Alias (byte) doplasma::val#2 = (byte) doplasma::val#3 
Alias (byte) doplasma::ii#2 = (byte) doplasma::ii#3 
Alias (byte*) doplasma::screen#1 = (byte*) doplasma::screen#2 (byte*) doplasma::screen#5 
Alias (byte) doplasma::i2#4 = (byte) doplasma::i2#6 (byte) doplasma::i2#5 
Alias (byte) c1A#19 = (byte) c1A#27 (byte) c1A#23 
Alias (byte) c1B#19 = (byte) c1B#27 (byte) c1B#23 
Alias (byte) c2A#22 = (byte) c2A#27 (byte) c2A#24 
Alias (byte) c2B#22 = (byte) c2B#27 (byte) c2B#24 
Alias (byte*) print_screen#3 = (byte*) print_screen#4 
Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#22 
Alias (byte*) print_char_cursor#23 = (byte*) print_char_cursor#29 
Alias (byte*) makecharset::charset#12 = (byte*) makecharset::charset#13 (byte*) makecharset::charset#16 
Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#5 
Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#7 
Alias (word) makecharset::c#2 = (word) makecharset::c#3 
Alias (byte*) makecharset::charset#10 = (byte*) makecharset::charset#8 
Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#40 (byte*) print_char_cursor#24 (byte*) print_char_cursor#9 
Alias (byte*) print_line_cursor#12 = (byte*) print_line_cursor#35 (byte*) print_line_cursor#17 (byte*) print_line_cursor#6 
Alias (word) makecharset::c#11 = (word) makecharset::c#7 (word) makecharset::c#4 (word) makecharset::c#12 (word) makecharset::c#9 
Alias (byte) makecharset::i#2 = (byte) makecharset::i#6 
Alias (byte*) makecharset::charset#14 = (byte*) makecharset::charset#4 (byte*) makecharset::charset#5 (byte*) makecharset::charset#15 (byte*) makecharset::charset#17 
Alias (byte) makecharset::s#5 = (byte) makecharset::s#6 
Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#44 (byte*) print_char_cursor#37 (byte*) print_char_cursor#31 
Alias (byte*) print_line_cursor#29 = (byte*) print_line_cursor#39 (byte*) print_line_cursor#33 (byte*) print_line_cursor#30 (byte*) print_line_cursor#34 
Alias (byte) makecharset::s#1 = (byte) makecharset::s#2 (byte) makecharset::s#3 (byte) makecharset::s#8 (byte) makecharset::s#7 
Alias (byte) makecharset::ii#2 = (byte) makecharset::ii#6 (byte) makecharset::ii#5 (byte) makecharset::ii#4 
Alias (byte) makecharset::b#2 = (byte) makecharset::b#7 (byte) makecharset::b#4 (byte) makecharset::b#5 (byte) makecharset::b#3 
Alias (word) makecharset::c#13 = (word) makecharset::c#15 (word) makecharset::c#8 (word) makecharset::c#14 (word) makecharset::c#5 
Alias (byte) makecharset::i#3 = (byte) makecharset::i#9 (byte) makecharset::i#4 (byte) makecharset::i#8 (byte) makecharset::i#7 
Alias (byte*) makecharset::charset#1 = (byte*) makecharset::charset#9 (byte*) makecharset::charset#2 (byte*) makecharset::charset#7 (byte*) makecharset::charset#6 
Alias (byte*) print_char_cursor#41 = (byte*) print_char_cursor#47 (byte*) print_char_cursor#42 (byte*) print_char_cursor#46 (byte*) print_char_cursor#45 
Alias (byte*) print_line_cursor#36 = (byte*) print_line_cursor#42 (byte*) print_line_cursor#37 (byte*) print_line_cursor#41 (byte*) print_line_cursor#40 
Alias (byte) sid_rnd::return#2 = (byte) sid_rnd::return#4 
Alias (byte*) print_char_cursor#17 = (byte*) print_char_cursor#8 
Alias (byte) c1A#16 = (byte) c1A#2 
Alias (byte) c1B#16 = (byte) c1B#2 
Alias (byte) c2A#17 = (byte) c2A#2 
Alias (byte) c2B#17 = (byte) c2B#2 
Alias (byte*) print_line_cursor#13 = (byte*) print_line_cursor#7 
Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#19 
Alias (byte) c1A#11 = (byte) c1A#5 
Alias (byte) c1B#11 = (byte) c1B#5 
Alias (byte) c2A#11 = (byte) c2A#5 
Alias (byte) c2B#11 = (byte) c2B#5 
Successful SSA optimization Pass2AliasElimination
Alias (byte) makecharset::ii#2 = (byte) makecharset::ii#3 
Alias (word) makecharset::c#10 = (word) makecharset::c#13 
Alias (byte) makecharset::i#3 = (byte) makecharset::i#5 
Alias (byte*) makecharset::charset#1 = (byte*) makecharset::charset#3 
Alias (byte) makecharset::s#1 = (byte) makecharset::s#4 
Alias (byte*) print_char_cursor#41 = (byte*) print_char_cursor#43 
Alias (byte*) print_line_cursor#36 = (byte*) print_line_cursor#38 
Alias (word) makecharset::c#11 = (word) makecharset::c#6 
Alias (byte*) print_line_cursor#23 = (byte*) print_line_cursor#29 
Alias (byte*) makecharset::charset#11 = (byte*) makecharset::charset#14 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (word) memset::num#1 (word) memset::num#0
Identical Phi Values (void*) memset::str#2 (void*) memset::str#0
Identical Phi Values (byte) memset::c#3 (byte) memset::c#0
Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0
Identical Phi Values (void*) memset::str#4 (void*) memset::str#2
Identical Phi Values (byte) memset::c#1 (byte) memset::c#3
Identical Phi Values (byte) print_char::ch#1 (byte) print_char::ch#0
Identical Phi Values (byte*) print_char_cursor#11 (byte*) print_char_cursor#20
Identical Phi Values (byte*) print_line_cursor#1 (byte*) print_screen#3
Identical Phi Values (byte*) print_line_cursor#25 (byte*) print_line_cursor#0
Identical Phi Values (byte*) print_char_cursor#33 (byte*) print_line_cursor#0
Identical Phi Values (byte*) print_screen#7 (byte*) print_line_cursor#0
Identical Phi Values (byte) c1A#31 (byte) c1A#16
Identical Phi Values (byte) c1B#31 (byte) c1B#16
Identical Phi Values (byte) c2A#31 (byte) c2A#17
Identical Phi Values (byte) c2B#31 (byte) c2B#17
Identical Phi Values (byte*) print_line_cursor#14 (byte*) print_line_cursor#25
Identical Phi Values (byte*) print_char_cursor#21 (byte*) print_char_cursor#33
Identical Phi Values (byte*) print_screen#5 (byte*) print_screen#7
Identical Phi Values (byte) c1A#17 (byte) c1A#31
Identical Phi Values (byte) c1B#17 (byte) c1B#31
Identical Phi Values (byte) c2A#18 (byte) c2A#31
Identical Phi Values (byte) c2B#18 (byte) c2B#31
Identical Phi Values (byte*) print_line_cursor#21 (byte*) print_line_cursor#12
Identical Phi Values (byte*) print_char_cursor#14 (byte*) print_char_cursor#18
Identical Phi Values (byte*) print_line_cursor#10 (byte*) print_line_cursor#21
Identical Phi Values (byte*) print_char_cursor#15 (byte*) print_char_cursor#14
Identical Phi Values (byte) c1A#0 (byte) c1A#10
Identical Phi Values (byte) c1B#0 (byte) c1B#10
Identical Phi Values (byte) c2A#0 (byte) c2A#10
Identical Phi Values (byte) c2B#0 (byte) c2B#10
Identical Phi Values (byte) c1A#8 (byte) c1A#1
Identical Phi Values (byte) c1B#8 (byte) c1B#1
Identical Phi Values (byte) c2A#19 (byte) c2A#1
Identical Phi Values (byte) c2B#19 (byte) c2B#1
Identical Phi Values (byte*) doplasma::screen#11 (byte*) doplasma::screen#0
Identical Phi Values (byte) c1A#14 (byte) c1A#8
Identical Phi Values (byte) c1B#14 (byte) c1B#8
Identical Phi Values (byte) c2A#14 (byte) c2A#19
Identical Phi Values (byte) c2B#14 (byte) c2B#19
Identical Phi Values (byte*) doplasma::screen#10 (byte*) doplasma::screen#11
Identical Phi Values (byte) c2A#15 (byte) c2A#14
Identical Phi Values (byte) c2B#15 (byte) c2B#14
Identical Phi Values (byte) c1A#20 (byte) c1A#3
Identical Phi Values (byte) c1B#20 (byte) c1B#3
Identical Phi Values (byte*) doplasma::screen#6 (byte*) doplasma::screen#10
Identical Phi Values (byte*) doplasma::screen#1 (byte*) doplasma::screen#3
Identical Phi Values (byte) doplasma::i2#4 (byte) doplasma::i2#2
Identical Phi Values (byte) c1A#19 (byte) c1A#10
Identical Phi Values (byte) c1B#19 (byte) c1B#10
Identical Phi Values (byte) c2A#22 (byte) c2A#10
Identical Phi Values (byte) c2B#22 (byte) c2B#10
Identical Phi Values (byte*) print_screen#3 (byte*) print_screen#5
Identical Phi Values (byte*) print_line_cursor#16 (byte*) print_line_cursor#14
Identical Phi Values (byte*) print_char_cursor#23 (byte*) print_char_cursor#21
Identical Phi Values (byte*) makecharset::charset#12 (byte*) makecharset::charset#0
Identical Phi Values (byte*) print_line_cursor#11 (byte*) print_line_cursor#1
Identical Phi Values (byte*) print_char_cursor#16 (byte*) print_line_cursor#1
Identical Phi Values (word) makecharset::c#10 (word) makecharset::c#11
Identical Phi Values (byte) makecharset::i#3 (byte) makecharset::i#2
Identical Phi Values (byte*) makecharset::charset#1 (byte*) makecharset::charset#11
Identical Phi Values (byte) makecharset::s#1 (byte) makecharset::s#5
Identical Phi Values (byte*) print_char_cursor#41 (byte*) print_char_cursor#20
Identical Phi Values (byte*) print_line_cursor#36 (byte*) print_line_cursor#23
Identical Phi Values (byte*) print_char_cursor#17 (byte*) print_char_cursor#1
Identical Phi Values (byte*) print_line_cursor#13 (byte*) print_line_cursor#10
Identical Phi Values (byte*) print_char_cursor#10 (byte*) print_char_cursor#15
Identical Phi Values (byte) c1A#11 (byte) c1A#1
Identical Phi Values (byte) c1B#11 (byte) c1B#1
Identical Phi Values (byte) c2A#11 (byte) c2A#1
Identical Phi Values (byte) c2B#11 (byte) c2B#1
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (void*) memset::return#0 (void*) memset::str#0
Identical Phi Values (byte) c1A#10 (byte) c1A#3
Identical Phi Values (byte) c1B#10 (byte) c1B#3
Identical Phi Values (byte) c2A#10 (byte) c2A#3
Identical Phi Values (byte) c2B#10 (byte) c2B#3
Identical Phi Values (byte*) doplasma::screen#3 (byte*) doplasma::screen#0
Identical Phi Values (word) makecharset::c#11 (word) makecharset::c#2
Identical Phi Values (byte*) makecharset::charset#11 (byte*) makecharset::charset#10
Identical Phi Values (byte*) print_char_cursor#20 (byte*) print_char_cursor#18
Identical Phi Values (byte) makecharset::s#5 (byte) makecharset::s#0
Identical Phi Values (byte*) print_line_cursor#23 (byte*) print_line_cursor#12
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (byte*) print_line_cursor#12 (byte*) print_line_cursor#0
Identical Phi Values (byte*) makecharset::charset#10 (byte*) makecharset::charset#0
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [9] if((word) memset::num#0<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [19] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) main::$3 [74] if((byte*) main::col#1!=rangelast(COLS#0,main::$2)) goto main::@1
Simple Condition (bool~) doplasma::$0 [131] if((byte) doplasma::i#2<(byte) $19) goto doplasma::@2
Simple Condition (bool~) doplasma::$3 [149] if((byte) doplasma::i1#2<(byte) $28) goto doplasma::@8
Simple Condition (bool~) doplasma::$5 [162] if((byte) doplasma::i2#2<(byte) $28) goto doplasma::@14
Simple Condition (bool~) doplasma::$6 [168] unroll if((byte) doplasma::ii#2<(byte) $19) goto doplasma::@17
Simple Condition (bool~) makecharset::$2 [194] if((word) makecharset::c#2<(word) $100) goto makecharset::@2
Simple Condition (bool~) makecharset::$4 [201] if((byte) makecharset::i#2<(byte) 8) goto makecharset::@5
Simple Condition (bool~) makecharset::$14 [209] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@19
Simple Condition (bool~) makecharset::$5 [212] if((byte) makecharset::ii#2<(byte) 8) goto makecharset::@8
Simple Condition (bool~) makecharset::$9 [221] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@10
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [123] (byte[$28]) doplasma::xbuf#0 ← { fill( $28, 0) }
Constant right-side identified [124] (byte[$19]) doplasma::ybuf#0 ← { fill( $19, 0) }
Successful SSA optimization Pass2ConstantRValueConsolidation
Identified constant from value list (byte[8]) { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 }
Successful SSA optimization Pass2ConstantInitializerValueLists
Constant (const byte*) BORDERCOL#0 = (byte*) 53280
Constant (const byte*) BGCOL#0 = (byte*) 53281
Constant (const byte*) D018#0 = (byte*) 53272
Constant (const byte*) COLS#0 = (byte*) 55296
Constant (const byte) BLACK#0 = 0
Constant (const byte) BLUE#0 = 6
Constant (const byte*) print_line_cursor#0 = (byte*) 1024
Constant (const byte) memset::c#0 = ' '
Constant (const word) memset::num#0 = $3e8
Constant (const word*) SID_VOICE3_FREQ#0 = (word*) 54286
Constant (const byte*) SID_VOICE3_CONTROL#0 = (byte*) 54290
Constant (const byte) SID_CONTROL_NOISE#0 = $80
Constant (const byte*) SID_VOICE3_OSC#0 = (byte*) 54299
Constant (const byte*) SCREEN1#0 = (byte*) 10240
Constant (const byte*) CHARSET#0 = (byte*) 8192
Constant (const byte[$100]) SINTABLE#0 = kickasm {{ .for(var i=0;i<$100;i++)
        .byte round(127.5+127.5*sin(toRadians(360*i/256)))
 }}
Constant (const byte) c1A#16 = 0
Constant (const byte) c1B#16 = 0
Constant (const byte) c2A#17 = 0
Constant (const byte) c2B#17 = 0
Constant (const byte[$28]) doplasma::xbuf#0 = { fill( $28, 0) }
Constant (const byte[$19]) doplasma::ybuf#0 = { fill( $19, 0) }
Constant (const byte) doplasma::yprev#0 = 0
Constant (const byte) doplasma::i#0 = 0
Constant (const byte) doplasma::i1#0 = 0
Constant (const byte) doplasma::i2#0 = 0
Constant (const byte) doplasma::ii#0 = 0
Constant (const byte[8]) makecharset::bittab#0 = { 1, 2, 4, 8, $10, $20, $40, $80 }
Constant (const word) makecharset::c#0 = 0
Constant (const byte) makecharset::i#0 = 0
Constant (const byte) makecharset::b#0 = 0
Constant (const byte) makecharset::ii#0 = 0
Constant (const byte) print_char::ch#0 = '.'
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) main::col#0 = COLS#0
Constant (const byte*) makecharset::charset#0 = CHARSET#0
Constant (const byte*) main::toD0181_screen#0 = SCREEN1#0
Constant (const byte*) main::toD0181_gfx#0 = CHARSET#0
Constant (const byte*) doplasma::screen#0 = SCREEN1#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (void*)print_line_cursor#0 in [36] (void*) memset::str#0 ← (void*)(const byte*) print_line_cursor#0
Constant value identified (word)main::toD0181_screen#0 in [84] (word~) main::toD0181_$0#0 ← (word)(const byte*) main::toD0181_screen#0
Constant value identified (word)main::toD0181_gfx#0 in [88] (word~) main::toD0181_$4#0 ← (word)(const byte*) main::toD0181_gfx#0
Successful SSA optimization Pass2ConstantValues
if() condition always false - eliminating [9] if((const word) memset::num#0<=(byte) 0) goto memset::@1
if() condition always true - replacing block destination [100] if(true) goto main::@4
Successful SSA optimization Pass2ConstantIfs
De-inlining pointer[w] to *(pointer+w)   [225] *((const byte*) makecharset::charset#0 + (word~) makecharset::$11) ← (byte) makecharset::b#2
Successful SSA optimization Pass2DeInlineWordDerefIdx
Eliminating unused variable (void*) memset::return#2 and assignment [13] (void*) memset::return#2 ← (void*) memset::str#0
Successful SSA optimization PassNEliminateUnusedVars
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Successful SSA optimization Pass2LoopHeadConstantIdentification
Successful SSA optimization Pass2LoopHeadConstantIdentification
Successful SSA optimization Pass2LoopHeadConstantIdentification
Successful SSA optimization Pass2LoopHeadConstantIdentification
Successful SSA optimization Pass2LoopHeadConstantIdentification
Successful SSA optimization Pass2LoopHeadConstantIdentification
Successful SSA optimization Pass2LoopHeadConstantIdentification
Alias (byte) doplasma::i#1 = (byte) doplasma::i#2 
Alias (byte) doplasma::c1a#1 = (byte) doplasma::c1a#2 
Alias (byte) doplasma::c1b#1 = (byte) doplasma::c1b#2 
Alias (byte) doplasma::yprev#2 = (byte) doplasma::yval#0 
Alias (byte) doplasma::i1#1 = (byte) doplasma::i1#2 
Alias (byte) doplasma::c2a#1 = (byte) doplasma::c2a#2 
Alias (byte) doplasma::c2b#1 = (byte) doplasma::c2b#2 
Alias (byte) doplasma::i2#1 = (byte) doplasma::i2#2 
Alias (byte) doplasma::ii#1 = (byte) doplasma::ii#2 
Alias (byte) doplasma::val#1 = (byte) doplasma::val#2 
Alias (byte) doplasma::i2#10 = (byte) doplasma::i2#8 
Alias (word) makecharset::c#1 = (word) makecharset::c#2 
Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#30 
Alias (byte) makecharset::i#1 = (byte) makecharset::i#2 
Alias (word) makecharset::c#18 = (word) makecharset::c#20 
Alias (byte*) print_char_cursor#51 = (byte*) print_char_cursor#53 
Alias (byte) makecharset::ii#1 = (byte) makecharset::ii#2 
Alias (byte) makecharset::b#2 = (byte) makecharset::b#6 
Alias (byte) makecharset::i#11 = (byte) makecharset::i#12 
Alias (word) makecharset::c#22 = (word) makecharset::c#25 
Alias (byte*) print_char_cursor#55 = (byte*) print_char_cursor#57 
Alias (byte) makecharset::i#14 = (byte) makecharset::i#15 (byte) makecharset::i#16 
Alias (byte) makecharset::ii#10 = (byte) makecharset::ii#9 (byte) makecharset::ii#8 
Alias (byte) makecharset::b#10 = (byte) makecharset::b#9 (byte) makecharset::b#11 
Alias (word) makecharset::c#28 = (word) makecharset::c#29 (word) makecharset::c#30 
Alias (byte*) print_char_cursor#59 = (byte*) print_char_cursor#60 (byte*) print_char_cursor#61 
Alias (word) makecharset::c#17 = (word) makecharset::c#27 (word) makecharset::c#24 
Alias (byte*) print_char_cursor#49 = (byte*) print_char_cursor#50 
Alias (byte) doplasma::c1a#0 = (byte) doplasma::c1a#5 
Alias (byte) doplasma::c1b#0 = (byte) doplasma::c1b#5 
Alias (byte) doplasma::c2a#0 = (byte) doplasma::c2a#5 
Alias (byte) doplasma::c2b#0 = (byte) doplasma::c2b#5 
Alias (byte) doplasma::val#0 = (byte) doplasma::val#5 
Alias (byte) doplasma::i2#11 = (byte) doplasma::i2#7 
Alias (word) makecharset::c#16 = (word) makecharset::c#21 
Alias (byte*) print_char_cursor#52 = (byte*) print_char_cursor#54 
Alias (byte) makecharset::i#13 = (byte) makecharset::i#18 
Alias (word) makecharset::c#23 = (word) makecharset::c#26 
Alias (byte*) print_char_cursor#56 = (byte*) print_char_cursor#58 
Successful SSA optimization Pass2AliasElimination
Alias (byte) makecharset::i#11 = (byte) makecharset::i#14 
Alias (byte) makecharset::ii#10 = (byte) makecharset::ii#7 
Alias (word) makecharset::c#22 = (word) makecharset::c#28 
Alias (byte*) print_char_cursor#55 = (byte*) print_char_cursor#59 
Alias (word) makecharset::c#17 = (word) makecharset::c#19 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte*) print_char_cursor#48 (byte*) print_char_cursor#49
Identical Phi Values (byte) doplasma::i2#10 (byte) doplasma::i2#11
Identical Phi Values (byte) makecharset::i#11 (byte) makecharset::i#13
Identical Phi Values (word) makecharset::c#22 (word) makecharset::c#23
Identical Phi Values (byte*) print_char_cursor#55 (byte*) print_char_cursor#56
Identical Phi Values (byte) doplasma::i#5 (const byte) doplasma::i#0
Identical Phi Values (byte) doplasma::yprev#5 (const byte) doplasma::yprev#0
Identical Phi Values (byte) doplasma::i1#5 (const byte) doplasma::i1#0
Identical Phi Values (byte) doplasma::ii#5 (const byte) doplasma::ii#0
Identical Phi Values (byte) doplasma::i2#12 (const byte) doplasma::i2#0
Identical Phi Values (byte) makecharset::i#17 (const byte) makecharset::i#0
Identical Phi Values (byte) makecharset::ii#11 (const byte) makecharset::ii#0
Identical Phi Values (byte) makecharset::b#12 (const byte) makecharset::b#0
Identical Phi Values (word) makecharset::c#31 (const word) makecharset::c#0
Identical Phi Values (byte*) print_char_cursor#62 (const byte*) print_line_cursor#0
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (byte) doplasma::i2#9 (byte) doplasma::i2#11
Identical Phi Values (byte) makecharset::i#10 (byte) makecharset::i#13
Identical Phi Values (word) makecharset::c#18 (word) makecharset::c#23
Identical Phi Values (byte*) print_char_cursor#51 (byte*) print_char_cursor#56
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (word) makecharset::c#23 (word) makecharset::c#16
Identical Phi Values (byte*) print_char_cursor#56 (byte*) print_char_cursor#52
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (word) makecharset::c#17 (word) makecharset::c#16
Identical Phi Values (byte*) print_char_cursor#49 (byte*) print_char_cursor#52
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [23] (byte*~) main::$2 ← (const byte*) COLS#0 + (word) $3e8
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const void*) memset::str#0 = (void*)print_line_cursor#0
Constant (const byte*) main::$2 = COLS#0+$3e8
Constant (const word) main::toD0181_$0#0 = (word)main::toD0181_screen#0
Constant (const word) main::toD0181_$4#0 = (word)main::toD0181_gfx#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (byte*)memset::str#0 in [0] (byte*~) memset::$2 ← (byte*)(const void*) memset::str#0
Constant value identified (byte*)memset::str#0 in [2] (byte*) memset::dst#0 ← (byte*)(const void*) memset::str#0
Successful SSA optimization Pass2ConstantValues
if() condition always true - replacing block destination [125] if((const byte) doplasma::i#0<(byte) $19) goto doplasma::@2
if() condition always true - replacing block destination [127] if((const byte) doplasma::i1#0<(byte) $28) goto doplasma::@8
if() condition always true - replacing block destination [129] unroll if((const byte) doplasma::ii#0<(byte) $19) goto doplasma::@17
if() condition always true - replacing block destination [131] if((const byte) doplasma::i2#0<(byte) $28) goto doplasma::@14
if() condition always true - replacing block destination [133] if((const byte) makecharset::i#0<(byte) 8) goto makecharset::@5
Removing PHI-reference to removed block (makecharset::@7_1) in block makecharset::@9
if() condition always true - replacing block destination [135] if((const byte) makecharset::ii#0<(byte) 8) goto makecharset::@8
if() condition always true - replacing block destination [137] if((const word) makecharset::c#0<(word) $100) goto makecharset::@2
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [26] main::col#1 ← ++ main::col#2 to ++
Resolved ranged comparison value [27] if(main::col#1!=rangelast(COLS#0,main::$2)) goto main::@1 to (byte*)(const byte*) main::$2+(number) 1
Adding number conversion cast (unumber) 1 in if((byte*) main::col#1!=(byte*)(const byte*) main::$2+(number) 1) goto main::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast (const byte*) main::$2+(unumber)(number) 1
Simplifying constant integer cast 1
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte) makecharset::b#2 = (byte) makecharset::b#8 
Successful SSA optimization Pass2AliasElimination
Constant right-side identified [26] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff
Constant right-side identified [29] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) memset::$2 = (byte*)memset::str#0
Constant (const byte*) memset::dst#0 = (byte*)memset::str#0
Constant (const word) main::toD0181_$1#0 = main::toD0181_$0#0&$3fff
Constant (const byte) main::toD0181_$5#0 = >main::toD0181_$4#0
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0
Constant right-side identified [24] (word~) main::toD0181_$2#0 ← (const word) main::toD0181_$1#0 * (byte) 4
Constant right-side identified [26] (byte~) main::toD0181_$6#0 ← (const byte) main::toD0181_$5#0 / (byte) 4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) memset::end#0 = memset::$2+memset::num#0
Constant (const word) main::toD0181_$2#0 = main::toD0181_$1#0*4
Constant (const byte) main::toD0181_$6#0 = main::toD0181_$5#0/4
Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization Pass2LoopHeadConstantIdentification
Alias (byte*) memset::dst#1 = (byte*) memset::dst#2 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte*) memset::dst#5 (const byte*) memset::dst#0
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [25] (byte~) main::toD0181_$3#0 ← > (const word) main::toD0181_$2#0
Constant right-side identified [26] (byte~) main::toD0181_$7#0 ← (const byte) main::toD0181_$6#0 & (byte) $f
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::toD0181_$3#0 = >main::toD0181_$2#0
Constant (const byte) main::toD0181_$7#0 = main::toD0181_$6#0&$f
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [97] if((const byte*) memset::dst#0!=(const byte*) memset::end#0) goto memset::@5
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [23] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3#0 | (const byte) main::toD0181_$7#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17 tails: doplasma::@16 blocks: doplasma::@16 doplasma::@17 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#0 = (byte) doplasma::val#4 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#4 (const byte) doplasma::ii#0
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [55] (byte~) doplasma::$7 ← (const byte) doplasma::ii#0 * (byte) $28
Constant right-side identified [58] (byte) doplasma::ii#1 ← ++ (const byte) doplasma::ii#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$7 = doplasma::ii#0*$28
Constant (const byte) doplasma::ii#1 = ++doplasma::ii#0
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [52] if((const byte) doplasma::ii#1<(byte) $19) goto doplasma::@17_1
Successful SSA optimization Pass2ConstantIfs
Simplifying constant evaluating to zero (const byte) doplasma::ii#0*(byte) $28 in 
Successful SSA optimization PassNSimplifyConstantZero
Simplifying expression containing zero doplasma::ybuf#0 in [54] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0 + (const byte) doplasma::ii#0)
Simplifying expression containing zero doplasma::screen#0 in [56] (byte*~) doplasma::$8 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$7
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused constant (const byte) doplasma::$7
Successful SSA optimization PassNEliminateUnusedVars
Constant (const byte*) doplasma::$8 = doplasma::screen#0
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_1 tails: doplasma::@16_2 blocks: doplasma::@16_2 doplasma::@17_1 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#1 = (byte) doplasma::val#6 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#6 (const byte) doplasma::ii#1
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [41] (byte~) doplasma::$9 ← (const byte) doplasma::ii#1 * (byte) $28
Constant right-side identified [44] (byte) doplasma::ii#7 ← ++ (const byte) doplasma::ii#1
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$9 = doplasma::ii#1*$28
Constant (const byte) doplasma::ii#7 = ++doplasma::ii#1
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [45] if((const byte) doplasma::ii#7<(byte) $19) goto doplasma::@17_2
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [40] (byte*~) doplasma::$10 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$9
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$10 = doplasma::screen#0+doplasma::$9
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_2 tails: doplasma::@16_3 blocks: doplasma::@16_3 doplasma::@17_2 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#7 = (byte) doplasma::val#8 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#8 (const byte) doplasma::ii#7
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [43] (byte~) doplasma::$11 ← (const byte) doplasma::ii#7 * (byte) $28
Constant right-side identified [46] (byte) doplasma::ii#9 ← ++ (const byte) doplasma::ii#7
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$11 = doplasma::ii#7*$28
Constant (const byte) doplasma::ii#9 = ++doplasma::ii#7
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [47] if((const byte) doplasma::ii#9<(byte) $19) goto doplasma::@17_3
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [42] (byte*~) doplasma::$12 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$11
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$12 = doplasma::screen#0+doplasma::$11
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_3 tails: doplasma::@16_4 blocks: doplasma::@16_4 doplasma::@17_3 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#10 = (byte) doplasma::val#9 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#10 (const byte) doplasma::ii#9
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [45] (byte~) doplasma::$13 ← (const byte) doplasma::ii#9 * (byte) $28
Constant right-side identified [48] (byte) doplasma::ii#11 ← ++ (const byte) doplasma::ii#9
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$13 = doplasma::ii#9*$28
Constant (const byte) doplasma::ii#11 = ++doplasma::ii#9
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [49] if((const byte) doplasma::ii#11<(byte) $19) goto doplasma::@17_4
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [44] (byte*~) doplasma::$14 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$13
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$14 = doplasma::screen#0+doplasma::$13
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_4 tails: doplasma::@16_5 blocks: doplasma::@16_5 doplasma::@17_4 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#11 = (byte) doplasma::val#12 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#12 (const byte) doplasma::ii#11
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [47] (byte~) doplasma::$15 ← (const byte) doplasma::ii#11 * (byte) $28
Constant right-side identified [50] (byte) doplasma::ii#13 ← ++ (const byte) doplasma::ii#11
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$15 = doplasma::ii#11*$28
Constant (const byte) doplasma::ii#13 = ++doplasma::ii#11
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [51] if((const byte) doplasma::ii#13<(byte) $19) goto doplasma::@17_5
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [46] (byte*~) doplasma::$16 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$15
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$16 = doplasma::screen#0+doplasma::$15
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_5 tails: doplasma::@16_6 blocks: doplasma::@16_6 doplasma::@17_5 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#13 = (byte) doplasma::val#14 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#14 (const byte) doplasma::ii#13
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [49] (byte~) doplasma::$17 ← (const byte) doplasma::ii#13 * (byte) $28
Constant right-side identified [52] (byte) doplasma::ii#15 ← ++ (const byte) doplasma::ii#13
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$17 = doplasma::ii#13*$28
Constant (const byte) doplasma::ii#15 = ++doplasma::ii#13
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [53] if((const byte) doplasma::ii#15<(byte) $19) goto doplasma::@17_6
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [48] (byte*~) doplasma::$18 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$17
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$18 = doplasma::screen#0+doplasma::$17
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_6 tails: doplasma::@16_7 blocks: doplasma::@16_7 doplasma::@17_6 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#15 = (byte) doplasma::val#16 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#16 (const byte) doplasma::ii#15
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [51] (byte~) doplasma::$19 ← (const byte) doplasma::ii#15 * (byte) $28
Constant right-side identified [54] (byte) doplasma::ii#17 ← ++ (const byte) doplasma::ii#15
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$19 = doplasma::ii#15*$28
Constant (const byte) doplasma::ii#17 = ++doplasma::ii#15
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [55] if((const byte) doplasma::ii#17<(byte) $19) goto doplasma::@17_7
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [50] (byte*~) doplasma::$20 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$19
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$20 = doplasma::screen#0+doplasma::$19
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_7 tails: doplasma::@16_8 blocks: doplasma::@16_8 doplasma::@17_7 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#17 = (byte) doplasma::val#18 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#18 (const byte) doplasma::ii#17
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [53] (byte~) doplasma::$21 ← (const byte) doplasma::ii#17 * (byte) $28
Constant right-side identified [56] (byte) doplasma::ii#19 ← ++ (const byte) doplasma::ii#17
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$21 = doplasma::ii#17*$28
Constant (const byte) doplasma::ii#19 = ++doplasma::ii#17
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [57] if((const byte) doplasma::ii#19<(byte) $19) goto doplasma::@17_8
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [52] (byte*~) doplasma::$22 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$21
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$22 = doplasma::screen#0+doplasma::$21
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_8 tails: doplasma::@16_9 blocks: doplasma::@16_9 doplasma::@17_8 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#19 = (byte) doplasma::val#20 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#20 (const byte) doplasma::ii#19
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [55] (byte~) doplasma::$23 ← (const byte) doplasma::ii#19 * (byte) $28
Constant right-side identified [58] (byte) doplasma::ii#21 ← ++ (const byte) doplasma::ii#19
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$23 = doplasma::ii#19*$28
Constant (const byte) doplasma::ii#21 = ++doplasma::ii#19
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [59] if((const byte) doplasma::ii#21<(byte) $19) goto doplasma::@17_9
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [54] (byte*~) doplasma::$24 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$23
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$24 = doplasma::screen#0+doplasma::$23
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_9 tails: doplasma::@16_10 blocks: doplasma::@16_10 doplasma::@17_9 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#21 = (byte) doplasma::val#22 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#22 (const byte) doplasma::ii#21
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [57] (byte~) doplasma::$25 ← (const byte) doplasma::ii#21 * (byte) $28
Constant right-side identified [60] (byte) doplasma::ii#23 ← ++ (const byte) doplasma::ii#21
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$25 = doplasma::ii#21*$28
Constant (const byte) doplasma::ii#23 = ++doplasma::ii#21
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [61] if((const byte) doplasma::ii#23<(byte) $19) goto doplasma::@17_10
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [56] (byte*~) doplasma::$26 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$25
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$26 = doplasma::screen#0+doplasma::$25
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_10 tails: doplasma::@16_11 blocks: doplasma::@16_11 doplasma::@17_10 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#23 = (byte) doplasma::val#24 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#24 (const byte) doplasma::ii#23
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [59] (byte~) doplasma::$27 ← (const byte) doplasma::ii#23 * (byte) $28
Constant right-side identified [62] (byte) doplasma::ii#25 ← ++ (const byte) doplasma::ii#23
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$27 = doplasma::ii#23*$28
Constant (const byte) doplasma::ii#25 = ++doplasma::ii#23
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [63] if((const byte) doplasma::ii#25<(byte) $19) goto doplasma::@17_11
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [58] (byte*~) doplasma::$28 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$27
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$28 = doplasma::screen#0+doplasma::$27
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_11 tails: doplasma::@16_12 blocks: doplasma::@16_12 doplasma::@17_11 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#25 = (byte) doplasma::val#26 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#26 (const byte) doplasma::ii#25
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [61] (byte~) doplasma::$29 ← (const byte) doplasma::ii#25 * (byte) $28
Constant right-side identified [64] (byte) doplasma::ii#27 ← ++ (const byte) doplasma::ii#25
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$29 = doplasma::ii#25*$28
Constant (const byte) doplasma::ii#27 = ++doplasma::ii#25
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [65] if((const byte) doplasma::ii#27<(byte) $19) goto doplasma::@17_12
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [60] (byte*~) doplasma::$30 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$29
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$30 = doplasma::screen#0+doplasma::$29
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_12 tails: doplasma::@16_13 blocks: doplasma::@16_13 doplasma::@17_12 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#27 = (byte) doplasma::val#28 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#28 (const byte) doplasma::ii#27
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [63] (byte~) doplasma::$31 ← (const byte) doplasma::ii#27 * (byte) $28
Constant right-side identified [66] (byte) doplasma::ii#29 ← ++ (const byte) doplasma::ii#27
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$31 = doplasma::ii#27*$28
Constant (const byte) doplasma::ii#29 = ++doplasma::ii#27
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [67] if((const byte) doplasma::ii#29<(byte) $19) goto doplasma::@17_13
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [62] (byte*~) doplasma::$32 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$31
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$32 = doplasma::screen#0+doplasma::$31
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_13 tails: doplasma::@16_14 blocks: doplasma::@16_14 doplasma::@17_13 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#29 = (byte) doplasma::val#30 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#30 (const byte) doplasma::ii#29
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [65] (byte~) doplasma::$33 ← (const byte) doplasma::ii#29 * (byte) $28
Constant right-side identified [68] (byte) doplasma::ii#31 ← ++ (const byte) doplasma::ii#29
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$33 = doplasma::ii#29*$28
Constant (const byte) doplasma::ii#31 = ++doplasma::ii#29
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [69] if((const byte) doplasma::ii#31<(byte) $19) goto doplasma::@17_14
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [64] (byte*~) doplasma::$34 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$33
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$34 = doplasma::screen#0+doplasma::$33
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_14 tails: doplasma::@16_15 blocks: doplasma::@16_15 doplasma::@17_14 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#31 = (byte) doplasma::val#32 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#32 (const byte) doplasma::ii#31
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [67] (byte~) doplasma::$35 ← (const byte) doplasma::ii#31 * (byte) $28
Constant right-side identified [70] (byte) doplasma::ii#33 ← ++ (const byte) doplasma::ii#31
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$35 = doplasma::ii#31*$28
Constant (const byte) doplasma::ii#33 = ++doplasma::ii#31
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [71] if((const byte) doplasma::ii#33<(byte) $19) goto doplasma::@17_15
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [66] (byte*~) doplasma::$36 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$35
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$36 = doplasma::screen#0+doplasma::$35
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_15 tails: doplasma::@16_16 blocks: doplasma::@16_16 doplasma::@17_15 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#33 = (byte) doplasma::val#34 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#34 (const byte) doplasma::ii#33
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [69] (byte~) doplasma::$37 ← (const byte) doplasma::ii#33 * (byte) $28
Constant right-side identified [72] (byte) doplasma::ii#35 ← ++ (const byte) doplasma::ii#33
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$37 = doplasma::ii#33*$28
Constant (const byte) doplasma::ii#35 = ++doplasma::ii#33
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [73] if((const byte) doplasma::ii#35<(byte) $19) goto doplasma::@17_16
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [68] (byte*~) doplasma::$38 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$37
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$38 = doplasma::screen#0+doplasma::$37
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_16 tails: doplasma::@16_17 blocks: doplasma::@16_17 doplasma::@17_16 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#35 = (byte) doplasma::val#36 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#36 (const byte) doplasma::ii#35
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [71] (byte~) doplasma::$39 ← (const byte) doplasma::ii#35 * (byte) $28
Constant right-side identified [74] (byte) doplasma::ii#37 ← ++ (const byte) doplasma::ii#35
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$39 = doplasma::ii#35*$28
Constant (const byte) doplasma::ii#37 = ++doplasma::ii#35
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [75] if((const byte) doplasma::ii#37<(byte) $19) goto doplasma::@17_17
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [70] (byte*~) doplasma::$40 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$39
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$40 = doplasma::screen#0+doplasma::$39
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_17 tails: doplasma::@16_18 blocks: doplasma::@16_18 doplasma::@17_17 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#37 = (byte) doplasma::val#38 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#38 (const byte) doplasma::ii#37
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [73] (byte~) doplasma::$41 ← (const byte) doplasma::ii#37 * (byte) $28
Constant right-side identified [76] (byte) doplasma::ii#39 ← ++ (const byte) doplasma::ii#37
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$41 = doplasma::ii#37*$28
Constant (const byte) doplasma::ii#39 = ++doplasma::ii#37
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [77] if((const byte) doplasma::ii#39<(byte) $19) goto doplasma::@17_18
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [72] (byte*~) doplasma::$42 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$41
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$42 = doplasma::screen#0+doplasma::$41
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_18 tails: doplasma::@16_19 blocks: doplasma::@16_19 doplasma::@17_18 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#39 = (byte) doplasma::val#40 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#40 (const byte) doplasma::ii#39
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [75] (byte~) doplasma::$43 ← (const byte) doplasma::ii#39 * (byte) $28
Constant right-side identified [78] (byte) doplasma::ii#41 ← ++ (const byte) doplasma::ii#39
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$43 = doplasma::ii#39*$28
Constant (const byte) doplasma::ii#41 = ++doplasma::ii#39
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [79] if((const byte) doplasma::ii#41<(byte) $19) goto doplasma::@17_19
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [74] (byte*~) doplasma::$44 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$43
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$44 = doplasma::screen#0+doplasma::$43
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_19 tails: doplasma::@16_20 blocks: doplasma::@16_20 doplasma::@17_19 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#41 = (byte) doplasma::val#42 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#42 (const byte) doplasma::ii#41
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [77] (byte~) doplasma::$45 ← (const byte) doplasma::ii#41 * (byte) $28
Constant right-side identified [80] (byte) doplasma::ii#43 ← ++ (const byte) doplasma::ii#41
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$45 = doplasma::ii#41*$28
Constant (const byte) doplasma::ii#43 = ++doplasma::ii#41
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [81] if((const byte) doplasma::ii#43<(byte) $19) goto doplasma::@17_20
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [76] (byte*~) doplasma::$46 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$45
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$46 = doplasma::screen#0+doplasma::$45
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_20 tails: doplasma::@16_21 blocks: doplasma::@16_21 doplasma::@17_20 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#43 = (byte) doplasma::val#44 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#44 (const byte) doplasma::ii#43
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [79] (byte~) doplasma::$47 ← (const byte) doplasma::ii#43 * (byte) $28
Constant right-side identified [82] (byte) doplasma::ii#45 ← ++ (const byte) doplasma::ii#43
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$47 = doplasma::ii#43*$28
Constant (const byte) doplasma::ii#45 = ++doplasma::ii#43
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [83] if((const byte) doplasma::ii#45<(byte) $19) goto doplasma::@17_21
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [78] (byte*~) doplasma::$48 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$47
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$48 = doplasma::screen#0+doplasma::$47
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_21 tails: doplasma::@16_22 blocks: doplasma::@16_22 doplasma::@17_21 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#45 = (byte) doplasma::val#46 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#46 (const byte) doplasma::ii#45
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [81] (byte~) doplasma::$49 ← (const byte) doplasma::ii#45 * (byte) $28
Constant right-side identified [84] (byte) doplasma::ii#47 ← ++ (const byte) doplasma::ii#45
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$49 = doplasma::ii#45*$28
Constant (const byte) doplasma::ii#47 = ++doplasma::ii#45
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [85] if((const byte) doplasma::ii#47<(byte) $19) goto doplasma::@17_22
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [80] (byte*~) doplasma::$50 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$49
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$50 = doplasma::screen#0+doplasma::$49
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_22 tails: doplasma::@16_23 blocks: doplasma::@16_23 doplasma::@17_22 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#47 = (byte) doplasma::val#48 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#48 (const byte) doplasma::ii#47
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [83] (byte~) doplasma::$51 ← (const byte) doplasma::ii#47 * (byte) $28
Constant right-side identified [86] (byte) doplasma::ii#49 ← ++ (const byte) doplasma::ii#47
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$51 = doplasma::ii#47*$28
Constant (const byte) doplasma::ii#49 = ++doplasma::ii#47
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [87] if((const byte) doplasma::ii#49<(byte) $19) goto doplasma::@17_23
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [82] (byte*~) doplasma::$52 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$51
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$52 = doplasma::screen#0+doplasma::$51
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_23 tails: doplasma::@16_24 blocks: doplasma::@16_24 doplasma::@17_23 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#49 = (byte) doplasma::val#50 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#50 (const byte) doplasma::ii#49
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [85] (byte~) doplasma::$53 ← (const byte) doplasma::ii#49 * (byte) $28
Constant right-side identified [88] (byte) doplasma::ii#51 ← ++ (const byte) doplasma::ii#49
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$53 = doplasma::ii#49*$28
Constant (const byte) doplasma::ii#51 = ++doplasma::ii#49
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [89] if((const byte) doplasma::ii#51<(byte) $19) goto doplasma::@17_24
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [84] (byte*~) doplasma::$54 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$53
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$54 = doplasma::screen#0+doplasma::$53
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: doplasma::@17_24 tails: doplasma::@16_25 blocks: doplasma::@16_25 doplasma::@17_24 
Successful SSA optimization Pass2LoopUnroll
Alias (byte) doplasma::val#51 = (byte) doplasma::val#52 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) doplasma::ii#52 (const byte) doplasma::ii#51
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [87] (byte~) doplasma::$55 ← (const byte) doplasma::ii#51 * (byte) $28
Constant right-side identified [90] (byte) doplasma::ii#53 ← ++ (const byte) doplasma::ii#51
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) doplasma::$55 = doplasma::ii#51*$28
Constant (const byte) doplasma::ii#53 = ++doplasma::ii#51
Successful SSA optimization Pass2ConstantIdentification
Removing PHI-reference to removed block (doplasma::@16_25) in block doplasma::@17_25
Removing PHI-reference to removed block (doplasma::@16_25) in block doplasma::@17_25
if() condition always false - eliminating [91] if((const byte) doplasma::ii#53<(byte) $19) goto doplasma::@17_25
Successful SSA optimization Pass2ConstantIfs
Eliminating unused constant (const byte) doplasma::ii#53
Successful SSA optimization PassNEliminateUnusedVars
Eliminating variable (byte) doplasma::ii#54 from unused block doplasma::@17_25
Eliminating variable (byte) doplasma::val#54 from unused block doplasma::@17_25
Eliminating variable (byte) doplasma::val#55 from unused block doplasma::@17_25
Eliminating variable (byte~) doplasma::$57 from unused block doplasma::@17_25
Eliminating variable (byte*~) doplasma::$58 from unused block doplasma::@17_25
Eliminating variable (byte) doplasma::ii#55 from unused block doplasma::@17_25
Removing unused block doplasma::@17_25
Removing unused block doplasma::@16_26
Successful SSA optimization Pass2EliminateUnusedBlocks
Constant right-side identified [86] (byte*~) doplasma::$56 ← (const byte*) doplasma::screen#0 + (const byte) doplasma::$55
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) doplasma::$56 = doplasma::screen#0+doplasma::$55
Successful SSA optimization Pass2ConstantIdentification
Rewriting multiplication to use shift [106] (word~) makecharset::$10 ← (word) makecharset::c#16 * (byte) 8
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const byte*) memset::dst#0
Inlining constant with var siblings (const byte*) main::col#0
Inlining constant with var siblings (const byte) doplasma::yprev#0
Inlining constant with var siblings (const byte) doplasma::i#0
Inlining constant with var siblings (const byte) doplasma::i1#0
Inlining constant with var siblings (const byte) doplasma::i2#0
Inlining constant with different constant siblings (const byte) doplasma::ii#0
Inlining constant with different constant siblings (const byte) doplasma::ii#1
Inlining constant with different constant siblings (const byte) doplasma::ii#7
Inlining constant with different constant siblings (const byte) doplasma::ii#9
Inlining constant with different constant siblings (const byte) doplasma::ii#11
Inlining constant with different constant siblings (const byte) doplasma::ii#13
Inlining constant with different constant siblings (const byte) doplasma::ii#15
Inlining constant with different constant siblings (const byte) doplasma::ii#17
Inlining constant with different constant siblings (const byte) doplasma::ii#19
Inlining constant with different constant siblings (const byte) doplasma::ii#21
Inlining constant with different constant siblings (const byte) doplasma::ii#23
Inlining constant with different constant siblings (const byte) doplasma::ii#25
Inlining constant with different constant siblings (const byte) doplasma::ii#27
Inlining constant with different constant siblings (const byte) doplasma::ii#29
Inlining constant with different constant siblings (const byte) doplasma::ii#31
Inlining constant with different constant siblings (const byte) doplasma::ii#33
Inlining constant with different constant siblings (const byte) doplasma::ii#35
Inlining constant with different constant siblings (const byte) doplasma::ii#37
Inlining constant with different constant siblings (const byte) doplasma::ii#39
Inlining constant with different constant siblings (const byte) doplasma::ii#41
Inlining constant with different constant siblings (const byte) doplasma::ii#43
Inlining constant with different constant siblings (const byte) doplasma::ii#45
Inlining constant with different constant siblings (const byte) doplasma::ii#47
Inlining constant with different constant siblings (const byte) doplasma::ii#49
Inlining constant with different constant siblings (const byte) doplasma::ii#51
Inlining constant with var siblings (const word) makecharset::c#0
Inlining constant with var siblings (const byte) makecharset::i#0
Inlining constant with var siblings (const byte) makecharset::b#0
Inlining constant with var siblings (const byte) makecharset::ii#0
Inlining constant with var siblings (const byte) c1A#16
Inlining constant with var siblings (const byte) c1B#16
Inlining constant with var siblings (const byte) c2A#17
Inlining constant with var siblings (const byte) c2B#17
Constant inlined doplasma::ii#47 = ++++++++++++++++++++++++++++++++++++++++++++(byte) 0
Constant inlined doplasma::ii#49 = ++++++++++++++++++++++++++++++++++++++++++++++(byte) 0
Constant inlined main::col#0 = (const byte*) COLS#0
Constant inlined doplasma::ii#41 = ++++++++++++++++++++++++++++++++++++++(byte) 0
Constant inlined doplasma::ii#43 = ++++++++++++++++++++++++++++++++++++++++(byte) 0
Constant inlined doplasma::ii#45 = ++++++++++++++++++++++++++++++++++++++++++(byte) 0
Constant inlined doplasma::ii#7 = ++++(byte) 0
Constant inlined doplasma::ii#9 = ++++++(byte) 0
Constant inlined c1A#16 = (byte) 0
Constant inlined doplasma::ii#0 = (byte) 0
Constant inlined doplasma::ii#1 = ++(byte) 0
Constant inlined doplasma::ii#51 = ++++++++++++++++++++++++++++++++++++++++++++++++(byte) 0
Constant inlined main::toD0181_$7#0 = >(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f
Constant inlined main::toD0181_$3#0 = >(word)(const byte*) SCREEN1#0&(word) $3fff*(byte) 4
Constant inlined doplasma::$56 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$53 = ++++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$52 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$55 = ++++++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined makecharset::c#0 = (byte) 0
Constant inlined doplasma::$54 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$51 = ++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$50 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::ii#25 = ++++++++++++++++++++++(byte) 0
Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN1#0
Constant inlined doplasma::ii#27 = ++++++++++++++++++++++++(byte) 0
Constant inlined doplasma::ii#29 = ++++++++++++++++++++++++++(byte) 0
Constant inlined doplasma::ii#21 = ++++++++++++++++++(byte) 0
Constant inlined doplasma::ii#23 = ++++++++++++++++++++(byte) 0
Constant inlined doplasma::$9 = ++(byte) 0*(byte) $28
Constant inlined doplasma::$8 = (const byte*) SCREEN1#0
Constant inlined doplasma::ii#35 = ++++++++++++++++++++++++++++++++(byte) 0
Constant inlined doplasma::ii#37 = ++++++++++++++++++++++++++++++++++(byte) 0
Constant inlined doplasma::ii#39 = ++++++++++++++++++++++++++++++++++++(byte) 0
Constant inlined main::toD0181_$0#0 = (word)(const byte*) SCREEN1#0
Constant inlined doplasma::ii#31 = ++++++++++++++++++++++++++++(byte) 0
Constant inlined doplasma::ii#33 = ++++++++++++++++++++++++++++++(byte) 0
Constant inlined main::$2 = (const byte*) COLS#0+(word) $3e8
Constant inlined main::toD0181_$4#0 = (word)(const byte*) CHARSET#0
Constant inlined c2B#17 = (byte) 0
Constant inlined doplasma::i2#0 = (byte) 0
Constant inlined doplasma::$28 = (const byte*) SCREEN1#0+++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$27 = ++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$29 = ++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$24 = (const byte*) SCREEN1#0+++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$23 = ++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$26 = (const byte*) SCREEN1#0+++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$25 = ++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$20 = (const byte*) SCREEN1#0+++++++++++++(byte) 0*(byte) $28
Constant inlined c2A#17 = (byte) 0
Constant inlined doplasma::$22 = (const byte*) SCREEN1#0+++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$21 = ++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::ii#13 = ++++++++++(byte) 0
Constant inlined doplasma::ii#15 = ++++++++++++(byte) 0
Constant inlined doplasma::ii#17 = ++++++++++++++(byte) 0
Constant inlined doplasma::ii#19 = ++++++++++++++++(byte) 0
Constant inlined main::toD0181_$1#0 = (word)(const byte*) SCREEN1#0&(word) $3fff
Constant inlined doplasma::ii#11 = ++++++++(byte) 0
Constant inlined makecharset::ii#0 = (byte) 0
Constant inlined doplasma::$17 = ++++++++++(byte) 0*(byte) $28
Constant inlined makecharset::i#0 = (byte) 0
Constant inlined makecharset::charset#0 = (const byte*) CHARSET#0
Constant inlined doplasma::$16 = (const byte*) SCREEN1#0+++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$19 = ++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$18 = (const byte*) SCREEN1#0+++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::screen#0 = (const byte*) SCREEN1#0
Constant inlined doplasma::$13 = ++++++(byte) 0*(byte) $28
Constant inlined doplasma::$12 = (const byte*) SCREEN1#0+++++(byte) 0*(byte) $28
Constant inlined doplasma::$15 = ++++++++(byte) 0*(byte) $28
Constant inlined main::toD0181_$5#0 = >(word)(const byte*) CHARSET#0
Constant inlined doplasma::$14 = (const byte*) SCREEN1#0+++++++(byte) 0*(byte) $28
Constant inlined doplasma::$11 = ++++(byte) 0*(byte) $28
Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0
Constant inlined doplasma::$10 = (const byte*) SCREEN1#0+++(byte) 0*(byte) $28
Constant inlined main::toD0181_gfx#0 = (const byte*) CHARSET#0
Constant inlined doplasma::i#0 = (byte) 0
Constant inlined doplasma::i1#0 = (byte) 0
Constant inlined doplasma::yprev#0 = (byte) 0
Constant inlined doplasma::$49 = ++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined memset::$2 = (byte*)(const void*) memset::str#0
Constant inlined doplasma::$46 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$45 = ++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$48 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$47 = ++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$42 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$41 = ++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$44 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$43 = ++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$40 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined main::toD0181_$6#0 = >(word)(const byte*) CHARSET#0/(byte) 4
Constant inlined doplasma::$39 = ++++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$38 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined main::toD0181_$2#0 = (word)(const byte*) SCREEN1#0&(word) $3fff*(byte) 4
Constant inlined doplasma::$35 = ++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined c1B#16 = (byte) 0
Constant inlined doplasma::$34 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$37 = ++++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$36 = (const byte*) SCREEN1#0+++++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$31 = ++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$30 = (const byte*) SCREEN1#0+++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined makecharset::b#0 = (byte) 0
Constant inlined doplasma::$33 = ++++++++++++++++++++++++++(byte) 0*(byte) $28
Constant inlined doplasma::$32 = (const byte*) SCREEN1#0+++++++++++++++++++++++++(byte) 0*(byte) $28
Successful SSA optimization Pass2ConstantInlining
Consolidated array index constant in *(doplasma::ybuf#0+++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++++++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++++++++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++++++++++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++++++++++++++++++++++++++++0)
Consolidated array index constant in *(doplasma::ybuf#0+++++++++++++++++++++++++++++++++++++++++++++++++0)
Successful SSA optimization Pass2ConstantAdditionElimination
Simplifying constant integer increment ++0
Simplifying constant integer increment ++0
Simplifying constant integer increment ++0
Simplifying constant integer increment ++1
Simplifying constant integer increment ++1
Simplifying constant integer increment ++2
Simplifying constant integer increment ++2
Simplifying constant integer increment ++3
Simplifying constant integer increment ++3
Simplifying constant integer increment ++4
Simplifying constant integer increment ++4
Simplifying constant integer increment ++5
Simplifying constant integer increment ++5
Simplifying constant integer increment ++6
Simplifying constant integer increment ++6
Simplifying constant integer increment ++7
Simplifying constant integer increment ++7
Simplifying constant integer increment ++8
Simplifying constant integer increment ++8
Simplifying constant integer increment ++9
Simplifying constant integer increment ++9
Simplifying constant integer increment ++$a
Simplifying constant integer increment ++$a
Simplifying constant integer increment ++$b
Simplifying constant integer increment ++$b
Simplifying constant integer increment ++$c
Simplifying constant integer increment ++$c
Simplifying constant integer increment ++$d
Simplifying constant integer increment ++$d
Simplifying constant integer increment ++$e
Simplifying constant integer increment ++$e
Simplifying constant integer increment ++$f
Simplifying constant integer increment ++$f
Simplifying constant integer increment ++$10
Simplifying constant integer increment ++$10
Simplifying constant integer increment ++$11
Simplifying constant integer increment ++$11
Simplifying constant integer increment ++$12
Simplifying constant integer increment ++$12
Simplifying constant integer increment ++$13
Simplifying constant integer increment ++$13
Simplifying constant integer increment ++$14
Simplifying constant integer increment ++$14
Simplifying constant integer increment ++$15
Simplifying constant integer increment ++$15
Simplifying constant integer increment ++$16
Simplifying constant integer increment ++$16
Simplifying constant integer increment ++$17
Successful SSA optimization Pass2ConstantSimplification
Simplifying constant integer increment ++1
Simplifying constant integer increment ++2
Simplifying constant integer increment ++3
Simplifying constant integer increment ++4
Simplifying constant integer increment ++5
Simplifying constant integer increment ++6
Simplifying constant integer increment ++7
Simplifying constant integer increment ++8
Simplifying constant integer increment ++9
Simplifying constant integer increment ++$a
Simplifying constant integer increment ++$b
Simplifying constant integer increment ++$c
Simplifying constant integer increment ++$d
Simplifying constant integer increment ++$e
Simplifying constant integer increment ++$f
Simplifying constant integer increment ++$10
Simplifying constant integer increment ++$11
Simplifying constant integer increment ++$12
Simplifying constant integer increment ++$13
Simplifying constant integer increment ++$14
Simplifying constant integer increment ++$15
Simplifying constant integer increment ++$16
Simplifying constant integer increment ++$17
Successful SSA optimization Pass2ConstantSimplification
Added new block during phi lifting main::@12(between main::@1 and main::@1)
Added new block during phi lifting doplasma::@25(between doplasma::@1 and doplasma::@2)
Added new block during phi lifting doplasma::@26(between doplasma::@7 and doplasma::@8)
Added new block during phi lifting doplasma::@27(between doplasma::@13 and doplasma::@14)
Added new block during phi lifting makecharset::@27(between makecharset::@1 and makecharset::@2)
Added new block during phi lifting makecharset::@28(between makecharset::@4 and makecharset::@5)
Added new block during phi lifting makecharset::@29(between makecharset::@7 and makecharset::@8)
Added new block during phi lifting makecharset::@30(between makecharset::@25 and makecharset::@10)
Added new block during phi lifting makecharset::@31(between makecharset::@6 and makecharset::@19)
Added new block during phi lifting memset::@10(between memset::@4 and memset::@5)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @16
Adding NOP phi() at start of @40
Adding NOP phi() at start of @42
Adding NOP phi() at start of @43
Adding NOP phi() at start of @45
Adding NOP phi() at start of @46
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::@10
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::toD0181_@return
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of doplasma::@13_1
Adding NOP phi() at start of doplasma::@16_1
Adding NOP phi() at start of doplasma::@16
Adding NOP phi() at start of doplasma::@16_2
Adding NOP phi() at start of doplasma::@16_3
Adding NOP phi() at start of doplasma::@16_4
Adding NOP phi() at start of doplasma::@16_5
Adding NOP phi() at start of doplasma::@16_6
Adding NOP phi() at start of doplasma::@16_7
Adding NOP phi() at start of doplasma::@16_8
Adding NOP phi() at start of doplasma::@16_9
Adding NOP phi() at start of doplasma::@16_10
Adding NOP phi() at start of doplasma::@16_11
Adding NOP phi() at start of doplasma::@16_12
Adding NOP phi() at start of doplasma::@16_13
Adding NOP phi() at start of doplasma::@16_14
Adding NOP phi() at start of doplasma::@16_15
Adding NOP phi() at start of doplasma::@16_16
Adding NOP phi() at start of doplasma::@16_17
Adding NOP phi() at start of doplasma::@16_18
Adding NOP phi() at start of doplasma::@16_19
Adding NOP phi() at start of doplasma::@16_20
Adding NOP phi() at start of doplasma::@16_21
Adding NOP phi() at start of doplasma::@16_22
Adding NOP phi() at start of doplasma::@16_23
Adding NOP phi() at start of doplasma::@16_24
Adding NOP phi() at start of doplasma::@16_25
Adding NOP phi() at start of makecharset
Adding NOP phi() at start of makecharset::@23
Adding NOP phi() at start of makecharset::@24
Adding NOP phi() at start of makecharset::@1_1
Adding NOP phi() at start of makecharset::@4_1
Adding NOP phi() at start of makecharset::@7_1
Adding NOP phi() at start of makecharset::@18
Adding NOP phi() at start of print_cls
Adding NOP phi() at start of print_cls::@1
Adding NOP phi() at start of memset
Adding NOP phi() at start of memset::@2
Adding NOP phi() at start of memset::@4_1
Adding NOP phi() at start of memset::@1
CALL GRAPH
Calls in [] to main:6 
Calls in [main] to makecharset:17 doplasma:24 
Calls in [makecharset] to sid_rnd_init:148 print_cls:150 sid_rnd:160 print_char:179 
Calls in [print_cls] to memset:198 

Created 21 initial phi equivalence classes
Coalesced [25] c1A#32 ← c1A#3
Coalesced [26] c1B#32 ← c1B#3
Coalesced [27] c2A#32 ← c2A#3
Coalesced [28] c2B#32 ← c2B#3
Coalesced [29] main::col#3 ← main::col#1
Coalesced [32] doplasma::c1a#7 ← doplasma::c1a#0
Coalesced [33] doplasma::c1b#7 ← doplasma::c1b#0
Coalesced [46] doplasma::c2a#7 ← doplasma::c2a#0
Coalesced [47] doplasma::c2b#7 ← doplasma::c2b#0
Coalesced [139] doplasma::i2#13 ← doplasma::i2#1
Coalesced [140] doplasma::i1#6 ← doplasma::i1#1
Coalesced [141] doplasma::c2a#6 ← doplasma::c2a#1
Coalesced [142] doplasma::c2b#6 ← doplasma::c2b#1
Coalesced [143] doplasma::i#6 ← doplasma::i#1
Coalesced [144] doplasma::c1a#6 ← doplasma::c1a#1
Coalesced [145] doplasma::c1b#6 ← doplasma::c1b#1
Not coalescing [146] doplasma::yprev#6 ← doplasma::yprev#2
Coalesced [166] makecharset::b#14 ← makecharset::b#1
Coalesced [180] print_char_cursor#64 ← print_char_cursor#1
Coalesced [185] makecharset::c#32 ← makecharset::c#1
Coalesced [186] print_char_cursor#63 ← print_char_cursor#18
Coalesced (already) [187] print_char_cursor#65 ← print_char_cursor#52
Coalesced [188] makecharset::i#19 ← makecharset::i#1
Coalesced [189] makecharset::ii#12 ← makecharset::ii#1
Coalesced [190] makecharset::b#13 ← makecharset::b#2
Coalesced (already) [191] makecharset::b#15 ← makecharset::b#10
Coalesced [210] memset::dst#6 ← memset::dst#1
Coalesced down to 20 phi equivalence classes
Culled Empty Block (label) @16
Culled Empty Block (label) @40
Culled Empty Block (label) @42
Culled Empty Block (label) @43
Culled Empty Block (label) @46
Culled Empty Block (label) main::@10
Culled Empty Block (label) main::toD0181_@return
Culled Empty Block (label) main::@11
Culled Empty Block (label) main::@12
Culled Empty Block (label) doplasma::@1_1
Culled Empty Block (label) doplasma::@7_1
Culled Empty Block (label) doplasma::@13_1
Culled Empty Block (label) doplasma::@16_1
Culled Empty Block (label) doplasma::@16
Culled Empty Block (label) doplasma::@16_2
Culled Empty Block (label) doplasma::@16_3
Culled Empty Block (label) doplasma::@16_4
Culled Empty Block (label) doplasma::@16_5
Culled Empty Block (label) doplasma::@16_6
Culled Empty Block (label) doplasma::@16_7
Culled Empty Block (label) doplasma::@16_8
Culled Empty Block (label) doplasma::@16_9
Culled Empty Block (label) doplasma::@16_10
Culled Empty Block (label) doplasma::@16_11
Culled Empty Block (label) doplasma::@16_12
Culled Empty Block (label) doplasma::@16_13
Culled Empty Block (label) doplasma::@16_14
Culled Empty Block (label) doplasma::@16_15
Culled Empty Block (label) doplasma::@16_16
Culled Empty Block (label) doplasma::@16_17
Culled Empty Block (label) doplasma::@16_18
Culled Empty Block (label) doplasma::@16_19
Culled Empty Block (label) doplasma::@16_20
Culled Empty Block (label) doplasma::@16_21
Culled Empty Block (label) doplasma::@16_22
Culled Empty Block (label) doplasma::@16_23
Culled Empty Block (label) doplasma::@16_24
Culled Empty Block (label) doplasma::@16_25
Culled Empty Block (label) doplasma::@27
Culled Empty Block (label) doplasma::@26
Culled Empty Block (label) makecharset::@24
Culled Empty Block (label) makecharset::@1_1
Culled Empty Block (label) makecharset::@4_1
Culled Empty Block (label) makecharset::@7_1
Culled Empty Block (label) makecharset::@26
Culled Empty Block (label) makecharset::@27
Culled Empty Block (label) makecharset::@31
Culled Empty Block (label) makecharset::@28
Culled Empty Block (label) makecharset::@29
Culled Empty Block (label) makecharset::@30
Culled Empty Block (label) print_cls::@1
Culled Empty Block (label) memset::@2
Culled Empty Block (label) memset::@4_1
Culled Empty Block (label) memset::@1
Culled Empty Block (label) memset::@10
Renumbering block @45 to @1
Renumbering block memset::@4 to memset::@1
Renumbering block memset::@5 to memset::@2
Renumbering block main::@9 to main::@5
Renumbering block doplasma::@7 to doplasma::@4
Renumbering block doplasma::@8 to doplasma::@5
Renumbering block doplasma::@9 to doplasma::@6
Renumbering block doplasma::@13 to doplasma::@7
Renumbering block doplasma::@14 to doplasma::@8
Renumbering block doplasma::@17 to doplasma::@9
Renumbering block doplasma::@18 to doplasma::@10
Renumbering block doplasma::@25 to doplasma::@11
Renumbering block makecharset::@4 to makecharset::@3
Renumbering block makecharset::@5 to makecharset::@4
Renumbering block makecharset::@6 to makecharset::@5
Renumbering block makecharset::@7 to makecharset::@6
Renumbering block makecharset::@8 to makecharset::@7
Renumbering block makecharset::@9 to makecharset::@8
Renumbering block makecharset::@10 to makecharset::@9
Renumbering block makecharset::@13 to makecharset::@10
Renumbering block makecharset::@18 to makecharset::@11
Renumbering block makecharset::@19 to makecharset::@12
Renumbering block makecharset::@23 to makecharset::@13
Renumbering block makecharset::@25 to makecharset::@14
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of makecharset
Adding NOP phi() at start of makecharset::@13
Adding NOP phi() at start of makecharset::@11
Adding NOP phi() at start of print_cls
Adding NOP phi() at start of memset

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @1
  [3] phi()
main: scope:[main]  from @1
  asm { sei  }
  [5] *((const byte*) BORDERCOL#0) ← (const byte) BLUE#0
  [6] *((const byte*) BGCOL#0) ← (const byte) BLUE#0
  to:main::@1
main::@1: scope:[main]  from main main::@1
  [7] (byte*) main::col#2 ← phi( main/(const byte*) COLS#0 main::@1/(byte*) main::col#1 )
  [8] *((byte*) main::col#2) ← (const byte) BLACK#0
  [9] (byte*) main::col#1 ← ++ (byte*) main::col#2
  [10] if((byte*) main::col#1!=(const byte*) COLS#0+(word) $3e8+(byte) 1) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@1
  [11] phi()
  [12] call makecharset 
  to:main::toD0181
main::toD0181: scope:[main]  from main::@2
  [13] phi()
  to:main::@5
main::@5: scope:[main]  from main::toD0181
  [14] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
  to:main::@3
main::@3: scope:[main]  from main::@4 main::@5
  [15] (byte) c2B#1 ← phi( main::@4/(byte) c2B#3 main::@5/(byte) 0 )
  [15] (byte) c2A#1 ← phi( main::@4/(byte) c2A#3 main::@5/(byte) 0 )
  [15] (byte) c1B#1 ← phi( main::@4/(byte) c1B#3 main::@5/(byte) 0 )
  [15] (byte) c1A#1 ← phi( main::@4/(byte) c1A#3 main::@5/(byte) 0 )
  to:main::@4
main::@4: scope:[main]  from main::@3
  [16] phi()
  [17] call doplasma 
  to:main::@3
doplasma: scope:[doplasma]  from main::@4
  [18] (byte) doplasma::c1a#0 ← (byte) c1A#1
  [19] (byte) doplasma::c1b#0 ← (byte) c1B#1
  to:doplasma::@2
doplasma::@2: scope:[doplasma]  from doplasma doplasma::@11
  [20] (byte) doplasma::yprev#4 ← phi( doplasma::@11/(byte~) doplasma::yprev#6 doplasma/(byte) 0 )
  [20] (byte) doplasma::c1b#4 ← phi( doplasma::@11/(byte) doplasma::c1b#1 doplasma/(byte) doplasma::c1b#0 )
  [20] (byte) doplasma::c1a#4 ← phi( doplasma::@11/(byte) doplasma::c1a#1 doplasma/(byte) doplasma::c1a#0 )
  [20] (byte) doplasma::i#4 ← phi( doplasma::@11/(byte) doplasma::i#1 doplasma/(byte) 0 )
  [21] (byte) doplasma::yprev#2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4)
  [22] (byte~) doplasma::$2 ← (byte) doplasma::yprev#2 - (byte) doplasma::yprev#4
  [23] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#4) ← (byte~) doplasma::$2
  [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4
  [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9
  [26] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#4
  to:doplasma::@1
doplasma::@1: scope:[doplasma]  from doplasma::@2
  [27] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@11
  to:doplasma::@3
doplasma::@3: scope:[doplasma]  from doplasma::@1
  [28] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3
  [29] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5
  [30] (byte) doplasma::c2a#0 ← (byte) c2A#1
  [31] (byte) doplasma::c2b#0 ← (byte) c2B#1
  to:doplasma::@5
doplasma::@5: scope:[doplasma]  from doplasma::@3 doplasma::@4
  [32] (byte) doplasma::c2b#4 ← phi( doplasma::@4/(byte) doplasma::c2b#1 doplasma::@3/(byte) doplasma::c2b#0 )
  [32] (byte) doplasma::c2a#4 ← phi( doplasma::@4/(byte) doplasma::c2a#1 doplasma::@3/(byte) doplasma::c2a#0 )
  [32] (byte) doplasma::i1#4 ← phi( doplasma::@4/(byte) doplasma::i1#1 doplasma::@3/(byte) 0 )
  [33] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4)
  [34] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#4) ← (byte~) doplasma::$4
  [35] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3
  [36] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7
  [37] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#4
  to:doplasma::@4
doplasma::@4: scope:[doplasma]  from doplasma::@5
  [38] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@5
  to:doplasma::@6
doplasma::@6: scope:[doplasma]  from doplasma::@4
  [39] (byte) c2A#3 ← (byte) c2A#1 + (byte) 2
  [40] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3
  to:doplasma::@8
doplasma::@8: scope:[doplasma]  from doplasma::@6 doplasma::@7
  [41] (byte) doplasma::i2#11 ← phi( doplasma::@7/(byte) doplasma::i2#1 doplasma::@6/(byte) 0 )
  [42] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#11)
  to:doplasma::@9
doplasma::@9: scope:[doplasma]  from doplasma::@8
  [43] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0)
  [44] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#11) ← (byte) doplasma::val#1
  to:doplasma::@17_1
doplasma::@17_1: scope:[doplasma]  from doplasma::@9
  [45] (byte) doplasma::val#7 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1)
  [46] *((const byte*) SCREEN1#0+(byte) 1*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#7
  to:doplasma::@17_2
doplasma::@17_2: scope:[doplasma]  from doplasma::@17_1
  [47] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2)
  [48] *((const byte*) SCREEN1#0+(byte) 2*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#10
  to:doplasma::@17_3
doplasma::@17_3: scope:[doplasma]  from doplasma::@17_2
  [49] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3)
  [50] *((const byte*) SCREEN1#0+(byte) 3*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#11
  to:doplasma::@17_4
doplasma::@17_4: scope:[doplasma]  from doplasma::@17_3
  [51] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4)
  [52] *((const byte*) SCREEN1#0+(byte) 4*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#13
  to:doplasma::@17_5
doplasma::@17_5: scope:[doplasma]  from doplasma::@17_4
  [53] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5)
  [54] *((const byte*) SCREEN1#0+(byte) 5*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#15
  to:doplasma::@17_6
doplasma::@17_6: scope:[doplasma]  from doplasma::@17_5
  [55] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6)
  [56] *((const byte*) SCREEN1#0+(byte) 6*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#17
  to:doplasma::@17_7
doplasma::@17_7: scope:[doplasma]  from doplasma::@17_6
  [57] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7)
  [58] *((const byte*) SCREEN1#0+(byte) 7*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#19
  to:doplasma::@17_8
doplasma::@17_8: scope:[doplasma]  from doplasma::@17_7
  [59] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8)
  [60] *((const byte*) SCREEN1#0+(byte) 8*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#21
  to:doplasma::@17_9
doplasma::@17_9: scope:[doplasma]  from doplasma::@17_8
  [61] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9)
  [62] *((const byte*) SCREEN1#0+(byte) 9*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#23
  to:doplasma::@17_10
doplasma::@17_10: scope:[doplasma]  from doplasma::@17_9
  [63] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a)
  [64] *((const byte*) SCREEN1#0+(byte) $a*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#25
  to:doplasma::@17_11
doplasma::@17_11: scope:[doplasma]  from doplasma::@17_10
  [65] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b)
  [66] *((const byte*) SCREEN1#0+(byte) $b*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#27
  to:doplasma::@17_12
doplasma::@17_12: scope:[doplasma]  from doplasma::@17_11
  [67] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c)
  [68] *((const byte*) SCREEN1#0+(byte) $c*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#29
  to:doplasma::@17_13
doplasma::@17_13: scope:[doplasma]  from doplasma::@17_12
  [69] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d)
  [70] *((const byte*) SCREEN1#0+(byte) $d*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#31
  to:doplasma::@17_14
doplasma::@17_14: scope:[doplasma]  from doplasma::@17_13
  [71] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e)
  [72] *((const byte*) SCREEN1#0+(byte) $e*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#33
  to:doplasma::@17_15
doplasma::@17_15: scope:[doplasma]  from doplasma::@17_14
  [73] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f)
  [74] *((const byte*) SCREEN1#0+(byte) $f*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#35
  to:doplasma::@17_16
doplasma::@17_16: scope:[doplasma]  from doplasma::@17_15
  [75] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10)
  [76] *((const byte*) SCREEN1#0+(byte) $10*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#37
  to:doplasma::@17_17
doplasma::@17_17: scope:[doplasma]  from doplasma::@17_16
  [77] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11)
  [78] *((const byte*) SCREEN1#0+(byte) $11*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#39
  to:doplasma::@17_18
doplasma::@17_18: scope:[doplasma]  from doplasma::@17_17
  [79] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12)
  [80] *((const byte*) SCREEN1#0+(byte) $12*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#41
  to:doplasma::@17_19
doplasma::@17_19: scope:[doplasma]  from doplasma::@17_18
  [81] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13)
  [82] *((const byte*) SCREEN1#0+(byte) $13*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#43
  to:doplasma::@17_20
doplasma::@17_20: scope:[doplasma]  from doplasma::@17_19
  [83] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14)
  [84] *((const byte*) SCREEN1#0+(byte) $14*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#45
  to:doplasma::@17_21
doplasma::@17_21: scope:[doplasma]  from doplasma::@17_20
  [85] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15)
  [86] *((const byte*) SCREEN1#0+(byte) $15*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#47
  to:doplasma::@17_22
doplasma::@17_22: scope:[doplasma]  from doplasma::@17_21
  [87] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16)
  [88] *((const byte*) SCREEN1#0+(byte) $16*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#49
  to:doplasma::@17_23
doplasma::@17_23: scope:[doplasma]  from doplasma::@17_22
  [89] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17)
  [90] *((const byte*) SCREEN1#0+(byte) $17*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#51
  to:doplasma::@17_24
doplasma::@17_24: scope:[doplasma]  from doplasma::@17_23
  [91] (byte) doplasma::val#53 ← (byte) doplasma::val#51 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18)
  [92] *((const byte*) SCREEN1#0+(byte) $18*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#53
  to:doplasma::@10
doplasma::@10: scope:[doplasma]  from doplasma::@17_24
  [93] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#11
  to:doplasma::@7
doplasma::@7: scope:[doplasma]  from doplasma::@10
  [94] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@8
  to:doplasma::@return
doplasma::@return: scope:[doplasma]  from doplasma::@7
  [95] return 
  to:@return
doplasma::@11: scope:[doplasma]  from doplasma::@1
  [96] (byte~) doplasma::yprev#6 ← (byte) doplasma::yprev#2
  to:doplasma::@2
makecharset: scope:[makecharset]  from main::@2
  [97] phi()
  [98] call sid_rnd_init 
  to:makecharset::@13
makecharset::@13: scope:[makecharset]  from makecharset
  [99] phi()
  [100] call print_cls 
  to:makecharset::@2
makecharset::@2: scope:[makecharset]  from makecharset::@1 makecharset::@13
  [101] (byte*) print_char_cursor#52 ← phi( makecharset::@1/(byte*) print_char_cursor#18 makecharset::@13/(const byte*) print_line_cursor#0 )
  [101] (word) makecharset::c#16 ← phi( makecharset::@1/(word) makecharset::c#1 makecharset::@13/(byte) 0 )
  [102] (byte~) makecharset::$3 ← < (word) makecharset::c#16
  [103] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3)
  to:makecharset::@4
makecharset::@4: scope:[makecharset]  from makecharset::@2 makecharset::@3
  [104] (byte) makecharset::i#13 ← phi( makecharset::@3/(byte) makecharset::i#1 makecharset::@2/(byte) 0 )
  to:makecharset::@7
makecharset::@7: scope:[makecharset]  from makecharset::@4 makecharset::@6
  [105] (byte) makecharset::b#10 ← phi( makecharset::@6/(byte) makecharset::b#2 makecharset::@4/(byte) 0 )
  [105] (byte) makecharset::ii#10 ← phi( makecharset::@6/(byte) makecharset::ii#1 makecharset::@4/(byte) 0 )
  [106] call sid_rnd 
  [107] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
  to:makecharset::@14
makecharset::@14: scope:[makecharset]  from makecharset::@7
  [108] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2
  [109] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff
  [110] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@9
  to:makecharset::@10
makecharset::@10: scope:[makecharset]  from makecharset::@14
  [111] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10)
  to:makecharset::@9
makecharset::@9: scope:[makecharset]  from makecharset::@10 makecharset::@14
  [112] (byte) makecharset::b#2 ← phi( makecharset::@10/(byte) makecharset::b#1 makecharset::@14/(byte) makecharset::b#10 )
  [113] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#10
  to:makecharset::@6
makecharset::@6: scope:[makecharset]  from makecharset::@9
  [114] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@7
  to:makecharset::@8
makecharset::@8: scope:[makecharset]  from makecharset::@6
  [115] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3
  [116] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13
  [117] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11
  [118] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2
  [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13
  to:makecharset::@3
makecharset::@3: scope:[makecharset]  from makecharset::@8
  [120] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@4
  to:makecharset::@5
makecharset::@5: scope:[makecharset]  from makecharset::@3
  [121] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7
  [122] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@12
  to:makecharset::@11
makecharset::@11: scope:[makecharset]  from makecharset::@5
  [123] phi()
  [124] call print_char 
  to:makecharset::@12
makecharset::@12: scope:[makecharset]  from makecharset::@11 makecharset::@5
  [125] (byte*) print_char_cursor#18 ← phi( makecharset::@11/(byte*) print_char_cursor#1 makecharset::@5/(byte*) print_char_cursor#52 )
  [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#16
  to:makecharset::@1
makecharset::@1: scope:[makecharset]  from makecharset::@12
  [127] if((word) makecharset::c#1<(word) $100) goto makecharset::@2
  to:makecharset::@return
makecharset::@return: scope:[makecharset]  from makecharset::@1
  [128] return 
  to:@return
print_char: scope:[print_char]  from makecharset::@11
  [129] *((byte*) print_char_cursor#52) ← (const byte) print_char::ch#0
  [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#52
  to:print_char::@return
print_char::@return: scope:[print_char]  from print_char
  [131] return 
  to:@return
sid_rnd: scope:[sid_rnd]  from makecharset::@7
  [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0)
  to:sid_rnd::@return
sid_rnd::@return: scope:[sid_rnd]  from sid_rnd
  [133] return 
  to:@return
print_cls: scope:[print_cls]  from makecharset::@13
  [134] phi()
  [135] call memset 
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls
  [136] return 
  to:@return
memset: scope:[memset]  from print_cls
  [137] phi()
  to:memset::@2
memset::@2: scope:[memset]  from memset memset::@1
  [138] (byte*) memset::dst#4 ← phi( memset::@1/(byte*) memset::dst#1 memset/(byte*)(const void*) memset::str#0 )
  [139] *((byte*) memset::dst#4) ← (const byte) memset::c#0
  [140] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4
  to:memset::@1
memset::@1: scope:[memset]  from memset::@2
  [141] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2
  to:memset::@return
memset::@return: scope:[memset]  from memset::@1
  [142] return 
  to:@return
sid_rnd_init: scope:[sid_rnd_init]  from makecharset
  [143] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff
  [144] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0
  to:sid_rnd_init::@return
sid_rnd_init::@return: scope:[sid_rnd_init]  from sid_rnd_init
  [145] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte*) CHARSET
(byte*) COLS
(byte*) D018
(byte*) SCREEN1
(byte) SID_CONTROL_NOISE
(byte*) SID_VOICE3_CONTROL
(word*) SID_VOICE3_FREQ
(byte*) SID_VOICE3_OSC
(byte[$100]) SINTABLE
(byte) c1A
(byte) c1A#1 1.1538461538461537
(byte) c1A#3 0.18840579710144925
(byte) c1B
(byte) c1B#1 1.0714285714285714
(byte) c1B#3 0.1911764705882353
(byte) c2A
(byte) c2A#1 0.625
(byte) c2A#3 0.22413793103448276
(byte) c2B
(byte) c2B#1 0.6
(byte) c2B#3 0.22807017543859648
(void()) doplasma((byte*) doplasma::screen)
(byte~) doplasma::$2 202.0
(byte~) doplasma::$4 202.0
(byte) doplasma::c1a
(byte) doplasma::c1a#0 2.0
(byte) doplasma::c1a#1 40.4
(byte) doplasma::c1a#4 76.25
(byte) doplasma::c1b
(byte) doplasma::c1b#0 4.0
(byte) doplasma::c1b#1 50.5
(byte) doplasma::c1b#4 61.0
(byte) doplasma::c2a
(byte) doplasma::c2a#0 2.0
(byte) doplasma::c2a#1 50.5
(byte) doplasma::c2a#4 101.66666666666666
(byte) doplasma::c2b
(byte) doplasma::c2b#0 4.0
(byte) doplasma::c2b#1 67.33333333333333
(byte) doplasma::c2b#4 76.25
(byte) doplasma::i
(byte) doplasma::i#1 101.0
(byte) doplasma::i#4 50.5
(byte) doplasma::i1
(byte) doplasma::i1#1 151.5
(byte) doplasma::i1#4 60.599999999999994
(byte) doplasma::i2
(byte) doplasma::i2#1 151.5
(byte) doplasma::i2#11 54.3846153846154
(byte) doplasma::ii
(byte*) doplasma::screen
(byte) doplasma::val
(byte) doplasma::val#0 202.0
(byte) doplasma::val#1 151.5
(byte) doplasma::val#10 151.5
(byte) doplasma::val#11 151.5
(byte) doplasma::val#13 151.5
(byte) doplasma::val#15 151.5
(byte) doplasma::val#17 151.5
(byte) doplasma::val#19 151.5
(byte) doplasma::val#21 151.5
(byte) doplasma::val#23 151.5
(byte) doplasma::val#25 151.5
(byte) doplasma::val#27 151.5
(byte) doplasma::val#29 151.5
(byte) doplasma::val#31 151.5
(byte) doplasma::val#33 151.5
(byte) doplasma::val#35 151.5
(byte) doplasma::val#37 151.5
(byte) doplasma::val#39 151.5
(byte) doplasma::val#41 151.5
(byte) doplasma::val#43 151.5
(byte) doplasma::val#45 151.5
(byte) doplasma::val#47 151.5
(byte) doplasma::val#49 151.5
(byte) doplasma::val#51 151.5
(byte) doplasma::val#53 202.0
(byte) doplasma::val#7 151.5
(byte[$28]) doplasma::xbuf
(byte[$19]) doplasma::ybuf
(byte) doplasma::yprev
(byte) doplasma::yprev#2 43.285714285714285
(byte) doplasma::yprev#4 101.0
(byte~) doplasma::yprev#6 202.0
(byte) doplasma::yval
(void()) main()
(byte*) main::col
(byte*) main::col#1 16.5
(byte*) main::col#2 16.5
(word~) main::toD0181_$0
(number~) main::toD0181_$1
(number~) main::toD0181_$2
(number~) main::toD0181_$3
(word~) main::toD0181_$4
(byte~) main::toD0181_$5
(number~) main::toD0181_$6
(number~) main::toD0181_$7
(number~) main::toD0181_$8
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(byte*) main::toD0181_screen
(void()) makecharset((byte*) makecharset::charset)
(word~) makecharset::$10 202.0
(word~) makecharset::$11 202.0
(byte~) makecharset::$12 22.0
(byte*~) makecharset::$16 202.0
(byte~) makecharset::$3 22.0
(byte~) makecharset::$6 2002.0
(byte~) makecharset::$7 2002.0
(byte) makecharset::b
(byte) makecharset::b#1 2002.0
(byte) makecharset::b#10 500.5
(byte) makecharset::b#2 517.3333333333334
(byte[8]) makecharset::bittab
(word) makecharset::c
(word) makecharset::c#1 16.5
(word) makecharset::c#16 5.800000000000001
(byte*) makecharset::charset
(byte) makecharset::i
(byte) makecharset::i#1 151.5
(byte) makecharset::i#13 20.2
(byte) makecharset::ii
(byte) makecharset::ii#1 1501.5
(byte) makecharset::ii#10 375.375
(byte) makecharset::s
(byte) makecharset::s#0 56.22222222222223
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(byte) memset::c
(byte*) memset::dst
(byte*) memset::dst#1 16.5
(byte*) memset::dst#4 16.5
(byte*) memset::end
(word) memset::num
(void*) memset::return
(void*) memset::str
(void()) print_char((byte) print_char::ch)
(byte) print_char::ch
(byte*) print_char_cursor
(byte*) print_char_cursor#1 4.333333333333333
(byte*) print_char_cursor#18 11.0
(byte*) print_char_cursor#52 1.0833333333333333
(void()) print_cls()
(byte*) print_line_cursor
(byte*) print_screen
(byte()) sid_rnd()
(byte) sid_rnd::return
(byte) sid_rnd::return#0 334.33333333333337
(byte) sid_rnd::return#2 2002.0
(void()) sid_rnd_init()

Initial phi equivalence classes
[ main::col#2 main::col#1 ]
[ c1A#1 c1A#3 ]
[ c1B#1 c1B#3 ]
[ c2A#1 c2A#3 ]
[ c2B#1 c2B#3 ]
[ doplasma::i#4 doplasma::i#1 ]
[ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ]
[ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ]
[ doplasma::yprev#4 doplasma::yprev#6 ]
[ doplasma::i1#4 doplasma::i1#1 ]
[ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ]
[ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ]
[ doplasma::i2#11 doplasma::i2#1 ]
[ makecharset::c#16 makecharset::c#1 ]
[ print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ]
[ makecharset::i#13 makecharset::i#1 ]
[ makecharset::ii#10 makecharset::ii#1 ]
[ makecharset::b#10 makecharset::b#2 makecharset::b#1 ]
[ memset::dst#4 memset::dst#1 ]
Added variable doplasma::yprev#2 to zero page equivalence class [ doplasma::yprev#2 ]
Added variable doplasma::$2 to zero page equivalence class [ doplasma::$2 ]
Added variable doplasma::$4 to zero page equivalence class [ doplasma::$4 ]
Added variable doplasma::val#0 to zero page equivalence class [ doplasma::val#0 ]
Added variable doplasma::val#1 to zero page equivalence class [ doplasma::val#1 ]
Added variable doplasma::val#7 to zero page equivalence class [ doplasma::val#7 ]
Added variable doplasma::val#10 to zero page equivalence class [ doplasma::val#10 ]
Added variable doplasma::val#11 to zero page equivalence class [ doplasma::val#11 ]
Added variable doplasma::val#13 to zero page equivalence class [ doplasma::val#13 ]
Added variable doplasma::val#15 to zero page equivalence class [ doplasma::val#15 ]
Added variable doplasma::val#17 to zero page equivalence class [ doplasma::val#17 ]
Added variable doplasma::val#19 to zero page equivalence class [ doplasma::val#19 ]
Added variable doplasma::val#21 to zero page equivalence class [ doplasma::val#21 ]
Added variable doplasma::val#23 to zero page equivalence class [ doplasma::val#23 ]
Added variable doplasma::val#25 to zero page equivalence class [ doplasma::val#25 ]
Added variable doplasma::val#27 to zero page equivalence class [ doplasma::val#27 ]
Added variable doplasma::val#29 to zero page equivalence class [ doplasma::val#29 ]
Added variable doplasma::val#31 to zero page equivalence class [ doplasma::val#31 ]
Added variable doplasma::val#33 to zero page equivalence class [ doplasma::val#33 ]
Added variable doplasma::val#35 to zero page equivalence class [ doplasma::val#35 ]
Added variable doplasma::val#37 to zero page equivalence class [ doplasma::val#37 ]
Added variable doplasma::val#39 to zero page equivalence class [ doplasma::val#39 ]
Added variable doplasma::val#41 to zero page equivalence class [ doplasma::val#41 ]
Added variable doplasma::val#43 to zero page equivalence class [ doplasma::val#43 ]
Added variable doplasma::val#45 to zero page equivalence class [ doplasma::val#45 ]
Added variable doplasma::val#47 to zero page equivalence class [ doplasma::val#47 ]
Added variable doplasma::val#49 to zero page equivalence class [ doplasma::val#49 ]
Added variable doplasma::val#51 to zero page equivalence class [ doplasma::val#51 ]
Added variable doplasma::val#53 to zero page equivalence class [ doplasma::val#53 ]
Added variable makecharset::$3 to zero page equivalence class [ makecharset::$3 ]
Added variable makecharset::s#0 to zero page equivalence class [ makecharset::s#0 ]
Added variable sid_rnd::return#2 to zero page equivalence class [ sid_rnd::return#2 ]
Added variable makecharset::$6 to zero page equivalence class [ makecharset::$6 ]
Added variable makecharset::$7 to zero page equivalence class [ makecharset::$7 ]
Added variable makecharset::$10 to zero page equivalence class [ makecharset::$10 ]
Added variable makecharset::$11 to zero page equivalence class [ makecharset::$11 ]
Added variable makecharset::$16 to zero page equivalence class [ makecharset::$16 ]
Added variable makecharset::$12 to zero page equivalence class [ makecharset::$12 ]
Added variable sid_rnd::return#0 to zero page equivalence class [ sid_rnd::return#0 ]
Complete equivalence classes
[ main::col#2 main::col#1 ]
[ c1A#1 c1A#3 ]
[ c1B#1 c1B#3 ]
[ c2A#1 c2A#3 ]
[ c2B#1 c2B#3 ]
[ doplasma::i#4 doplasma::i#1 ]
[ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ]
[ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ]
[ doplasma::yprev#4 doplasma::yprev#6 ]
[ doplasma::i1#4 doplasma::i1#1 ]
[ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ]
[ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ]
[ doplasma::i2#11 doplasma::i2#1 ]
[ makecharset::c#16 makecharset::c#1 ]
[ print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ]
[ makecharset::i#13 makecharset::i#1 ]
[ makecharset::ii#10 makecharset::ii#1 ]
[ makecharset::b#10 makecharset::b#2 makecharset::b#1 ]
[ memset::dst#4 memset::dst#1 ]
[ doplasma::yprev#2 ]
[ doplasma::$2 ]
[ doplasma::$4 ]
[ doplasma::val#0 ]
[ doplasma::val#1 ]
[ doplasma::val#7 ]
[ doplasma::val#10 ]
[ doplasma::val#11 ]
[ doplasma::val#13 ]
[ doplasma::val#15 ]
[ doplasma::val#17 ]
[ doplasma::val#19 ]
[ doplasma::val#21 ]
[ doplasma::val#23 ]
[ doplasma::val#25 ]
[ doplasma::val#27 ]
[ doplasma::val#29 ]
[ doplasma::val#31 ]
[ doplasma::val#33 ]
[ doplasma::val#35 ]
[ doplasma::val#37 ]
[ doplasma::val#39 ]
[ doplasma::val#41 ]
[ doplasma::val#43 ]
[ doplasma::val#45 ]
[ doplasma::val#47 ]
[ doplasma::val#49 ]
[ doplasma::val#51 ]
[ doplasma::val#53 ]
[ makecharset::$3 ]
[ makecharset::s#0 ]
[ sid_rnd::return#2 ]
[ makecharset::$6 ]
[ makecharset::$7 ]
[ makecharset::$10 ]
[ makecharset::$11 ]
[ makecharset::$16 ]
[ makecharset::$12 ]
[ sid_rnd::return#0 ]
Allocated zp ZP_WORD:2 [ main::col#2 main::col#1 ]
Allocated zp ZP_BYTE:4 [ c1A#1 c1A#3 ]
Allocated zp ZP_BYTE:5 [ c1B#1 c1B#3 ]
Allocated zp ZP_BYTE:6 [ c2A#1 c2A#3 ]
Allocated zp ZP_BYTE:7 [ c2B#1 c2B#3 ]
Allocated zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ]
Allocated zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ]
Allocated zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ]
Allocated zp ZP_BYTE:11 [ doplasma::yprev#4 doplasma::yprev#6 ]
Allocated zp ZP_BYTE:12 [ doplasma::i1#4 doplasma::i1#1 ]
Allocated zp ZP_BYTE:13 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ]
Allocated zp ZP_BYTE:14 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ]
Allocated zp ZP_BYTE:15 [ doplasma::i2#11 doplasma::i2#1 ]
Allocated zp ZP_WORD:16 [ makecharset::c#16 makecharset::c#1 ]
Allocated zp ZP_WORD:18 [ print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ]
Allocated zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ]
Allocated zp ZP_BYTE:21 [ makecharset::ii#10 makecharset::ii#1 ]
Allocated zp ZP_BYTE:22 [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ]
Allocated zp ZP_WORD:23 [ memset::dst#4 memset::dst#1 ]
Allocated zp ZP_BYTE:25 [ doplasma::yprev#2 ]
Allocated zp ZP_BYTE:26 [ doplasma::$2 ]
Allocated zp ZP_BYTE:27 [ doplasma::$4 ]
Allocated zp ZP_BYTE:28 [ doplasma::val#0 ]
Allocated zp ZP_BYTE:29 [ doplasma::val#1 ]
Allocated zp ZP_BYTE:30 [ doplasma::val#7 ]
Allocated zp ZP_BYTE:31 [ doplasma::val#10 ]
Allocated zp ZP_BYTE:32 [ doplasma::val#11 ]
Allocated zp ZP_BYTE:33 [ doplasma::val#13 ]
Allocated zp ZP_BYTE:34 [ doplasma::val#15 ]
Allocated zp ZP_BYTE:35 [ doplasma::val#17 ]
Allocated zp ZP_BYTE:36 [ doplasma::val#19 ]
Allocated zp ZP_BYTE:37 [ doplasma::val#21 ]
Allocated zp ZP_BYTE:38 [ doplasma::val#23 ]
Allocated zp ZP_BYTE:39 [ doplasma::val#25 ]
Allocated zp ZP_BYTE:40 [ doplasma::val#27 ]
Allocated zp ZP_BYTE:41 [ doplasma::val#29 ]
Allocated zp ZP_BYTE:42 [ doplasma::val#31 ]
Allocated zp ZP_BYTE:43 [ doplasma::val#33 ]
Allocated zp ZP_BYTE:44 [ doplasma::val#35 ]
Allocated zp ZP_BYTE:45 [ doplasma::val#37 ]
Allocated zp ZP_BYTE:46 [ doplasma::val#39 ]
Allocated zp ZP_BYTE:47 [ doplasma::val#41 ]
Allocated zp ZP_BYTE:48 [ doplasma::val#43 ]
Allocated zp ZP_BYTE:49 [ doplasma::val#45 ]
Allocated zp ZP_BYTE:50 [ doplasma::val#47 ]
Allocated zp ZP_BYTE:51 [ doplasma::val#49 ]
Allocated zp ZP_BYTE:52 [ doplasma::val#51 ]
Allocated zp ZP_BYTE:53 [ doplasma::val#53 ]
Allocated zp ZP_BYTE:54 [ makecharset::$3 ]
Allocated zp ZP_BYTE:55 [ makecharset::s#0 ]
Allocated zp ZP_BYTE:56 [ sid_rnd::return#2 ]
Allocated zp ZP_BYTE:57 [ makecharset::$6 ]
Allocated zp ZP_BYTE:58 [ makecharset::$7 ]
Allocated zp ZP_WORD:59 [ makecharset::$10 ]
Allocated zp ZP_WORD:61 [ makecharset::$11 ]
Allocated zp ZP_WORD:63 [ makecharset::$16 ]
Allocated zp ZP_BYTE:65 [ makecharset::$12 ]
Allocated zp ZP_BYTE:66 [ sid_rnd::return#0 ]

INITIAL ASM
Target platform is c64basic
  // File Comments
// A KickC version of the plasma routine from the CC65 samples
// This version has an unrolled inner loop to reach 50+FPS
// This version also optimizes the inner loop by calculating the Y buffer as a set of differences
// (w)2001 by groepaz/hitmen
// Cleanup and porting to CC65 by Ullrich von Bassewitz.
// Ported to KickC by Jesper Gravgaard.
// Original source https://github.com/cc65/cc65/blob/master/samples/plasma.c
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .label BORDERCOL = $d020
  .label BGCOL = $d021
  .label D018 = $d018
  // Color Ram
  .label COLS = $d800
  // The colors of the C64
  .const BLACK = 0
  .const BLUE = 6
  .label print_line_cursor = $400
  // SID registers for random number generation
  .label SID_VOICE3_FREQ = $d40e
  .label SID_VOICE3_CONTROL = $d412
  .const SID_CONTROL_NOISE = $80
  .label SID_VOICE3_OSC = $d41b
  .label SCREEN1 = $2800
  .label CHARSET = $2000
  .label print_char_cursor = $12
  .label c1A = 4
  .label c1B = 5
  .label c2A = 6
  .label c2B = 7
  // @begin
bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
  jmp b1
  // @1
b1:
  // [2] call main 
  jsr main
  // [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
  jmp bend
  // @end
bend:
  // main
main: {
    .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f
    .label col = 2
    // asm { sei  }
    sei
    // [5] *((const byte*) BORDERCOL#0) ← (const byte) BLUE#0 -- _deref_pbuc1=vbuc2 
    lda #BLUE
    sta BORDERCOL
    // [6] *((const byte*) BGCOL#0) ← (const byte) BLUE#0 -- _deref_pbuc1=vbuc2 
    lda #BLUE
    sta BGCOL
    // [7] phi from main to main::@1 [phi:main->main::@1]
  b1_from_main:
    // [7] phi (byte*) main::col#2 = (const byte*) COLS#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 
    lda #<COLS
    sta.z col
    lda #>COLS
    sta.z col+1
    jmp b1
    // [7] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
  b1_from_b1:
    // [7] phi (byte*) main::col#2 = (byte*) main::col#1 [phi:main::@1->main::@1#0] -- register_copy 
    jmp b1
    // main::@1
  b1:
    // [8] *((byte*) main::col#2) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 
    lda #BLACK
    ldy #0
    sta (col),y
    // [9] (byte*) main::col#1 ← ++ (byte*) main::col#2 -- pbuz1=_inc_pbuz1 
    inc.z col
    bne !+
    inc.z col+1
  !:
    // [10] if((byte*) main::col#1!=(const byte*) COLS#0+(word) $3e8+(byte) 1) goto main::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda.z col+1
    cmp #>COLS+$3e8+1
    bne b1_from_b1
    lda.z col
    cmp #<COLS+$3e8+1
    bne b1_from_b1
    // [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  b2_from_b1:
    jmp b2
    // main::@2
  b2:
    // [12] call makecharset 
    // [97] phi from main::@2 to makecharset [phi:main::@2->makecharset]
  makecharset_from_b2:
    jsr makecharset
    // [13] phi from main::@2 to main::toD0181 [phi:main::@2->main::toD0181]
  toD0181_from_b2:
    jmp toD0181
    // main::toD0181
  toD0181:
    jmp b5
    // main::@5
  b5:
    // [14] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // [15] phi from main::@5 to main::@3 [phi:main::@5->main::@3]
  b3_from_b5:
    // [15] phi (byte) c2B#1 = (byte) 0 [phi:main::@5->main::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta.z c2B
    // [15] phi (byte) c2A#1 = (byte) 0 [phi:main::@5->main::@3#1] -- vbuz1=vbuc1 
    lda #0
    sta.z c2A
    // [15] phi (byte) c1B#1 = (byte) 0 [phi:main::@5->main::@3#2] -- vbuz1=vbuc1 
    lda #0
    sta.z c1B
    // [15] phi (byte) c1A#1 = (byte) 0 [phi:main::@5->main::@3#3] -- vbuz1=vbuc1 
    lda #0
    sta.z c1A
    jmp b3
    // main::@3
  b3:
    // [16] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  b4_from_b3:
    jmp b4
    // main::@4
  b4:
    // [17] call doplasma 
    jsr doplasma
    // [15] phi from main::@4 to main::@3 [phi:main::@4->main::@3]
  b3_from_b4:
    // [15] phi (byte) c2B#1 = (byte) c2B#3 [phi:main::@4->main::@3#0] -- register_copy 
    // [15] phi (byte) c2A#1 = (byte) c2A#3 [phi:main::@4->main::@3#1] -- register_copy 
    // [15] phi (byte) c1B#1 = (byte) c1B#3 [phi:main::@4->main::@3#2] -- register_copy 
    // [15] phi (byte) c1A#1 = (byte) c1A#3 [phi:main::@4->main::@3#3] -- register_copy 
    jmp b3
}
  // doplasma
// Render plasma to the passed screen
doplasma: {
    .label _2 = $1a
    .label _4 = $1b
    .label c1a = 9
    .label c1b = $a
    .label i = 8
    .label c2a = $d
    .label c2b = $e
    .label i1 = $c
    .label val = $1c
    .label val_1 = $1d
    .label i2 = $f
    .label yprev = $19
    .label yprev_4 = $b
    .label val_7 = $1e
    .label val_10 = $1f
    .label val_11 = $20
    .label val_13 = $21
    .label val_15 = $22
    .label val_17 = $23
    .label val_19 = $24
    .label val_21 = $25
    .label val_23 = $26
    .label val_25 = $27
    .label val_27 = $28
    .label val_29 = $29
    .label val_31 = $2a
    .label val_33 = $2b
    .label val_35 = $2c
    .label val_37 = $2d
    .label val_39 = $2e
    .label val_41 = $2f
    .label val_43 = $30
    .label val_45 = $31
    .label val_47 = $32
    .label val_49 = $33
    .label val_51 = $34
    .label val_53 = $35
    .label yprev_6 = $b
    // [18] (byte) doplasma::c1a#0 ← (byte) c1A#1 -- vbuz1=vbuz2 
    lda.z c1A
    sta.z c1a
    // [19] (byte) doplasma::c1b#0 ← (byte) c1B#1 -- vbuz1=vbuz2 
    lda.z c1B
    sta.z c1b
    // [20] phi from doplasma to doplasma::@2 [phi:doplasma->doplasma::@2]
  b2_from_doplasma:
    // [20] phi (byte) doplasma::yprev#4 = (byte) 0 [phi:doplasma->doplasma::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta.z yprev_4
    // [20] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@2#1] -- register_copy 
    // [20] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@2#2] -- register_copy 
    // [20] phi (byte) doplasma::i#4 = (byte) 0 [phi:doplasma->doplasma::@2#3] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp b2
    // doplasma::@2
  b2:
    // [21] (byte) doplasma::yprev#2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
    ldy.z c1a
    lda SINTABLE,y
    ldy.z c1b
    clc
    adc SINTABLE,y
    sta.z yprev
    // [22] (byte~) doplasma::$2 ← (byte) doplasma::yprev#2 - (byte) doplasma::yprev#4 -- vbuz1=vbuz2_minus_vbuz3 
    lda.z yprev
    sec
    sbc.z yprev_4
    sta.z _2
    // [23] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#4) ← (byte~) doplasma::$2 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z _2
    ldy.z i
    sta ybuf,y
    // [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1a
    axs #-[4]
    stx.z c1a
    // [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1b
    axs #-[9]
    stx.z c1b
    // [26] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#4 -- vbuz1=_inc_vbuz1 
    inc.z i
    jmp b1
  // Calculate ybuff as a bunch of differences
    // doplasma::@1
  b1:
    // [27] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@11 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #$19
    bcc b11
    jmp b3
    // doplasma::@3
  b3:
    // [28] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1A
    axs #-[3]
    stx.z c1A
    // [29] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 
    lax.z c1B
    axs #5
    stx.z c1B
    // [30] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 
    lda.z c2A
    sta.z c2a
    // [31] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 
    lda.z c2B
    sta.z c2b
    // [32] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5]
  b5_from_b3:
    // [32] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@5#0] -- register_copy 
    // [32] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@5#1] -- register_copy 
    // [32] phi (byte) doplasma::i1#4 = (byte) 0 [phi:doplasma::@3->doplasma::@5#2] -- vbuz1=vbuc1 
    lda #0
    sta.z i1
    jmp b5
    // [32] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5]
  b5_from_b4:
    // [32] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#1 [phi:doplasma::@4->doplasma::@5#0] -- register_copy 
    // [32] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#1 [phi:doplasma::@4->doplasma::@5#1] -- register_copy 
    // [32] phi (byte) doplasma::i1#4 = (byte) doplasma::i1#1 [phi:doplasma::@4->doplasma::@5#2] -- register_copy 
    jmp b5
    // doplasma::@5
  b5:
    // [33] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
    ldy.z c2a
    lda SINTABLE,y
    ldy.z c2b
    clc
    adc SINTABLE,y
    sta.z _4
    // [34] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#4) ← (byte~) doplasma::$4 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z _4
    ldy.z i1
    sta xbuf,y
    // [35] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c2a
    axs #-[3]
    stx.z c2a
    // [36] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c2b
    axs #-[7]
    stx.z c2b
    // [37] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#4 -- vbuz1=_inc_vbuz1 
    inc.z i1
    jmp b4
    // doplasma::@4
  b4:
    // [38] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i1
    cmp #$28
    bcc b5_from_b4
    jmp b6
    // doplasma::@6
  b6:
    // [39] (byte) c2A#3 ← (byte) c2A#1 + (byte) 2 -- vbuz1=vbuz1_plus_2 
    lda.z c2A
    clc
    adc #2
    sta.z c2A
    // [40] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 
    lax.z c2B
    axs #3
    stx.z c2B
    // [41] phi from doplasma::@6 to doplasma::@8 [phi:doplasma::@6->doplasma::@8]
  b8_from_b6:
    // [41] phi (byte) doplasma::i2#11 = (byte) 0 [phi:doplasma::@6->doplasma::@8#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i2
    jmp b8
    // [41] phi from doplasma::@7 to doplasma::@8 [phi:doplasma::@7->doplasma::@8]
  b8_from_b7:
    // [41] phi (byte) doplasma::i2#11 = (byte) doplasma::i2#1 [phi:doplasma::@7->doplasma::@8#0] -- register_copy 
    jmp b8
    // doplasma::@8
  b8:
    // [42] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#11) -- vbuz1=pbuc1_derefidx_vbuz2 
    // Find the first value on the row
    ldy.z i2
    lda xbuf,y
    sta.z val
    jmp b9
    // doplasma::@9
  b9:
    // [43] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf
    clc
    adc.z val
    sta.z val_1
    // [44] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#11) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_1
    ldy.z i2
    sta SCREEN1,y
    jmp b17_1
    // doplasma::@17_1
  b17_1:
    // [45] (byte) doplasma::val#7 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+1
    clc
    adc.z val_1
    sta.z val_7
    // [46] *((const byte*) SCREEN1#0+(byte) 1*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#7 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_7
    ldy.z i2
    sta SCREEN1+1*$28,y
    jmp b17_2
    // doplasma::@17_2
  b17_2:
    // [47] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+2
    clc
    adc.z val_7
    sta.z val_10
    // [48] *((const byte*) SCREEN1#0+(byte) 2*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_10
    ldy.z i2
    sta SCREEN1+2*$28,y
    jmp b17_3
    // doplasma::@17_3
  b17_3:
    // [49] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+3
    clc
    adc.z val_10
    sta.z val_11
    // [50] *((const byte*) SCREEN1#0+(byte) 3*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#11 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_11
    ldy.z i2
    sta SCREEN1+3*$28,y
    jmp b17_4
    // doplasma::@17_4
  b17_4:
    // [51] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+4
    clc
    adc.z val_11
    sta.z val_13
    // [52] *((const byte*) SCREEN1#0+(byte) 4*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#13 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_13
    ldy.z i2
    sta SCREEN1+4*$28,y
    jmp b17_5
    // doplasma::@17_5
  b17_5:
    // [53] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+5
    clc
    adc.z val_13
    sta.z val_15
    // [54] *((const byte*) SCREEN1#0+(byte) 5*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#15 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_15
    ldy.z i2
    sta SCREEN1+5*$28,y
    jmp b17_6
    // doplasma::@17_6
  b17_6:
    // [55] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+6
    clc
    adc.z val_15
    sta.z val_17
    // [56] *((const byte*) SCREEN1#0+(byte) 6*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#17 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_17
    ldy.z i2
    sta SCREEN1+6*$28,y
    jmp b17_7
    // doplasma::@17_7
  b17_7:
    // [57] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+7
    clc
    adc.z val_17
    sta.z val_19
    // [58] *((const byte*) SCREEN1#0+(byte) 7*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#19 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_19
    ldy.z i2
    sta SCREEN1+7*$28,y
    jmp b17_8
    // doplasma::@17_8
  b17_8:
    // [59] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+8
    clc
    adc.z val_19
    sta.z val_21
    // [60] *((const byte*) SCREEN1#0+(byte) 8*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#21 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_21
    ldy.z i2
    sta SCREEN1+8*$28,y
    jmp b17_9
    // doplasma::@17_9
  b17_9:
    // [61] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+9
    clc
    adc.z val_21
    sta.z val_23
    // [62] *((const byte*) SCREEN1#0+(byte) 9*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#23 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_23
    ldy.z i2
    sta SCREEN1+9*$28,y
    jmp b17_10
    // doplasma::@17_10
  b17_10:
    // [63] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$a
    clc
    adc.z val_23
    sta.z val_25
    // [64] *((const byte*) SCREEN1#0+(byte) $a*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#25 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_25
    ldy.z i2
    sta SCREEN1+$a*$28,y
    jmp b17_11
    // doplasma::@17_11
  b17_11:
    // [65] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$b
    clc
    adc.z val_25
    sta.z val_27
    // [66] *((const byte*) SCREEN1#0+(byte) $b*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#27 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_27
    ldy.z i2
    sta SCREEN1+$b*$28,y
    jmp b17_12
    // doplasma::@17_12
  b17_12:
    // [67] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$c
    clc
    adc.z val_27
    sta.z val_29
    // [68] *((const byte*) SCREEN1#0+(byte) $c*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#29 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_29
    ldy.z i2
    sta SCREEN1+$c*$28,y
    jmp b17_13
    // doplasma::@17_13
  b17_13:
    // [69] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$d
    clc
    adc.z val_29
    sta.z val_31
    // [70] *((const byte*) SCREEN1#0+(byte) $d*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#31 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_31
    ldy.z i2
    sta SCREEN1+$d*$28,y
    jmp b17_14
    // doplasma::@17_14
  b17_14:
    // [71] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$e
    clc
    adc.z val_31
    sta.z val_33
    // [72] *((const byte*) SCREEN1#0+(byte) $e*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#33 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_33
    ldy.z i2
    sta SCREEN1+$e*$28,y
    jmp b17_15
    // doplasma::@17_15
  b17_15:
    // [73] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$f
    clc
    adc.z val_33
    sta.z val_35
    // [74] *((const byte*) SCREEN1#0+(byte) $f*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#35 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_35
    ldy.z i2
    sta SCREEN1+$f*$28,y
    jmp b17_16
    // doplasma::@17_16
  b17_16:
    // [75] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$10
    clc
    adc.z val_35
    sta.z val_37
    // [76] *((const byte*) SCREEN1#0+(byte) $10*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#37 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_37
    ldy.z i2
    sta SCREEN1+$10*$28,y
    jmp b17_17
    // doplasma::@17_17
  b17_17:
    // [77] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$11
    clc
    adc.z val_37
    sta.z val_39
    // [78] *((const byte*) SCREEN1#0+(byte) $11*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#39 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_39
    ldy.z i2
    sta SCREEN1+$11*$28,y
    jmp b17_18
    // doplasma::@17_18
  b17_18:
    // [79] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$12
    clc
    adc.z val_39
    sta.z val_41
    // [80] *((const byte*) SCREEN1#0+(byte) $12*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#41 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_41
    ldy.z i2
    sta SCREEN1+$12*$28,y
    jmp b17_19
    // doplasma::@17_19
  b17_19:
    // [81] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$13
    clc
    adc.z val_41
    sta.z val_43
    // [82] *((const byte*) SCREEN1#0+(byte) $13*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#43 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_43
    ldy.z i2
    sta SCREEN1+$13*$28,y
    jmp b17_20
    // doplasma::@17_20
  b17_20:
    // [83] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$14
    clc
    adc.z val_43
    sta.z val_45
    // [84] *((const byte*) SCREEN1#0+(byte) $14*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#45 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_45
    ldy.z i2
    sta SCREEN1+$14*$28,y
    jmp b17_21
    // doplasma::@17_21
  b17_21:
    // [85] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$15
    clc
    adc.z val_45
    sta.z val_47
    // [86] *((const byte*) SCREEN1#0+(byte) $15*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#47 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_47
    ldy.z i2
    sta SCREEN1+$15*$28,y
    jmp b17_22
    // doplasma::@17_22
  b17_22:
    // [87] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$16
    clc
    adc.z val_47
    sta.z val_49
    // [88] *((const byte*) SCREEN1#0+(byte) $16*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#49 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_49
    ldy.z i2
    sta SCREEN1+$16*$28,y
    jmp b17_23
    // doplasma::@17_23
  b17_23:
    // [89] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$17
    clc
    adc.z val_49
    sta.z val_51
    // [90] *((const byte*) SCREEN1#0+(byte) $17*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#51 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_51
    ldy.z i2
    sta SCREEN1+$17*$28,y
    jmp b17_24
    // doplasma::@17_24
  b17_24:
    // [91] (byte) doplasma::val#53 ← (byte) doplasma::val#51 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) -- vbuz1=vbuz2_plus__deref_pbuc1 
    lda ybuf+$18
    clc
    adc.z val_51
    sta.z val_53
    // [92] *((const byte*) SCREEN1#0+(byte) $18*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#53 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z val_53
    ldy.z i2
    sta SCREEN1+$18*$28,y
    jmp b10
    // doplasma::@10
  b10:
    // [93] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#11 -- vbuz1=_inc_vbuz1 
    inc.z i2
    jmp b7
    // doplasma::@7
  b7:
    // [94] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@8 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i2
    cmp #$28
    bcc b8_from_b7
    jmp breturn
    // doplasma::@return
  breturn:
    // [95] return 
    rts
    // doplasma::@11
  b11:
    // [96] (byte~) doplasma::yprev#6 ← (byte) doplasma::yprev#2 -- vbuz1=vbuz2 
    lda.z yprev
    sta.z yprev_6
    // [20] phi from doplasma::@11 to doplasma::@2 [phi:doplasma::@11->doplasma::@2]
  b2_from_b11:
    // [20] phi (byte) doplasma::yprev#4 = (byte~) doplasma::yprev#6 [phi:doplasma::@11->doplasma::@2#0] -- register_copy 
    // [20] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#1 [phi:doplasma::@11->doplasma::@2#1] -- register_copy 
    // [20] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#1 [phi:doplasma::@11->doplasma::@2#2] -- register_copy 
    // [20] phi (byte) doplasma::i#4 = (byte) doplasma::i#1 [phi:doplasma::@11->doplasma::@2#3] -- register_copy 
    jmp b2
    xbuf: .fill $28, 0
    ybuf: .fill $19, 0
}
  // makecharset
// Make a plasma-friendly charset where the chars are randomly filled
makecharset: {
    .label _3 = $36
    .label _6 = $39
    .label _7 = $3a
    .label _10 = $3b
    .label _11 = $3d
    .label _12 = $41
    .label s = $37
    .label i = $14
    .label ii = $15
    .label b = $16
    .label c = $10
    .label _16 = $3f
    // [98] call sid_rnd_init 
    jsr sid_rnd_init
    // [99] phi from makecharset to makecharset::@13 [phi:makecharset->makecharset::@13]
  b13_from_makecharset:
    jmp b13
    // makecharset::@13
  b13:
    // [100] call print_cls 
    // [134] phi from makecharset::@13 to print_cls [phi:makecharset::@13->print_cls]
  print_cls_from_b13:
    jsr print_cls
    // [101] phi from makecharset::@13 to makecharset::@2 [phi:makecharset::@13->makecharset::@2]
  b2_from_b13:
    // [101] phi (byte*) print_char_cursor#52 = (const byte*) print_line_cursor#0 [phi:makecharset::@13->makecharset::@2#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta.z print_char_cursor
    lda #>print_line_cursor
    sta.z print_char_cursor+1
    // [101] phi (word) makecharset::c#16 = (byte) 0 [phi:makecharset::@13->makecharset::@2#1] -- vwuz1=vbuc1 
    lda #<0
    sta.z c
    lda #>0
    sta.z c+1
    jmp b2
    // [101] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2]
  b2_from_b1:
    // [101] phi (byte*) print_char_cursor#52 = (byte*) print_char_cursor#18 [phi:makecharset::@1->makecharset::@2#0] -- register_copy 
    // [101] phi (word) makecharset::c#16 = (word) makecharset::c#1 [phi:makecharset::@1->makecharset::@2#1] -- register_copy 
    jmp b2
    // makecharset::@2
  b2:
    // [102] (byte~) makecharset::$3 ← < (word) makecharset::c#16 -- vbuz1=_lo_vwuz2 
    lda.z c
    sta.z _3
    // [103] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy.z _3
    lda SINTABLE,y
    sta.z s
    // [104] phi from makecharset::@2 to makecharset::@4 [phi:makecharset::@2->makecharset::@4]
  b4_from_b2:
    // [104] phi (byte) makecharset::i#13 = (byte) 0 [phi:makecharset::@2->makecharset::@4#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp b4
    // [104] phi from makecharset::@3 to makecharset::@4 [phi:makecharset::@3->makecharset::@4]
  b4_from_b3:
    // [104] phi (byte) makecharset::i#13 = (byte) makecharset::i#1 [phi:makecharset::@3->makecharset::@4#0] -- register_copy 
    jmp b4
    // makecharset::@4
  b4:
    // [105] phi from makecharset::@4 to makecharset::@7 [phi:makecharset::@4->makecharset::@7]
  b7_from_b4:
    // [105] phi (byte) makecharset::b#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#0] -- vbuz1=vbuc1 
    lda #0
    sta.z b
    // [105] phi (byte) makecharset::ii#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#1] -- vbuz1=vbuc1 
    lda #0
    sta.z ii
    jmp b7
    // [105] phi from makecharset::@6 to makecharset::@7 [phi:makecharset::@6->makecharset::@7]
  b7_from_b6:
    // [105] phi (byte) makecharset::b#10 = (byte) makecharset::b#2 [phi:makecharset::@6->makecharset::@7#0] -- register_copy 
    // [105] phi (byte) makecharset::ii#10 = (byte) makecharset::ii#1 [phi:makecharset::@6->makecharset::@7#1] -- register_copy 
    jmp b7
    // makecharset::@7
  b7:
    // [106] call sid_rnd 
    jsr sid_rnd
    // [107] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 -- vbuz1=vbuz2 
    lda.z sid_rnd.return
    sta.z sid_rnd.return_2
    jmp b14
    // makecharset::@14
  b14:
    // [108] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2 -- vbuz1=vbuz2 
    lda.z sid_rnd.return_2
    sta.z _6
    // [109] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuz2_band_vbuc1 
    lda #$ff
    and.z _6
    sta.z _7
    // [110] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@9 -- vbuz1_le_vbuz2_then_la1 
    lda.z s
    cmp.z _7
    bcs b9_from_b14
    jmp b10
    // makecharset::@10
  b10:
    // [111] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 
    lda.z b
    ldy.z ii
    ora bittab,y
    sta.z b
    // [112] phi from makecharset::@10 makecharset::@14 to makecharset::@9 [phi:makecharset::@10/makecharset::@14->makecharset::@9]
  b9_from_b10:
  b9_from_b14:
    // [112] phi (byte) makecharset::b#2 = (byte) makecharset::b#1 [phi:makecharset::@10/makecharset::@14->makecharset::@9#0] -- register_copy 
    jmp b9
    // makecharset::@9
  b9:
    // [113] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#10 -- vbuz1=_inc_vbuz1 
    inc.z ii
    jmp b6
    // makecharset::@6
  b6:
    // [114] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@7 -- vbuz1_lt_vbuc1_then_la1 
    lda.z ii
    cmp #8
    bcc b7_from_b6
    jmp b8
    // makecharset::@8
  b8:
    // [115] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z c
    asl
    sta.z _10
    lda.z c+1
    rol
    sta.z _10+1
    asl.z _10
    rol.z _10+1
    asl.z _10
    rol.z _10+1
    // [116] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 -- vwuz1=vwuz2_plus_vbuz3 
    lda.z i
    clc
    adc.z _10
    sta.z _11
    lda #0
    adc.z _10+1
    sta.z _11+1
    // [117] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz2 
    lda.z _11
    clc
    adc #<CHARSET
    sta.z _16
    lda.z _11+1
    adc #>CHARSET
    sta.z _16+1
    // [118] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuz2 
    lda.z b
    ldy #0
    sta (_16),y
    // [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 -- vbuz1=_inc_vbuz1 
    inc.z i
    jmp b3
    // makecharset::@3
  b3:
    // [120] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@4 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #8
    bcc b4_from_b3
    jmp b5
    // makecharset::@5
  b5:
    // [121] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 -- vbuz1=vwuz2_band_vbuc1 
    lda.z c
    and #7
    sta.z _12
    // [122] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@12 -- vbuz1_neq_0_then_la1 
    lda.z _12
    cmp #0
    bne b12_from_b5
    // [123] phi from makecharset::@5 to makecharset::@11 [phi:makecharset::@5->makecharset::@11]
  b11_from_b5:
    jmp b11
    // makecharset::@11
  b11:
    // [124] call print_char 
    jsr print_char
    // [125] phi from makecharset::@11 makecharset::@5 to makecharset::@12 [phi:makecharset::@11/makecharset::@5->makecharset::@12]
  b12_from_b11:
  b12_from_b5:
    // [125] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#1 [phi:makecharset::@11/makecharset::@5->makecharset::@12#0] -- register_copy 
    jmp b12
    // makecharset::@12
  b12:
    // [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#16 -- vwuz1=_inc_vwuz1 
    inc.z c
    bne !+
    inc.z c+1
  !:
    jmp b1
    // makecharset::@1
  b1:
    // [127] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 
    lda.z c+1
    cmp #>$100
    bcc b2_from_b1
    bne !+
    lda.z c
    cmp #<$100
    bcc b2_from_b1
  !:
    jmp breturn
    // makecharset::@return
  breturn:
    // [128] return 
    rts
    bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80
}
  // print_char
// Print a single char
print_char: {
    .const ch = '.'
    // [129] *((byte*) print_char_cursor#52) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
    lda #ch
    ldy #0
    sta (print_char_cursor),y
    // [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#52 -- pbuz1=_inc_pbuz1 
    inc.z print_char_cursor
    bne !+
    inc.z print_char_cursor+1
  !:
    jmp breturn
    // print_char::@return
  breturn:
    // [131] return 
    rts
}
  // sid_rnd
// Get a random number from the SID voice 3,
// Must be initialized with sid_rnd_init()
sid_rnd: {
    .label return = $42
    .label return_2 = $38
    // [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1 
    lda SID_VOICE3_OSC
    sta.z return
    jmp breturn
    // sid_rnd::@return
  breturn:
    // [133] return 
    rts
}
  // print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    // [135] call memset 
    // [137] phi from print_cls to memset [phi:print_cls->memset]
  memset_from_print_cls:
    jsr memset
    jmp breturn
    // print_cls::@return
  breturn:
    // [136] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
memset: {
    .const c = ' '
    .const num = $3e8
    .label str = print_line_cursor
    .label end = str+num
    .label dst = $17
    // [138] phi from memset to memset::@2 [phi:memset->memset::@2]
  b2_from_memset:
    // [138] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 
    lda #<str
    sta.z dst
    lda #>str
    sta.z dst+1
    jmp b2
    // [138] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2]
  b2_from_b1:
    // [138] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy 
    jmp b2
    // memset::@2
  b2:
    // [139] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 
    lda #c
    ldy #0
    sta (dst),y
    // [140] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    jmp b1
    // memset::@1
  b1:
    // [141] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 
    lda.z dst+1
    cmp #>end
    bne b2_from_b1
    lda.z dst
    cmp #<end
    bne b2_from_b1
    jmp breturn
    // memset::@return
  breturn:
    // [142] return 
    rts
}
  // sid_rnd_init
// Initialize SID voice 3 for random number generation
sid_rnd_init: {
    // [143] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 
    lda #<$ffff
    sta SID_VOICE3_FREQ
    lda #>$ffff
    sta SID_VOICE3_FREQ+1
    // [144] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 
    lda #SID_CONTROL_NOISE
    sta SID_VOICE3_CONTROL
    jmp breturn
    // sid_rnd_init::@return
  breturn:
    // [145] return 
    rts
}
  // File Data
  .align $100
SINTABLE:
.for(var i=0;i<$100;i++)
        .byte round(127.5+127.5*sin(toRadians(360*i/256)))


REGISTER UPLIFT POTENTIAL REGISTERS
Statement [5] *((const byte*) BORDERCOL#0) ← (const byte) BLUE#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [6] *((const byte*) BGCOL#0) ← (const byte) BLUE#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [8] *((byte*) main::col#2) ← (const byte) BLACK#0 [ main::col#2 ] ( main:2 [ main::col#2 ] ) always clobbers reg byte a reg byte y 
Statement [10] if((byte*) main::col#1!=(const byte*) COLS#0+(word) $3e8+(byte) 1) goto main::@1 [ main::col#1 ] ( main:2 [ main::col#1 ] ) always clobbers reg byte a 
Statement [14] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [21] (byte) doplasma::yprev#2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#4 doplasma::yprev#2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#4 doplasma::yprev#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ c1A#1 c1A#3 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ c1B#1 c1B#3 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ c2A#1 c2A#3 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ c2B#1 c2B#3 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ doplasma::yprev#4 doplasma::yprev#6 ]
Statement [22] (byte~) doplasma::$2 ← (byte) doplasma::yprev#2 - (byte) doplasma::yprev#4 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#2 doplasma::$2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#2 doplasma::$2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ doplasma::yprev#2 ]
Statement [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1b#4 doplasma::c1a#1 doplasma::yprev#2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1b#4 doplasma::c1a#1 doplasma::yprev#2 ] ) always clobbers reg byte a 
Statement [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#1 doplasma::c1b#1 doplasma::yprev#2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#1 doplasma::c1b#1 doplasma::yprev#2 ] ) always clobbers reg byte a 
Statement [28] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ( main:2::doplasma:17 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ) always clobbers reg byte a 
Statement [29] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ) always clobbers reg byte a 
Statement [33] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#4 doplasma::c2b#4 doplasma::$4 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#4 doplasma::c2b#4 doplasma::$4 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ doplasma::i1#4 doplasma::i1#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ]
Statement [35] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2b#4 doplasma::c2a#1 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2b#4 doplasma::c2a#1 ] ) always clobbers reg byte a 
Statement [36] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#1 doplasma::c2b#1 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a 
Statement [40] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ) always clobbers reg byte a 
Statement [43] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#1 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ doplasma::i2#11 doplasma::i2#1 ]
Statement [45] (byte) doplasma::val#7 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#7 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#7 ] ) always clobbers reg byte a 
Statement [47] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#10 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#10 ] ) always clobbers reg byte a 
Statement [49] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#11 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#11 ] ) always clobbers reg byte a 
Statement [51] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#13 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#13 ] ) always clobbers reg byte a 
Statement [53] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#15 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#15 ] ) always clobbers reg byte a 
Statement [55] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#17 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#17 ] ) always clobbers reg byte a 
Statement [57] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#19 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#19 ] ) always clobbers reg byte a 
Statement [59] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#21 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#21 ] ) always clobbers reg byte a 
Statement [61] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#23 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#23 ] ) always clobbers reg byte a 
Statement [63] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#25 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#25 ] ) always clobbers reg byte a 
Statement [65] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#27 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#27 ] ) always clobbers reg byte a 
Statement [67] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#29 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#29 ] ) always clobbers reg byte a 
Statement [69] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#31 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#31 ] ) always clobbers reg byte a 
Statement [71] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#33 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#33 ] ) always clobbers reg byte a 
Statement [73] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#35 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#35 ] ) always clobbers reg byte a 
Statement [75] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#37 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#37 ] ) always clobbers reg byte a 
Statement [77] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#39 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#39 ] ) always clobbers reg byte a 
Statement [79] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#41 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#41 ] ) always clobbers reg byte a 
Statement [81] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#43 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#43 ] ) always clobbers reg byte a 
Statement [83] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#45 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#45 ] ) always clobbers reg byte a 
Statement [85] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#47 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#47 ] ) always clobbers reg byte a 
Statement [87] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#49 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#49 ] ) always clobbers reg byte a 
Statement [89] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#51 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#51 ] ) always clobbers reg byte a 
Statement [91] (byte) doplasma::val#53 ← (byte) doplasma::val#51 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#53 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#53 ] ) always clobbers reg byte a 
Statement [102] (byte~) makecharset::$3 ← < (word) makecharset::c#16 [ makecharset::c#16 print_char_cursor#52 makecharset::$3 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::$3 ] ) always clobbers reg byte a 
Statement [111] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::ii#10 makecharset::b#1 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::ii#10 makecharset::b#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:55 [ makecharset::s#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ makecharset::ii#10 makecharset::ii#1 ]
Statement [115] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$10 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$10 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ]
Statement [116] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$11 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$11 ] ) always clobbers reg byte a 
Statement [117] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a 
Statement [118] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:55 [ makecharset::s#0 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ]
Statement [121] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 [ makecharset::c#16 print_char_cursor#52 makecharset::$12 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::$12 ] ) always clobbers reg byte a 
Statement [127] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 [ makecharset::c#1 print_char_cursor#18 ] ( main:2::makecharset:12 [ makecharset::c#1 print_char_cursor#18 ] ) always clobbers reg byte a 
Statement [129] *((byte*) print_char_cursor#52) ← (const byte) print_char::ch#0 [ print_char_cursor#52 ] ( main:2::makecharset:12::print_char:124 [ makecharset::c#16 print_char_cursor#52 ] ) always clobbers reg byte a reg byte y 
Statement [139] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::makecharset:12::print_cls:100::memset:135 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y 
Statement [141] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::makecharset:12::print_cls:100::memset:135 [ memset::dst#1 ] ) always clobbers reg byte a 
Statement [143] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] ) always clobbers reg byte a 
Statement [144] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] ) always clobbers reg byte a 
Statement [5] *((const byte*) BORDERCOL#0) ← (const byte) BLUE#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [6] *((const byte*) BGCOL#0) ← (const byte) BLUE#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [8] *((byte*) main::col#2) ← (const byte) BLACK#0 [ main::col#2 ] ( main:2 [ main::col#2 ] ) always clobbers reg byte a reg byte y 
Statement [10] if((byte*) main::col#1!=(const byte*) COLS#0+(word) $3e8+(byte) 1) goto main::@1 [ main::col#1 ] ( main:2 [ main::col#1 ] ) always clobbers reg byte a 
Statement [14] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [21] (byte) doplasma::yprev#2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#4 doplasma::yprev#2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#4 doplasma::yprev#2 ] ) always clobbers reg byte a 
Statement [22] (byte~) doplasma::$2 ← (byte) doplasma::yprev#2 - (byte) doplasma::yprev#4 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#2 doplasma::$2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#4 doplasma::c1b#4 doplasma::yprev#2 doplasma::$2 ] ) always clobbers reg byte a 
Statement [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1b#4 doplasma::c1a#1 doplasma::yprev#2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1b#4 doplasma::c1a#1 doplasma::yprev#2 ] ) always clobbers reg byte a 
Statement [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#1 doplasma::c1b#1 doplasma::yprev#2 ] ( main:2::doplasma:17 [ c1A#1 c1B#1 c2A#1 c2B#1 doplasma::i#4 doplasma::c1a#1 doplasma::c1b#1 doplasma::yprev#2 ] ) always clobbers reg byte a 
Statement [28] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ( main:2::doplasma:17 [ c1B#1 c2A#1 c2B#1 c1A#3 ] ) always clobbers reg byte a 
Statement [29] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 ] ) always clobbers reg byte a 
Statement [33] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#4 doplasma::c2b#4 doplasma::$4 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#4 doplasma::c2b#4 doplasma::$4 ] ) always clobbers reg byte a 
Statement [35] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2b#4 doplasma::c2a#1 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2b#4 doplasma::c2a#1 ] ) always clobbers reg byte a 
Statement [36] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#1 doplasma::c2b#1 ] ( main:2::doplasma:17 [ c2A#1 c2B#1 c1A#3 c1B#3 doplasma::i1#4 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a 
Statement [40] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 ] ) always clobbers reg byte a 
Statement [43] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#1 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#1 ] ) always clobbers reg byte a 
Statement [45] (byte) doplasma::val#7 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#7 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#7 ] ) always clobbers reg byte a 
Statement [47] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#10 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#10 ] ) always clobbers reg byte a 
Statement [49] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#11 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#11 ] ) always clobbers reg byte a 
Statement [51] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#13 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#13 ] ) always clobbers reg byte a 
Statement [53] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#15 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#15 ] ) always clobbers reg byte a 
Statement [55] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#17 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#17 ] ) always clobbers reg byte a 
Statement [57] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#19 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#19 ] ) always clobbers reg byte a 
Statement [59] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#21 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#21 ] ) always clobbers reg byte a 
Statement [61] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#23 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#23 ] ) always clobbers reg byte a 
Statement [63] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#25 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#25 ] ) always clobbers reg byte a 
Statement [65] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#27 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#27 ] ) always clobbers reg byte a 
Statement [67] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#29 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#29 ] ) always clobbers reg byte a 
Statement [69] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#31 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#31 ] ) always clobbers reg byte a 
Statement [71] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#33 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#33 ] ) always clobbers reg byte a 
Statement [73] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#35 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#35 ] ) always clobbers reg byte a 
Statement [75] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#37 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#37 ] ) always clobbers reg byte a 
Statement [77] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#39 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#39 ] ) always clobbers reg byte a 
Statement [79] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#41 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#41 ] ) always clobbers reg byte a 
Statement [81] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#43 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#43 ] ) always clobbers reg byte a 
Statement [83] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#45 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#45 ] ) always clobbers reg byte a 
Statement [85] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#47 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#47 ] ) always clobbers reg byte a 
Statement [87] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#49 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#49 ] ) always clobbers reg byte a 
Statement [89] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#51 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#51 ] ) always clobbers reg byte a 
Statement [91] (byte) doplasma::val#53 ← (byte) doplasma::val#51 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#53 ] ( main:2::doplasma:17 [ c1A#3 c1B#3 c2A#3 c2B#3 doplasma::i2#11 doplasma::val#53 ] ) always clobbers reg byte a 
Statement [102] (byte~) makecharset::$3 ← < (word) makecharset::c#16 [ makecharset::c#16 print_char_cursor#52 makecharset::$3 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::$3 ] ) always clobbers reg byte a 
Statement [111] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::ii#10 makecharset::b#1 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::ii#10 makecharset::b#1 ] ) always clobbers reg byte a 
Statement [115] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$10 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$10 ] ) always clobbers reg byte a 
Statement [116] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$11 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$11 ] ) always clobbers reg byte a 
Statement [117] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$16 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 makecharset::b#2 makecharset::$16 ] ) always clobbers reg byte a 
Statement [118] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::s#0 makecharset::i#13 ] ) always clobbers reg byte a reg byte y 
Statement [121] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 [ makecharset::c#16 print_char_cursor#52 makecharset::$12 ] ( main:2::makecharset:12 [ makecharset::c#16 print_char_cursor#52 makecharset::$12 ] ) always clobbers reg byte a 
Statement [127] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 [ makecharset::c#1 print_char_cursor#18 ] ( main:2::makecharset:12 [ makecharset::c#1 print_char_cursor#18 ] ) always clobbers reg byte a 
Statement [129] *((byte*) print_char_cursor#52) ← (const byte) print_char::ch#0 [ print_char_cursor#52 ] ( main:2::makecharset:12::print_char:124 [ makecharset::c#16 print_char_cursor#52 ] ) always clobbers reg byte a reg byte y 
Statement [139] *((byte*) memset::dst#4) ← (const byte) memset::c#0 [ memset::dst#4 ] ( main:2::makecharset:12::print_cls:100::memset:135 [ memset::dst#4 ] ) always clobbers reg byte a reg byte y 
Statement [141] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#1 ] ( main:2::makecharset:12::print_cls:100::memset:135 [ memset::dst#1 ] ) always clobbers reg byte a 
Statement [143] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] ) always clobbers reg byte a 
Statement [144] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] ) always clobbers reg byte a 
Potential registers zp ZP_WORD:2 [ main::col#2 main::col#1 ] : zp ZP_WORD:2 , 
Potential registers zp ZP_BYTE:4 [ c1A#1 c1A#3 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:5 [ c1B#1 c1B#3 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:6 [ c2A#1 c2A#3 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:7 [ c2B#1 c2B#3 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] : zp ZP_BYTE:10 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:11 [ doplasma::yprev#4 doplasma::yprev#6 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:12 [ doplasma::i1#4 doplasma::i1#1 ] : zp ZP_BYTE:12 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:13 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] : zp ZP_BYTE:13 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:14 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:15 [ doplasma::i2#11 doplasma::i2#1 ] : zp ZP_BYTE:15 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:16 [ makecharset::c#16 makecharset::c#1 ] : zp ZP_WORD:16 , 
Potential registers zp ZP_WORD:18 [ print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ] : zp ZP_WORD:18 , 
Potential registers zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ] : zp ZP_BYTE:20 , reg byte x , 
Potential registers zp ZP_BYTE:21 [ makecharset::ii#10 makecharset::ii#1 ] : zp ZP_BYTE:21 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:22 [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:23 [ memset::dst#4 memset::dst#1 ] : zp ZP_WORD:23 , 
Potential registers zp ZP_BYTE:25 [ doplasma::yprev#2 ] : zp ZP_BYTE:25 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:26 [ doplasma::$2 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:27 [ doplasma::$4 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:28 [ doplasma::val#0 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:29 [ doplasma::val#1 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:30 [ doplasma::val#7 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:31 [ doplasma::val#10 ] : zp ZP_BYTE:31 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:32 [ doplasma::val#11 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:33 [ doplasma::val#13 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:34 [ doplasma::val#15 ] : zp ZP_BYTE:34 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:35 [ doplasma::val#17 ] : zp ZP_BYTE:35 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:36 [ doplasma::val#19 ] : zp ZP_BYTE:36 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:37 [ doplasma::val#21 ] : zp ZP_BYTE:37 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:38 [ doplasma::val#23 ] : zp ZP_BYTE:38 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:39 [ doplasma::val#25 ] : zp ZP_BYTE:39 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:40 [ doplasma::val#27 ] : zp ZP_BYTE:40 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:41 [ doplasma::val#29 ] : zp ZP_BYTE:41 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:42 [ doplasma::val#31 ] : zp ZP_BYTE:42 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:43 [ doplasma::val#33 ] : zp ZP_BYTE:43 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:44 [ doplasma::val#35 ] : zp ZP_BYTE:44 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:45 [ doplasma::val#37 ] : zp ZP_BYTE:45 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:46 [ doplasma::val#39 ] : zp ZP_BYTE:46 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:47 [ doplasma::val#41 ] : zp ZP_BYTE:47 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:48 [ doplasma::val#43 ] : zp ZP_BYTE:48 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:49 [ doplasma::val#45 ] : zp ZP_BYTE:49 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:50 [ doplasma::val#47 ] : zp ZP_BYTE:50 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:51 [ doplasma::val#49 ] : zp ZP_BYTE:51 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:52 [ doplasma::val#51 ] : zp ZP_BYTE:52 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:53 [ doplasma::val#53 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:54 [ makecharset::$3 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:55 [ makecharset::s#0 ] : zp ZP_BYTE:55 , reg byte x , 
Potential registers zp ZP_BYTE:56 [ sid_rnd::return#2 ] : zp ZP_BYTE:56 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:57 [ makecharset::$6 ] : zp ZP_BYTE:57 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:58 [ makecharset::$7 ] : zp ZP_BYTE:58 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:59 [ makecharset::$10 ] : zp ZP_WORD:59 , 
Potential registers zp ZP_WORD:61 [ makecharset::$11 ] : zp ZP_WORD:61 , 
Potential registers zp ZP_WORD:63 [ makecharset::$16 ] : zp ZP_WORD:63 , 
Potential registers zp ZP_BYTE:65 [ makecharset::$12 ] : zp ZP_BYTE:65 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:66 [ sid_rnd::return#0 ] : zp ZP_BYTE:66 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [makecharset] 3,019.83: zp ZP_BYTE:22 [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] 2,002: zp ZP_BYTE:57 [ makecharset::$6 ] 2,002: zp ZP_BYTE:58 [ makecharset::$7 ] 1,876.88: zp ZP_BYTE:21 [ makecharset::ii#10 makecharset::ii#1 ] 202: zp ZP_WORD:59 [ makecharset::$10 ] 202: zp ZP_WORD:61 [ makecharset::$11 ] 202: zp ZP_WORD:63 [ makecharset::$16 ] 171.7: zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ] 56.22: zp ZP_BYTE:55 [ makecharset::s#0 ] 22.3: zp ZP_WORD:16 [ makecharset::c#16 makecharset::c#1 ] 22: zp ZP_BYTE:54 [ makecharset::$3 ] 22: zp ZP_BYTE:65 [ makecharset::$12 ] 
Uplift Scope [doplasma] 303: zp ZP_BYTE:11 [ doplasma::yprev#4 doplasma::yprev#6 ] 212.1: zp ZP_BYTE:12 [ doplasma::i1#4 doplasma::i1#1 ] 205.88: zp ZP_BYTE:15 [ doplasma::i2#11 doplasma::i2#1 ] 202: zp ZP_BYTE:26 [ doplasma::$2 ] 202: zp ZP_BYTE:27 [ doplasma::$4 ] 202: zp ZP_BYTE:28 [ doplasma::val#0 ] 202: zp ZP_BYTE:53 [ doplasma::val#53 ] 154.17: zp ZP_BYTE:13 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] 151.5: zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] 151.5: zp ZP_BYTE:29 [ doplasma::val#1 ] 151.5: zp ZP_BYTE:30 [ doplasma::val#7 ] 151.5: zp ZP_BYTE:31 [ doplasma::val#10 ] 151.5: zp ZP_BYTE:32 [ doplasma::val#11 ] 151.5: zp ZP_BYTE:33 [ doplasma::val#13 ] 151.5: zp ZP_BYTE:34 [ doplasma::val#15 ] 151.5: zp ZP_BYTE:35 [ doplasma::val#17 ] 151.5: zp ZP_BYTE:36 [ doplasma::val#19 ] 151.5: zp ZP_BYTE:37 [ doplasma::val#21 ] 151.5: zp ZP_BYTE:38 [ doplasma::val#23 ] 151.5: zp ZP_BYTE:39 [ doplasma::val#25 ] 151.5: zp ZP_BYTE:40 [ doplasma::val#27 ] 151.5: zp ZP_BYTE:41 [ doplasma::val#29 ] 151.5: zp ZP_BYTE:42 [ doplasma::val#31 ] 151.5: zp ZP_BYTE:43 [ doplasma::val#33 ] 151.5: zp ZP_BYTE:44 [ doplasma::val#35 ] 151.5: zp ZP_BYTE:45 [ doplasma::val#37 ] 151.5: zp ZP_BYTE:46 [ doplasma::val#39 ] 151.5: zp ZP_BYTE:47 [ doplasma::val#41 ] 151.5: zp ZP_BYTE:48 [ doplasma::val#43 ] 151.5: zp ZP_BYTE:49 [ doplasma::val#45 ] 151.5: zp ZP_BYTE:50 [ doplasma::val#47 ] 151.5: zp ZP_BYTE:51 [ doplasma::val#49 ] 151.5: zp ZP_BYTE:52 [ doplasma::val#51 ] 147.58: zp ZP_BYTE:14 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] 118.65: zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] 115.5: zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] 43.29: zp ZP_BYTE:25 [ doplasma::yprev#2 ] 
Uplift Scope [sid_rnd] 2,002: zp ZP_BYTE:56 [ sid_rnd::return#2 ] 334.33: zp ZP_BYTE:66 [ sid_rnd::return#0 ] 
Uplift Scope [memset] 33: zp ZP_WORD:23 [ memset::dst#4 memset::dst#1 ] 
Uplift Scope [main] 33: zp ZP_WORD:2 [ main::col#2 main::col#1 ] 
Uplift Scope [] 16.42: zp ZP_WORD:18 [ print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ] 1.34: zp ZP_BYTE:4 [ c1A#1 c1A#3 ] 1.26: zp ZP_BYTE:5 [ c1B#1 c1B#3 ] 0.85: zp ZP_BYTE:6 [ c2A#1 c2A#3 ] 0.83: zp ZP_BYTE:7 [ c2B#1 c2B#3 ] 
Uplift Scope [RADIX] 
Uplift Scope [print_char] 
Uplift Scope [print_cls] 
Uplift Scope [sid_rnd_init] 

Uplifting [makecharset] best 169344 combination reg byte y [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ] reg byte a [ makecharset::$6 ] zp ZP_BYTE:58 [ makecharset::$7 ] reg byte x [ makecharset::ii#10 makecharset::ii#1 ] zp ZP_WORD:59 [ makecharset::$10 ] zp ZP_WORD:61 [ makecharset::$11 ] zp ZP_WORD:63 [ makecharset::$16 ] zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ] zp ZP_BYTE:55 [ makecharset::s#0 ] zp ZP_WORD:16 [ makecharset::c#16 makecharset::c#1 ] zp ZP_BYTE:54 [ makecharset::$3 ] zp ZP_BYTE:65 [ makecharset::$12 ] 
Limited combination testing to 100 combinations of 9216 possible.
Uplifting [sid_rnd] best 160341 combination reg byte a [ sid_rnd::return#2 ] reg byte a [ sid_rnd::return#0 ] 
Uplifting [memset] best 160341 combination zp ZP_WORD:23 [ memset::dst#4 memset::dst#1 ] 
Uplifting [main] best 160341 combination zp ZP_WORD:2 [ main::col#2 main::col#1 ] 
Uplifting [] best 160341 combination zp ZP_WORD:18 [ print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ] zp ZP_BYTE:4 [ c1A#1 c1A#3 ] zp ZP_BYTE:5 [ c1B#1 c1B#3 ] zp ZP_BYTE:6 [ c2A#1 c2A#3 ] zp ZP_BYTE:7 [ c2B#1 c2B#3 ] 
Uplifting [RADIX] best 160341 combination 
Uplifting [print_char] best 160341 combination 
Uplifting [print_cls] best 160341 combination 
Uplifting [sid_rnd_init] best 160341 combination 
Attempting to uplift remaining variables inzp ZP_BYTE:58 [ makecharset::$7 ]
Uplifting [makecharset] best 160341 combination zp ZP_BYTE:58 [ makecharset::$7 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:11 [ doplasma::yprev#4 doplasma::yprev#6 ]
Uplifting [doplasma] best 159841 combination reg byte x [ doplasma::yprev#4 doplasma::yprev#6 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:12 [ doplasma::i1#4 doplasma::i1#1 ]
Uplifting [doplasma] best 159841 combination zp ZP_BYTE:12 [ doplasma::i1#4 doplasma::i1#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:15 [ doplasma::i2#11 doplasma::i2#1 ]
Uplifting [doplasma] best 151141 combination reg byte x [ doplasma::i2#11 doplasma::i2#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:26 [ doplasma::$2 ]
Uplifting [doplasma] best 150541 combination reg byte a [ doplasma::$2 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:27 [ doplasma::$4 ]
Uplifting [doplasma] best 149941 combination reg byte a [ doplasma::$4 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:28 [ doplasma::val#0 ]
Uplifting [doplasma] best 149341 combination reg byte a [ doplasma::val#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:53 [ doplasma::val#53 ]
Uplifting [doplasma] best 148741 combination reg byte a [ doplasma::val#53 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ]
Uplifting [makecharset] best 148741 combination zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ]
Uplifting [doplasma] best 148741 combination zp ZP_BYTE:13 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ]
Uplifting [doplasma] best 148741 combination zp ZP_BYTE:8 [ doplasma::i#4 doplasma::i#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:29 [ doplasma::val#1 ]
Uplifting [doplasma] best 147841 combination reg byte a [ doplasma::val#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:30 [ doplasma::val#7 ]
Uplifting [doplasma] best 146941 combination reg byte a [ doplasma::val#7 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:31 [ doplasma::val#10 ]
Uplifting [doplasma] best 146041 combination reg byte a [ doplasma::val#10 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:32 [ doplasma::val#11 ]
Uplifting [doplasma] best 145141 combination reg byte a [ doplasma::val#11 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:33 [ doplasma::val#13 ]
Uplifting [doplasma] best 144241 combination reg byte a [ doplasma::val#13 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:34 [ doplasma::val#15 ]
Uplifting [doplasma] best 143341 combination reg byte a [ doplasma::val#15 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:35 [ doplasma::val#17 ]
Uplifting [doplasma] best 142441 combination reg byte a [ doplasma::val#17 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:36 [ doplasma::val#19 ]
Uplifting [doplasma] best 141541 combination reg byte a [ doplasma::val#19 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:37 [ doplasma::val#21 ]
Uplifting [doplasma] best 140641 combination reg byte a [ doplasma::val#21 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:38 [ doplasma::val#23 ]
Uplifting [doplasma] best 139741 combination reg byte a [ doplasma::val#23 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:39 [ doplasma::val#25 ]
Uplifting [doplasma] best 138841 combination reg byte a [ doplasma::val#25 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:40 [ doplasma::val#27 ]
Uplifting [doplasma] best 137941 combination reg byte a [ doplasma::val#27 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:41 [ doplasma::val#29 ]
Uplifting [doplasma] best 137041 combination reg byte a [ doplasma::val#29 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:42 [ doplasma::val#31 ]
Uplifting [doplasma] best 136141 combination reg byte a [ doplasma::val#31 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:43 [ doplasma::val#33 ]
Uplifting [doplasma] best 135241 combination reg byte a [ doplasma::val#33 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:44 [ doplasma::val#35 ]
Uplifting [doplasma] best 134341 combination reg byte a [ doplasma::val#35 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:45 [ doplasma::val#37 ]
Uplifting [doplasma] best 133441 combination reg byte a [ doplasma::val#37 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:46 [ doplasma::val#39 ]
Uplifting [doplasma] best 132541 combination reg byte a [ doplasma::val#39 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:47 [ doplasma::val#41 ]
Uplifting [doplasma] best 131641 combination reg byte a [ doplasma::val#41 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:48 [ doplasma::val#43 ]
Uplifting [doplasma] best 130741 combination reg byte a [ doplasma::val#43 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:49 [ doplasma::val#45 ]
Uplifting [doplasma] best 129841 combination reg byte a [ doplasma::val#45 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:50 [ doplasma::val#47 ]
Uplifting [doplasma] best 128941 combination reg byte a [ doplasma::val#47 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:51 [ doplasma::val#49 ]
Uplifting [doplasma] best 128041 combination reg byte a [ doplasma::val#49 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:52 [ doplasma::val#51 ]
Uplifting [doplasma] best 127141 combination reg byte a [ doplasma::val#51 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:14 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ]
Uplifting [doplasma] best 127141 combination zp ZP_BYTE:14 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ]
Uplifting [doplasma] best 127141 combination zp ZP_BYTE:9 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ]
Uplifting [doplasma] best 127141 combination zp ZP_BYTE:10 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:55 [ makecharset::s#0 ]
Uplifting [makecharset] best 127141 combination zp ZP_BYTE:55 [ makecharset::s#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:25 [ doplasma::yprev#2 ]
Uplifting [doplasma] best 127141 combination zp ZP_BYTE:25 [ doplasma::yprev#2 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:54 [ makecharset::$3 ]
Uplifting [makecharset] best 127101 combination reg byte a [ makecharset::$3 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:65 [ makecharset::$12 ]
Uplifting [makecharset] best 127041 combination reg byte a [ makecharset::$12 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ c1A#1 c1A#3 ]
Uplifting [] best 127041 combination zp ZP_BYTE:4 [ c1A#1 c1A#3 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ c1B#1 c1B#3 ]
Uplifting [] best 127041 combination zp ZP_BYTE:5 [ c1B#1 c1B#3 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ c2A#1 c2A#3 ]
Uplifting [] best 127041 combination zp ZP_BYTE:6 [ c2A#1 c2A#3 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ c2B#1 c2B#3 ]
Uplifting [] best 127041 combination zp ZP_BYTE:7 [ c2B#1 c2B#3 ] 
Coalescing zero page register [ zp ZP_WORD:59 [ makecharset::$10 ] ] with [ zp ZP_WORD:61 [ makecharset::$11 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:59 [ makecharset::$10 makecharset::$11 ] ] with [ zp ZP_WORD:63 [ makecharset::$16 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:16 [ makecharset::c#16 makecharset::c#1 ] ] with [ zp ZP_WORD:2 [ main::col#2 main::col#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:20 [ makecharset::i#13 makecharset::i#1 ] ] with [ zp ZP_BYTE:4 [ c1A#1 c1A#3 ] ]
Coalescing zero page register [ zp ZP_WORD:23 [ memset::dst#4 memset::dst#1 ] ] with [ zp ZP_WORD:18 [ print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:55 [ makecharset::s#0 ] ] with [ zp ZP_BYTE:5 [ c1B#1 c1B#3 ] ]
Coalescing zero page register [ zp ZP_BYTE:58 [ makecharset::$7 ] ] with [ zp ZP_BYTE:6 [ c2A#1 c2A#3 ] ]
Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:2 [ c2B#1 c2B#3 ]
Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:3 [ doplasma::i#4 doplasma::i#1 ]
Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:4 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ]
Allocated (was zp ZP_BYTE:10) zp ZP_BYTE:5 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ]
Allocated (was zp ZP_BYTE:12) zp ZP_BYTE:6 [ doplasma::i1#4 doplasma::i1#1 ]
Allocated (was zp ZP_BYTE:13) zp ZP_BYTE:7 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ]
Allocated (was zp ZP_BYTE:14) zp ZP_BYTE:8 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ]
Allocated (was zp ZP_WORD:16) zp ZP_WORD:9 [ makecharset::c#16 makecharset::c#1 main::col#2 main::col#1 ]
Allocated (was zp ZP_BYTE:20) zp ZP_BYTE:11 [ makecharset::i#13 makecharset::i#1 c1A#1 c1A#3 ]
Allocated (was zp ZP_WORD:23) zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ]
Allocated (was zp ZP_BYTE:25) zp ZP_BYTE:14 [ doplasma::yprev#2 ]
Allocated (was zp ZP_BYTE:55) zp ZP_BYTE:15 [ makecharset::s#0 c1B#1 c1B#3 ]
Allocated (was zp ZP_BYTE:58) zp ZP_BYTE:16 [ makecharset::$7 c2A#1 c2A#3 ]
Allocated (was zp ZP_WORD:59) zp ZP_WORD:17 [ makecharset::$10 makecharset::$11 makecharset::$16 ]

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
// A KickC version of the plasma routine from the CC65 samples
// This version has an unrolled inner loop to reach 50+FPS
// This version also optimizes the inner loop by calculating the Y buffer as a set of differences
// (w)2001 by groepaz/hitmen
// Cleanup and porting to CC65 by Ullrich von Bassewitz.
// Ported to KickC by Jesper Gravgaard.
// Original source https://github.com/cc65/cc65/blob/master/samples/plasma.c
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .label BORDERCOL = $d020
  .label BGCOL = $d021
  .label D018 = $d018
  // Color Ram
  .label COLS = $d800
  // The colors of the C64
  .const BLACK = 0
  .const BLUE = 6
  .label print_line_cursor = $400
  // SID registers for random number generation
  .label SID_VOICE3_FREQ = $d40e
  .label SID_VOICE3_CONTROL = $d412
  .const SID_CONTROL_NOISE = $80
  .label SID_VOICE3_OSC = $d41b
  .label SCREEN1 = $2800
  .label CHARSET = $2000
  .label print_char_cursor = $c
  .label c1A = $b
  .label c1B = $f
  .label c2A = $10
  .label c2B = 2
  // @begin
bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
  jmp b1
  // @1
b1:
  // [2] call main 
  jsr main
  // [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
  jmp bend
  // @end
bend:
  // main
main: {
    .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f
    .label col = 9
    // asm { sei  }
    sei
    // [5] *((const byte*) BORDERCOL#0) ← (const byte) BLUE#0 -- _deref_pbuc1=vbuc2 
    lda #BLUE
    sta BORDERCOL
    // [6] *((const byte*) BGCOL#0) ← (const byte) BLUE#0 -- _deref_pbuc1=vbuc2 
    lda #BLUE
    sta BGCOL
    // [7] phi from main to main::@1 [phi:main->main::@1]
  b1_from_main:
    // [7] phi (byte*) main::col#2 = (const byte*) COLS#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 
    lda #<COLS
    sta.z col
    lda #>COLS
    sta.z col+1
    jmp b1
    // [7] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
  b1_from_b1:
    // [7] phi (byte*) main::col#2 = (byte*) main::col#1 [phi:main::@1->main::@1#0] -- register_copy 
    jmp b1
    // main::@1
  b1:
    // [8] *((byte*) main::col#2) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 
    lda #BLACK
    ldy #0
    sta (col),y
    // [9] (byte*) main::col#1 ← ++ (byte*) main::col#2 -- pbuz1=_inc_pbuz1 
    inc.z col
    bne !+
    inc.z col+1
  !:
    // [10] if((byte*) main::col#1!=(const byte*) COLS#0+(word) $3e8+(byte) 1) goto main::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda.z col+1
    cmp #>COLS+$3e8+1
    bne b1_from_b1
    lda.z col
    cmp #<COLS+$3e8+1
    bne b1_from_b1
    // [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  b2_from_b1:
    jmp b2
    // main::@2
  b2:
    // [12] call makecharset 
    // [97] phi from main::@2 to makecharset [phi:main::@2->makecharset]
  makecharset_from_b2:
    jsr makecharset
    // [13] phi from main::@2 to main::toD0181 [phi:main::@2->main::toD0181]
  toD0181_from_b2:
    jmp toD0181
    // main::toD0181
  toD0181:
    jmp b5
    // main::@5
  b5:
    // [14] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // [15] phi from main::@5 to main::@3 [phi:main::@5->main::@3]
  b3_from_b5:
    // [15] phi (byte) c2B#1 = (byte) 0 [phi:main::@5->main::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta.z c2B
    // [15] phi (byte) c2A#1 = (byte) 0 [phi:main::@5->main::@3#1] -- vbuz1=vbuc1 
    lda #0
    sta.z c2A
    // [15] phi (byte) c1B#1 = (byte) 0 [phi:main::@5->main::@3#2] -- vbuz1=vbuc1 
    lda #0
    sta.z c1B
    // [15] phi (byte) c1A#1 = (byte) 0 [phi:main::@5->main::@3#3] -- vbuz1=vbuc1 
    lda #0
    sta.z c1A
    jmp b3
    // main::@3
  b3:
    // [16] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  b4_from_b3:
    jmp b4
    // main::@4
  b4:
    // [17] call doplasma 
    jsr doplasma
    // [15] phi from main::@4 to main::@3 [phi:main::@4->main::@3]
  b3_from_b4:
    // [15] phi (byte) c2B#1 = (byte) c2B#3 [phi:main::@4->main::@3#0] -- register_copy 
    // [15] phi (byte) c2A#1 = (byte) c2A#3 [phi:main::@4->main::@3#1] -- register_copy 
    // [15] phi (byte) c1B#1 = (byte) c1B#3 [phi:main::@4->main::@3#2] -- register_copy 
    // [15] phi (byte) c1A#1 = (byte) c1A#3 [phi:main::@4->main::@3#3] -- register_copy 
    jmp b3
}
  // doplasma
// Render plasma to the passed screen
doplasma: {
    .label c1a = 4
    .label c1b = 5
    .label i = 3
    .label c2a = 7
    .label c2b = 8
    .label i1 = 6
    .label yprev = $e
    // [18] (byte) doplasma::c1a#0 ← (byte) c1A#1 -- vbuz1=vbuz2 
    lda.z c1A
    sta.z c1a
    // [19] (byte) doplasma::c1b#0 ← (byte) c1B#1 -- vbuz1=vbuz2 
    lda.z c1B
    sta.z c1b
    // [20] phi from doplasma to doplasma::@2 [phi:doplasma->doplasma::@2]
  b2_from_doplasma:
    // [20] phi (byte) doplasma::yprev#4 = (byte) 0 [phi:doplasma->doplasma::@2#0] -- vbuxx=vbuc1 
    ldx #0
    // [20] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@2#1] -- register_copy 
    // [20] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@2#2] -- register_copy 
    // [20] phi (byte) doplasma::i#4 = (byte) 0 [phi:doplasma->doplasma::@2#3] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp b2
    // doplasma::@2
  b2:
    // [21] (byte) doplasma::yprev#2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
    ldy.z c1a
    lda SINTABLE,y
    ldy.z c1b
    clc
    adc SINTABLE,y
    sta.z yprev
    // [22] (byte~) doplasma::$2 ← (byte) doplasma::yprev#2 - (byte) doplasma::yprev#4 -- vbuaa=vbuz1_minus_vbuxx 
    txa
    eor #$ff
    sec
    adc.z yprev
    // [23] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#4) ← (byte~) doplasma::$2 -- pbuc1_derefidx_vbuz1=vbuaa 
    ldy.z i
    sta ybuf,y
    // [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1a
    axs #-[4]
    stx.z c1a
    // [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1b
    axs #-[9]
    stx.z c1b
    // [26] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#4 -- vbuz1=_inc_vbuz1 
    inc.z i
    jmp b1
  // Calculate ybuff as a bunch of differences
    // doplasma::@1
  b1:
    // [27] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@11 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #$19
    bcc b11
    jmp b3
    // doplasma::@3
  b3:
    // [28] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1A
    axs #-[3]
    stx.z c1A
    // [29] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 
    lax.z c1B
    axs #5
    stx.z c1B
    // [30] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 
    lda.z c2A
    sta.z c2a
    // [31] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 
    lda.z c2B
    sta.z c2b
    // [32] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5]
  b5_from_b3:
    // [32] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@5#0] -- register_copy 
    // [32] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@5#1] -- register_copy 
    // [32] phi (byte) doplasma::i1#4 = (byte) 0 [phi:doplasma::@3->doplasma::@5#2] -- vbuz1=vbuc1 
    lda #0
    sta.z i1
    jmp b5
    // [32] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5]
  b5_from_b4:
    // [32] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#1 [phi:doplasma::@4->doplasma::@5#0] -- register_copy 
    // [32] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#1 [phi:doplasma::@4->doplasma::@5#1] -- register_copy 
    // [32] phi (byte) doplasma::i1#4 = (byte) doplasma::i1#1 [phi:doplasma::@4->doplasma::@5#2] -- register_copy 
    jmp b5
    // doplasma::@5
  b5:
    // [33] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
    ldy.z c2a
    lda SINTABLE,y
    ldy.z c2b
    clc
    adc SINTABLE,y
    // [34] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#4) ← (byte~) doplasma::$4 -- pbuc1_derefidx_vbuz1=vbuaa 
    ldy.z i1
    sta xbuf,y
    // [35] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c2a
    axs #-[3]
    stx.z c2a
    // [36] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c2b
    axs #-[7]
    stx.z c2b
    // [37] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#4 -- vbuz1=_inc_vbuz1 
    inc.z i1
    jmp b4
    // doplasma::@4
  b4:
    // [38] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i1
    cmp #$28
    bcc b5_from_b4
    jmp b6
    // doplasma::@6
  b6:
    // [39] (byte) c2A#3 ← (byte) c2A#1 + (byte) 2 -- vbuz1=vbuz1_plus_2 
    lda.z c2A
    clc
    adc #2
    sta.z c2A
    // [40] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 
    lax.z c2B
    axs #3
    stx.z c2B
    // [41] phi from doplasma::@6 to doplasma::@8 [phi:doplasma::@6->doplasma::@8]
  b8_from_b6:
    // [41] phi (byte) doplasma::i2#11 = (byte) 0 [phi:doplasma::@6->doplasma::@8#0] -- vbuxx=vbuc1 
    ldx #0
    jmp b8
    // [41] phi from doplasma::@7 to doplasma::@8 [phi:doplasma::@7->doplasma::@8]
  b8_from_b7:
    // [41] phi (byte) doplasma::i2#11 = (byte) doplasma::i2#1 [phi:doplasma::@7->doplasma::@8#0] -- register_copy 
    jmp b8
    // doplasma::@8
  b8:
    // [42] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#11) -- vbuaa=pbuc1_derefidx_vbuxx 
    // Find the first value on the row
    lda xbuf,x
    jmp b9
    // doplasma::@9
  b9:
    // [43] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf
    // [44] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#11) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1,x
    jmp b17_1
    // doplasma::@17_1
  b17_1:
    // [45] (byte) doplasma::val#7 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+1
    // [46] *((const byte*) SCREEN1#0+(byte) 1*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#7 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+1*$28,x
    jmp b17_2
    // doplasma::@17_2
  b17_2:
    // [47] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+2
    // [48] *((const byte*) SCREEN1#0+(byte) 2*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+2*$28,x
    jmp b17_3
    // doplasma::@17_3
  b17_3:
    // [49] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+3
    // [50] *((const byte*) SCREEN1#0+(byte) 3*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#11 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+3*$28,x
    jmp b17_4
    // doplasma::@17_4
  b17_4:
    // [51] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+4
    // [52] *((const byte*) SCREEN1#0+(byte) 4*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#13 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+4*$28,x
    jmp b17_5
    // doplasma::@17_5
  b17_5:
    // [53] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+5
    // [54] *((const byte*) SCREEN1#0+(byte) 5*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#15 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+5*$28,x
    jmp b17_6
    // doplasma::@17_6
  b17_6:
    // [55] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+6
    // [56] *((const byte*) SCREEN1#0+(byte) 6*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#17 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+6*$28,x
    jmp b17_7
    // doplasma::@17_7
  b17_7:
    // [57] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+7
    // [58] *((const byte*) SCREEN1#0+(byte) 7*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#19 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+7*$28,x
    jmp b17_8
    // doplasma::@17_8
  b17_8:
    // [59] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+8
    // [60] *((const byte*) SCREEN1#0+(byte) 8*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#21 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+8*$28,x
    jmp b17_9
    // doplasma::@17_9
  b17_9:
    // [61] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+9
    // [62] *((const byte*) SCREEN1#0+(byte) 9*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#23 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+9*$28,x
    jmp b17_10
    // doplasma::@17_10
  b17_10:
    // [63] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$a
    // [64] *((const byte*) SCREEN1#0+(byte) $a*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#25 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$a*$28,x
    jmp b17_11
    // doplasma::@17_11
  b17_11:
    // [65] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$b
    // [66] *((const byte*) SCREEN1#0+(byte) $b*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#27 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$b*$28,x
    jmp b17_12
    // doplasma::@17_12
  b17_12:
    // [67] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$c
    // [68] *((const byte*) SCREEN1#0+(byte) $c*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#29 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$c*$28,x
    jmp b17_13
    // doplasma::@17_13
  b17_13:
    // [69] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$d
    // [70] *((const byte*) SCREEN1#0+(byte) $d*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#31 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$d*$28,x
    jmp b17_14
    // doplasma::@17_14
  b17_14:
    // [71] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$e
    // [72] *((const byte*) SCREEN1#0+(byte) $e*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#33 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$e*$28,x
    jmp b17_15
    // doplasma::@17_15
  b17_15:
    // [73] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$f
    // [74] *((const byte*) SCREEN1#0+(byte) $f*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#35 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$f*$28,x
    jmp b17_16
    // doplasma::@17_16
  b17_16:
    // [75] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$10
    // [76] *((const byte*) SCREEN1#0+(byte) $10*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#37 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$10*$28,x
    jmp b17_17
    // doplasma::@17_17
  b17_17:
    // [77] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$11
    // [78] *((const byte*) SCREEN1#0+(byte) $11*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#39 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$11*$28,x
    jmp b17_18
    // doplasma::@17_18
  b17_18:
    // [79] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$12
    // [80] *((const byte*) SCREEN1#0+(byte) $12*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#41 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$12*$28,x
    jmp b17_19
    // doplasma::@17_19
  b17_19:
    // [81] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$13
    // [82] *((const byte*) SCREEN1#0+(byte) $13*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#43 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$13*$28,x
    jmp b17_20
    // doplasma::@17_20
  b17_20:
    // [83] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$14
    // [84] *((const byte*) SCREEN1#0+(byte) $14*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#45 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$14*$28,x
    jmp b17_21
    // doplasma::@17_21
  b17_21:
    // [85] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$15
    // [86] *((const byte*) SCREEN1#0+(byte) $15*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#47 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$15*$28,x
    jmp b17_22
    // doplasma::@17_22
  b17_22:
    // [87] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$16
    // [88] *((const byte*) SCREEN1#0+(byte) $16*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#49 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$16*$28,x
    jmp b17_23
    // doplasma::@17_23
  b17_23:
    // [89] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$17
    // [90] *((const byte*) SCREEN1#0+(byte) $17*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#51 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$17*$28,x
    jmp b17_24
    // doplasma::@17_24
  b17_24:
    // [91] (byte) doplasma::val#53 ← (byte) doplasma::val#51 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$18
    // [92] *((const byte*) SCREEN1#0+(byte) $18*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#53 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$18*$28,x
    jmp b10
    // doplasma::@10
  b10:
    // [93] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#11 -- vbuxx=_inc_vbuxx 
    inx
    jmp b7
    // doplasma::@7
  b7:
    // [94] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@8 -- vbuxx_lt_vbuc1_then_la1 
    cpx #$28
    bcc b8_from_b7
    jmp breturn
    // doplasma::@return
  breturn:
    // [95] return 
    rts
    // doplasma::@11
  b11:
    // [96] (byte~) doplasma::yprev#6 ← (byte) doplasma::yprev#2 -- vbuxx=vbuz1 
    ldx.z yprev
    // [20] phi from doplasma::@11 to doplasma::@2 [phi:doplasma::@11->doplasma::@2]
  b2_from_b11:
    // [20] phi (byte) doplasma::yprev#4 = (byte~) doplasma::yprev#6 [phi:doplasma::@11->doplasma::@2#0] -- register_copy 
    // [20] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#1 [phi:doplasma::@11->doplasma::@2#1] -- register_copy 
    // [20] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#1 [phi:doplasma::@11->doplasma::@2#2] -- register_copy 
    // [20] phi (byte) doplasma::i#4 = (byte) doplasma::i#1 [phi:doplasma::@11->doplasma::@2#3] -- register_copy 
    jmp b2
    xbuf: .fill $28, 0
    ybuf: .fill $19, 0
}
  // makecharset
// Make a plasma-friendly charset where the chars are randomly filled
makecharset: {
    .label _7 = $10
    .label _10 = $11
    .label _11 = $11
    .label s = $f
    .label i = $b
    .label c = 9
    .label _16 = $11
    // [98] call sid_rnd_init 
    jsr sid_rnd_init
    // [99] phi from makecharset to makecharset::@13 [phi:makecharset->makecharset::@13]
  b13_from_makecharset:
    jmp b13
    // makecharset::@13
  b13:
    // [100] call print_cls 
    // [134] phi from makecharset::@13 to print_cls [phi:makecharset::@13->print_cls]
  print_cls_from_b13:
    jsr print_cls
    // [101] phi from makecharset::@13 to makecharset::@2 [phi:makecharset::@13->makecharset::@2]
  b2_from_b13:
    // [101] phi (byte*) print_char_cursor#52 = (const byte*) print_line_cursor#0 [phi:makecharset::@13->makecharset::@2#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta.z print_char_cursor
    lda #>print_line_cursor
    sta.z print_char_cursor+1
    // [101] phi (word) makecharset::c#16 = (byte) 0 [phi:makecharset::@13->makecharset::@2#1] -- vwuz1=vbuc1 
    lda #<0
    sta.z c
    lda #>0
    sta.z c+1
    jmp b2
    // [101] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2]
  b2_from_b1:
    // [101] phi (byte*) print_char_cursor#52 = (byte*) print_char_cursor#18 [phi:makecharset::@1->makecharset::@2#0] -- register_copy 
    // [101] phi (word) makecharset::c#16 = (word) makecharset::c#1 [phi:makecharset::@1->makecharset::@2#1] -- register_copy 
    jmp b2
    // makecharset::@2
  b2:
    // [102] (byte~) makecharset::$3 ← < (word) makecharset::c#16 -- vbuaa=_lo_vwuz1 
    lda.z c
    // [103] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) -- vbuz1=pbuc1_derefidx_vbuaa 
    tay
    lda SINTABLE,y
    sta.z s
    // [104] phi from makecharset::@2 to makecharset::@4 [phi:makecharset::@2->makecharset::@4]
  b4_from_b2:
    // [104] phi (byte) makecharset::i#13 = (byte) 0 [phi:makecharset::@2->makecharset::@4#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp b4
    // [104] phi from makecharset::@3 to makecharset::@4 [phi:makecharset::@3->makecharset::@4]
  b4_from_b3:
    // [104] phi (byte) makecharset::i#13 = (byte) makecharset::i#1 [phi:makecharset::@3->makecharset::@4#0] -- register_copy 
    jmp b4
    // makecharset::@4
  b4:
    // [105] phi from makecharset::@4 to makecharset::@7 [phi:makecharset::@4->makecharset::@7]
  b7_from_b4:
    // [105] phi (byte) makecharset::b#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#0] -- vbuyy=vbuc1 
    ldy #0
    // [105] phi (byte) makecharset::ii#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#1] -- vbuxx=vbuc1 
    ldx #0
    jmp b7
    // [105] phi from makecharset::@6 to makecharset::@7 [phi:makecharset::@6->makecharset::@7]
  b7_from_b6:
    // [105] phi (byte) makecharset::b#10 = (byte) makecharset::b#2 [phi:makecharset::@6->makecharset::@7#0] -- register_copy 
    // [105] phi (byte) makecharset::ii#10 = (byte) makecharset::ii#1 [phi:makecharset::@6->makecharset::@7#1] -- register_copy 
    jmp b7
    // makecharset::@7
  b7:
    // [106] call sid_rnd 
    jsr sid_rnd
    // [107] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
    jmp b14
    // makecharset::@14
  b14:
    // [108] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2
    // [109] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 
    and #$ff
    sta.z _7
    // [110] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@9 -- vbuz1_le_vbuz2_then_la1 
    lda.z s
    cmp.z _7
    bcs b9_from_b14
    jmp b10
    // makecharset::@10
  b10:
    // [111] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx 
    tya
    ora bittab,x
    tay
    // [112] phi from makecharset::@10 makecharset::@14 to makecharset::@9 [phi:makecharset::@10/makecharset::@14->makecharset::@9]
  b9_from_b10:
  b9_from_b14:
    // [112] phi (byte) makecharset::b#2 = (byte) makecharset::b#1 [phi:makecharset::@10/makecharset::@14->makecharset::@9#0] -- register_copy 
    jmp b9
    // makecharset::@9
  b9:
    // [113] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#10 -- vbuxx=_inc_vbuxx 
    inx
    jmp b6
    // makecharset::@6
  b6:
    // [114] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@7 -- vbuxx_lt_vbuc1_then_la1 
    cpx #8
    bcc b7_from_b6
    jmp b8
    // makecharset::@8
  b8:
    // [115] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z c
    asl
    sta.z _10
    lda.z c+1
    rol
    sta.z _10+1
    asl.z _10
    rol.z _10+1
    asl.z _10
    rol.z _10+1
    // [116] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 -- vwuz1=vwuz1_plus_vbuz2 
    lda.z i
    clc
    adc.z _11
    sta.z _11
    bcc !+
    inc.z _11+1
  !:
    // [117] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z _16
    adc #<CHARSET
    sta.z _16
    lda.z _16+1
    adc #>CHARSET
    sta.z _16+1
    // [118] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuyy 
    tya
    ldy #0
    sta (_16),y
    // [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 -- vbuz1=_inc_vbuz1 
    inc.z i
    jmp b3
    // makecharset::@3
  b3:
    // [120] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@4 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #8
    bcc b4_from_b3
    jmp b5
    // makecharset::@5
  b5:
    // [121] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 
    lda.z c
    and #7
    // [122] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@12 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne b12_from_b5
    // [123] phi from makecharset::@5 to makecharset::@11 [phi:makecharset::@5->makecharset::@11]
  b11_from_b5:
    jmp b11
    // makecharset::@11
  b11:
    // [124] call print_char 
    jsr print_char
    // [125] phi from makecharset::@11 makecharset::@5 to makecharset::@12 [phi:makecharset::@11/makecharset::@5->makecharset::@12]
  b12_from_b11:
  b12_from_b5:
    // [125] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#1 [phi:makecharset::@11/makecharset::@5->makecharset::@12#0] -- register_copy 
    jmp b12
    // makecharset::@12
  b12:
    // [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#16 -- vwuz1=_inc_vwuz1 
    inc.z c
    bne !+
    inc.z c+1
  !:
    jmp b1
    // makecharset::@1
  b1:
    // [127] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 
    lda.z c+1
    cmp #>$100
    bcc b2_from_b1
    bne !+
    lda.z c
    cmp #<$100
    bcc b2_from_b1
  !:
    jmp breturn
    // makecharset::@return
  breturn:
    // [128] return 
    rts
    bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80
}
  // print_char
// Print a single char
print_char: {
    .const ch = '.'
    // [129] *((byte*) print_char_cursor#52) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
    lda #ch
    ldy #0
    sta (print_char_cursor),y
    // [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#52 -- pbuz1=_inc_pbuz1 
    inc.z print_char_cursor
    bne !+
    inc.z print_char_cursor+1
  !:
    jmp breturn
    // print_char::@return
  breturn:
    // [131] return 
    rts
}
  // sid_rnd
// Get a random number from the SID voice 3,
// Must be initialized with sid_rnd_init()
sid_rnd: {
    // [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 
    lda SID_VOICE3_OSC
    jmp breturn
    // sid_rnd::@return
  breturn:
    // [133] return 
    rts
}
  // print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    // [135] call memset 
    // [137] phi from print_cls to memset [phi:print_cls->memset]
  memset_from_print_cls:
    jsr memset
    jmp breturn
    // print_cls::@return
  breturn:
    // [136] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
memset: {
    .const c = ' '
    .const num = $3e8
    .label str = print_line_cursor
    .label end = str+num
    .label dst = $c
    // [138] phi from memset to memset::@2 [phi:memset->memset::@2]
  b2_from_memset:
    // [138] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 
    lda #<str
    sta.z dst
    lda #>str
    sta.z dst+1
    jmp b2
    // [138] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2]
  b2_from_b1:
    // [138] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy 
    jmp b2
    // memset::@2
  b2:
    // [139] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 
    lda #c
    ldy #0
    sta (dst),y
    // [140] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    jmp b1
    // memset::@1
  b1:
    // [141] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 
    lda.z dst+1
    cmp #>end
    bne b2_from_b1
    lda.z dst
    cmp #<end
    bne b2_from_b1
    jmp breturn
    // memset::@return
  breturn:
    // [142] return 
    rts
}
  // sid_rnd_init
// Initialize SID voice 3 for random number generation
sid_rnd_init: {
    // [143] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 
    lda #<$ffff
    sta SID_VOICE3_FREQ
    lda #>$ffff
    sta SID_VOICE3_FREQ+1
    // [144] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 
    lda #SID_CONTROL_NOISE
    sta SID_VOICE3_CONTROL
    jmp breturn
    // sid_rnd_init::@return
  breturn:
    // [145] return 
    rts
}
  // File Data
  .align $100
SINTABLE:
.for(var i=0;i<$100;i++)
        .byte round(127.5+127.5*sin(toRadians(360*i/256)))


ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b1
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp toD0181
Removing instruction jmp b5
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b2
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b5
Removing instruction jmp b4
Removing instruction jmp b6
Removing instruction jmp b8
Removing instruction jmp b9
Removing instruction jmp b17_1
Removing instruction jmp b17_2
Removing instruction jmp b17_3
Removing instruction jmp b17_4
Removing instruction jmp b17_5
Removing instruction jmp b17_6
Removing instruction jmp b17_7
Removing instruction jmp b17_8
Removing instruction jmp b17_9
Removing instruction jmp b17_10
Removing instruction jmp b17_11
Removing instruction jmp b17_12
Removing instruction jmp b17_13
Removing instruction jmp b17_14
Removing instruction jmp b17_15
Removing instruction jmp b17_16
Removing instruction jmp b17_17
Removing instruction jmp b17_18
Removing instruction jmp b17_19
Removing instruction jmp b17_20
Removing instruction jmp b17_21
Removing instruction jmp b17_22
Removing instruction jmp b17_23
Removing instruction jmp b17_24
Removing instruction jmp b10
Removing instruction jmp b7
Removing instruction jmp breturn
Removing instruction jmp b13
Removing instruction jmp b2
Removing instruction jmp b4
Removing instruction jmp b7
Removing instruction jmp b14
Removing instruction jmp b10
Removing instruction jmp b9
Removing instruction jmp b6
Removing instruction jmp b8
Removing instruction jmp b3
Removing instruction jmp b5
Removing instruction jmp b11
Removing instruction jmp b12
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp b2
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #BLUE
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Replacing instruction lda #0 with TXA
Removing instruction lda #>0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b3 with b4
Replacing label b5_from_b4 with b5
Replacing label b8_from_b7 with b8
Replacing label b9_from_b14 with b9
Replacing label b7_from_b6 with b7
Replacing label b4_from_b3 with b4
Replacing label b12_from_b5 with b12
Replacing label b2_from_b1 with b2
Replacing label b2_from_b1 with b2
Replacing label b2_from_b1 with b2
Replacing label b2_from_b1 with b2
Removing instruction b1_from_bbegin:
Removing instruction b1:
Removing instruction bend_from_b1:
Removing instruction b1_from_b1:
Removing instruction b2_from_b1:
Removing instruction makecharset_from_b2:
Removing instruction toD0181_from_b2:
Removing instruction toD0181:
Removing instruction b3:
Removing instruction b4_from_b3:
Removing instruction b5_from_b4:
Removing instruction b8_from_b7:
Removing instruction b13_from_makecharset:
Removing instruction print_cls_from_b13:
Removing instruction b2_from_b1:
Removing instruction b4_from_b3:
Removing instruction b7_from_b4:
Removing instruction b7_from_b6:
Removing instruction b9_from_b10:
Removing instruction b9_from_b14:
Removing instruction b11_from_b5:
Removing instruction b12_from_b11:
Removing instruction b12_from_b5:
Removing instruction b2_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction b1_from_main:
Removing instruction b2:
Removing instruction b5:
Removing instruction b3_from_b5:
Removing instruction b3_from_b4:
Removing instruction b2_from_doplasma:
Removing instruction b1:
Removing instruction b3:
Removing instruction b5_from_b3:
Removing instruction b4:
Removing instruction b6:
Removing instruction b8_from_b6:
Removing instruction b9:
Removing instruction b17_1:
Removing instruction b17_2:
Removing instruction b17_3:
Removing instruction b17_4:
Removing instruction b17_5:
Removing instruction b17_6:
Removing instruction b17_7:
Removing instruction b17_8:
Removing instruction b17_9:
Removing instruction b17_10:
Removing instruction b17_11:
Removing instruction b17_12:
Removing instruction b17_13:
Removing instruction b17_14:
Removing instruction b17_15:
Removing instruction b17_16:
Removing instruction b17_17:
Removing instruction b17_18:
Removing instruction b17_19:
Removing instruction b17_20:
Removing instruction b17_21:
Removing instruction b17_22:
Removing instruction b17_23:
Removing instruction b17_24:
Removing instruction b10:
Removing instruction b7:
Removing instruction breturn:
Removing instruction b2_from_b11:
Removing instruction b13:
Removing instruction b2_from_b13:
Removing instruction b4_from_b2:
Removing instruction b14:
Removing instruction b10:
Removing instruction b6:
Removing instruction b8:
Removing instruction b3:
Removing instruction b5:
Removing instruction b11:
Removing instruction b1:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction memset_from_print_cls:
Removing instruction breturn:
Removing instruction b2_from_memset:
Removing instruction b1:
Removing instruction breturn:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Removing instruction jmp b1
Removing instruction jmp b5
Removing instruction jmp b8
Removing instruction jmp b2
Removing instruction jmp b4
Removing instruction jmp b7
Removing instruction jmp b2
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination
Fixing long branch [226] bcc b8 to bcs
Fixing long branch [107] bcc b11 to bcs

FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = (byte*) 53281
(byte) BLACK
(const byte) BLACK#0 BLACK = (byte) 0
(byte) BLUE
(const byte) BLUE#0 BLUE = (byte) 6
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = (byte*) 53280
(byte*) CHARSET
(const byte*) CHARSET#0 CHARSET = (byte*) 8192
(byte*) COLS
(const byte*) COLS#0 COLS = (byte*) 55296
(byte*) D018
(const byte*) D018#0 D018 = (byte*) 53272
(const byte) RADIX::BINARY BINARY = (number) 2
(const byte) RADIX::DECIMAL DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL OCTAL = (number) 8
(byte*) SCREEN1
(const byte*) SCREEN1#0 SCREEN1 = (byte*) 10240
(byte) SID_CONTROL_NOISE
(const byte) SID_CONTROL_NOISE#0 SID_CONTROL_NOISE = (byte) $80
(byte*) SID_VOICE3_CONTROL
(const byte*) SID_VOICE3_CONTROL#0 SID_VOICE3_CONTROL = (byte*) 54290
(word*) SID_VOICE3_FREQ
(const word*) SID_VOICE3_FREQ#0 SID_VOICE3_FREQ = (word*) 54286
(byte*) SID_VOICE3_OSC
(const byte*) SID_VOICE3_OSC#0 SID_VOICE3_OSC = (byte*) 54299
(byte[$100]) SINTABLE
(const byte[$100]) SINTABLE#0 SINTABLE = kickasm {{ .for(var i=0;i<$100;i++)
        .byte round(127.5+127.5*sin(toRadians(360*i/256)))
 }}
(byte) c1A
(byte) c1A#1 c1A zp ZP_BYTE:11 1.1538461538461537
(byte) c1A#3 c1A zp ZP_BYTE:11 0.18840579710144925
(byte) c1B
(byte) c1B#1 c1B zp ZP_BYTE:15 1.0714285714285714
(byte) c1B#3 c1B zp ZP_BYTE:15 0.1911764705882353
(byte) c2A
(byte) c2A#1 c2A zp ZP_BYTE:16 0.625
(byte) c2A#3 c2A zp ZP_BYTE:16 0.22413793103448276
(byte) c2B
(byte) c2B#1 c2B zp ZP_BYTE:2 0.6
(byte) c2B#3 c2B zp ZP_BYTE:2 0.22807017543859648
(void()) doplasma((byte*) doplasma::screen)
(byte~) doplasma::$2 reg byte a 202.0
(byte~) doplasma::$4 reg byte a 202.0
(label) doplasma::@1
(label) doplasma::@10
(label) doplasma::@11
(label) doplasma::@17_1
(label) doplasma::@17_10
(label) doplasma::@17_11
(label) doplasma::@17_12
(label) doplasma::@17_13
(label) doplasma::@17_14
(label) doplasma::@17_15
(label) doplasma::@17_16
(label) doplasma::@17_17
(label) doplasma::@17_18
(label) doplasma::@17_19
(label) doplasma::@17_2
(label) doplasma::@17_20
(label) doplasma::@17_21
(label) doplasma::@17_22
(label) doplasma::@17_23
(label) doplasma::@17_24
(label) doplasma::@17_3
(label) doplasma::@17_4
(label) doplasma::@17_5
(label) doplasma::@17_6
(label) doplasma::@17_7
(label) doplasma::@17_8
(label) doplasma::@17_9
(label) doplasma::@2
(label) doplasma::@3
(label) doplasma::@4
(label) doplasma::@5
(label) doplasma::@6
(label) doplasma::@7
(label) doplasma::@8
(label) doplasma::@9
(label) doplasma::@return
(byte) doplasma::c1a
(byte) doplasma::c1a#0 c1a zp ZP_BYTE:4 2.0
(byte) doplasma::c1a#1 c1a zp ZP_BYTE:4 40.4
(byte) doplasma::c1a#4 c1a zp ZP_BYTE:4 76.25
(byte) doplasma::c1b
(byte) doplasma::c1b#0 c1b zp ZP_BYTE:5 4.0
(byte) doplasma::c1b#1 c1b zp ZP_BYTE:5 50.5
(byte) doplasma::c1b#4 c1b zp ZP_BYTE:5 61.0
(byte) doplasma::c2a
(byte) doplasma::c2a#0 c2a zp ZP_BYTE:7 2.0
(byte) doplasma::c2a#1 c2a zp ZP_BYTE:7 50.5
(byte) doplasma::c2a#4 c2a zp ZP_BYTE:7 101.66666666666666
(byte) doplasma::c2b
(byte) doplasma::c2b#0 c2b zp ZP_BYTE:8 4.0
(byte) doplasma::c2b#1 c2b zp ZP_BYTE:8 67.33333333333333
(byte) doplasma::c2b#4 c2b zp ZP_BYTE:8 76.25
(byte) doplasma::i
(byte) doplasma::i#1 i zp ZP_BYTE:3 101.0
(byte) doplasma::i#4 i zp ZP_BYTE:3 50.5
(byte) doplasma::i1
(byte) doplasma::i1#1 i1 zp ZP_BYTE:6 151.5
(byte) doplasma::i1#4 i1 zp ZP_BYTE:6 60.599999999999994
(byte) doplasma::i2
(byte) doplasma::i2#1 reg byte x 151.5
(byte) doplasma::i2#11 reg byte x 54.3846153846154
(byte) doplasma::ii
(byte*) doplasma::screen
(byte) doplasma::val
(byte) doplasma::val#0 reg byte a 202.0
(byte) doplasma::val#1 reg byte a 151.5
(byte) doplasma::val#10 reg byte a 151.5
(byte) doplasma::val#11 reg byte a 151.5
(byte) doplasma::val#13 reg byte a 151.5
(byte) doplasma::val#15 reg byte a 151.5
(byte) doplasma::val#17 reg byte a 151.5
(byte) doplasma::val#19 reg byte a 151.5
(byte) doplasma::val#21 reg byte a 151.5
(byte) doplasma::val#23 reg byte a 151.5
(byte) doplasma::val#25 reg byte a 151.5
(byte) doplasma::val#27 reg byte a 151.5
(byte) doplasma::val#29 reg byte a 151.5
(byte) doplasma::val#31 reg byte a 151.5
(byte) doplasma::val#33 reg byte a 151.5
(byte) doplasma::val#35 reg byte a 151.5
(byte) doplasma::val#37 reg byte a 151.5
(byte) doplasma::val#39 reg byte a 151.5
(byte) doplasma::val#41 reg byte a 151.5
(byte) doplasma::val#43 reg byte a 151.5
(byte) doplasma::val#45 reg byte a 151.5
(byte) doplasma::val#47 reg byte a 151.5
(byte) doplasma::val#49 reg byte a 151.5
(byte) doplasma::val#51 reg byte a 151.5
(byte) doplasma::val#53 reg byte a 202.0
(byte) doplasma::val#7 reg byte a 151.5
(byte[$28]) doplasma::xbuf
(const byte[$28]) doplasma::xbuf#0 xbuf = { fill( $28, 0) }
(byte[$19]) doplasma::ybuf
(const byte[$19]) doplasma::ybuf#0 ybuf = { fill( $19, 0) }
(byte) doplasma::yprev
(byte) doplasma::yprev#2 yprev zp ZP_BYTE:14 43.285714285714285
(byte) doplasma::yprev#4 reg byte x 101.0
(byte~) doplasma::yprev#6 reg byte x 202.0
(byte) doplasma::yval
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(byte*) main::col
(byte*) main::col#1 col zp ZP_WORD:9 16.5
(byte*) main::col#2 col zp ZP_WORD:9 16.5
(label) main::toD0181
(word~) main::toD0181_$0
(number~) main::toD0181_$1
(number~) main::toD0181_$2
(number~) main::toD0181_$3
(word~) main::toD0181_$4
(byte~) main::toD0181_$5
(number~) main::toD0181_$6
(number~) main::toD0181_$7
(number~) main::toD0181_$8
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN1#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f
(byte*) main::toD0181_screen
(void()) makecharset((byte*) makecharset::charset)
(word~) makecharset::$10 $10 zp ZP_WORD:17 202.0
(word~) makecharset::$11 $11 zp ZP_WORD:17 202.0
(byte~) makecharset::$12 reg byte a 22.0
(byte*~) makecharset::$16 $16 zp ZP_WORD:17 202.0
(byte~) makecharset::$3 reg byte a 22.0
(byte~) makecharset::$6 reg byte a 2002.0
(byte~) makecharset::$7 $7 zp ZP_BYTE:16 2002.0
(label) makecharset::@1
(label) makecharset::@10
(label) makecharset::@11
(label) makecharset::@12
(label) makecharset::@13
(label) makecharset::@14
(label) makecharset::@2
(label) makecharset::@3
(label) makecharset::@4
(label) makecharset::@5
(label) makecharset::@6
(label) makecharset::@7
(label) makecharset::@8
(label) makecharset::@9
(label) makecharset::@return
(byte) makecharset::b
(byte) makecharset::b#1 reg byte y 2002.0
(byte) makecharset::b#10 reg byte y 500.5
(byte) makecharset::b#2 reg byte y 517.3333333333334
(byte[8]) makecharset::bittab
(const byte[8]) makecharset::bittab#0 bittab = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 }
(word) makecharset::c
(word) makecharset::c#1 c zp ZP_WORD:9 16.5
(word) makecharset::c#16 c zp ZP_WORD:9 5.800000000000001
(byte*) makecharset::charset
(byte) makecharset::i
(byte) makecharset::i#1 i zp ZP_BYTE:11 151.5
(byte) makecharset::i#13 i zp ZP_BYTE:11 20.2
(byte) makecharset::ii
(byte) makecharset::ii#1 reg byte x 1501.5
(byte) makecharset::ii#10 reg byte x 375.375
(byte) makecharset::s
(byte) makecharset::s#0 s zp ZP_BYTE:15 56.22222222222223
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
(label) memset::@2
(label) memset::@return
(byte) memset::c
(const byte) memset::c#0 c = (byte) ' '
(byte*) memset::dst
(byte*) memset::dst#1 dst zp ZP_WORD:12 16.5
(byte*) memset::dst#4 dst zp ZP_WORD:12 16.5
(byte*) memset::end
(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0
(word) memset::num
(const word) memset::num#0 num = (word) $3e8
(void*) memset::return
(void*) memset::str
(const void*) memset::str#0 str = (void*)(const byte*) print_line_cursor#0
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
(const byte) print_char::ch#0 ch = (byte) '.'
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:12 4.333333333333333
(byte*) print_char_cursor#18 print_char_cursor zp ZP_WORD:12 11.0
(byte*) print_char_cursor#52 print_char_cursor zp ZP_WORD:12 1.0833333333333333
(void()) print_cls()
(label) print_cls::@return
(byte*) print_line_cursor
(const byte*) print_line_cursor#0 print_line_cursor = (byte*) 1024
(byte*) print_screen
(byte()) sid_rnd()
(label) sid_rnd::@return
(byte) sid_rnd::return
(byte) sid_rnd::return#0 reg byte a 334.33333333333337
(byte) sid_rnd::return#2 reg byte a 2002.0
(void()) sid_rnd_init()
(label) sid_rnd_init::@return

zp ZP_BYTE:2 [ c2B#1 c2B#3 ]
zp ZP_BYTE:3 [ doplasma::i#4 doplasma::i#1 ]
zp ZP_BYTE:4 [ doplasma::c1a#4 doplasma::c1a#1 doplasma::c1a#0 ]
zp ZP_BYTE:5 [ doplasma::c1b#4 doplasma::c1b#1 doplasma::c1b#0 ]
reg byte x [ doplasma::yprev#4 doplasma::yprev#6 ]
zp ZP_BYTE:6 [ doplasma::i1#4 doplasma::i1#1 ]
zp ZP_BYTE:7 [ doplasma::c2a#4 doplasma::c2a#1 doplasma::c2a#0 ]
zp ZP_BYTE:8 [ doplasma::c2b#4 doplasma::c2b#1 doplasma::c2b#0 ]
reg byte x [ doplasma::i2#11 doplasma::i2#1 ]
zp ZP_WORD:9 [ makecharset::c#16 makecharset::c#1 main::col#2 main::col#1 ]
zp ZP_BYTE:11 [ makecharset::i#13 makecharset::i#1 c1A#1 c1A#3 ]
reg byte x [ makecharset::ii#10 makecharset::ii#1 ]
reg byte y [ makecharset::b#10 makecharset::b#2 makecharset::b#1 ]
zp ZP_WORD:12 [ memset::dst#4 memset::dst#1 print_char_cursor#52 print_char_cursor#18 print_char_cursor#1 ]
zp ZP_BYTE:14 [ doplasma::yprev#2 ]
reg byte a [ doplasma::$2 ]
reg byte a [ doplasma::$4 ]
reg byte a [ doplasma::val#0 ]
reg byte a [ doplasma::val#1 ]
reg byte a [ doplasma::val#7 ]
reg byte a [ doplasma::val#10 ]
reg byte a [ doplasma::val#11 ]
reg byte a [ doplasma::val#13 ]
reg byte a [ doplasma::val#15 ]
reg byte a [ doplasma::val#17 ]
reg byte a [ doplasma::val#19 ]
reg byte a [ doplasma::val#21 ]
reg byte a [ doplasma::val#23 ]
reg byte a [ doplasma::val#25 ]
reg byte a [ doplasma::val#27 ]
reg byte a [ doplasma::val#29 ]
reg byte a [ doplasma::val#31 ]
reg byte a [ doplasma::val#33 ]
reg byte a [ doplasma::val#35 ]
reg byte a [ doplasma::val#37 ]
reg byte a [ doplasma::val#39 ]
reg byte a [ doplasma::val#41 ]
reg byte a [ doplasma::val#43 ]
reg byte a [ doplasma::val#45 ]
reg byte a [ doplasma::val#47 ]
reg byte a [ doplasma::val#49 ]
reg byte a [ doplasma::val#51 ]
reg byte a [ doplasma::val#53 ]
reg byte a [ makecharset::$3 ]
zp ZP_BYTE:15 [ makecharset::s#0 c1B#1 c1B#3 ]
reg byte a [ sid_rnd::return#2 ]
reg byte a [ makecharset::$6 ]
zp ZP_BYTE:16 [ makecharset::$7 c2A#1 c2A#3 ]
zp ZP_WORD:17 [ makecharset::$10 makecharset::$11 makecharset::$16 ]
reg byte a [ makecharset::$12 ]
reg byte a [ sid_rnd::return#0 ]


FINAL ASSEMBLER
Score: 93726

  // File Comments
// A KickC version of the plasma routine from the CC65 samples
// This version has an unrolled inner loop to reach 50+FPS
// This version also optimizes the inner loop by calculating the Y buffer as a set of differences
// (w)2001 by groepaz/hitmen
// Cleanup and porting to CC65 by Ullrich von Bassewitz.
// Ported to KickC by Jesper Gravgaard.
// Original source https://github.com/cc65/cc65/blob/master/samples/plasma.c
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
  // Global Constants & labels
  .label BORDERCOL = $d020
  .label BGCOL = $d021
  .label D018 = $d018
  // Color Ram
  .label COLS = $d800
  // The colors of the C64
  .const BLACK = 0
  .const BLUE = 6
  .label print_line_cursor = $400
  // SID registers for random number generation
  .label SID_VOICE3_FREQ = $d40e
  .label SID_VOICE3_CONTROL = $d412
  .const SID_CONTROL_NOISE = $80
  .label SID_VOICE3_OSC = $d41b
  .label SCREEN1 = $2800
  .label CHARSET = $2000
  .label print_char_cursor = $c
  .label c1A = $b
  .label c1B = $f
  .label c2A = $10
  .label c2B = 2
  // @begin
  // [1] phi from @begin to @1 [phi:@begin->@1]
  // @1
  // [2] call main 
  // [3] phi from @1 to @end [phi:@1->@end]
  // @end
  // main
main: {
    .const toD0181_return = (>(SCREEN1&$3fff)*4)|(>CHARSET)/4&$f
    .label col = 9
    // asm
    // asm { sei  }
    sei
    // *BORDERCOL = BLUE
    // [5] *((const byte*) BORDERCOL#0) ← (const byte) BLUE#0 -- _deref_pbuc1=vbuc2 
    lda #BLUE
    sta BORDERCOL
    // *BGCOL = BLUE
    // [6] *((const byte*) BGCOL#0) ← (const byte) BLUE#0 -- _deref_pbuc1=vbuc2 
    sta BGCOL
    // [7] phi from main to main::@1 [phi:main->main::@1]
    // [7] phi (byte*) main::col#2 = (const byte*) COLS#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 
    lda #<COLS
    sta.z col
    lda #>COLS
    sta.z col+1
    // [7] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
    // [7] phi (byte*) main::col#2 = (byte*) main::col#1 [phi:main::@1->main::@1#0] -- register_copy 
    // main::@1
  b1:
    // *col = BLACK
    // [8] *((byte*) main::col#2) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1 
    lda #BLACK
    ldy #0
    sta (col),y
    // for(unsigned char* col : COLS..COLS+1000)
    // [9] (byte*) main::col#1 ← ++ (byte*) main::col#2 -- pbuz1=_inc_pbuz1 
    inc.z col
    bne !+
    inc.z col+1
  !:
    // [10] if((byte*) main::col#1!=(const byte*) COLS#0+(word) $3e8+(byte) 1) goto main::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda.z col+1
    cmp #>COLS+$3e8+1
    bne b1
    lda.z col
    cmp #<COLS+$3e8+1
    bne b1
    // [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
    // main::@2
    // makecharset(CHARSET)
    // [12] call makecharset 
    // [97] phi from main::@2 to makecharset [phi:main::@2->makecharset]
    jsr makecharset
    // [13] phi from main::@2 to main::toD0181 [phi:main::@2->main::toD0181]
    // main::toD0181
    // main::@5
    // *D018 = toD018(SCREEN1, CHARSET)
    // [14] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // [15] phi from main::@5 to main::@3 [phi:main::@5->main::@3]
    // [15] phi (byte) c2B#1 = (byte) 0 [phi:main::@5->main::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta.z c2B
    // [15] phi (byte) c2A#1 = (byte) 0 [phi:main::@5->main::@3#1] -- vbuz1=vbuc1 
    sta.z c2A
    // [15] phi (byte) c1B#1 = (byte) 0 [phi:main::@5->main::@3#2] -- vbuz1=vbuc1 
    sta.z c1B
    // [15] phi (byte) c1A#1 = (byte) 0 [phi:main::@5->main::@3#3] -- vbuz1=vbuc1 
    sta.z c1A
    // main::@3
    // [16] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
    // main::@4
  b4:
    // doplasma(SCREEN1)
    // [17] call doplasma 
    jsr doplasma
    // [15] phi from main::@4 to main::@3 [phi:main::@4->main::@3]
    // [15] phi (byte) c2B#1 = (byte) c2B#3 [phi:main::@4->main::@3#0] -- register_copy 
    // [15] phi (byte) c2A#1 = (byte) c2A#3 [phi:main::@4->main::@3#1] -- register_copy 
    // [15] phi (byte) c1B#1 = (byte) c1B#3 [phi:main::@4->main::@3#2] -- register_copy 
    // [15] phi (byte) c1A#1 = (byte) c1A#3 [phi:main::@4->main::@3#3] -- register_copy 
    jmp b4
}
  // doplasma
// Render plasma to the passed screen
doplasma: {
    .label c1a = 4
    .label c1b = 5
    .label i = 3
    .label c2a = 7
    .label c2b = 8
    .label i1 = 6
    .label yprev = $e
    // c1a = c1A
    // [18] (byte) doplasma::c1a#0 ← (byte) c1A#1 -- vbuz1=vbuz2 
    lda.z c1A
    sta.z c1a
    // c1b = c1B
    // [19] (byte) doplasma::c1b#0 ← (byte) c1B#1 -- vbuz1=vbuz2 
    lda.z c1B
    sta.z c1b
    // [20] phi from doplasma to doplasma::@2 [phi:doplasma->doplasma::@2]
    // [20] phi (byte) doplasma::yprev#4 = (byte) 0 [phi:doplasma->doplasma::@2#0] -- vbuxx=vbuc1 
    ldx #0
    // [20] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@2#1] -- register_copy 
    // [20] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@2#2] -- register_copy 
    // [20] phi (byte) doplasma::i#4 = (byte) 0 [phi:doplasma->doplasma::@2#3] -- vbuz1=vbuc1 
    txa
    sta.z i
    // doplasma::@2
  b2:
    // SINTABLE[c1a] + SINTABLE[c1b]
    // [21] (byte) doplasma::yprev#2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#4) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
    ldy.z c1a
    lda SINTABLE,y
    ldy.z c1b
    clc
    adc SINTABLE,y
    sta.z yprev
    // yval - yprev
    // [22] (byte~) doplasma::$2 ← (byte) doplasma::yprev#2 - (byte) doplasma::yprev#4 -- vbuaa=vbuz1_minus_vbuxx 
    txa
    eor #$ff
    sec
    adc.z yprev
    // ybuf[i] = yval - yprev
    // [23] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#4) ← (byte~) doplasma::$2 -- pbuc1_derefidx_vbuz1=vbuaa 
    ldy.z i
    sta ybuf,y
    // c1a += 4
    // [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#4 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1a
    axs #-[4]
    stx.z c1a
    // c1b += 9
    // [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#4 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1b
    axs #-[9]
    stx.z c1b
    // for (unsigned char i = 0; i < 25; ++i)
    // [26] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#4 -- vbuz1=_inc_vbuz1 
    inc.z i
  // Calculate ybuff as a bunch of differences
    // doplasma::@1
    // [27] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@11 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #$19
    bcs !b11+
    jmp b11
  !b11:
    // doplasma::@3
    // c1A += 3
    // [28] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c1A
    axs #-[3]
    stx.z c1A
    // c1B -= 5
    // [29] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 
    lax.z c1B
    axs #5
    stx.z c1B
    // c2a = c2A
    // [30] (byte) doplasma::c2a#0 ← (byte) c2A#1 -- vbuz1=vbuz2 
    lda.z c2A
    sta.z c2a
    // c2b = c2B
    // [31] (byte) doplasma::c2b#0 ← (byte) c2B#1 -- vbuz1=vbuz2 
    lda.z c2B
    sta.z c2b
    // [32] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5]
    // [32] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#0 [phi:doplasma::@3->doplasma::@5#0] -- register_copy 
    // [32] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#0 [phi:doplasma::@3->doplasma::@5#1] -- register_copy 
    // [32] phi (byte) doplasma::i1#4 = (byte) 0 [phi:doplasma::@3->doplasma::@5#2] -- vbuz1=vbuc1 
    lda #0
    sta.z i1
    // [32] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5]
    // [32] phi (byte) doplasma::c2b#4 = (byte) doplasma::c2b#1 [phi:doplasma::@4->doplasma::@5#0] -- register_copy 
    // [32] phi (byte) doplasma::c2a#4 = (byte) doplasma::c2a#1 [phi:doplasma::@4->doplasma::@5#1] -- register_copy 
    // [32] phi (byte) doplasma::i1#4 = (byte) doplasma::i1#1 [phi:doplasma::@4->doplasma::@5#2] -- register_copy 
    // doplasma::@5
  b5:
    // SINTABLE[c2a] + SINTABLE[c2b]
    // [33] (byte~) doplasma::$4 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#4) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#4) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
    ldy.z c2a
    lda SINTABLE,y
    ldy.z c2b
    clc
    adc SINTABLE,y
    // xbuf[i] = (SINTABLE[c2a] + SINTABLE[c2b])
    // [34] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#4) ← (byte~) doplasma::$4 -- pbuc1_derefidx_vbuz1=vbuaa 
    ldy.z i1
    sta xbuf,y
    // c2a += 3
    // [35] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#4 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c2a
    axs #-[3]
    stx.z c2a
    // c2b += 7
    // [36] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#4 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 
    lax.z c2b
    axs #-[7]
    stx.z c2b
    // for (unsigned char i = 0; i < 40; ++i)
    // [37] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#4 -- vbuz1=_inc_vbuz1 
    inc.z i1
    // doplasma::@4
    // [38] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i1
    cmp #$28
    bcc b5
    // doplasma::@6
    // c2A += 2
    // [39] (byte) c2A#3 ← (byte) c2A#1 + (byte) 2 -- vbuz1=vbuz1_plus_2 
    lda.z c2A
    clc
    adc #2
    sta.z c2A
    // c2B -= 3
    // [40] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 
    lax.z c2B
    axs #3
    stx.z c2B
    // [41] phi from doplasma::@6 to doplasma::@8 [phi:doplasma::@6->doplasma::@8]
    // [41] phi (byte) doplasma::i2#11 = (byte) 0 [phi:doplasma::@6->doplasma::@8#0] -- vbuxx=vbuc1 
    ldx #0
    // [41] phi from doplasma::@7 to doplasma::@8 [phi:doplasma::@7->doplasma::@8]
    // [41] phi (byte) doplasma::i2#11 = (byte) doplasma::i2#1 [phi:doplasma::@7->doplasma::@8#0] -- register_copy 
    // doplasma::@8
  b8:
    // val =  xbuf[i]
    // [42] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#11) -- vbuaa=pbuc1_derefidx_vbuxx 
    // Find the first value on the row
    lda xbuf,x
    // doplasma::@9
    // val += ybuf[ii]
    // [43] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf
    // (screen+ii*40)[i] = val
    // [44] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#11) ← (byte) doplasma::val#1 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1,x
    // doplasma::@17_1
    // val += ybuf[ii]
    // [45] (byte) doplasma::val#7 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+1
    // (screen+ii*40)[i] = val
    // [46] *((const byte*) SCREEN1#0+(byte) 1*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#7 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+1*$28,x
    // doplasma::@17_2
    // val += ybuf[ii]
    // [47] (byte) doplasma::val#10 ← (byte) doplasma::val#7 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+2
    // (screen+ii*40)[i] = val
    // [48] *((const byte*) SCREEN1#0+(byte) 2*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#10 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+2*$28,x
    // doplasma::@17_3
    // val += ybuf[ii]
    // [49] (byte) doplasma::val#11 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+3
    // (screen+ii*40)[i] = val
    // [50] *((const byte*) SCREEN1#0+(byte) 3*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#11 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+3*$28,x
    // doplasma::@17_4
    // val += ybuf[ii]
    // [51] (byte) doplasma::val#13 ← (byte) doplasma::val#11 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+4
    // (screen+ii*40)[i] = val
    // [52] *((const byte*) SCREEN1#0+(byte) 4*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#13 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+4*$28,x
    // doplasma::@17_5
    // val += ybuf[ii]
    // [53] (byte) doplasma::val#15 ← (byte) doplasma::val#13 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+5
    // (screen+ii*40)[i] = val
    // [54] *((const byte*) SCREEN1#0+(byte) 5*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#15 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+5*$28,x
    // doplasma::@17_6
    // val += ybuf[ii]
    // [55] (byte) doplasma::val#17 ← (byte) doplasma::val#15 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+6
    // (screen+ii*40)[i] = val
    // [56] *((const byte*) SCREEN1#0+(byte) 6*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#17 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+6*$28,x
    // doplasma::@17_7
    // val += ybuf[ii]
    // [57] (byte) doplasma::val#19 ← (byte) doplasma::val#17 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+7
    // (screen+ii*40)[i] = val
    // [58] *((const byte*) SCREEN1#0+(byte) 7*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#19 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+7*$28,x
    // doplasma::@17_8
    // val += ybuf[ii]
    // [59] (byte) doplasma::val#21 ← (byte) doplasma::val#19 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+8
    // (screen+ii*40)[i] = val
    // [60] *((const byte*) SCREEN1#0+(byte) 8*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#21 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+8*$28,x
    // doplasma::@17_9
    // val += ybuf[ii]
    // [61] (byte) doplasma::val#23 ← (byte) doplasma::val#21 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+9
    // (screen+ii*40)[i] = val
    // [62] *((const byte*) SCREEN1#0+(byte) 9*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#23 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+9*$28,x
    // doplasma::@17_10
    // val += ybuf[ii]
    // [63] (byte) doplasma::val#25 ← (byte) doplasma::val#23 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$a
    // (screen+ii*40)[i] = val
    // [64] *((const byte*) SCREEN1#0+(byte) $a*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#25 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$a*$28,x
    // doplasma::@17_11
    // val += ybuf[ii]
    // [65] (byte) doplasma::val#27 ← (byte) doplasma::val#25 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$b
    // (screen+ii*40)[i] = val
    // [66] *((const byte*) SCREEN1#0+(byte) $b*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#27 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$b*$28,x
    // doplasma::@17_12
    // val += ybuf[ii]
    // [67] (byte) doplasma::val#29 ← (byte) doplasma::val#27 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$c
    // (screen+ii*40)[i] = val
    // [68] *((const byte*) SCREEN1#0+(byte) $c*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#29 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$c*$28,x
    // doplasma::@17_13
    // val += ybuf[ii]
    // [69] (byte) doplasma::val#31 ← (byte) doplasma::val#29 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$d
    // (screen+ii*40)[i] = val
    // [70] *((const byte*) SCREEN1#0+(byte) $d*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#31 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$d*$28,x
    // doplasma::@17_14
    // val += ybuf[ii]
    // [71] (byte) doplasma::val#33 ← (byte) doplasma::val#31 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$e
    // (screen+ii*40)[i] = val
    // [72] *((const byte*) SCREEN1#0+(byte) $e*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#33 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$e*$28,x
    // doplasma::@17_15
    // val += ybuf[ii]
    // [73] (byte) doplasma::val#35 ← (byte) doplasma::val#33 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$f
    // (screen+ii*40)[i] = val
    // [74] *((const byte*) SCREEN1#0+(byte) $f*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#35 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$f*$28,x
    // doplasma::@17_16
    // val += ybuf[ii]
    // [75] (byte) doplasma::val#37 ← (byte) doplasma::val#35 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$10
    // (screen+ii*40)[i] = val
    // [76] *((const byte*) SCREEN1#0+(byte) $10*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#37 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$10*$28,x
    // doplasma::@17_17
    // val += ybuf[ii]
    // [77] (byte) doplasma::val#39 ← (byte) doplasma::val#37 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$11
    // (screen+ii*40)[i] = val
    // [78] *((const byte*) SCREEN1#0+(byte) $11*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#39 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$11*$28,x
    // doplasma::@17_18
    // val += ybuf[ii]
    // [79] (byte) doplasma::val#41 ← (byte) doplasma::val#39 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$12
    // (screen+ii*40)[i] = val
    // [80] *((const byte*) SCREEN1#0+(byte) $12*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#41 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$12*$28,x
    // doplasma::@17_19
    // val += ybuf[ii]
    // [81] (byte) doplasma::val#43 ← (byte) doplasma::val#41 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$13
    // (screen+ii*40)[i] = val
    // [82] *((const byte*) SCREEN1#0+(byte) $13*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#43 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$13*$28,x
    // doplasma::@17_20
    // val += ybuf[ii]
    // [83] (byte) doplasma::val#45 ← (byte) doplasma::val#43 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$14
    // (screen+ii*40)[i] = val
    // [84] *((const byte*) SCREEN1#0+(byte) $14*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#45 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$14*$28,x
    // doplasma::@17_21
    // val += ybuf[ii]
    // [85] (byte) doplasma::val#47 ← (byte) doplasma::val#45 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$15
    // (screen+ii*40)[i] = val
    // [86] *((const byte*) SCREEN1#0+(byte) $15*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#47 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$15*$28,x
    // doplasma::@17_22
    // val += ybuf[ii]
    // [87] (byte) doplasma::val#49 ← (byte) doplasma::val#47 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$16
    // (screen+ii*40)[i] = val
    // [88] *((const byte*) SCREEN1#0+(byte) $16*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#49 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$16*$28,x
    // doplasma::@17_23
    // val += ybuf[ii]
    // [89] (byte) doplasma::val#51 ← (byte) doplasma::val#49 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$17
    // (screen+ii*40)[i] = val
    // [90] *((const byte*) SCREEN1#0+(byte) $17*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#51 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$17*$28,x
    // doplasma::@17_24
    // val += ybuf[ii]
    // [91] (byte) doplasma::val#53 ← (byte) doplasma::val#51 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) -- vbuaa=vbuaa_plus__deref_pbuc1 
    clc
    adc ybuf+$18
    // (screen+ii*40)[i] = val
    // [92] *((const byte*) SCREEN1#0+(byte) $18*(byte) $28 + (byte) doplasma::i2#11) ← (byte) doplasma::val#53 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN1+$18*$28,x
    // doplasma::@10
    // for (unsigned char i = 0; i < 40; ++i)
    // [93] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#11 -- vbuxx=_inc_vbuxx 
    inx
    // doplasma::@7
    // [94] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@8 -- vbuxx_lt_vbuc1_then_la1 
    cpx #$28
    bcs !b8+
    jmp b8
  !b8:
    // doplasma::@return
    // }
    // [95] return 
    rts
    // doplasma::@11
  b11:
    // [96] (byte~) doplasma::yprev#6 ← (byte) doplasma::yprev#2 -- vbuxx=vbuz1 
    ldx.z yprev
    // [20] phi from doplasma::@11 to doplasma::@2 [phi:doplasma::@11->doplasma::@2]
    // [20] phi (byte) doplasma::yprev#4 = (byte~) doplasma::yprev#6 [phi:doplasma::@11->doplasma::@2#0] -- register_copy 
    // [20] phi (byte) doplasma::c1b#4 = (byte) doplasma::c1b#1 [phi:doplasma::@11->doplasma::@2#1] -- register_copy 
    // [20] phi (byte) doplasma::c1a#4 = (byte) doplasma::c1a#1 [phi:doplasma::@11->doplasma::@2#2] -- register_copy 
    // [20] phi (byte) doplasma::i#4 = (byte) doplasma::i#1 [phi:doplasma::@11->doplasma::@2#3] -- register_copy 
    jmp b2
    xbuf: .fill $28, 0
    ybuf: .fill $19, 0
}
  // makecharset
// Make a plasma-friendly charset where the chars are randomly filled
makecharset: {
    .label _7 = $10
    .label _10 = $11
    .label _11 = $11
    .label s = $f
    .label i = $b
    .label c = 9
    .label _16 = $11
    // sid_rnd_init()
    // [98] call sid_rnd_init 
    jsr sid_rnd_init
    // [99] phi from makecharset to makecharset::@13 [phi:makecharset->makecharset::@13]
    // makecharset::@13
    // print_cls()
    // [100] call print_cls 
    // [134] phi from makecharset::@13 to print_cls [phi:makecharset::@13->print_cls]
    jsr print_cls
    // [101] phi from makecharset::@13 to makecharset::@2 [phi:makecharset::@13->makecharset::@2]
    // [101] phi (byte*) print_char_cursor#52 = (const byte*) print_line_cursor#0 [phi:makecharset::@13->makecharset::@2#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta.z print_char_cursor
    lda #>print_line_cursor
    sta.z print_char_cursor+1
    // [101] phi (word) makecharset::c#16 = (byte) 0 [phi:makecharset::@13->makecharset::@2#1] -- vwuz1=vbuc1 
    lda #<0
    sta.z c
    sta.z c+1
    // [101] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2]
    // [101] phi (byte*) print_char_cursor#52 = (byte*) print_char_cursor#18 [phi:makecharset::@1->makecharset::@2#0] -- register_copy 
    // [101] phi (word) makecharset::c#16 = (word) makecharset::c#1 [phi:makecharset::@1->makecharset::@2#1] -- register_copy 
    // makecharset::@2
  b2:
    // <c
    // [102] (byte~) makecharset::$3 ← < (word) makecharset::c#16 -- vbuaa=_lo_vwuz1 
    lda.z c
    // s = SINTABLE[<c]
    // [103] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$3) -- vbuz1=pbuc1_derefidx_vbuaa 
    tay
    lda SINTABLE,y
    sta.z s
    // [104] phi from makecharset::@2 to makecharset::@4 [phi:makecharset::@2->makecharset::@4]
    // [104] phi (byte) makecharset::i#13 = (byte) 0 [phi:makecharset::@2->makecharset::@4#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    // [104] phi from makecharset::@3 to makecharset::@4 [phi:makecharset::@3->makecharset::@4]
    // [104] phi (byte) makecharset::i#13 = (byte) makecharset::i#1 [phi:makecharset::@3->makecharset::@4#0] -- register_copy 
    // makecharset::@4
  b4:
    // [105] phi from makecharset::@4 to makecharset::@7 [phi:makecharset::@4->makecharset::@7]
    // [105] phi (byte) makecharset::b#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#0] -- vbuyy=vbuc1 
    ldy #0
    // [105] phi (byte) makecharset::ii#10 = (byte) 0 [phi:makecharset::@4->makecharset::@7#1] -- vbuxx=vbuc1 
    ldx #0
    // [105] phi from makecharset::@6 to makecharset::@7 [phi:makecharset::@6->makecharset::@7]
    // [105] phi (byte) makecharset::b#10 = (byte) makecharset::b#2 [phi:makecharset::@6->makecharset::@7#0] -- register_copy 
    // [105] phi (byte) makecharset::ii#10 = (byte) makecharset::ii#1 [phi:makecharset::@6->makecharset::@7#1] -- register_copy 
    // makecharset::@7
  b7:
    // sid_rnd()
    // [106] call sid_rnd 
    jsr sid_rnd
    // [107] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
    // makecharset::@14
    // [108] (byte~) makecharset::$6 ← (byte) sid_rnd::return#2
    // sid_rnd() & 0xFF
    // [109] (byte~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 
    and #$ff
    sta.z _7
    // if ((sid_rnd() & 0xFF) > s)
    // [110] if((byte~) makecharset::$7<=(byte) makecharset::s#0) goto makecharset::@9 -- vbuz1_le_vbuz2_then_la1 
    lda.z s
    cmp.z _7
    bcs b9
    // makecharset::@10
    // b |= bittab[ii]
    // [111] (byte) makecharset::b#1 ← (byte) makecharset::b#10 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#10) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx 
    tya
    ora bittab,x
    tay
    // [112] phi from makecharset::@10 makecharset::@14 to makecharset::@9 [phi:makecharset::@10/makecharset::@14->makecharset::@9]
    // [112] phi (byte) makecharset::b#2 = (byte) makecharset::b#1 [phi:makecharset::@10/makecharset::@14->makecharset::@9#0] -- register_copy 
    // makecharset::@9
  b9:
    // for (unsigned char ii = 0; ii < 8; ++ii)
    // [113] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#10 -- vbuxx=_inc_vbuxx 
    inx
    // makecharset::@6
    // [114] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@7 -- vbuxx_lt_vbuc1_then_la1 
    cpx #8
    bcc b7
    // makecharset::@8
    // c*8
    // [115] (word~) makecharset::$10 ← (word) makecharset::c#16 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda.z c
    asl
    sta.z _10
    lda.z c+1
    rol
    sta.z _10+1
    asl.z _10
    rol.z _10+1
    asl.z _10
    rol.z _10+1
    // (c*8) + i
    // [116] (word~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#13 -- vwuz1=vwuz1_plus_vbuz2 
    lda.z i
    clc
    adc.z _11
    sta.z _11
    bcc !+
    inc.z _11+1
  !:
    // charset[(c*8) + i] = b
    // [117] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$11 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z _16
    adc #<CHARSET
    sta.z _16
    lda.z _16+1
    adc #>CHARSET
    sta.z _16+1
    // [118] *((byte*~) makecharset::$16) ← (byte) makecharset::b#2 -- _deref_pbuz1=vbuyy 
    tya
    ldy #0
    sta (_16),y
    // for ( unsigned char i = 0; i < 8; ++i)
    // [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#13 -- vbuz1=_inc_vbuz1 
    inc.z i
    // makecharset::@3
    // [120] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@4 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #8
    bcc b4
    // makecharset::@5
    // c & 0x07
    // [121] (byte~) makecharset::$12 ← (word) makecharset::c#16 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 
    lda.z c
    and #7
    // if ((c & 0x07) == 0)
    // [122] if((byte~) makecharset::$12!=(byte) 0) goto makecharset::@12 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne b12
    // [123] phi from makecharset::@5 to makecharset::@11 [phi:makecharset::@5->makecharset::@11]
    // makecharset::@11
    // print_char('.')
    // [124] call print_char 
    jsr print_char
    // [125] phi from makecharset::@11 makecharset::@5 to makecharset::@12 [phi:makecharset::@11/makecharset::@5->makecharset::@12]
    // [125] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#1 [phi:makecharset::@11/makecharset::@5->makecharset::@12#0] -- register_copy 
    // makecharset::@12
  b12:
    // for (unsigned int c = 0; c < 0x100; ++c)
    // [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#16 -- vwuz1=_inc_vwuz1 
    inc.z c
    bne !+
    inc.z c+1
  !:
    // makecharset::@1
    // [127] if((word) makecharset::c#1<(word) $100) goto makecharset::@2 -- vwuz1_lt_vwuc1_then_la1 
    lda.z c+1
    cmp #>$100
    bcc b2
    bne !+
    lda.z c
    cmp #<$100
    bcc b2
  !:
    // makecharset::@return
    // }
    // [128] return 
    rts
    bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80
}
  // print_char
// Print a single char
print_char: {
    .const ch = '.'
    // *(print_char_cursor++) = ch
    // [129] *((byte*) print_char_cursor#52) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
    lda #ch
    ldy #0
    sta (print_char_cursor),y
    // *(print_char_cursor++) = ch;
    // [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#52 -- pbuz1=_inc_pbuz1 
    inc.z print_char_cursor
    bne !+
    inc.z print_char_cursor+1
  !:
    // print_char::@return
    // }
    // [131] return 
    rts
}
  // sid_rnd
// Get a random number from the SID voice 3,
// Must be initialized with sid_rnd_init()
sid_rnd: {
    // return *SID_VOICE3_OSC;
    // [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 
    lda SID_VOICE3_OSC
    // sid_rnd::@return
    // }
    // [133] return 
    rts
}
  // print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    // memset(print_screen, ' ', 1000)
    // [135] call memset 
    // [137] phi from print_cls to memset [phi:print_cls->memset]
    jsr memset
    // print_cls::@return
    // }
    // [136] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
memset: {
    .const c = ' '
    .const num = $3e8
    .label str = print_line_cursor
    .label end = str+num
    .label dst = $c
    // [138] phi from memset to memset::@2 [phi:memset->memset::@2]
    // [138] phi (byte*) memset::dst#4 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@2#0] -- pbuz1=pbuc1 
    lda #<str
    sta.z dst
    lda #>str
    sta.z dst+1
    // [138] phi from memset::@1 to memset::@2 [phi:memset::@1->memset::@2]
    // [138] phi (byte*) memset::dst#4 = (byte*) memset::dst#1 [phi:memset::@1->memset::@2#0] -- register_copy 
    // memset::@2
  b2:
    // *dst = c
    // [139] *((byte*) memset::dst#4) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 
    lda #c
    ldy #0
    sta (dst),y
    // for(char* dst = str; dst!=end; dst++)
    // [140] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#4 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    // memset::@1
    // [141] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 
    lda.z dst+1
    cmp #>end
    bne b2
    lda.z dst
    cmp #<end
    bne b2
    // memset::@return
    // }
    // [142] return 
    rts
}
  // sid_rnd_init
// Initialize SID voice 3 for random number generation
sid_rnd_init: {
    // *SID_VOICE3_FREQ = $ffff
    // [143] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 
    lda #<$ffff
    sta SID_VOICE3_FREQ
    lda #>$ffff
    sta SID_VOICE3_FREQ+1
    // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE
    // [144] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2 
    lda #SID_CONTROL_NOISE
    sta SID_VOICE3_CONTROL
    // sid_rnd_init::@return
    // }
    // [145] return 
    rts
}
  // File Data
  .align $100
SINTABLE:
.for(var i=0;i<$100;i++)
        .byte round(127.5+127.5*sin(toRadians(360*i/256)))


