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)
Identified constant variable (byte*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 
Inlined call (byte~) main::$4 ← call toD018 (byte*) SCREEN1 (byte*) CHARSET 
Inlined call (byte~) main::$6 ← call toD018 (byte*) SCREEN2 (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::@5
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) @40
Culled Empty Block (label) sid_rnd::@1
Culled Empty Block (label) main::toD0181_@1
Culled Empty Block (label) main::toD0182_@1
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@8
Culled Empty Block (label) doplasma::@8
Culled Empty Block (label) @43
Culled Empty Block (label) makecharset::@10

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#3 ← 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#2 ← phi( memset/(byte) memset::c#3 )
  (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::@4
  (void*) memset::str#4 ← phi( memset::@2/(void*) memset::str#2 memset::@4/(void*) memset::str#4 )
  (byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@4/(byte*) memset::end#1 )
  (byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@4/(byte*) memset::dst#1 )
  (byte) memset::c#1 ← phi( memset::@2/(byte) memset::c#2 memset::@4/(byte) memset::c#1 )
  *((byte*) memset::dst#2) ← (byte) memset::c#1
  (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
  (bool~) memset::$4 ← (byte*) memset::dst#1 != (byte*) memset::end#1
  if((bool~) memset::$4) goto memset::@4
  to:memset::@1
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:@39
print_char: scope:[print_char]  from makecharset::@8
  (byte*) print_char_cursor#11 ← phi( makecharset::@8/(byte*) print_char_cursor#20 )
  (byte) print_char::ch#1 ← phi( makecharset::@8/(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::@11
  (byte*) print_screen#1 ← phi( makecharset::@11/(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
@39: scope:[]  from @16
  (byte*) print_screen#11 ← phi( @16/(byte*) print_screen#0 )
  (byte*) print_char_cursor#35 ← phi( @16/(byte*) print_char_cursor#0 )
  (byte*) print_line_cursor#30 ← 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:@41
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::@3
  (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
@41: scope:[]  from @39
  (byte*) print_screen#10 ← phi( @39/(byte*) print_screen#11 )
  (byte*) print_char_cursor#33 ← phi( @39/(byte*) print_char_cursor#35 )
  (byte*) print_line_cursor#27 ← phi( @39/(byte*) print_line_cursor#30 )
  (byte*) SCREEN1#0 ← ((byte*)) (number) $2800
  (byte*) SCREEN2#0 ← ((byte*)) (number) $2c00
  (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(2*PI*i/256))
 }}
  to:@42
main: scope:[main]  from @44
  (byte*) print_screen#7 ← phi( @44/(byte*) print_screen#8 )
  (byte) c2B#32 ← phi( @44/(byte) c2B#20 )
  (byte) c2A#32 ← phi( @44/(byte) c2A#20 )
  (byte) c1B#31 ← phi( @44/(byte) c1B#19 )
  (byte) c1A#31 ← phi( @44/(byte) c1A#19 )
  (byte*) print_char_cursor#31 ← phi( @44/(byte*) print_char_cursor#25 )
  (byte*) print_line_cursor#25 ← phi( @44/(byte*) print_line_cursor#18 )
  asm { sei  }
  *((byte*) BORDERCOL#0) ← (byte) BLUE#0
  *((byte*) BGCOL#0) ← (byte) BLUE#0
  (byte*~) main::$1 ← (byte*) COLS#0 + (number) $3e8
  (byte*) main::col#0 ← (byte*) COLS#0
  to:main::@1
main::@1: scope:[main]  from main main::@1
  (byte*) print_screen#6 ← phi( main/(byte*) print_screen#7 main::@1/(byte*) print_screen#6 )
  (byte) c2B#30 ← phi( main/(byte) c2B#32 main::@1/(byte) c2B#30 )
  (byte) c2A#30 ← phi( main/(byte) c2A#32 main::@1/(byte) c2A#30 )
  (byte) c1B#28 ← phi( main/(byte) c1B#31 main::@1/(byte) c1B#28 )
  (byte) c1A#28 ← phi( main/(byte) c1A#31 main::@1/(byte) c1A#28 )
  (byte*) print_char_cursor#26 ← phi( main/(byte*) print_char_cursor#31 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::$1)
  (bool~) main::$2 ← (byte*) main::col#1 != rangelast(COLS#0,main::$1)
  if((bool~) main::$2) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@1
  (byte*) print_screen#5 ← phi( main::@1/(byte*) print_screen#6 )
  (byte) c2B#26 ← phi( main::@1/(byte) c2B#30 )
  (byte) c2A#26 ← phi( main::@1/(byte) c2A#30 )
  (byte) c1B#24 ← phi( main::@1/(byte) c1B#28 )
  (byte) c1A#24 ← phi( main::@1/(byte) c1A#28 )
  (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::@11
main::@11: scope:[main]  from main::@2
  (byte) c2B#22 ← phi( main::@2/(byte) c2B#26 )
  (byte) c2A#22 ← phi( main::@2/(byte) c2A#26 )
  (byte) c1B#21 ← phi( main::@2/(byte) c1B#24 )
  (byte) c1A#21 ← phi( main::@2/(byte) c1A#24 )
  (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
  to:main::@3
main::@3: scope:[main]  from main::@10 main::@11
  (byte) c2B#16 ← phi( main::@10/(byte) c2B#21 main::@11/(byte) c2B#22 )
  (byte) c2A#16 ← phi( main::@10/(byte) c2A#21 main::@11/(byte) c2A#22 )
  (byte) c1B#16 ← phi( main::@10/(byte) c1B#20 main::@11/(byte) c1B#21 )
  (byte) c1A#16 ← phi( main::@10/(byte) c1A#20 main::@11/(byte) c1A#21 )
  (byte*) print_char_cursor#22 ← phi( main::@10/(byte*) print_char_cursor#27 main::@11/(byte*) print_char_cursor#5 )
  (byte*) print_line_cursor#15 ← phi( main::@10/(byte*) print_line_cursor#20 main::@11/(byte*) print_line_cursor#3 )
  if(true) goto main::@4
  to:main::@return
main::@4: scope:[main]  from main::@3
  (byte*) print_char_cursor#48 ← phi( main::@3/(byte*) print_char_cursor#22 )
  (byte*) print_line_cursor#43 ← phi( main::@3/(byte*) print_line_cursor#15 )
  (byte) c2B#14 ← phi( main::@3/(byte) c2B#16 )
  (byte) c2A#14 ← phi( main::@3/(byte) c2A#16 )
  (byte) c1B#14 ← phi( main::@3/(byte) c1B#16 )
  (byte) c1A#14 ← phi( main::@3/(byte) c1A#16 )
  (byte*) doplasma::screen#0 ← (byte*) SCREEN1#0
  call doplasma 
  to:main::@12
main::@12: scope:[main]  from main::@4
  (byte*) print_char_cursor#47 ← phi( main::@4/(byte*) print_char_cursor#48 )
  (byte*) print_line_cursor#42 ← phi( main::@4/(byte*) print_line_cursor#43 )
  (byte) c2B#7 ← phi( main::@4/(byte) c2B#5 )
  (byte) c2A#7 ← phi( main::@4/(byte) c2A#5 )
  (byte) c1B#7 ← phi( main::@4/(byte) c1B#5 )
  (byte) c1A#7 ← phi( main::@4/(byte) c1A#5 )
  (byte) c1A#0 ← (byte) c1A#7
  (byte) c1B#0 ← (byte) c1B#7
  (byte) c2A#0 ← (byte) c2A#7
  (byte) c2B#0 ← (byte) c2B#7
  (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::@12
  (byte*) print_char_cursor#45 ← phi( main::@12/(byte*) print_char_cursor#47 )
  (byte*) print_line_cursor#40 ← phi( main::@12/(byte*) print_line_cursor#42 )
  (byte) c2B#27 ← phi( main::@12/(byte) c2B#0 )
  (byte) c2A#27 ← phi( main::@12/(byte) c2A#0 )
  (byte) c1B#25 ← phi( main::@12/(byte) c1B#0 )
  (byte) c1A#25 ← phi( main::@12/(byte) c1A#0 )
  (byte*) main::toD0181_gfx#1 ← phi( main::@12/(byte*) main::toD0181_gfx#0 )
  (byte*) main::toD0181_screen#1 ← phi( main::@12/(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*) print_char_cursor#43 ← phi( main::toD0181/(byte*) print_char_cursor#45 )
  (byte*) print_line_cursor#38 ← phi( main::toD0181/(byte*) print_line_cursor#40 )
  (byte) c2B#23 ← phi( main::toD0181/(byte) c2B#27 )
  (byte) c2A#23 ← phi( main::toD0181/(byte) c2A#27 )
  (byte) c1B#22 ← phi( main::toD0181/(byte) c1B#25 )
  (byte) c1A#22 ← phi( main::toD0181/(byte) c1A#25 )
  (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*) print_char_cursor#41 ← phi( main::toD0181_@return/(byte*) print_char_cursor#43 )
  (byte*) print_line_cursor#36 ← phi( main::toD0181_@return/(byte*) print_line_cursor#38 )
  (byte) c2B#15 ← phi( main::toD0181_@return/(byte) c2B#23 )
  (byte) c2A#15 ← phi( main::toD0181_@return/(byte) c2A#23 )
  (byte) c1B#15 ← phi( main::toD0181_@return/(byte) c1B#22 )
  (byte) c1A#15 ← phi( main::toD0181_@return/(byte) c1A#22 )
  (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 )
  (byte~) main::$4 ← (byte) main::toD0181_return#3
  *((byte*) D018#0) ← (byte~) main::$4
  (byte*) doplasma::screen#1 ← (byte*) SCREEN2#0
  call doplasma 
  to:main::@13
main::@13: scope:[main]  from main::@9
  (byte*) print_char_cursor#38 ← phi( main::@9/(byte*) print_char_cursor#41 )
  (byte*) print_line_cursor#33 ← phi( main::@9/(byte*) print_line_cursor#36 )
  (byte) c2B#8 ← phi( main::@9/(byte) c2B#5 )
  (byte) c2A#8 ← phi( main::@9/(byte) c2A#5 )
  (byte) c1B#8 ← phi( main::@9/(byte) c1B#5 )
  (byte) c1A#8 ← phi( main::@9/(byte) c1A#5 )
  (byte) c1A#1 ← (byte) c1A#8
  (byte) c1B#1 ← (byte) c1B#8
  (byte) c2A#1 ← (byte) c2A#8
  (byte) c2B#1 ← (byte) c2B#8
  (byte*) main::toD0182_screen#0 ← (byte*) SCREEN2#0
  (byte*) main::toD0182_gfx#0 ← (byte*) CHARSET#0
  to:main::toD0182
main::toD0182: scope:[main]  from main::@13
  (byte) c2B#31 ← phi( main::@13/(byte) c2B#1 )
  (byte) c2A#31 ← phi( main::@13/(byte) c2A#1 )
  (byte) c1B#29 ← phi( main::@13/(byte) c1B#1 )
  (byte) c1A#29 ← phi( main::@13/(byte) c1A#1 )
  (byte*) print_char_cursor#36 ← phi( main::@13/(byte*) print_char_cursor#38 )
  (byte*) print_line_cursor#31 ← phi( main::@13/(byte*) print_line_cursor#33 )
  (byte*) main::toD0182_gfx#1 ← phi( main::@13/(byte*) main::toD0182_gfx#0 )
  (byte*) main::toD0182_screen#1 ← phi( main::@13/(byte*) main::toD0182_screen#0 )
  (word~) main::toD0182_$0#0 ← ((word)) (byte*) main::toD0182_screen#1
  (number~) main::toD0182_$1#0 ← (word~) main::toD0182_$0#0 & (number) $3fff
  (number~) main::toD0182_$2#0 ← (number~) main::toD0182_$1#0 * (number) 4
  (number~) main::toD0182_$3#0 ← > (number~) main::toD0182_$2#0
  (word~) main::toD0182_$4#0 ← ((word)) (byte*) main::toD0182_gfx#1
  (byte~) main::toD0182_$5#0 ← > (word~) main::toD0182_$4#0
  (number~) main::toD0182_$6#0 ← (byte~) main::toD0182_$5#0 / (number) 4
  (number~) main::toD0182_$7#0 ← (number~) main::toD0182_$6#0 & (number) $f
  (number~) main::toD0182_$8#0 ← (number~) main::toD0182_$3#0 | (number~) main::toD0182_$7#0
  (byte) main::toD0182_return#0 ← (number~) main::toD0182_$8#0
  to:main::toD0182_@return
main::toD0182_@return: scope:[main]  from main::toD0182
  (byte) c2B#28 ← phi( main::toD0182/(byte) c2B#31 )
  (byte) c2A#28 ← phi( main::toD0182/(byte) c2A#31 )
  (byte) c1B#26 ← phi( main::toD0182/(byte) c1B#29 )
  (byte) c1A#26 ← phi( main::toD0182/(byte) c1A#29 )
  (byte*) print_char_cursor#32 ← phi( main::toD0182/(byte*) print_char_cursor#36 )
  (byte*) print_line_cursor#26 ← phi( main::toD0182/(byte*) print_line_cursor#31 )
  (byte) main::toD0182_return#2 ← phi( main::toD0182/(byte) main::toD0182_return#0 )
  (byte) main::toD0182_return#1 ← (byte) main::toD0182_return#2
  to:main::@10
main::@10: scope:[main]  from main::toD0182_@return
  (byte) c2B#21 ← phi( main::toD0182_@return/(byte) c2B#28 )
  (byte) c2A#21 ← phi( main::toD0182_@return/(byte) c2A#28 )
  (byte) c1B#20 ← phi( main::toD0182_@return/(byte) c1B#26 )
  (byte) c1A#20 ← phi( main::toD0182_@return/(byte) c1A#26 )
  (byte*) print_char_cursor#27 ← phi( main::toD0182_@return/(byte*) print_char_cursor#32 )
  (byte*) print_line_cursor#20 ← phi( main::toD0182_@return/(byte*) print_line_cursor#26 )
  (byte) main::toD0182_return#3 ← phi( main::toD0182_@return/(byte) main::toD0182_return#1 )
  (byte~) main::$6 ← (byte) main::toD0182_return#3
  *((byte*) D018#0) ← (byte~) main::$6
  to:main::@3
main::@return: scope:[main]  from main::@3
  (byte) c2B#9 ← phi( main::@3/(byte) c2B#16 )
  (byte) c2A#9 ← phi( main::@3/(byte) c2A#16 )
  (byte) c1B#9 ← phi( main::@3/(byte) c1B#16 )
  (byte) c1A#9 ← phi( main::@3/(byte) c1A#16 )
  (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#2 ← (byte) c1A#9
  (byte) c1B#2 ← (byte) c1B#9
  (byte) c2A#2 ← (byte) c2A#9
  (byte) c2B#2 ← (byte) c2B#9
  return 
  to:@return
@42: scope:[]  from @41
  (byte*) print_screen#9 ← phi( @41/(byte*) print_screen#10 )
  (byte*) print_char_cursor#30 ← phi( @41/(byte*) print_char_cursor#33 )
  (byte*) print_line_cursor#24 ← phi( @41/(byte*) print_line_cursor#27 )
  (byte) c1A#3 ← (number) 0
  (byte) c1B#3 ← (number) 0
  (byte) c2A#3 ← (number) 0
  (byte) c2B#3 ← (number) 0
  to:@44
doplasma: scope:[doplasma]  from main::@4 main::@9
  (byte*) doplasma::screen#10 ← phi( main::@4/(byte*) doplasma::screen#0 main::@9/(byte*) doplasma::screen#1 )
  (byte) c2B#24 ← phi( main::@4/(byte) c2B#14 main::@9/(byte) c2B#15 )
  (byte) c2A#24 ← phi( main::@4/(byte) c2A#14 main::@9/(byte) c2A#15 )
  (byte) c1B#10 ← phi( main::@4/(byte) c1B#14 main::@9/(byte) c1B#15 )
  (byte) c1A#10 ← phi( main::@4/(byte) c1A#14 main::@9/(byte) c1A#15 )
  (byte[$28]) doplasma::xbuf#0 ← { fill( $28, 0) }
  (byte[$19]) doplasma::ybuf#0 ← { fill( $19, 0) }
  (byte) doplasma::c1a#0 ← (byte) c1A#10
  (byte) doplasma::c1b#0 ← (byte) c1B#10
  (byte) doplasma::i#0 ← (number) 0
  to:doplasma::@1
doplasma::@1: scope:[doplasma]  from doplasma doplasma::@1
  (byte*) doplasma::screen#9 ← phi( doplasma/(byte*) doplasma::screen#10 doplasma::@1/(byte*) doplasma::screen#9 )
  (byte) c2B#17 ← phi( doplasma/(byte) c2B#24 doplasma::@1/(byte) c2B#17 )
  (byte) c2A#17 ← phi( doplasma/(byte) c2A#24 doplasma::@1/(byte) c2A#17 )
  (byte) c1B#17 ← phi( doplasma/(byte) c1B#10 doplasma::@1/(byte) c1B#17 )
  (byte) c1A#17 ← phi( doplasma/(byte) c1A#10 doplasma::@1/(byte) c1A#17 )
  (byte) doplasma::i#2 ← phi( doplasma/(byte) doplasma::i#0 doplasma::@1/(byte) doplasma::i#1 )
  (byte) doplasma::c1b#2 ← phi( doplasma/(byte) doplasma::c1b#0 doplasma::@1/(byte) doplasma::c1b#1 )
  (byte) doplasma::c1a#2 ← phi( doplasma/(byte) doplasma::c1a#0 doplasma::@1/(byte) doplasma::c1a#1 )
  (byte~) doplasma::$0 ← *((byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2)
  *((byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$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#2
  (bool~) doplasma::$1 ← (byte) doplasma::i#1 < (number) $19
  if((bool~) doplasma::$1) goto doplasma::@1
  to:doplasma::@2
doplasma::@2: scope:[doplasma]  from doplasma::@1
  (byte*) doplasma::screen#8 ← phi( doplasma::@1/(byte*) doplasma::screen#9 )
  (byte) c2B#10 ← phi( doplasma::@1/(byte) c2B#17 )
  (byte) c2A#10 ← phi( doplasma::@1/(byte) c2A#17 )
  (byte) c1B#11 ← phi( doplasma::@1/(byte) c1B#17 )
  (byte) c1A#11 ← phi( doplasma::@1/(byte) c1A#17 )
  (byte) c1A#4 ← (byte) c1A#11 + (number) 3
  (byte) c1B#4 ← (byte) c1B#11 - (number) 5
  (byte) doplasma::c2a#0 ← (byte) c2A#10
  (byte) doplasma::c2b#0 ← (byte) c2B#10
  (byte) doplasma::i1#0 ← (number) 0
  to:doplasma::@3
doplasma::@3: scope:[doplasma]  from doplasma::@2 doplasma::@3
  (byte) c1B#32 ← phi( doplasma::@2/(byte) c1B#4 doplasma::@3/(byte) c1B#32 )
  (byte) c1A#32 ← phi( doplasma::@2/(byte) c1A#4 doplasma::@3/(byte) c1A#32 )
  (byte*) doplasma::screen#7 ← phi( doplasma::@2/(byte*) doplasma::screen#8 doplasma::@3/(byte*) doplasma::screen#7 )
  (byte) c2B#18 ← phi( doplasma::@2/(byte) c2B#10 doplasma::@3/(byte) c2B#18 )
  (byte) c2A#18 ← phi( doplasma::@2/(byte) c2A#10 doplasma::@3/(byte) c2A#18 )
  (byte) doplasma::i1#2 ← phi( doplasma::@2/(byte) doplasma::i1#0 doplasma::@3/(byte) doplasma::i1#1 )
  (byte) doplasma::c2b#2 ← phi( doplasma::@2/(byte) doplasma::c2b#0 doplasma::@3/(byte) doplasma::c2b#1 )
  (byte) doplasma::c2a#2 ← phi( doplasma::@2/(byte) doplasma::c2a#0 doplasma::@3/(byte) doplasma::c2a#1 )
  (byte~) doplasma::$2 ← *((byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2)
  *((byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$2
  (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#2
  (bool~) doplasma::$3 ← (byte) doplasma::i1#1 < (number) $28
  if((bool~) doplasma::$3) goto doplasma::@3
  to:doplasma::@4
doplasma::@4: scope:[doplasma]  from doplasma::@3
  (byte) c1B#30 ← phi( doplasma::@3/(byte) c1B#32 )
  (byte) c1A#30 ← phi( doplasma::@3/(byte) c1A#32 )
  (byte*) doplasma::screen#6 ← phi( doplasma::@3/(byte*) doplasma::screen#7 )
  (byte) c2B#11 ← phi( doplasma::@3/(byte) c2B#18 )
  (byte) c2A#11 ← phi( doplasma::@3/(byte) c2A#18 )
  (byte) c2A#4 ← (byte) c2A#11 + (number) 2
  (byte) c2B#4 ← (byte) c2B#11 - (number) 3
  (byte) doplasma::ii#0 ← (number) 0
  to:doplasma::@5
doplasma::@5: scope:[doplasma]  from doplasma::@4 doplasma::@7
  (byte) c2B#29 ← phi( doplasma::@4/(byte) c2B#4 doplasma::@7/(byte) c2B#19 )
  (byte) c2A#29 ← phi( doplasma::@4/(byte) c2A#4 doplasma::@7/(byte) c2A#19 )
  (byte) c1B#27 ← phi( doplasma::@4/(byte) c1B#30 doplasma::@7/(byte) c1B#18 )
  (byte) c1A#27 ← phi( doplasma::@4/(byte) c1A#30 doplasma::@7/(byte) c1A#18 )
  (byte*) doplasma::screen#5 ← phi( doplasma::@4/(byte*) doplasma::screen#6 doplasma::@7/(byte*) doplasma::screen#2 )
  (byte) doplasma::ii#4 ← phi( doplasma::@4/(byte) doplasma::ii#0 doplasma::@7/(byte) doplasma::ii#1 )
  (byte) doplasma::i2#0 ← (number) 0
  to:doplasma::@6
doplasma::@6: scope:[doplasma]  from doplasma::@5 doplasma::@6
  (byte) c2B#25 ← phi( doplasma::@5/(byte) c2B#29 doplasma::@6/(byte) c2B#25 )
  (byte) c2A#25 ← phi( doplasma::@5/(byte) c2A#29 doplasma::@6/(byte) c2A#25 )
  (byte) c1B#23 ← phi( doplasma::@5/(byte) c1B#27 doplasma::@6/(byte) c1B#23 )
  (byte) c1A#23 ← phi( doplasma::@5/(byte) c1A#27 doplasma::@6/(byte) c1A#23 )
  (byte*) doplasma::screen#3 ← phi( doplasma::@5/(byte*) doplasma::screen#5 doplasma::@6/(byte*) doplasma::screen#3 )
  (byte) doplasma::ii#2 ← phi( doplasma::@5/(byte) doplasma::ii#4 doplasma::@6/(byte) doplasma::ii#2 )
  (byte) doplasma::i2#2 ← phi( doplasma::@5/(byte) doplasma::i2#0 doplasma::@6/(byte) doplasma::i2#1 )
  (byte~) doplasma::$4 ← *((byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#2)
  *((byte*) doplasma::screen#3 + (byte) doplasma::i2#2) ← (byte~) doplasma::$4
  (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2
  (bool~) doplasma::$5 ← (byte) doplasma::i2#1 < (number) $28
  if((bool~) doplasma::$5) goto doplasma::@6
  to:doplasma::@7
doplasma::@7: scope:[doplasma]  from doplasma::@6
  (byte) c2B#19 ← phi( doplasma::@6/(byte) c2B#25 )
  (byte) c2A#19 ← phi( doplasma::@6/(byte) c2A#25 )
  (byte) c1B#18 ← phi( doplasma::@6/(byte) c1B#23 )
  (byte) c1A#18 ← phi( doplasma::@6/(byte) c1A#23 )
  (byte) doplasma::ii#3 ← phi( doplasma::@6/(byte) doplasma::ii#2 )
  (byte*) doplasma::screen#4 ← phi( doplasma::@6/(byte*) doplasma::screen#3 )
  (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#4 + (number) $28
  (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#3
  (bool~) doplasma::$6 ← (byte) doplasma::ii#1 < (number) $19
  if((bool~) doplasma::$6) goto doplasma::@5
  to:doplasma::@return
doplasma::@return: scope:[doplasma]  from doplasma::@7
  (byte) c2B#12 ← phi( doplasma::@7/(byte) c2B#19 )
  (byte) c2A#12 ← phi( doplasma::@7/(byte) c2A#19 )
  (byte) c1B#12 ← phi( doplasma::@7/(byte) c1B#18 )
  (byte) c1A#12 ← phi( doplasma::@7/(byte) c1A#18 )
  (byte) c1A#5 ← (byte) c1A#12
  (byte) c1B#5 ← (byte) c1B#12
  (byte) c2A#5 ← (byte) c2A#12
  (byte) c2B#5 ← (byte) c2B#12
  return 
  to:@return
makecharset: scope:[makecharset]  from main::@2
  (byte*) makecharset::charset#13 ← phi( main::@2/(byte*) makecharset::charset#0 )
  (byte*) print_char_cursor#28 ← phi( main::@2/(byte*) print_char_cursor#21 )
  (byte*) print_line_cursor#21 ← 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::@11
makecharset::@11: scope:[makecharset]  from makecharset
  (byte*) makecharset::charset#10 ← phi( makecharset/(byte*) makecharset::charset#13 )
  (byte*) print_char_cursor#23 ← phi( makecharset/(byte*) print_char_cursor#28 )
  (byte*) print_line_cursor#16 ← phi( makecharset/(byte*) print_line_cursor#21 )
  (byte*) print_screen#3 ← phi( makecharset/(byte*) print_screen#4 )
  call print_cls 
  to:makecharset::@12
makecharset::@12: scope:[makecharset]  from makecharset::@11
  (byte*) makecharset::charset#8 ← phi( makecharset::@11/(byte*) makecharset::charset#10 )
  (byte*) print_char_cursor#16 ← phi( makecharset::@11/(byte*) print_char_cursor#4 )
  (byte*) print_line_cursor#11 ← phi( makecharset::@11/(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::@12 makecharset::@9
  (byte*) print_char_cursor#46 ← phi( makecharset::@12/(byte*) print_char_cursor#7 makecharset::@9/(byte*) print_char_cursor#24 )
  (byte*) print_line_cursor#41 ← phi( makecharset::@12/(byte*) print_line_cursor#5 makecharset::@9/(byte*) print_line_cursor#17 )
  (byte*) makecharset::charset#7 ← phi( makecharset::@12/(byte*) makecharset::charset#8 makecharset::@9/(byte*) makecharset::charset#9 )
  (word) makecharset::c#2 ← phi( makecharset::@12/(word) makecharset::c#0 makecharset::@9/(word) makecharset::c#1 )
  (byte~) makecharset::$2 ← < (word) makecharset::c#2
  (byte) makecharset::s#0 ← *((byte[$100]) SINTABLE#0 + (byte~) makecharset::$2)
  (byte) makecharset::i#0 ← (number) 0
  to:makecharset::@2
makecharset::@2: scope:[makecharset]  from makecharset::@1 makecharset::@6
  (byte*) print_char_cursor#44 ← phi( makecharset::@1/(byte*) print_char_cursor#46 makecharset::@6/(byte*) print_char_cursor#34 )
  (byte*) print_line_cursor#39 ← phi( makecharset::@1/(byte*) print_line_cursor#41 makecharset::@6/(byte*) print_line_cursor#28 )
  (byte*) makecharset::charset#6 ← phi( makecharset::@1/(byte*) makecharset::charset#7 makecharset::@6/(byte*) makecharset::charset#1 )
  (byte) makecharset::i#7 ← phi( makecharset::@1/(byte) makecharset::i#0 makecharset::@6/(byte) makecharset::i#1 )
  (word) makecharset::c#12 ← phi( makecharset::@1/(word) makecharset::c#2 makecharset::@6/(word) makecharset::c#3 )
  (byte) makecharset::s#3 ← phi( makecharset::@1/(byte) makecharset::s#0 makecharset::@6/(byte) makecharset::s#5 )
  (byte) makecharset::b#0 ← (number) 0
  (byte) makecharset::ii#0 ← (number) 0
  to:makecharset::@3
makecharset::@3: scope:[makecharset]  from makecharset::@2 makecharset::@4
  (byte*) print_char_cursor#42 ← phi( makecharset::@2/(byte*) print_char_cursor#44 makecharset::@4/(byte*) print_char_cursor#37 )
  (byte*) print_line_cursor#37 ← phi( makecharset::@2/(byte*) print_line_cursor#39 makecharset::@4/(byte*) print_line_cursor#32 )
  (byte*) makecharset::charset#5 ← phi( makecharset::@2/(byte*) makecharset::charset#6 makecharset::@4/(byte*) makecharset::charset#2 )
  (byte) makecharset::i#6 ← phi( makecharset::@2/(byte) makecharset::i#7 makecharset::@4/(byte) makecharset::i#3 )
  (word) makecharset::c#11 ← phi( makecharset::@2/(word) makecharset::c#12 makecharset::@4/(word) makecharset::c#6 )
  (byte) makecharset::b#6 ← phi( makecharset::@2/(byte) makecharset::b#0 makecharset::@4/(byte) makecharset::b#5 )
  (byte) makecharset::ii#5 ← phi( makecharset::@2/(byte) makecharset::ii#0 makecharset::@4/(byte) makecharset::ii#1 )
  (byte) makecharset::s#2 ← phi( makecharset::@2/(byte) makecharset::s#3 makecharset::@4/(byte) makecharset::s#4 )
  call sid_rnd 
  (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#1
  to:makecharset::@13
makecharset::@13: scope:[makecharset]  from makecharset::@3
  (byte*) print_char_cursor#39 ← phi( makecharset::@3/(byte*) print_char_cursor#42 )
  (byte*) print_line_cursor#34 ← phi( makecharset::@3/(byte*) print_line_cursor#37 )
  (byte*) makecharset::charset#3 ← phi( makecharset::@3/(byte*) makecharset::charset#5 )
  (byte) makecharset::i#4 ← phi( makecharset::@3/(byte) makecharset::i#6 )
  (word) makecharset::c#8 ← phi( makecharset::@3/(word) makecharset::c#11 )
  (byte) makecharset::b#4 ← phi( makecharset::@3/(byte) makecharset::b#6 )
  (byte) makecharset::ii#4 ← phi( makecharset::@3/(byte) makecharset::ii#5 )
  (byte) makecharset::s#1 ← phi( makecharset::@3/(byte) makecharset::s#2 )
  (byte) sid_rnd::return#4 ← phi( makecharset::@3/(byte) sid_rnd::return#2 )
  (byte~) makecharset::$3 ← (byte) sid_rnd::return#4
  (number~) makecharset::$4 ← (byte~) makecharset::$3 & (number) $ff
  (bool~) makecharset::$5 ← (number~) makecharset::$4 > (byte) makecharset::s#1
  (bool~) makecharset::$6 ← ! (bool~) makecharset::$5
  if((bool~) makecharset::$6) goto makecharset::@4
  to:makecharset::@5
makecharset::@4: scope:[makecharset]  from makecharset::@13 makecharset::@5
  (byte*) print_char_cursor#37 ← phi( makecharset::@13/(byte*) print_char_cursor#39 makecharset::@5/(byte*) print_char_cursor#40 )
  (byte*) print_line_cursor#32 ← phi( makecharset::@13/(byte*) print_line_cursor#34 makecharset::@5/(byte*) print_line_cursor#35 )
  (byte) makecharset::s#4 ← phi( makecharset::@13/(byte) makecharset::s#1 makecharset::@5/(byte) makecharset::s#6 )
  (byte*) makecharset::charset#2 ← phi( makecharset::@13/(byte*) makecharset::charset#3 makecharset::@5/(byte*) makecharset::charset#4 )
  (byte) makecharset::b#5 ← phi( makecharset::@13/(byte) makecharset::b#4 makecharset::@5/(byte) makecharset::b#1 )
  (byte) makecharset::i#3 ← phi( makecharset::@13/(byte) makecharset::i#4 makecharset::@5/(byte) makecharset::i#5 )
  (word) makecharset::c#6 ← phi( makecharset::@13/(word) makecharset::c#8 makecharset::@5/(word) makecharset::c#9 )
  (byte) makecharset::ii#2 ← phi( makecharset::@13/(byte) makecharset::ii#4 makecharset::@5/(byte) makecharset::ii#3 )
  (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2
  (bool~) makecharset::$7 ← (byte) makecharset::ii#1 < (number) 8
  if((bool~) makecharset::$7) goto makecharset::@3
  to:makecharset::@6
makecharset::@5: scope:[makecharset]  from makecharset::@13
  (byte*) print_char_cursor#40 ← phi( makecharset::@13/(byte*) print_char_cursor#39 )
  (byte*) print_line_cursor#35 ← phi( makecharset::@13/(byte*) print_line_cursor#34 )
  (byte) makecharset::s#6 ← phi( makecharset::@13/(byte) makecharset::s#1 )
  (byte*) makecharset::charset#4 ← phi( makecharset::@13/(byte*) makecharset::charset#3 )
  (byte) makecharset::i#5 ← phi( makecharset::@13/(byte) makecharset::i#4 )
  (word) makecharset::c#9 ← phi( makecharset::@13/(word) makecharset::c#8 )
  (byte) makecharset::ii#3 ← phi( makecharset::@13/(byte) makecharset::ii#4 )
  (byte) makecharset::b#2 ← phi( makecharset::@13/(byte) makecharset::b#4 )
  (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#3)
  to:makecharset::@4
makecharset::@6: scope:[makecharset]  from makecharset::@4
  (byte*) print_char_cursor#34 ← phi( makecharset::@4/(byte*) print_char_cursor#37 )
  (byte*) print_line_cursor#28 ← phi( makecharset::@4/(byte*) print_line_cursor#32 )
  (byte) makecharset::s#5 ← phi( makecharset::@4/(byte) makecharset::s#4 )
  (byte*) makecharset::charset#1 ← phi( makecharset::@4/(byte*) makecharset::charset#2 )
  (byte) makecharset::b#3 ← phi( makecharset::@4/(byte) makecharset::b#5 )
  (byte) makecharset::i#2 ← phi( makecharset::@4/(byte) makecharset::i#3 )
  (word) makecharset::c#3 ← phi( makecharset::@4/(word) makecharset::c#6 )
  (number~) makecharset::$8 ← (word) makecharset::c#3 * (number) 8
  (number~) makecharset::$9 ← (number~) makecharset::$8 + (byte) makecharset::i#2
  *((byte*) makecharset::charset#1 + (number~) makecharset::$9) ← (byte) makecharset::b#3
  (byte) makecharset::i#1 ← ++ (byte) makecharset::i#2
  (bool~) makecharset::$10 ← (byte) makecharset::i#1 < (number) 8
  if((bool~) makecharset::$10) goto makecharset::@2
  to:makecharset::@7
makecharset::@7: scope:[makecharset]  from makecharset::@6
  (byte*) makecharset::charset#12 ← phi( makecharset::@6/(byte*) makecharset::charset#1 )
  (byte*) print_char_cursor#29 ← phi( makecharset::@6/(byte*) print_char_cursor#34 )
  (byte*) print_line_cursor#23 ← phi( makecharset::@6/(byte*) print_line_cursor#28 )
  (word) makecharset::c#4 ← phi( makecharset::@6/(word) makecharset::c#3 )
  (number~) makecharset::$11 ← (word) makecharset::c#4 & (number) 7
  (bool~) makecharset::$12 ← (number~) makecharset::$11 == (number) 0
  (bool~) makecharset::$13 ← ! (bool~) makecharset::$12
  if((bool~) makecharset::$13) goto makecharset::@9
  to:makecharset::@8
makecharset::@9: scope:[makecharset]  from makecharset::@14 makecharset::@7
  (byte*) makecharset::charset#9 ← phi( makecharset::@14/(byte*) makecharset::charset#11 makecharset::@7/(byte*) makecharset::charset#12 )
  (byte*) print_char_cursor#24 ← phi( makecharset::@14/(byte*) print_char_cursor#8 makecharset::@7/(byte*) print_char_cursor#29 )
  (byte*) print_line_cursor#17 ← phi( makecharset::@14/(byte*) print_line_cursor#22 makecharset::@7/(byte*) print_line_cursor#23 )
  (word) makecharset::c#5 ← phi( makecharset::@14/(word) makecharset::c#7 makecharset::@7/(word) makecharset::c#4 )
  (word) makecharset::c#1 ← ++ (word) makecharset::c#5
  (bool~) makecharset::$15 ← (word) makecharset::c#1 < (number) $100
  if((bool~) makecharset::$15) goto makecharset::@1
  to:makecharset::@return
makecharset::@8: scope:[makecharset]  from makecharset::@7
  (byte*) makecharset::charset#14 ← phi( makecharset::@7/(byte*) makecharset::charset#12 )
  (byte*) print_line_cursor#29 ← phi( makecharset::@7/(byte*) print_line_cursor#23 )
  (word) makecharset::c#10 ← phi( makecharset::@7/(word) makecharset::c#4 )
  (byte*) print_char_cursor#20 ← phi( makecharset::@7/(byte*) print_char_cursor#29 )
  (byte) print_char::ch#0 ← (byte) '.'
  call print_char 
  to:makecharset::@14
makecharset::@14: scope:[makecharset]  from makecharset::@8
  (byte*) makecharset::charset#11 ← phi( makecharset::@8/(byte*) makecharset::charset#14 )
  (byte*) print_line_cursor#22 ← phi( makecharset::@8/(byte*) print_line_cursor#29 )
  (word) makecharset::c#7 ← phi( makecharset::@8/(word) makecharset::c#10 )
  (byte*) print_char_cursor#17 ← phi( makecharset::@8/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#8 ← (byte*) print_char_cursor#17
  to:makecharset::@9
makecharset::@return: scope:[makecharset]  from makecharset::@9
  (byte*) print_char_cursor#18 ← phi( makecharset::@9/(byte*) print_char_cursor#24 )
  (byte*) print_line_cursor#12 ← phi( makecharset::@9/(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
@44: scope:[]  from @42
  (byte*) print_screen#8 ← phi( @42/(byte*) print_screen#9 )
  (byte) c2B#20 ← phi( @42/(byte) c2B#3 )
  (byte) c2A#20 ← phi( @42/(byte) c2A#3 )
  (byte) c1B#19 ← phi( @42/(byte) c1B#3 )
  (byte) c1A#19 ← phi( @42/(byte) c1A#3 )
  (byte*) print_char_cursor#25 ← phi( @42/(byte*) print_char_cursor#30 )
  (byte*) print_line_cursor#18 ← phi( @42/(byte*) print_line_cursor#24 )
  call main 
  to:@45
@45: scope:[]  from @44
  (byte) c2B#13 ← phi( @44/(byte) c2B#2 )
  (byte) c2A#13 ← phi( @44/(byte) c2A#2 )
  (byte) c1B#13 ← phi( @44/(byte) c1B#2 )
  (byte) c1A#13 ← phi( @44/(byte) c1A#2 )
  (byte*) print_char_cursor#19 ← phi( @44/(byte*) print_char_cursor#6 )
  (byte*) print_line_cursor#13 ← phi( @44/(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#6 ← (byte) c1A#13
  (byte) c1B#6 ← (byte) c1B#13
  (byte) c2A#6 ← (byte) c2A#13
  (byte) c2B#6 ← (byte) c2B#13
  to:@end
@end: scope:[]  from @45

SYMBOL TABLE SSA
(label) @16
(label) @39
(label) @41
(label) @42
(label) @44
(label) @45
(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*) SCREEN2
(byte*) SCREEN2#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#32
(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#32
(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#32
(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#32
(byte) c2B#4
(byte) c2B#5
(byte) c2B#6
(byte) c2B#7
(byte) c2B#8
(byte) c2B#9
(void()) doplasma((byte*) doplasma::screen)
(byte~) doplasma::$0
(bool~) doplasma::$1
(byte~) doplasma::$2
(bool~) doplasma::$3
(byte~) doplasma::$4
(bool~) doplasma::$5
(bool~) doplasma::$6
(label) doplasma::@1
(label) doplasma::@2
(label) doplasma::@3
(label) doplasma::@4
(label) doplasma::@5
(label) doplasma::@6
(label) doplasma::@7
(label) doplasma::@return
(byte) doplasma::c1a
(byte) doplasma::c1a#0
(byte) doplasma::c1a#1
(byte) doplasma::c1a#2
(byte) doplasma::c1b
(byte) doplasma::c1b#0
(byte) doplasma::c1b#1
(byte) doplasma::c1b#2
(byte) doplasma::c2a
(byte) doplasma::c2a#0
(byte) doplasma::c2a#1
(byte) doplasma::c2a#2
(byte) doplasma::c2b
(byte) doplasma::c2b#0
(byte) doplasma::c2b#1
(byte) doplasma::c2b#2
(byte) doplasma::i
(byte) doplasma::i#0
(byte) doplasma::i#1
(byte) doplasma::i#2
(byte) doplasma::i1
(byte) doplasma::i1#0
(byte) doplasma::i1#1
(byte) doplasma::i1#2
(byte) doplasma::i2
(byte) doplasma::i2#0
(byte) doplasma::i2#1
(byte) doplasma::i2#2
(byte) doplasma::ii
(byte) doplasma::ii#0
(byte) doplasma::ii#1
(byte) doplasma::ii#2
(byte) doplasma::ii#3
(byte) doplasma::ii#4
(byte*) doplasma::screen
(byte*) doplasma::screen#0
(byte*) doplasma::screen#1
(byte*) doplasma::screen#10
(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[$28]) doplasma::xbuf
(byte[$28]) doplasma::xbuf#0
(byte[$19]) doplasma::ybuf
(byte[$19]) doplasma::ybuf#0
(void()) main()
(byte*~) main::$1
(bool~) main::$2
(byte~) main::$4
(byte~) main::$6
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@13
(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
(label) main::toD0182
(word~) main::toD0182_$0
(word~) main::toD0182_$0#0
(number~) main::toD0182_$1
(number~) main::toD0182_$1#0
(number~) main::toD0182_$2
(number~) main::toD0182_$2#0
(number~) main::toD0182_$3
(number~) main::toD0182_$3#0
(word~) main::toD0182_$4
(word~) main::toD0182_$4#0
(byte~) main::toD0182_$5
(byte~) main::toD0182_$5#0
(number~) main::toD0182_$6
(number~) main::toD0182_$6#0
(number~) main::toD0182_$7
(number~) main::toD0182_$7#0
(number~) main::toD0182_$8
(number~) main::toD0182_$8#0
(label) main::toD0182_@return
(byte*) main::toD0182_gfx
(byte*) main::toD0182_gfx#0
(byte*) main::toD0182_gfx#1
(byte) main::toD0182_return
(byte) main::toD0182_return#0
(byte) main::toD0182_return#1
(byte) main::toD0182_return#2
(byte) main::toD0182_return#3
(byte*) main::toD0182_screen
(byte*) main::toD0182_screen#0
(byte*) main::toD0182_screen#1
(void()) makecharset((byte*) makecharset::charset)
(bool~) makecharset::$10
(number~) makecharset::$11
(bool~) makecharset::$12
(bool~) makecharset::$13
(bool~) makecharset::$15
(byte~) makecharset::$2
(byte~) makecharset::$3
(number~) makecharset::$4
(bool~) makecharset::$5
(bool~) makecharset::$6
(bool~) makecharset::$7
(number~) makecharset::$8
(number~) makecharset::$9
(label) makecharset::@1
(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#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[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#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#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::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::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
(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::@return
(byte) memset::c
(byte) memset::c#0
(byte) memset::c#1
(byte) memset::c#2
(byte) memset::c#3
(byte*) memset::dst
(byte*) memset::dst#0
(byte*) memset::dst#1
(byte*) memset::dst#2
(byte*) memset::end
(byte*) memset::end#0
(byte*) memset::end#1
(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()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
(byte) print_char::ch#0
(byte) print_char::ch#1
(byte*) print_char_cursor
(byte*) print_char_cursor#0
(byte*) print_char_cursor#1
(byte*) print_char_cursor#10
(byte*) print_char_cursor#11
(byte*) print_char_cursor#12
(byte*) print_char_cursor#13
(byte*) print_char_cursor#14
(byte*) print_char_cursor#15
(byte*) print_char_cursor#16
(byte*) print_char_cursor#17
(byte*) print_char_cursor#18
(byte*) print_char_cursor#19
(byte*) print_char_cursor#2
(byte*) print_char_cursor#20
(byte*) print_char_cursor#21
(byte*) print_char_cursor#22
(byte*) print_char_cursor#23
(byte*) print_char_cursor#24
(byte*) print_char_cursor#25
(byte*) print_char_cursor#26
(byte*) print_char_cursor#27
(byte*) print_char_cursor#28
(byte*) print_char_cursor#29
(byte*) print_char_cursor#3
(byte*) print_char_cursor#30
(byte*) print_char_cursor#31
(byte*) print_char_cursor#32
(byte*) print_char_cursor#33
(byte*) print_char_cursor#34
(byte*) print_char_cursor#35
(byte*) print_char_cursor#36
(byte*) print_char_cursor#37
(byte*) print_char_cursor#38
(byte*) print_char_cursor#39
(byte*) print_char_cursor#4
(byte*) print_char_cursor#40
(byte*) print_char_cursor#41
(byte*) print_char_cursor#42
(byte*) print_char_cursor#43
(byte*) print_char_cursor#44
(byte*) print_char_cursor#45
(byte*) print_char_cursor#46
(byte*) print_char_cursor#47
(byte*) print_char_cursor#48
(byte*) print_char_cursor#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#43
(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::$1 ← (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) $3fff in (number~) main::toD0182_$1#0 ← (word~) main::toD0182_$0#0 & (number) $3fff
Adding number conversion cast (unumber) main::toD0182_$1#0 in (number~) main::toD0182_$1#0 ← (word~) main::toD0182_$0#0 & (unumber)(number) $3fff
Adding number conversion cast (unumber) 4 in (number~) main::toD0182_$2#0 ← (unumber~) main::toD0182_$1#0 * (number) 4
Adding number conversion cast (unumber) main::toD0182_$2#0 in (number~) main::toD0182_$2#0 ← (unumber~) main::toD0182_$1#0 * (unumber)(number) 4
Adding number conversion cast (unumber) main::toD0182_$3#0 in (number~) main::toD0182_$3#0 ← > (unumber~) main::toD0182_$2#0
Adding number conversion cast (unumber) 4 in (number~) main::toD0182_$6#0 ← (byte~) main::toD0182_$5#0 / (number) 4
Adding number conversion cast (unumber) main::toD0182_$6#0 in (number~) main::toD0182_$6#0 ← (byte~) main::toD0182_$5#0 / (unumber)(number) 4
Adding number conversion cast (unumber) $f in (number~) main::toD0182_$7#0 ← (unumber~) main::toD0182_$6#0 & (number) $f
Adding number conversion cast (unumber) main::toD0182_$7#0 in (number~) main::toD0182_$7#0 ← (unumber~) main::toD0182_$6#0 & (unumber)(number) $f
Adding number conversion cast (unumber) main::toD0182_$8#0 in (number~) main::toD0182_$8#0 ← (unumber~) main::toD0182_$3#0 | (unumber~) main::toD0182_$7#0
Adding number conversion cast (unumber) 0 in (byte) c1A#3 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) c1B#3 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) c2A#3 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) c2B#3 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) doplasma::i#0 ← (number) 0
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) $19 in (bool~) doplasma::$1 ← (byte) doplasma::i#1 < (number) $19
Adding number conversion cast (unumber) 3 in (byte) c1A#4 ← (byte) c1A#11 + (number) 3
Adding number conversion cast (unumber) 5 in (byte) c1B#4 ← (byte) c1B#11 - (number) 5
Adding number conversion cast (unumber) 0 in (byte) doplasma::i1#0 ← (number) 0
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) $28 in (bool~) doplasma::$3 ← (byte) doplasma::i1#1 < (number) $28
Adding number conversion cast (unumber) 2 in (byte) c2A#4 ← (byte) c2A#11 + (number) 2
Adding number conversion cast (unumber) 3 in (byte) c2B#4 ← (byte) c2B#11 - (number) 3
Adding number conversion cast (unumber) 0 in (byte) doplasma::ii#0 ← (number) 0
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#1 < (number) $28
Adding number conversion cast (unumber) $28 in (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#4 + (number) $28
Adding number conversion cast (unumber) $19 in (bool~) doplasma::$6 ← (byte) doplasma::ii#1 < (number) $19
Adding number conversion cast (unumber) 0 in (word) makecharset::c#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) makecharset::i#0 ← (number) 0
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) $ff in (number~) makecharset::$4 ← (byte~) makecharset::$3 & (number) $ff
Adding number conversion cast (unumber) makecharset::$4 in (number~) makecharset::$4 ← (byte~) makecharset::$3 & (unumber)(number) $ff
Adding number conversion cast (unumber) 8 in (bool~) makecharset::$7 ← (byte) makecharset::ii#1 < (number) 8
Adding number conversion cast (unumber) 8 in (number~) makecharset::$8 ← (word) makecharset::c#3 * (number) 8
Adding number conversion cast (unumber) makecharset::$8 in (number~) makecharset::$8 ← (word) makecharset::c#3 * (unumber)(number) 8
Adding number conversion cast (unumber) makecharset::$9 in (number~) makecharset::$9 ← (unumber~) makecharset::$8 + (byte) makecharset::i#2
Adding number conversion cast (unumber) 8 in (bool~) makecharset::$10 ← (byte) makecharset::i#1 < (number) 8
Adding number conversion cast (unumber) 7 in (number~) makecharset::$11 ← (word) makecharset::c#4 & (number) 7
Adding number conversion cast (unumber) makecharset::$11 in (number~) makecharset::$11 ← (word) makecharset::c#4 & (unumber)(number) 7
Adding number conversion cast (unumber) 0 in (bool~) makecharset::$12 ← (unumber~) makecharset::$11 == (number) 0
Adding number conversion cast (unumber) $100 in (bool~) makecharset::$15 ← (word) makecharset::c#1 < (number) $100
Successful SSA optimization PassNAddNumberTypeConversions
Adding number conversion cast (byte) to elements in (byte[8]) makecharset::bittab#0 ← { (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 PassNAddArrayNumberTypeConversions
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*) SCREEN2#0 ← (byte*)(number) $2c00
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 (word~) main::toD0182_$0#0 ← (word)(byte*) main::toD0182_screen#1
Inlining cast (word~) main::toD0182_$4#0 ← (word)(byte*) main::toD0182_gfx#1
Inlining cast (byte) c1A#3 ← (unumber)(number) 0
Inlining cast (byte) c1B#3 ← (unumber)(number) 0
Inlining cast (byte) c2A#3 ← (unumber)(number) 0
Inlining cast (byte) c2B#3 ← (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::ii#0 ← (unumber)(number) 0
Inlining cast (byte) doplasma::i2#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*) 11264
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 $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 4
Simplifying constant integer cast 9
Simplifying constant integer cast $19
Simplifying constant integer cast 3
Simplifying constant integer cast 5
Simplifying constant integer cast 0
Simplifying constant integer cast 3
Simplifying constant integer cast 7
Simplifying constant integer cast $28
Simplifying constant integer cast 2
Simplifying constant integer cast 3
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $19
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 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $ff
Simplifying constant integer cast 8
Simplifying constant integer cast 8
Simplifying constant integer cast 8
Simplifying constant integer cast 7
Simplifying constant integer cast 0
Simplifying constant integer cast $100
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 (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) 4
Finalized unsigned number type (byte) 9
Finalized unsigned number type (byte) $19
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 5
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $19
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) $ff
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $100
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 word in (unumber~) main::toD0182_$1#0 ← (word~) main::toD0182_$0#0 & (word) $3fff
Inferred type updated to word in (unumber~) main::toD0182_$2#0 ← (word~) main::toD0182_$1#0 * (byte) 4
Inferred type updated to byte in (unumber~) main::toD0182_$3#0 ← > (word~) main::toD0182_$2#0
Inferred type updated to byte in (unumber~) main::toD0182_$6#0 ← (byte~) main::toD0182_$5#0 / (byte) 4
Inferred type updated to byte in (unumber~) main::toD0182_$7#0 ← (byte~) main::toD0182_$6#0 & (byte) $f
Inferred type updated to byte in (unumber~) main::toD0182_$8#0 ← (byte~) main::toD0182_$3#0 | (byte~) main::toD0182_$7#0
Inferred type updated to byte in (unumber~) makecharset::$4 ← (byte~) makecharset::$3 & (byte) $ff
Inferred type updated to word in (unumber~) makecharset::$8 ← (word) makecharset::c#3 * (byte) 8
Inferred type updated to word in (unumber~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#2
Inferred type updated to byte in (unumber~) makecharset::$11 ← (word) makecharset::c#4 & (byte) 7
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 [221] (bool~) makecharset::$6 ← (byte~) makecharset::$4 <= (byte) makecharset::s#1 from [220] (bool~) makecharset::$5 ← (byte~) makecharset::$4 > (byte) makecharset::s#1
Inversing boolean not [239] (bool~) makecharset::$13 ← (byte~) makecharset::$11 != (byte) 0 from [238] (bool~) makecharset::$12 ← (byte~) makecharset::$11 == (byte) 0
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#2 = (byte) memset::c#3 
Alias (byte*) memset::end#0 = (byte*~) memset::$3 
Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#30 (byte*) print_char_cursor#35 (byte*) print_screen#11 (byte*) print_line_cursor#27 (byte*) print_char_cursor#33 (byte*) print_screen#10 (byte*) print_line_cursor#24 (byte*) print_char_cursor#30 (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) c1A#21 = (byte) c1A#24 (byte) c1A#28 
Alias (byte) c1B#21 = (byte) c1B#24 (byte) c1B#28 
Alias (byte) c2A#22 = (byte) c2A#26 (byte) c2A#30 
Alias (byte) c2B#22 = (byte) c2B#26 (byte) c2B#30 
Alias (byte*) print_screen#5 = (byte*) print_screen#6 
Alias (byte*) print_line_cursor#3 = (byte*) print_line_cursor#9 
Alias (byte*) print_char_cursor#14 = (byte*) print_char_cursor#5 
Alias (byte) c1A#14 = (byte) c1A#16 (byte) c1A#9 (byte) c1A#2 
Alias (byte) c1B#14 = (byte) c1B#16 (byte) c1B#9 (byte) c1B#2 
Alias (byte) c2A#14 = (byte) c2A#16 (byte) c2A#9 (byte) c2A#2 
Alias (byte) c2B#14 = (byte) c2B#16 (byte) c2B#9 (byte) c2B#2 
Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#43 (byte*) print_line_cursor#15 (byte*) print_line_cursor#42 (byte*) print_line_cursor#40 (byte*) print_line_cursor#38 (byte*) print_line_cursor#36 (byte*) print_line_cursor#33 (byte*) print_line_cursor#31 (byte*) print_line_cursor#26 (byte*) print_line_cursor#20 (byte*) print_line_cursor#4 
Alias (byte*) print_char_cursor#15 = (byte*) print_char_cursor#48 (byte*) print_char_cursor#22 (byte*) print_char_cursor#47 (byte*) print_char_cursor#45 (byte*) print_char_cursor#43 (byte*) print_char_cursor#41 (byte*) print_char_cursor#38 (byte*) print_char_cursor#36 (byte*) print_char_cursor#32 (byte*) print_char_cursor#27 (byte*) print_char_cursor#6 
Alias (byte) c1A#0 = (byte) c1A#7 (byte) c1A#25 (byte) c1A#22 (byte) c1A#15 
Alias (byte) c1B#0 = (byte) c1B#7 (byte) c1B#25 (byte) c1B#22 (byte) c1B#15 
Alias (byte) c2A#0 = (byte) c2A#7 (byte) c2A#27 (byte) c2A#23 (byte) c2A#15 
Alias (byte) c2B#0 = (byte) c2B#7 (byte) c2B#27 (byte) c2B#23 (byte) c2B#15 
Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1 
Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 
Alias (byte) main::toD0181_return#0 = (byte~) main::toD0181_$8#0 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$4 
Alias (byte) c1A#1 = (byte) c1A#8 (byte) c1A#29 (byte) c1A#26 (byte) c1A#20 
Alias (byte) c1B#1 = (byte) c1B#8 (byte) c1B#29 (byte) c1B#26 (byte) c1B#20 
Alias (byte) c2A#1 = (byte) c2A#8 (byte) c2A#31 (byte) c2A#28 (byte) c2A#21 
Alias (byte) c2B#1 = (byte) c2B#8 (byte) c2B#31 (byte) c2B#28 (byte) c2B#21 
Alias (byte*) main::toD0182_screen#0 = (byte*) main::toD0182_screen#1 
Alias (byte*) main::toD0182_gfx#0 = (byte*) main::toD0182_gfx#1 
Alias (byte) main::toD0182_return#0 = (byte~) main::toD0182_$8#0 (byte) main::toD0182_return#2 (byte) main::toD0182_return#1 (byte) main::toD0182_return#3 (byte~) main::$6 
Alias (byte) c1A#11 = (byte) c1A#17 
Alias (byte) c1B#11 = (byte) c1B#17 
Alias (byte) c2A#10 = (byte) c2A#17 
Alias (byte) c2B#10 = (byte) c2B#17 
Alias (byte*) doplasma::screen#8 = (byte*) doplasma::screen#9 
Alias (byte) c2A#11 = (byte) c2A#18 
Alias (byte) c2B#11 = (byte) c2B#18 
Alias (byte*) doplasma::screen#6 = (byte*) doplasma::screen#7 
Alias (byte) c1A#30 = (byte) c1A#32 
Alias (byte) c1B#30 = (byte) c1B#32 
Alias (byte*) doplasma::screen#3 = (byte*) doplasma::screen#4 
Alias (byte) doplasma::ii#2 = (byte) doplasma::ii#3 
Alias (byte) c1A#12 = (byte) c1A#18 (byte) c1A#23 (byte) c1A#5 
Alias (byte) c1B#12 = (byte) c1B#18 (byte) c1B#23 (byte) c1B#5 
Alias (byte) c2A#12 = (byte) c2A#19 (byte) c2A#25 (byte) c2A#5 
Alias (byte) c2B#12 = (byte) c2B#19 (byte) c2B#25 (byte) c2B#5 
Alias (byte*) print_screen#3 = (byte*) print_screen#4 
Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#21 
Alias (byte*) print_char_cursor#23 = (byte*) print_char_cursor#28 
Alias (byte*) makecharset::charset#10 = (byte*) makecharset::charset#13 (byte*) makecharset::charset#8 
Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#5 
Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#7 
Alias (byte) sid_rnd::return#2 = (byte) sid_rnd::return#4 
Alias (byte) makecharset::s#1 = (byte) makecharset::s#2 (byte) makecharset::s#6 
Alias (byte) makecharset::ii#3 = (byte) makecharset::ii#4 (byte) makecharset::ii#5 
Alias (byte) makecharset::b#2 = (byte) makecharset::b#4 (byte) makecharset::b#6 
Alias (word) makecharset::c#11 = (word) makecharset::c#8 (word) makecharset::c#9 
Alias (byte) makecharset::i#4 = (byte) makecharset::i#6 (byte) makecharset::i#5 
Alias (byte*) makecharset::charset#3 = (byte*) makecharset::charset#5 (byte*) makecharset::charset#4 
Alias (byte*) print_line_cursor#34 = (byte*) print_line_cursor#37 (byte*) print_line_cursor#35 
Alias (byte*) print_char_cursor#39 = (byte*) print_char_cursor#42 (byte*) print_char_cursor#40 
Alias (word) makecharset::c#10 = (word) makecharset::c#3 (word) makecharset::c#6 (word) makecharset::c#4 (word) makecharset::c#7 
Alias (byte) makecharset::i#2 = (byte) makecharset::i#3 
Alias (byte) makecharset::b#3 = (byte) makecharset::b#5 
Alias (byte*) makecharset::charset#1 = (byte*) makecharset::charset#2 (byte*) makecharset::charset#12 (byte*) makecharset::charset#14 (byte*) makecharset::charset#11 
Alias (byte) makecharset::s#4 = (byte) makecharset::s#5 
Alias (byte*) print_line_cursor#22 = (byte*) print_line_cursor#28 (byte*) print_line_cursor#32 (byte*) print_line_cursor#23 (byte*) print_line_cursor#29 
Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#34 (byte*) print_char_cursor#37 (byte*) print_char_cursor#29 
Alias (byte*) print_char_cursor#17 = (byte*) print_char_cursor#8 
Alias (byte*) print_line_cursor#12 = (byte*) print_line_cursor#17 (byte*) print_line_cursor#6 
Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#24 (byte*) print_char_cursor#9 
Alias (byte) c1A#19 = (byte) c1A#3 
Alias (byte) c1B#19 = (byte) c1B#3 
Alias (byte) c2A#20 = (byte) c2A#3 
Alias (byte) c2B#20 = (byte) c2B#3 
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#13 = (byte) c1A#6 
Alias (byte) c1B#13 = (byte) c1B#6 
Alias (byte) c2A#13 = (byte) c2A#6 
Alias (byte) c2B#13 = (byte) c2B#6 
Successful SSA optimization Pass2AliasElimination
Alias (byte) makecharset::ii#2 = (byte) makecharset::ii#3 
Alias (word) makecharset::c#10 = (word) makecharset::c#11 (word) makecharset::c#5 
Alias (byte) makecharset::i#2 = (byte) makecharset::i#4 
Alias (byte*) makecharset::charset#1 = (byte*) makecharset::charset#3 (byte*) makecharset::charset#9 
Alias (byte) makecharset::s#1 = (byte) makecharset::s#4 
Alias (byte*) print_line_cursor#12 = (byte*) print_line_cursor#22 (byte*) print_line_cursor#34 
Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#39 
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (byte) memset::c#1
Self Phi Eliminated (byte*) memset::end#1
Self Phi Eliminated (void*) memset::str#4
Self Phi Eliminated (byte*) print_line_cursor#14
Self Phi Eliminated (byte*) print_char_cursor#21
Self Phi Eliminated (byte) c1A#21
Self Phi Eliminated (byte) c1B#21
Self Phi Eliminated (byte) c2A#22
Self Phi Eliminated (byte) c2B#22
Self Phi Eliminated (byte*) print_screen#5
Self Phi Eliminated (byte*) print_line_cursor#10
Self Phi Eliminated (byte*) print_char_cursor#15
Self Phi Eliminated (byte) c1A#11
Self Phi Eliminated (byte) c1B#11
Self Phi Eliminated (byte) c2A#10
Self Phi Eliminated (byte) c2B#10
Self Phi Eliminated (byte*) doplasma::screen#8
Self Phi Eliminated (byte) c2A#11
Self Phi Eliminated (byte) c2B#11
Self Phi Eliminated (byte*) doplasma::screen#6
Self Phi Eliminated (byte) c1A#30
Self Phi Eliminated (byte) c1B#30
Self Phi Eliminated (byte) doplasma::ii#2
Self Phi Eliminated (byte*) doplasma::screen#3
Self Phi Eliminated (byte) c1A#12
Self Phi Eliminated (byte) c1B#12
Self Phi Eliminated (byte) c2A#12
Self Phi Eliminated (byte) c2B#12
Self Phi Eliminated (byte) makecharset::s#1
Self Phi Eliminated (word) makecharset::c#10
Self Phi Eliminated (byte) makecharset::i#2
Self Phi Eliminated (byte*) makecharset::charset#1
Self Phi Eliminated (byte*) print_line_cursor#12
Self Phi Eliminated (byte*) print_char_cursor#20
Successful SSA optimization Pass2SelfPhiElimination
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#2 (byte) memset::c#0
Identical Phi Values (byte) memset::c#1 (byte) memset::c#2
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) 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#31 (byte*) print_line_cursor#0
Identical Phi Values (byte) c1A#31 (byte) c1A#19
Identical Phi Values (byte) c1B#31 (byte) c1B#19
Identical Phi Values (byte) c2A#32 (byte) c2A#20
Identical Phi Values (byte) c2B#32 (byte) c2B#20
Identical Phi Values (byte*) print_screen#7 (byte*) print_line_cursor#0
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#31
Identical Phi Values (byte) c1A#21 (byte) c1A#31
Identical Phi Values (byte) c1B#21 (byte) c1B#31
Identical Phi Values (byte) c2A#22 (byte) c2A#32
Identical Phi Values (byte) c2B#22 (byte) c2B#32
Identical Phi Values (byte*) print_screen#5 (byte*) print_screen#7
Identical Phi Values (byte*) print_line_cursor#3 (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#3
Identical Phi Values (byte*) print_char_cursor#15 (byte*) print_char_cursor#14
Identical Phi Values (byte) c1A#0 (byte) c1A#12
Identical Phi Values (byte) c1B#0 (byte) c1B#12
Identical Phi Values (byte) c2A#0 (byte) c2A#12
Identical Phi Values (byte) c2B#0 (byte) c2B#12
Identical Phi Values (byte) c1A#1 (byte) c1A#12
Identical Phi Values (byte) c1B#1 (byte) c1B#12
Identical Phi Values (byte) c2A#1 (byte) c2A#12
Identical Phi Values (byte) c2B#1 (byte) c2B#12
Identical Phi Values (byte) c1A#11 (byte) c1A#10
Identical Phi Values (byte) c1B#11 (byte) c1B#10
Identical Phi Values (byte) c2A#10 (byte) c2A#24
Identical Phi Values (byte) c2B#10 (byte) c2B#24
Identical Phi Values (byte*) doplasma::screen#8 (byte*) doplasma::screen#10
Identical Phi Values (byte) c2A#11 (byte) c2A#10
Identical Phi Values (byte) c2B#11 (byte) c2B#10
Identical Phi Values (byte*) doplasma::screen#6 (byte*) doplasma::screen#8
Identical Phi Values (byte) c1A#30 (byte) c1A#4
Identical Phi Values (byte) c1B#30 (byte) c1B#4
Identical Phi Values (byte) doplasma::ii#2 (byte) doplasma::ii#4
Identical Phi Values (byte*) doplasma::screen#3 (byte*) doplasma::screen#5
Identical Phi Values (byte) c1A#12 (byte) c1A#27
Identical Phi Values (byte) c1B#12 (byte) c1B#27
Identical Phi Values (byte) c2A#12 (byte) c2A#29
Identical Phi Values (byte) c2B#12 (byte) c2B#29
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#10 (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 (byte) makecharset::s#1 (byte) makecharset::s#3
Identical Phi Values (word) makecharset::c#10 (word) makecharset::c#12
Identical Phi Values (byte) makecharset::i#2 (byte) makecharset::i#7
Identical Phi Values (byte*) makecharset::charset#1 (byte*) makecharset::charset#6
Identical Phi Values (byte*) print_line_cursor#12 (byte*) print_line_cursor#39
Identical Phi Values (byte*) print_char_cursor#20 (byte*) print_char_cursor#44
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#13 (byte) c1A#14
Identical Phi Values (byte) c1B#13 (byte) c1B#14
Identical Phi Values (byte) c2A#13 (byte) c2A#14
Identical Phi Values (byte) c2B#13 (byte) c2B#14
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (void*) memset::return#0 (void*) memset::str#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 [21] if((byte*) memset::dst#1!=(byte*) memset::end#0) goto memset::@4
Simple Condition (bool~) main::$2 [74] if((byte*) main::col#1!=rangelast(COLS#0,main::$1)) goto main::@1
Simple Condition (bool~) doplasma::$1 [160] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@1
Simple Condition (bool~) doplasma::$3 [174] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@3
Simple Condition (bool~) doplasma::$5 [186] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@6
Simple Condition (bool~) doplasma::$6 [191] if((byte) doplasma::ii#1<(byte) $19) goto doplasma::@5
Simple Condition (bool~) makecharset::$6 [222] if((byte~) makecharset::$4<=(byte) makecharset::s#3) goto makecharset::@4
Simple Condition (bool~) makecharset::$7 [226] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@3
Simple Condition (bool~) makecharset::$10 [235] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@2
Simple Condition (bool~) makecharset::$13 [240] if((byte~) makecharset::$11!=(byte) 0) goto makecharset::@9
Simple Condition (bool~) makecharset::$15 [244] if((word) makecharset::c#1<(word) $100) goto makecharset::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [148] (byte[$28]) doplasma::xbuf#0 ← { fill( $28, 0) }
Constant right-side identified [149] (byte[$19]) doplasma::ybuf#0 ← { fill( $19, 0) }
Constant right-side identified [199] (byte[8]) makecharset::bittab#0 ← { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 }
Successful SSA optimization Pass2ConstantRValueConsolidation
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*) SCREEN2#0 = (byte*) 11264
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(2*PI*i/256))
 }}
Constant (const byte) c1A#19 = 0
Constant (const byte) c1B#19 = 0
Constant (const byte) c2A#20 = 0
Constant (const byte) c2B#20 = 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::i#0 = 0
Constant (const byte) doplasma::i1#0 = 0
Constant (const byte) doplasma::ii#0 = 0
Constant (const byte) doplasma::i2#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*) doplasma::screen#0 = SCREEN1#0
Constant (const byte*) main::toD0181_screen#0 = SCREEN1#0
Constant (const byte*) main::toD0181_gfx#0 = CHARSET#0
Constant (const byte*) doplasma::screen#1 = SCREEN2#0
Constant (const byte*) main::toD0182_screen#0 = SCREEN2#0
Constant (const byte*) main::toD0182_gfx#0 = CHARSET#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (void*)print_line_cursor#0 in [35] (void*) memset::str#0 ← (void*)(const byte*) print_line_cursor#0
Constant value identified (word)main::toD0181_screen#0 in [94] (word~) main::toD0181_$0#0 ← (word)(const byte*) main::toD0181_screen#0
Constant value identified (word)main::toD0181_gfx#0 in [98] (word~) main::toD0181_$4#0 ← (word)(const byte*) main::toD0181_gfx#0
Constant value identified (word)main::toD0182_screen#0 in [119] (word~) main::toD0182_$0#0 ← (word)(const byte*) main::toD0182_screen#0
Constant value identified (word)main::toD0182_gfx#0 in [123] (word~) main::toD0182_$4#0 ← (word)(const byte*) main::toD0182_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 [82] if(true) goto main::@4
Successful SSA optimization Pass2ConstantIfs
De-inlining pointer[w] to *(pointer+w)   [232] *((byte*) makecharset::charset#6 + (word~) makecharset::$9) ← (byte) makecharset::b#3
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
Self Phi Eliminated (byte) c1A#27
Self Phi Eliminated (byte) c1B#27
Self Phi Eliminated (byte) c2A#29
Self Phi Eliminated (byte) c2B#29
Self Phi Eliminated (byte) makecharset::s#3
Self Phi Eliminated (word) makecharset::c#12
Self Phi Eliminated (byte*) makecharset::charset#6
Self Phi Eliminated (byte*) print_line_cursor#39
Self Phi Eliminated (byte*) print_char_cursor#44
Successful SSA optimization Pass2SelfPhiElimination
Identical Phi Values (byte) c1A#27 (byte) c1A#4
Identical Phi Values (byte) c1B#27 (byte) c1B#4
Identical Phi Values (byte) c2A#29 (byte) c2A#4
Identical Phi Values (byte) c2B#29 (byte) c2B#4
Identical Phi Values (byte) makecharset::s#3 (byte) makecharset::s#0
Identical Phi Values (word) makecharset::c#12 (word) makecharset::c#2
Identical Phi Values (byte*) makecharset::charset#6 (byte*) makecharset::charset#7
Identical Phi Values (byte*) print_line_cursor#39 (byte*) print_line_cursor#41
Identical Phi Values (byte*) print_char_cursor#44 (byte*) print_char_cursor#46
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [22] (byte*~) main::$1 ← (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::$1 = 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
Constant (const word) main::toD0182_$0#0 = (word)main::toD0182_screen#0
Constant (const word) main::toD0182_$4#0 = (word)main::toD0182_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
Resolved ranged next value [25] main::col#1 ← ++ main::col#2 to ++
Resolved ranged comparison value [26] if(main::col#1!=rangelast(COLS#0,main::$1)) goto main::@1 to (byte*)(const byte*) main::$1+(number) 1
Eliminating unused variable - keeping the phi block (byte*) print_line_cursor#41
Successful SSA optimization PassNEliminateUnusedVars
Adding number conversion cast (unumber) 1 in if((byte*) main::col#1!=(byte*)(const byte*) main::$1+(number) 1) goto main::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast (const byte*) main::$1+(unumber)(number) 1
Simplifying constant integer cast 1
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
Successful SSA optimization PassNFinalizeNumberTypeConversions
Self Phi Eliminated (byte*) makecharset::charset#7
Successful SSA optimization Pass2SelfPhiElimination
Identical Phi Values (byte*) makecharset::charset#7 (const byte*) makecharset::charset#0
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [28] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff
Constant right-side identified [31] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0
Constant right-side identified [37] (word~) main::toD0182_$1#0 ← (const word) main::toD0182_$0#0 & (word) $3fff
Constant right-side identified [40] (byte~) main::toD0182_$5#0 ← > (const word) main::toD0182_$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
Constant (const word) main::toD0182_$1#0 = main::toD0182_$0#0&$3fff
Constant (const byte) main::toD0182_$5#0 = >main::toD0182_$4#0
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0
Constant right-side identified [26] (word~) main::toD0181_$2#0 ← (const word) main::toD0181_$1#0 * (byte) 4
Constant right-side identified [28] (byte~) main::toD0181_$6#0 ← (const byte) main::toD0181_$5#0 / (byte) 4
Constant right-side identified [33] (word~) main::toD0182_$2#0 ← (const word) main::toD0182_$1#0 * (byte) 4
Constant right-side identified [35] (byte~) main::toD0182_$6#0 ← (const byte) main::toD0182_$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
Constant (const word) main::toD0182_$2#0 = main::toD0182_$1#0*4
Constant (const byte) main::toD0182_$6#0 = main::toD0182_$5#0/4
Successful SSA optimization Pass2ConstantIdentification
Constant 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
Constant right-side identified [30] (byte~) main::toD0182_$3#0 ← > (const word) main::toD0182_$2#0
Constant right-side identified [31] (byte~) main::toD0182_$7#0 ← (const byte) main::toD0182_$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
Constant (const byte) main::toD0182_$3#0 = >main::toD0182_$2#0
Constant (const byte) main::toD0182_$7#0 = main::toD0182_$6#0&$f
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [25] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3#0 | (const byte) main::toD0181_$7#0
Constant right-side identified [28] (byte) main::toD0182_return#0 ← (const byte) main::toD0182_$3#0 | (const byte) main::toD0182_$7#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0
Constant (const byte) main::toD0182_return#0 = main::toD0182_$3#0|main::toD0182_$7#0
Successful SSA optimization Pass2ConstantIdentification
Rewriting multiplication to use shift [77] (word~) makecharset::$8 ← (word) makecharset::c#2 * (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::i#0
Inlining constant with var siblings (const byte) doplasma::i1#0
Inlining constant with var siblings (const byte) doplasma::ii#0
Inlining constant with var siblings (const byte) doplasma::i2#0
Inlining constant with var siblings (const byte*) doplasma::screen#0
Inlining constant with var siblings (const byte*) doplasma::screen#1
Inlining constant with var siblings (const 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#19
Inlining constant with var siblings (const byte) c1B#19
Inlining constant with var siblings (const byte) c2A#20
Inlining constant with var siblings (const byte) c2B#20
Constant inlined c2B#20 = (byte) 0
Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN1#0
Constant inlined main::toD0181_gfx#0 = (const byte*) CHARSET#0
Constant inlined main::col#0 = (const byte*) COLS#0
Constant inlined doplasma::i#0 = (byte) 0
Constant inlined doplasma::i2#0 = (byte) 0
Constant inlined doplasma::i1#0 = (byte) 0
Constant inlined memset::$2 = (byte*)(const void*) memset::str#0
Constant inlined c1A#19 = (byte) 0
Constant inlined c2A#20 = (byte) 0
Constant inlined main::toD0182_gfx#0 = (const byte*) CHARSET#0
Constant inlined main::toD0182_$4#0 = (word)(const byte*) CHARSET#0
Constant inlined main::toD0182_$3#0 = >(word)(const byte*) SCREEN2#0&(word) $3fff*(byte) 4
Constant inlined main::toD0181_$0#0 = (word)(const byte*) SCREEN1#0
Constant inlined main::toD0182_$6#0 = >(word)(const byte*) CHARSET#0/(byte) 4
Constant inlined doplasma::ii#0 = (byte) 0
Constant inlined main::toD0181_$1#0 = (word)(const byte*) SCREEN1#0&(word) $3fff
Constant inlined main::toD0182_$5#0 = >(word)(const byte*) CHARSET#0
Constant inlined main::toD0182_$7#0 = >(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f
Constant inlined makecharset::ii#0 = (byte) 0
Constant inlined main::toD0181_$6#0 = >(word)(const byte*) CHARSET#0/(byte) 4
Constant inlined makecharset::i#0 = (byte) 0
Constant inlined makecharset::charset#0 = (const byte*) CHARSET#0
Constant inlined main::toD0181_$7#0 = >(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f
Constant inlined doplasma::screen#0 = (const byte*) SCREEN1#0
Constant inlined main::$1 = (const byte*) COLS#0+(word) $3e8
Constant inlined main::toD0182_$0#0 = (word)(const byte*) SCREEN2#0
Constant inlined main::toD0181_$2#0 = (word)(const byte*) SCREEN1#0&(word) $3fff*(byte) 4
Constant inlined main::toD0182_screen#0 = (const byte*) SCREEN2#0
Constant inlined doplasma::screen#1 = (const byte*) SCREEN2#0
Constant inlined main::toD0181_$3#0 = >(word)(const byte*) SCREEN1#0&(word) $3fff*(byte) 4
Constant inlined main::toD0181_$4#0 = (word)(const byte*) CHARSET#0
Constant inlined main::toD0182_$2#0 = (word)(const byte*) SCREEN2#0&(word) $3fff*(byte) 4
Constant inlined main::toD0181_$5#0 = >(word)(const byte*) CHARSET#0
Constant inlined main::toD0182_$1#0 = (word)(const byte*) SCREEN2#0&(word) $3fff
Constant inlined c1B#19 = (byte) 0
Constant inlined makecharset::b#0 = (byte) 0
Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0
Constant inlined makecharset::c#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting memset::@6(between memset::@4 and memset::@4)
Added new block during phi lifting main::@14(between main::@1 and main::@1)
Added new block during phi lifting doplasma::@9(between doplasma::@1 and doplasma::@1)
Added new block during phi lifting doplasma::@10(between doplasma::@3 and doplasma::@3)
Added new block during phi lifting doplasma::@11(between doplasma::@7 and doplasma::@5)
Added new block during phi lifting doplasma::@12(between doplasma::@6 and doplasma::@6)
Added new block during phi lifting makecharset::@15(between makecharset::@9 and makecharset::@1)
Added new block during phi lifting makecharset::@16(between makecharset::@6 and makecharset::@2)
Added new block during phi lifting makecharset::@17(between makecharset::@4 and makecharset::@3)
Added new block during phi lifting makecharset::@18(between makecharset::@13 and makecharset::@4)
Added new block during phi lifting makecharset::@19(between makecharset::@7 and makecharset::@9)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @16
Adding NOP phi() at start of @39
Adding NOP phi() at start of @41
Adding NOP phi() at start of @42
Adding NOP phi() at start of @44
Adding NOP phi() at start of @45
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::@11
Adding NOP phi() at start of main::@12
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::toD0181_@return
Adding NOP phi() at start of main::@13
Adding NOP phi() at start of main::toD0182
Adding NOP phi() at start of main::toD0182_@return
Adding NOP phi() at start of makecharset
Adding NOP phi() at start of makecharset::@11
Adding NOP phi() at start of makecharset::@12
Adding NOP phi() at start of makecharset::@8
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::@1
CALL GRAPH
Calls in [] to main:6 
Calls in [main] to makecharset:17 doplasma:24 doplasma:33 
Calls in [makecharset] to sid_rnd_init:91 print_cls:93 sid_rnd:100 print_char:119 
Calls in [print_cls] to memset:138 

Created 27 initial phi equivalence classes
Coalesced [20] c1A#34 ← c1A#14
Coalesced [21] c1B#34 ← c1B#14
Coalesced [22] c2A#34 ← c2A#14
Coalesced [23] c2B#34 ← c2B#14
Coalesced [29] c1A#35 ← c1A#4
Coalesced [30] c1B#35 ← c1B#4
Coalesced [31] c2A#35 ← c2A#4
Coalesced [32] c2B#35 ← c2B#4
Coalesced (already) [38] c1A#33 ← c1A#4
Coalesced (already) [39] c1B#33 ← c1B#4
Coalesced (already) [40] c2A#33 ← c2A#4
Coalesced (already) [41] c2B#33 ← c2B#4
Coalesced [42] main::col#3 ← main::col#1
Coalesced [46] doplasma::c1a#3 ← doplasma::c1a#0
Coalesced [47] doplasma::c1b#3 ← doplasma::c1b#0
Coalesced [59] doplasma::c2a#3 ← doplasma::c2a#0
Coalesced [60] doplasma::c2b#3 ← doplasma::c2b#0
Coalesced [70] doplasma::screen#11 ← doplasma::screen#10
Coalesced [81] doplasma::ii#5 ← doplasma::ii#1
Coalesced [82] doplasma::screen#12 ← doplasma::screen#2
Coalesced [83] doplasma::i2#3 ← doplasma::i2#1
Coalesced [84] doplasma::c2a#4 ← doplasma::c2a#1
Coalesced [85] doplasma::c2b#4 ← doplasma::c2b#1
Coalesced [86] doplasma::i1#3 ← doplasma::i1#1
Coalesced [87] doplasma::c1a#4 ← doplasma::c1a#1
Coalesced [88] doplasma::c1b#4 ← doplasma::c1b#1
Coalesced [89] doplasma::i#3 ← doplasma::i#1
Coalesced [106] makecharset::b#9 ← makecharset::b#1
Coalesced [120] print_char_cursor#50 ← print_char_cursor#1
Coalesced [125] makecharset::c#13 ← makecharset::c#1
Coalesced [126] print_char_cursor#49 ← print_char_cursor#18
Coalesced (already) [127] print_char_cursor#51 ← print_char_cursor#46
Coalesced [128] makecharset::i#8 ← makecharset::i#1
Coalesced [129] makecharset::ii#6 ← makecharset::ii#1
Coalesced [130] makecharset::b#7 ← makecharset::b#3
Coalesced (already) [131] makecharset::b#8 ← makecharset::b#2
Coalesced [149] memset::dst#3 ← memset::dst#1
Coalesced down to 20 phi equivalence classes
Culled Empty Block (label) @16
Culled Empty Block (label) @39
Culled Empty Block (label) @41
Culled Empty Block (label) @42
Culled Empty Block (label) @45
Culled Empty Block (label) main::@11
Culled Empty Block (label) main::@12
Culled Empty Block (label) main::toD0181_@return
Culled Empty Block (label) main::@13
Culled Empty Block (label) main::toD0182_@return
Culled Empty Block (label) main::@14
Culled Empty Block (label) doplasma::@11
Culled Empty Block (label) doplasma::@12
Culled Empty Block (label) doplasma::@10
Culled Empty Block (label) doplasma::@9
Culled Empty Block (label) makecharset::@12
Culled Empty Block (label) makecharset::@14
Culled Empty Block (label) makecharset::@15
Culled Empty Block (label) makecharset::@19
Culled Empty Block (label) makecharset::@16
Culled Empty Block (label) makecharset::@17
Culled Empty Block (label) makecharset::@18
Culled Empty Block (label) print_cls::@1
Culled Empty Block (label) memset::@2
Culled Empty Block (label) memset::@1
Culled Empty Block (label) memset::@6
Renumbering block @44 to @1
Renumbering block memset::@4 to memset::@1
Renumbering block main::@9 to main::@5
Renumbering block main::@10 to main::@6
Renumbering block makecharset::@11 to makecharset::@10
Renumbering block makecharset::@13 to makecharset::@11
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::@4
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::toD0182
Adding NOP phi() at start of makecharset
Adding NOP phi() at start of makecharset::@10
Adding NOP phi() at start of makecharset::@8
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::@3
main::@3: scope:[main]  from main::@2 main::@6
  [13] (byte) c2B#14 ← phi( main::@6/(byte) c2B#4 main::@2/(byte) 0 )
  [13] (byte) c2A#14 ← phi( main::@6/(byte) c2A#4 main::@2/(byte) 0 )
  [13] (byte) c1B#14 ← phi( main::@6/(byte) c1B#4 main::@2/(byte) 0 )
  [13] (byte) c1A#14 ← phi( main::@6/(byte) c1A#4 main::@2/(byte) 0 )
  to:main::@4
main::@4: scope:[main]  from main::@3
  [14] phi()
  [15] call doplasma 
  to:main::toD0181
main::toD0181: scope:[main]  from main::@4
  [16] phi()
  to:main::@5
main::@5: scope:[main]  from main::toD0181
  [17] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
  [18] call doplasma 
  to:main::toD0182
main::toD0182: scope:[main]  from main::@5
  [19] phi()
  to:main::@6
main::@6: scope:[main]  from main::toD0182
  [20] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0
  to:main::@3
doplasma: scope:[doplasma]  from main::@4 main::@5
  [21] (byte*) doplasma::screen#10 ← phi( main::@4/(const byte*) SCREEN1#0 main::@5/(const byte*) SCREEN2#0 )
  [21] (byte) c2B#24 ← phi( main::@4/(byte) c2B#14 main::@5/(byte) c2B#4 )
  [21] (byte) c2A#24 ← phi( main::@4/(byte) c2A#14 main::@5/(byte) c2A#4 )
  [21] (byte) c1B#10 ← phi( main::@4/(byte) c1B#14 main::@5/(byte) c1B#4 )
  [21] (byte) c1A#10 ← phi( main::@4/(byte) c1A#14 main::@5/(byte) c1A#4 )
  [22] (byte) doplasma::c1a#0 ← (byte) c1A#10
  [23] (byte) doplasma::c1b#0 ← (byte) c1B#10
  to:doplasma::@1
doplasma::@1: scope:[doplasma]  from doplasma doplasma::@1
  [24] (byte) doplasma::i#2 ← phi( doplasma/(byte) 0 doplasma::@1/(byte) doplasma::i#1 )
  [24] (byte) doplasma::c1b#2 ← phi( doplasma/(byte) doplasma::c1b#0 doplasma::@1/(byte) doplasma::c1b#1 )
  [24] (byte) doplasma::c1a#2 ← phi( doplasma/(byte) doplasma::c1a#0 doplasma::@1/(byte) doplasma::c1a#1 )
  [25] (byte~) doplasma::$0 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2)
  [26] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$0
  [27] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4
  [28] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9
  [29] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2
  [30] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@1
  to:doplasma::@2
doplasma::@2: scope:[doplasma]  from doplasma::@1
  [31] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3
  [32] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5
  [33] (byte) doplasma::c2a#0 ← (byte) c2A#24
  [34] (byte) doplasma::c2b#0 ← (byte) c2B#24
  to:doplasma::@3
doplasma::@3: scope:[doplasma]  from doplasma::@2 doplasma::@3
  [35] (byte) doplasma::i1#2 ← phi( doplasma::@2/(byte) 0 doplasma::@3/(byte) doplasma::i1#1 )
  [35] (byte) doplasma::c2b#2 ← phi( doplasma::@2/(byte) doplasma::c2b#0 doplasma::@3/(byte) doplasma::c2b#1 )
  [35] (byte) doplasma::c2a#2 ← phi( doplasma::@2/(byte) doplasma::c2a#0 doplasma::@3/(byte) doplasma::c2a#1 )
  [36] (byte~) doplasma::$2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2)
  [37] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$2
  [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3
  [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7
  [40] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2
  [41] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@3
  to:doplasma::@4
doplasma::@4: scope:[doplasma]  from doplasma::@3
  [42] (byte) c2A#4 ← (byte) c2A#24 + (byte) 2
  [43] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3
  to:doplasma::@5
doplasma::@5: scope:[doplasma]  from doplasma::@4 doplasma::@7
  [44] (byte*) doplasma::screen#5 ← phi( doplasma::@4/(byte*) doplasma::screen#10 doplasma::@7/(byte*) doplasma::screen#2 )
  [44] (byte) doplasma::ii#4 ← phi( doplasma::@4/(byte) 0 doplasma::@7/(byte) doplasma::ii#1 )
  to:doplasma::@6
doplasma::@6: scope:[doplasma]  from doplasma::@5 doplasma::@6
  [45] (byte) doplasma::i2#2 ← phi( doplasma::@5/(byte) 0 doplasma::@6/(byte) doplasma::i2#1 )
  [46] (byte~) doplasma::$4 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#4)
  [47] *((byte*) doplasma::screen#5 + (byte) doplasma::i2#2) ← (byte~) doplasma::$4
  [48] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2
  [49] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@6
  to:doplasma::@7
doplasma::@7: scope:[doplasma]  from doplasma::@6
  [50] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28
  [51] (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#4
  [52] if((byte) doplasma::ii#1<(byte) $19) goto doplasma::@5
  to:doplasma::@return
doplasma::@return: scope:[doplasma]  from doplasma::@7
  [53] return 
  to:@return
makecharset: scope:[makecharset]  from main::@2
  [54] phi()
  [55] call sid_rnd_init 
  to:makecharset::@10
makecharset::@10: scope:[makecharset]  from makecharset
  [56] phi()
  [57] call print_cls 
  to:makecharset::@1
makecharset::@1: scope:[makecharset]  from makecharset::@10 makecharset::@9
  [58] (byte*) print_char_cursor#46 ← phi( makecharset::@10/(const byte*) print_line_cursor#0 makecharset::@9/(byte*) print_char_cursor#18 )
  [58] (word) makecharset::c#2 ← phi( makecharset::@10/(byte) 0 makecharset::@9/(word) makecharset::c#1 )
  [59] (byte~) makecharset::$2 ← < (word) makecharset::c#2
  [60] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$2)
  to:makecharset::@2
makecharset::@2: scope:[makecharset]  from makecharset::@1 makecharset::@6
  [61] (byte) makecharset::i#7 ← phi( makecharset::@1/(byte) 0 makecharset::@6/(byte) makecharset::i#1 )
  to:makecharset::@3
makecharset::@3: scope:[makecharset]  from makecharset::@2 makecharset::@4
  [62] (byte) makecharset::b#2 ← phi( makecharset::@2/(byte) 0 makecharset::@4/(byte) makecharset::b#3 )
  [62] (byte) makecharset::ii#2 ← phi( makecharset::@2/(byte) 0 makecharset::@4/(byte) makecharset::ii#1 )
  [63] call sid_rnd 
  [64] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
  to:makecharset::@11
makecharset::@11: scope:[makecharset]  from makecharset::@3
  [65] (byte~) makecharset::$3 ← (byte) sid_rnd::return#2
  [66] (byte~) makecharset::$4 ← (byte~) makecharset::$3 & (byte) $ff
  [67] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4
  to:makecharset::@5
makecharset::@5: scope:[makecharset]  from makecharset::@11
  [68] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2)
  to:makecharset::@4
makecharset::@4: scope:[makecharset]  from makecharset::@11 makecharset::@5
  [69] (byte) makecharset::b#3 ← phi( makecharset::@11/(byte) makecharset::b#2 makecharset::@5/(byte) makecharset::b#1 )
  [70] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2
  [71] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@3
  to:makecharset::@6
makecharset::@6: scope:[makecharset]  from makecharset::@4
  [72] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte) 3
  [73] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7
  [74] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$9
  [75] *((byte*~) makecharset::$16) ← (byte) makecharset::b#3
  [76] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#7
  [77] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@2
  to:makecharset::@7
makecharset::@7: scope:[makecharset]  from makecharset::@6
  [78] (byte~) makecharset::$11 ← (word) makecharset::c#2 & (byte) 7
  [79] if((byte~) makecharset::$11!=(byte) 0) goto makecharset::@9
  to:makecharset::@8
makecharset::@8: scope:[makecharset]  from makecharset::@7
  [80] phi()
  [81] call print_char 
  to:makecharset::@9
makecharset::@9: scope:[makecharset]  from makecharset::@7 makecharset::@8
  [82] (byte*) print_char_cursor#18 ← phi( makecharset::@8/(byte*) print_char_cursor#1 makecharset::@7/(byte*) print_char_cursor#46 )
  [83] (word) makecharset::c#1 ← ++ (word) makecharset::c#2
  [84] if((word) makecharset::c#1<(word) $100) goto makecharset::@1
  to:makecharset::@return
makecharset::@return: scope:[makecharset]  from makecharset::@9
  [85] return 
  to:@return
print_char: scope:[print_char]  from makecharset::@8
  [86] *((byte*) print_char_cursor#46) ← (const byte) print_char::ch#0
  [87] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#46
  to:print_char::@return
print_char::@return: scope:[print_char]  from print_char
  [88] return 
  to:@return
sid_rnd: scope:[sid_rnd]  from makecharset::@3
  [89] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0)
  to:sid_rnd::@return
sid_rnd::@return: scope:[sid_rnd]  from sid_rnd
  [90] return 
  to:@return
print_cls: scope:[print_cls]  from makecharset::@10
  [91] phi()
  [92] call memset 
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls
  [93] return 
  to:@return
memset: scope:[memset]  from print_cls
  [94] phi()
  to:memset::@1
memset::@1: scope:[memset]  from memset memset::@1
  [95] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@1/(byte*) memset::dst#1 )
  [96] *((byte*) memset::dst#2) ← (const byte) memset::c#0
  [97] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
  [98] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1
  to:memset::@return
memset::@return: scope:[memset]  from memset::@1
  [99] return 
  to:@return
sid_rnd_init: scope:[sid_rnd_init]  from makecharset
  [100] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff
  [101] *((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
  [102] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte*) CHARSET
(byte*) COLS
(byte*) D018
(byte*) SCREEN1
(byte*) SCREEN2
(byte) SID_CONTROL_NOISE
(byte*) SID_VOICE3_CONTROL
(word*) SID_VOICE3_FREQ
(byte*) SID_VOICE3_OSC
(byte[$100]) SINTABLE
(byte) c1A
(byte) c1A#10 2.6000000000000005
(byte) c1A#14 11.0
(byte) c1A#4 0.8275862068965517
(byte) c1B
(byte) c1B#10 2.3636363636363633
(byte) c1B#14 11.0
(byte) c1B#4 0.8571428571428571
(byte) c2A
(byte) c2A#14 11.0
(byte) c2A#24 1.2380952380952381
(byte) c2A#4 1.3333333333333335
(byte) c2B
(byte) c2B#14 11.0
(byte) c2B#24 1.1818181818181817
(byte) c2B#4 1.411764705882353
(void()) doplasma((byte*) doplasma::screen)
(byte~) doplasma::$0 202.0
(byte~) doplasma::$2 202.0
(byte~) doplasma::$4 2002.0
(byte) doplasma::c1a
(byte) doplasma::c1a#0 2.0
(byte) doplasma::c1a#1 50.5
(byte) doplasma::c1a#2 101.66666666666666
(byte) doplasma::c1b
(byte) doplasma::c1b#0 4.0
(byte) doplasma::c1b#1 67.33333333333333
(byte) doplasma::c1b#2 76.25
(byte) doplasma::c2a
(byte) doplasma::c2a#0 2.0
(byte) doplasma::c2a#1 50.5
(byte) doplasma::c2a#2 101.66666666666666
(byte) doplasma::c2b
(byte) doplasma::c2b#0 4.0
(byte) doplasma::c2b#1 67.33333333333333
(byte) doplasma::c2b#2 76.25
(byte) doplasma::i
(byte) doplasma::i#1 151.5
(byte) doplasma::i#2 60.599999999999994
(byte) doplasma::i1
(byte) doplasma::i1#1 151.5
(byte) doplasma::i1#2 60.599999999999994
(byte) doplasma::i2
(byte) doplasma::i2#1 1501.5
(byte) doplasma::i2#2 1334.6666666666667
(byte) doplasma::ii
(byte) doplasma::ii#1 151.5
(byte) doplasma::ii#4 171.85714285714283
(byte*) doplasma::screen
(byte*) doplasma::screen#10 0.08695652173913043
(byte*) doplasma::screen#2 67.33333333333333
(byte*) doplasma::screen#5 200.83333333333334
(byte[$28]) doplasma::xbuf
(byte[$19]) doplasma::ybuf
(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
(word~) main::toD0182_$0
(number~) main::toD0182_$1
(number~) main::toD0182_$2
(number~) main::toD0182_$3
(word~) main::toD0182_$4
(byte~) main::toD0182_$5
(number~) main::toD0182_$6
(number~) main::toD0182_$7
(number~) main::toD0182_$8
(byte*) main::toD0182_gfx
(byte) main::toD0182_return
(byte*) main::toD0182_screen
(void()) makecharset((byte*) makecharset::charset)
(byte~) makecharset::$11 22.0
(byte*~) makecharset::$16 202.0
(byte~) makecharset::$2 22.0
(byte~) makecharset::$3 2002.0
(byte~) makecharset::$4 2002.0
(word~) makecharset::$8 202.0
(word~) makecharset::$9 202.0
(byte) makecharset::b
(byte) makecharset::b#1 2002.0
(byte) makecharset::b#2 500.5
(byte) makecharset::b#3 517.3333333333334
(byte[8]) makecharset::bittab
(word) makecharset::c
(word) makecharset::c#1 16.5
(word) makecharset::c#2 5.800000000000001
(byte*) makecharset::charset
(byte) makecharset::i
(byte) makecharset::i#1 151.5
(byte) makecharset::i#7 20.2
(byte) makecharset::ii
(byte) makecharset::ii#1 1501.5
(byte) makecharset::ii#2 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#2 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#46 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#10 c1A#14 c1A#4 ]
[ c1B#10 c1B#14 c1B#4 ]
[ c2A#24 c2A#14 c2A#4 ]
[ c2B#24 c2B#14 c2B#4 ]
[ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ]
[ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ]
[ doplasma::i#2 doplasma::i#1 ]
[ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
[ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
[ doplasma::i1#2 doplasma::i1#1 ]
[ doplasma::ii#4 doplasma::ii#1 ]
[ doplasma::screen#5 doplasma::screen#10 doplasma::screen#2 ]
[ doplasma::i2#2 doplasma::i2#1 ]
[ makecharset::c#2 makecharset::c#1 ]
[ print_char_cursor#46 print_char_cursor#18 print_char_cursor#1 ]
[ makecharset::i#7 makecharset::i#1 ]
[ makecharset::ii#2 makecharset::ii#1 ]
[ makecharset::b#2 makecharset::b#3 makecharset::b#1 ]
[ memset::dst#2 memset::dst#1 ]
Added variable doplasma::$0 to zero page equivalence class [ doplasma::$0 ]
Added variable doplasma::$2 to zero page equivalence class [ doplasma::$2 ]
Added variable doplasma::$4 to zero page equivalence class [ doplasma::$4 ]
Added variable makecharset::$2 to zero page equivalence class [ makecharset::$2 ]
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::$3 to zero page equivalence class [ makecharset::$3 ]
Added variable makecharset::$4 to zero page equivalence class [ makecharset::$4 ]
Added variable makecharset::$8 to zero page equivalence class [ makecharset::$8 ]
Added variable makecharset::$9 to zero page equivalence class [ makecharset::$9 ]
Added variable makecharset::$16 to zero page equivalence class [ makecharset::$16 ]
Added variable makecharset::$11 to zero page equivalence class [ makecharset::$11 ]
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#10 c1A#14 c1A#4 ]
[ c1B#10 c1B#14 c1B#4 ]
[ c2A#24 c2A#14 c2A#4 ]
[ c2B#24 c2B#14 c2B#4 ]
[ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ]
[ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ]
[ doplasma::i#2 doplasma::i#1 ]
[ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
[ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
[ doplasma::i1#2 doplasma::i1#1 ]
[ doplasma::ii#4 doplasma::ii#1 ]
[ doplasma::screen#5 doplasma::screen#10 doplasma::screen#2 ]
[ doplasma::i2#2 doplasma::i2#1 ]
[ makecharset::c#2 makecharset::c#1 ]
[ print_char_cursor#46 print_char_cursor#18 print_char_cursor#1 ]
[ makecharset::i#7 makecharset::i#1 ]
[ makecharset::ii#2 makecharset::ii#1 ]
[ makecharset::b#2 makecharset::b#3 makecharset::b#1 ]
[ memset::dst#2 memset::dst#1 ]
[ doplasma::$0 ]
[ doplasma::$2 ]
[ doplasma::$4 ]
[ makecharset::$2 ]
[ makecharset::s#0 ]
[ sid_rnd::return#2 ]
[ makecharset::$3 ]
[ makecharset::$4 ]
[ makecharset::$8 ]
[ makecharset::$9 ]
[ makecharset::$16 ]
[ makecharset::$11 ]
[ sid_rnd::return#0 ]
Allocated zp ZP_WORD:2 [ main::col#2 main::col#1 ]
Allocated zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ]
Allocated zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ]
Allocated zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ]
Allocated zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ]
Allocated zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ]
Allocated zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ]
Allocated zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ]
Allocated zp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
Allocated zp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
Allocated zp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ]
Allocated zp ZP_BYTE:14 [ doplasma::ii#4 doplasma::ii#1 ]
Allocated zp ZP_WORD:15 [ doplasma::screen#5 doplasma::screen#10 doplasma::screen#2 ]
Allocated zp ZP_BYTE:17 [ doplasma::i2#2 doplasma::i2#1 ]
Allocated zp ZP_WORD:18 [ makecharset::c#2 makecharset::c#1 ]
Allocated zp ZP_WORD:20 [ print_char_cursor#46 print_char_cursor#18 print_char_cursor#1 ]
Allocated zp ZP_BYTE:22 [ makecharset::i#7 makecharset::i#1 ]
Allocated zp ZP_BYTE:23 [ makecharset::ii#2 makecharset::ii#1 ]
Allocated zp ZP_BYTE:24 [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ]
Allocated zp ZP_WORD:25 [ memset::dst#2 memset::dst#1 ]
Allocated zp ZP_BYTE:27 [ doplasma::$0 ]
Allocated zp ZP_BYTE:28 [ doplasma::$2 ]
Allocated zp ZP_BYTE:29 [ doplasma::$4 ]
Allocated zp ZP_BYTE:30 [ makecharset::$2 ]
Allocated zp ZP_BYTE:31 [ makecharset::s#0 ]
Allocated zp ZP_BYTE:32 [ sid_rnd::return#2 ]
Allocated zp ZP_BYTE:33 [ makecharset::$3 ]
Allocated zp ZP_BYTE:34 [ makecharset::$4 ]
Allocated zp ZP_WORD:35 [ makecharset::$8 ]
Allocated zp ZP_WORD:37 [ makecharset::$9 ]
Allocated zp ZP_WORD:39 [ makecharset::$16 ]
Allocated zp ZP_BYTE:41 [ makecharset::$11 ]
Allocated zp ZP_BYTE:42 [ sid_rnd::return#0 ]

INITIAL ASM
  // File Comments
// A KickC version of the plasma routine from the CC65 samples
// (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
  // Basic 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 SCREEN2 = $2c00
  .label CHARSET = $2000
  .label print_char_cursor = $14
  .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
    .const toD0182_return = (>(SCREEN2&$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 col
    lda #>COLS
    sta 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 col
    bne !+
    inc 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 col+1
    cmp #>COLS+$3e8+1
    bne b1_from_b1
    lda 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 
    // [54] phi from main::@2 to makecharset [phi:main::@2->makecharset]
  makecharset_from_b2:
    jsr makecharset
    // [13] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
  b3_from_b2:
    // [13] phi (byte) c2B#14 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta c2B
    // [13] phi (byte) c2A#14 = (byte) 0 [phi:main::@2->main::@3#1] -- vbuz1=vbuc1 
    lda #0
    sta c2A
    // [13] phi (byte) c1B#14 = (byte) 0 [phi:main::@2->main::@3#2] -- vbuz1=vbuc1 
    lda #0
    sta c1B
    // [13] phi (byte) c1A#14 = (byte) 0 [phi:main::@2->main::@3#3] -- vbuz1=vbuc1 
    lda #0
    sta c1A
    jmp b3
  // Show double-buffered plasma
    // main::@3
  b3:
    // [14] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  b4_from_b3:
    jmp b4
    // main::@4
  b4:
    // [15] call doplasma 
    // [21] phi from main::@4 to doplasma [phi:main::@4->doplasma]
  doplasma_from_b4:
    // [21] phi (byte*) doplasma::screen#10 = (const byte*) SCREEN1#0 [phi:main::@4->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN1
    sta doplasma.screen
    lda #>SCREEN1
    sta doplasma.screen+1
    // [21] phi (byte) c2B#24 = (byte) c2B#14 [phi:main::@4->doplasma#1] -- register_copy 
    // [21] phi (byte) c2A#24 = (byte) c2A#14 [phi:main::@4->doplasma#2] -- register_copy 
    // [21] phi (byte) c1B#10 = (byte) c1B#14 [phi:main::@4->doplasma#3] -- register_copy 
    // [21] phi (byte) c1A#10 = (byte) c1A#14 [phi:main::@4->doplasma#4] -- register_copy 
    jsr doplasma
    // [16] phi from main::@4 to main::toD0181 [phi:main::@4->main::toD0181]
  toD0181_from_b4:
    jmp toD0181
    // main::toD0181
  toD0181:
    jmp b5
    // main::@5
  b5:
    // [17] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // [18] call doplasma 
    // [21] phi from main::@5 to doplasma [phi:main::@5->doplasma]
  doplasma_from_b5:
    // [21] phi (byte*) doplasma::screen#10 = (const byte*) SCREEN2#0 [phi:main::@5->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN2
    sta doplasma.screen
    lda #>SCREEN2
    sta doplasma.screen+1
    // [21] phi (byte) c2B#24 = (byte) c2B#4 [phi:main::@5->doplasma#1] -- register_copy 
    // [21] phi (byte) c2A#24 = (byte) c2A#4 [phi:main::@5->doplasma#2] -- register_copy 
    // [21] phi (byte) c1B#10 = (byte) c1B#4 [phi:main::@5->doplasma#3] -- register_copy 
    // [21] phi (byte) c1A#10 = (byte) c1A#4 [phi:main::@5->doplasma#4] -- register_copy 
    jsr doplasma
    // [19] phi from main::@5 to main::toD0182 [phi:main::@5->main::toD0182]
  toD0182_from_b5:
    jmp toD0182
    // main::toD0182
  toD0182:
    jmp b6
    // main::@6
  b6:
    // [20] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0182_return
    sta D018
    // [13] phi from main::@6 to main::@3 [phi:main::@6->main::@3]
  b3_from_b6:
    // [13] phi (byte) c2B#14 = (byte) c2B#4 [phi:main::@6->main::@3#0] -- register_copy 
    // [13] phi (byte) c2A#14 = (byte) c2A#4 [phi:main::@6->main::@3#1] -- register_copy 
    // [13] phi (byte) c1B#14 = (byte) c1B#4 [phi:main::@6->main::@3#2] -- register_copy 
    // [13] phi (byte) c1A#14 = (byte) c1A#4 [phi:main::@6->main::@3#3] -- register_copy 
    jmp b3
}
  // doplasma
// Render plasma to the passed screen
// doplasma(byte* zeropage($f) screen)
doplasma: {
    .label _0 = $1b
    .label _2 = $1c
    .label _4 = $1d
    .label c1a = 8
    .label c1b = 9
    .label i = $a
    .label c2a = $b
    .label c2b = $c
    .label i1 = $d
    .label i2 = $11
    .label screen = $f
    .label ii = $e
    // [22] (byte) doplasma::c1a#0 ← (byte) c1A#10 -- vbuz1=vbuz2 
    lda c1A
    sta c1a
    // [23] (byte) doplasma::c1b#0 ← (byte) c1B#10 -- vbuz1=vbuz2 
    lda c1B
    sta c1b
    // [24] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
  b1_from_doplasma:
    // [24] phi (byte) doplasma::i#2 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta i
    // [24] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#1] -- register_copy 
    // [24] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#2] -- register_copy 
    jmp b1
    // [24] phi from doplasma::@1 to doplasma::@1 [phi:doplasma::@1->doplasma::@1]
  b1_from_b1:
    // [24] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@1->doplasma::@1#0] -- register_copy 
    // [24] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@1->doplasma::@1#1] -- register_copy 
    // [24] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@1->doplasma::@1#2] -- register_copy 
    jmp b1
    // doplasma::@1
  b1:
    // [25] (byte~) doplasma::$0 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
    ldy c1a
    lda SINTABLE,y
    ldy c1b
    clc
    adc SINTABLE,y
    sta _0
    // [26] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$0 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _0
    ldy i
    sta ybuf,y
    // [27] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 
    lax c1a
    axs #-[4]
    stx c1a
    // [28] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 
    lax c1b
    axs #-[9]
    stx c1b
    // [29] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 
    inc i
    // [30] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@1 -- vbuz1_lt_vbuc1_then_la1 
    lda i
    cmp #$19
    bcc b1_from_b1
    jmp b2
    // doplasma::@2
  b2:
    // [31] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax c1A
    axs #-[3]
    stx c1A
    // [32] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 
    lax c1B
    axs #5
    stx c1B
    // [33] (byte) doplasma::c2a#0 ← (byte) c2A#24 -- vbuz1=vbuz2 
    lda c2A
    sta c2a
    // [34] (byte) doplasma::c2b#0 ← (byte) c2B#24 -- vbuz1=vbuz2 
    lda c2B
    sta c2b
    // [35] phi from doplasma::@2 to doplasma::@3 [phi:doplasma::@2->doplasma::@3]
  b3_from_b2:
    // [35] phi (byte) doplasma::i1#2 = (byte) 0 [phi:doplasma::@2->doplasma::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta i1
    // [35] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@2->doplasma::@3#1] -- register_copy 
    // [35] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@2->doplasma::@3#2] -- register_copy 
    jmp b3
    // [35] phi from doplasma::@3 to doplasma::@3 [phi:doplasma::@3->doplasma::@3]
  b3_from_b3:
    // [35] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@3->doplasma::@3#0] -- register_copy 
    // [35] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@3->doplasma::@3#1] -- register_copy 
    // [35] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@3->doplasma::@3#2] -- register_copy 
    jmp b3
    // doplasma::@3
  b3:
    // [36] (byte~) doplasma::$2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 
    ldy c2a
    lda SINTABLE,y
    ldy c2b
    clc
    adc SINTABLE,y
    sta _2
    // [37] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$2 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _2
    ldy i1
    sta xbuf,y
    // [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax c2a
    axs #-[3]
    stx c2a
    // [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 
    lax c2b
    axs #-[7]
    stx c2b
    // [40] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 
    inc i1
    // [41] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda i1
    cmp #$28
    bcc b3_from_b3
    jmp b4
    // doplasma::@4
  b4:
    // [42] (byte) c2A#4 ← (byte) c2A#24 + (byte) 2 -- vbuz1=vbuz1_plus_2 
    lda c2A
    clc
    adc #2
    sta c2A
    // [43] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 
    lax c2B
    axs #3
    stx c2B
    // [44] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5]
  b5_from_b4:
    // [44] phi (byte*) doplasma::screen#5 = (byte*) doplasma::screen#10 [phi:doplasma::@4->doplasma::@5#0] -- register_copy 
    // [44] phi (byte) doplasma::ii#4 = (byte) 0 [phi:doplasma::@4->doplasma::@5#1] -- vbuz1=vbuc1 
    lda #0
    sta ii
    jmp b5
    // [44] phi from doplasma::@7 to doplasma::@5 [phi:doplasma::@7->doplasma::@5]
  b5_from_b7:
    // [44] phi (byte*) doplasma::screen#5 = (byte*) doplasma::screen#2 [phi:doplasma::@7->doplasma::@5#0] -- register_copy 
    // [44] phi (byte) doplasma::ii#4 = (byte) doplasma::ii#1 [phi:doplasma::@7->doplasma::@5#1] -- register_copy 
    jmp b5
    // doplasma::@5
  b5:
    // [45] phi from doplasma::@5 to doplasma::@6 [phi:doplasma::@5->doplasma::@6]
  b6_from_b5:
    // [45] phi (byte) doplasma::i2#2 = (byte) 0 [phi:doplasma::@5->doplasma::@6#0] -- vbuz1=vbuc1 
    lda #0
    sta i2
    jmp b6
    // [45] phi from doplasma::@6 to doplasma::@6 [phi:doplasma::@6->doplasma::@6]
  b6_from_b6:
    // [45] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@6->doplasma::@6#0] -- register_copy 
    jmp b6
    // doplasma::@6
  b6:
    // [46] (byte~) doplasma::$4 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#4) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz3 
    ldy i2
    lda xbuf,y
    ldy ii
    clc
    adc ybuf,y
    sta _4
    // [47] *((byte*) doplasma::screen#5 + (byte) doplasma::i2#2) ← (byte~) doplasma::$4 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda _4
    ldy i2
    sta (screen),y
    // [48] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuz1=_inc_vbuz1 
    inc i2
    // [49] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda i2
    cmp #$28
    bcc b6_from_b6
    jmp b7
    // doplasma::@7
  b7:
    // [50] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc screen
    sta screen
    bcc !+
    inc screen+1
  !:
    // [51] (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#4 -- vbuz1=_inc_vbuz1 
    inc ii
    // [52] if((byte) doplasma::ii#1<(byte) $19) goto doplasma::@5 -- vbuz1_lt_vbuc1_then_la1 
    lda ii
    cmp #$19
    bcc b5_from_b7
    jmp breturn
    // doplasma::@return
  breturn:
    // [53] return 
    rts
    xbuf: .fill $28, 0
    ybuf: .fill $19, 0
}
  // makecharset
// Make a plasma-friendly charset where the chars are randomly filled
makecharset: {
    .label _2 = $1e
    .label _3 = $21
    .label _4 = $22
    .label _8 = $23
    .label _9 = $25
    .label _11 = $29
    .label s = $1f
    .label ii = $17
    .label b = $18
    .label i = $16
    .label c = $12
    .label _16 = $27
    // [55] call sid_rnd_init 
    jsr sid_rnd_init
    // [56] phi from makecharset to makecharset::@10 [phi:makecharset->makecharset::@10]
  b10_from_makecharset:
    jmp b10
    // makecharset::@10
  b10:
    // [57] call print_cls 
    // [91] phi from makecharset::@10 to print_cls [phi:makecharset::@10->print_cls]
  print_cls_from_b10:
    jsr print_cls
    // [58] phi from makecharset::@10 to makecharset::@1 [phi:makecharset::@10->makecharset::@1]
  b1_from_b10:
    // [58] phi (byte*) print_char_cursor#46 = (const byte*) print_line_cursor#0 [phi:makecharset::@10->makecharset::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta print_char_cursor
    lda #>print_line_cursor
    sta print_char_cursor+1
    // [58] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@10->makecharset::@1#1] -- vwuz1=vbuc1 
    lda #<0
    sta c
    lda #>0
    sta c+1
    jmp b1
    // [58] phi from makecharset::@9 to makecharset::@1 [phi:makecharset::@9->makecharset::@1]
  b1_from_b9:
    // [58] phi (byte*) print_char_cursor#46 = (byte*) print_char_cursor#18 [phi:makecharset::@9->makecharset::@1#0] -- register_copy 
    // [58] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@9->makecharset::@1#1] -- register_copy 
    jmp b1
    // makecharset::@1
  b1:
    // [59] (byte~) makecharset::$2 ← < (word) makecharset::c#2 -- vbuz1=_lo_vwuz2 
    lda c
    sta _2
    // [60] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$2) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy _2
    lda SINTABLE,y
    sta s
    // [61] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2]
  b2_from_b1:
    // [61] phi (byte) makecharset::i#7 = (byte) 0 [phi:makecharset::@1->makecharset::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta i
    jmp b2
    // [61] phi from makecharset::@6 to makecharset::@2 [phi:makecharset::@6->makecharset::@2]
  b2_from_b6:
    // [61] phi (byte) makecharset::i#7 = (byte) makecharset::i#1 [phi:makecharset::@6->makecharset::@2#0] -- register_copy 
    jmp b2
    // makecharset::@2
  b2:
    // [62] phi from makecharset::@2 to makecharset::@3 [phi:makecharset::@2->makecharset::@3]
  b3_from_b2:
    // [62] phi (byte) makecharset::b#2 = (byte) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta b
    // [62] phi (byte) makecharset::ii#2 = (byte) 0 [phi:makecharset::@2->makecharset::@3#1] -- vbuz1=vbuc1 
    lda #0
    sta ii
    jmp b3
    // [62] phi from makecharset::@4 to makecharset::@3 [phi:makecharset::@4->makecharset::@3]
  b3_from_b4:
    // [62] phi (byte) makecharset::b#2 = (byte) makecharset::b#3 [phi:makecharset::@4->makecharset::@3#0] -- register_copy 
    // [62] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@4->makecharset::@3#1] -- register_copy 
    jmp b3
    // makecharset::@3
  b3:
    // [63] call sid_rnd 
    jsr sid_rnd
    // [64] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 -- vbuz1=vbuz2 
    lda sid_rnd.return
    sta sid_rnd.return_2
    jmp b11
    // makecharset::@11
  b11:
    // [65] (byte~) makecharset::$3 ← (byte) sid_rnd::return#2 -- vbuz1=vbuz2 
    lda sid_rnd.return_2
    sta _3
    // [66] (byte~) makecharset::$4 ← (byte~) makecharset::$3 & (byte) $ff -- vbuz1=vbuz2_band_vbuc1 
    lda #$ff
    and _3
    sta _4
    // [67] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4 -- vbuz1_le_vbuz2_then_la1 
    lda s
    cmp _4
    bcs b4_from_b11
    jmp b5
    // makecharset::@5
  b5:
    // [68] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 
    lda b
    ldy ii
    ora bittab,y
    sta b
    // [69] phi from makecharset::@11 makecharset::@5 to makecharset::@4 [phi:makecharset::@11/makecharset::@5->makecharset::@4]
  b4_from_b11:
  b4_from_b5:
    // [69] phi (byte) makecharset::b#3 = (byte) makecharset::b#2 [phi:makecharset::@11/makecharset::@5->makecharset::@4#0] -- register_copy 
    jmp b4
    // makecharset::@4
  b4:
    // [70] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuz1=_inc_vbuz1 
    inc ii
    // [71] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda ii
    cmp #8
    bcc b3_from_b4
    jmp b6
    // makecharset::@6
  b6:
    // [72] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda c
    asl
    sta _8
    lda c+1
    rol
    sta _8+1
    asl _8
    rol _8+1
    asl _8
    rol _8+1
    // [73] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7 -- vwuz1=vwuz2_plus_vbuz3 
    lda i
    clc
    adc _8
    sta _9
    lda #0
    adc _8+1
    sta _9+1
    // [74] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$9 -- pbuz1=pbuc1_plus_vwuz2 
    lda _9
    clc
    adc #<CHARSET
    sta _16
    lda _9+1
    adc #>CHARSET
    sta _16+1
    // [75] *((byte*~) makecharset::$16) ← (byte) makecharset::b#3 -- _deref_pbuz1=vbuz2 
    lda b
    ldy #0
    sta (_16),y
    // [76] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#7 -- vbuz1=_inc_vbuz1 
    inc i
    // [77] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@2 -- vbuz1_lt_vbuc1_then_la1 
    lda i
    cmp #8
    bcc b2_from_b6
    jmp b7
    // makecharset::@7
  b7:
    // [78] (byte~) makecharset::$11 ← (word) makecharset::c#2 & (byte) 7 -- vbuz1=vwuz2_band_vbuc1 
    lda c
    and #7
    sta _11
    // [79] if((byte~) makecharset::$11!=(byte) 0) goto makecharset::@9 -- vbuz1_neq_0_then_la1 
    lda _11
    cmp #0
    bne b9_from_b7
    // [80] phi from makecharset::@7 to makecharset::@8 [phi:makecharset::@7->makecharset::@8]
  b8_from_b7:
    jmp b8
    // makecharset::@8
  b8:
    // [81] call print_char 
    jsr print_char
    // [82] phi from makecharset::@7 makecharset::@8 to makecharset::@9 [phi:makecharset::@7/makecharset::@8->makecharset::@9]
  b9_from_b7:
  b9_from_b8:
    // [82] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#46 [phi:makecharset::@7/makecharset::@8->makecharset::@9#0] -- register_copy 
    jmp b9
    // makecharset::@9
  b9:
    // [83] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 
    inc c
    bne !+
    inc c+1
  !:
    // [84] if((word) makecharset::c#1<(word) $100) goto makecharset::@1 -- vwuz1_lt_vwuc1_then_la1 
    lda c+1
    cmp #>$100
    bcc b1_from_b9
    bne !+
    lda c
    cmp #<$100
    bcc b1_from_b9
  !:
    jmp breturn
    // makecharset::@return
  breturn:
    // [85] return 
    rts
    bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80
}
  // print_char
// Print a single char
print_char: {
    .const ch = '.'
    // [86] *((byte*) print_char_cursor#46) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
    lda #ch
    ldy #0
    sta (print_char_cursor),y
    // [87] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#46 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
    jmp breturn
    // print_char::@return
  breturn:
    // [88] return 
    rts
}
  // sid_rnd
// Get a random number from the SID voice 3,
// Must be initialized with sid_rnd_init()
sid_rnd: {
    .label return = $2a
    .label return_2 = $20
    // [89] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1 
    lda SID_VOICE3_OSC
    sta return
    jmp breturn
    // sid_rnd::@return
  breturn:
    // [90] return 
    rts
}
  // print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    // [92] call memset 
    // [94] phi from print_cls to memset [phi:print_cls->memset]
  memset_from_print_cls:
    jsr memset
    jmp breturn
    // print_cls::@return
  breturn:
    // [93] 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 = $19
    // [95] phi from memset to memset::@1 [phi:memset->memset::@1]
  b1_from_memset:
    // [95] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 
    lda #<str
    sta dst
    lda #>str
    sta dst+1
    jmp b1
    // [95] phi from memset::@1 to memset::@1 [phi:memset::@1->memset::@1]
  b1_from_b1:
    // [95] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@1->memset::@1#0] -- register_copy 
    jmp b1
    // memset::@1
  b1:
    // [96] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 
    lda #c
    ldy #0
    sta (dst),y
    // [97] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc dst
    bne !+
    inc dst+1
  !:
    // [98] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda dst+1
    cmp #>end
    bne b1_from_b1
    lda dst
    cmp #<end
    bne b1_from_b1
    jmp breturn
    // memset::@return
  breturn:
    // [99] return 
    rts
}
  // sid_rnd_init
// Initialize SID voice 3 for random number generation
sid_rnd_init: {
    // [100] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 
    lda #<$ffff
    sta SID_VOICE3_FREQ
    lda #>$ffff
    sta SID_VOICE3_FREQ+1
    // [101] *((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:
    // [102] return 
    rts
}
  // File Data
  .align $100
SINTABLE:
.for(var i=0;i<$100;i++)
        .byte round(127.5+127.5*sin(2*PI*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 [17] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ c1A#4 c1B#4 c2A#4 c2B#4 ] ( main:2 [ c1A#4 c1B#4 c2A#4 c2B#4 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ]
Statement [20] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 [ c1A#4 c1B#4 c2A#4 c2B#4 ] ( main:2 [ c1A#4 c1B#4 c2A#4 c2B#4 ] ) always clobbers reg byte a 
Statement [25] (byte~) doplasma::$0 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::c1a#2 doplasma::c1b#2 doplasma::i#2 doplasma::$0 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::c1a#2 doplasma::c1b#2 doplasma::i#2 doplasma::$0 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::c1a#2 doplasma::c1b#2 doplasma::i#2 doplasma::$0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ]
Statement [27] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::c1b#2 doplasma::i#2 doplasma::c1a#1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::c1b#2 doplasma::i#2 doplasma::c1a#1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::c1b#2 doplasma::i#2 doplasma::c1a#1 ] ) always clobbers reg byte a 
Statement [28] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] ) always clobbers reg byte a 
Statement [31] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#10 ] ( main:2::doplasma:15 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#10 ] main:2::doplasma:18 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#10 ] ) always clobbers reg byte a 
Statement [32] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 ] ) always clobbers reg byte a 
Statement [36] (byte~) doplasma::$2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::c2a#2 doplasma::c2b#2 doplasma::i1#2 doplasma::$2 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::c2a#2 doplasma::c2b#2 doplasma::i1#2 doplasma::$2 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::c2a#2 doplasma::c2b#2 doplasma::i1#2 doplasma::$2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ]
Statement [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::c2b#2 doplasma::i1#2 doplasma::c2a#1 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::c2b#2 doplasma::i1#2 doplasma::c2a#1 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::c2b#2 doplasma::i1#2 doplasma::c2a#1 ] ) always clobbers reg byte a 
Statement [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a 
Statement [43] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#10 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#10 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#10 ] ) always clobbers reg byte a 
Statement [46] (byte~) doplasma::$4 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#4) [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#4 doplasma::screen#5 doplasma::i2#2 doplasma::$4 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#4 doplasma::screen#5 doplasma::i2#2 doplasma::$4 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#4 doplasma::screen#5 doplasma::i2#2 doplasma::$4 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ doplasma::ii#4 doplasma::ii#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ doplasma::i2#2 doplasma::i2#1 ]
Statement [50] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#4 doplasma::screen#2 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#4 doplasma::screen#2 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#4 doplasma::screen#2 ] ) always clobbers reg byte a 
Statement [59] (byte~) makecharset::$2 ← < (word) makecharset::c#2 [ makecharset::c#2 print_char_cursor#46 makecharset::$2 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#46 makecharset::$2 ] ) always clobbers reg byte a 
Statement [68] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::ii#2 makecharset::b#1 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::ii#2 makecharset::b#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ makecharset::s#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ makecharset::i#7 makecharset::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ makecharset::ii#2 makecharset::ii#1 ]
Statement [72] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte) 3 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$8 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$8 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ]
Statement [73] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$9 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$9 ] ) always clobbers reg byte a 
Statement [74] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$9 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$16 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$16 ] ) always clobbers reg byte a 
Statement [75] *((byte*~) makecharset::$16) ← (byte) makecharset::b#3 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:31 [ makecharset::s#0 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:22 [ makecharset::i#7 makecharset::i#1 ]
Statement [78] (byte~) makecharset::$11 ← (word) makecharset::c#2 & (byte) 7 [ makecharset::c#2 print_char_cursor#46 makecharset::$11 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#46 makecharset::$11 ] ) always clobbers reg byte a 
Statement [84] if((word) makecharset::c#1<(word) $100) goto makecharset::@1 [ makecharset::c#1 print_char_cursor#18 ] ( main:2::makecharset:12 [ makecharset::c#1 print_char_cursor#18 ] ) always clobbers reg byte a 
Statement [86] *((byte*) print_char_cursor#46) ← (const byte) print_char::ch#0 [ print_char_cursor#46 ] ( main:2::makecharset:12::print_char:81 [ makecharset::c#2 print_char_cursor#46 ] ) always clobbers reg byte a reg byte y 
Statement [96] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:57::memset:92 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y 
Statement [98] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 [ memset::dst#1 ] ( main:2::makecharset:12::print_cls:57::memset:92 [ memset::dst#1 ] ) always clobbers reg byte a 
Statement [100] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] ) always clobbers reg byte a 
Statement [101] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] ) 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 [17] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ c1A#4 c1B#4 c2A#4 c2B#4 ] ( main:2 [ c1A#4 c1B#4 c2A#4 c2B#4 ] ) always clobbers reg byte a 
Statement [20] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 [ c1A#4 c1B#4 c2A#4 c2B#4 ] ( main:2 [ c1A#4 c1B#4 c2A#4 c2B#4 ] ) always clobbers reg byte a 
Statement [25] (byte~) doplasma::$0 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::c1a#2 doplasma::c1b#2 doplasma::i#2 doplasma::$0 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::c1a#2 doplasma::c1b#2 doplasma::i#2 doplasma::$0 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::c1a#2 doplasma::c1b#2 doplasma::i#2 doplasma::$0 ] ) always clobbers reg byte a 
Statement [27] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::c1b#2 doplasma::i#2 doplasma::c1a#1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::c1b#2 doplasma::i#2 doplasma::c1a#1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::c1b#2 doplasma::i#2 doplasma::c1a#1 ] ) always clobbers reg byte a 
Statement [28] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] ( main:2::doplasma:15 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] main:2::doplasma:18 [ c1A#10 c1B#10 c2A#24 c2B#24 doplasma::screen#10 doplasma::i#2 doplasma::c1a#1 doplasma::c1b#1 ] ) always clobbers reg byte a 
Statement [31] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#10 ] ( main:2::doplasma:15 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#10 ] main:2::doplasma:18 [ c1A#4 c1B#10 c2A#24 c2B#24 doplasma::screen#10 ] ) always clobbers reg byte a 
Statement [32] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 ] ) always clobbers reg byte a 
Statement [36] (byte~) doplasma::$2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::c2a#2 doplasma::c2b#2 doplasma::i1#2 doplasma::$2 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::c2a#2 doplasma::c2b#2 doplasma::i1#2 doplasma::$2 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::c2a#2 doplasma::c2b#2 doplasma::i1#2 doplasma::$2 ] ) always clobbers reg byte a 
Statement [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::c2b#2 doplasma::i1#2 doplasma::c2a#1 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::c2b#2 doplasma::i1#2 doplasma::c2a#1 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::c2b#2 doplasma::i1#2 doplasma::c2a#1 ] ) always clobbers reg byte a 
Statement [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#24 c2B#24 doplasma::screen#10 doplasma::i1#2 doplasma::c2a#1 doplasma::c2b#1 ] ) always clobbers reg byte a 
Statement [43] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#10 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#10 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::screen#10 ] ) always clobbers reg byte a 
Statement [46] (byte~) doplasma::$4 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#4) [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#4 doplasma::screen#5 doplasma::i2#2 doplasma::$4 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#4 doplasma::screen#5 doplasma::i2#2 doplasma::$4 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#4 doplasma::screen#5 doplasma::i2#2 doplasma::$4 ] ) always clobbers reg byte a 
Statement [50] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#4 doplasma::screen#2 ] ( main:2::doplasma:15 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#4 doplasma::screen#2 ] main:2::doplasma:18 [ c1A#4 c1B#4 c2A#4 c2B#4 doplasma::ii#4 doplasma::screen#2 ] ) always clobbers reg byte a 
Statement [59] (byte~) makecharset::$2 ← < (word) makecharset::c#2 [ makecharset::c#2 print_char_cursor#46 makecharset::$2 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#46 makecharset::$2 ] ) always clobbers reg byte a 
Statement [68] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::ii#2 makecharset::b#1 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::ii#2 makecharset::b#1 ] ) always clobbers reg byte a 
Statement [72] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte) 3 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$8 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$8 ] ) always clobbers reg byte a 
Statement [73] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$9 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$9 ] ) always clobbers reg byte a 
Statement [74] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$9 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$16 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 makecharset::b#3 makecharset::$16 ] ) always clobbers reg byte a 
Statement [75] *((byte*~) makecharset::$16) ← (byte) makecharset::b#3 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#46 makecharset::s#0 makecharset::i#7 ] ) always clobbers reg byte a reg byte y 
Statement [78] (byte~) makecharset::$11 ← (word) makecharset::c#2 & (byte) 7 [ makecharset::c#2 print_char_cursor#46 makecharset::$11 ] ( main:2::makecharset:12 [ makecharset::c#2 print_char_cursor#46 makecharset::$11 ] ) always clobbers reg byte a 
Statement [84] if((word) makecharset::c#1<(word) $100) goto makecharset::@1 [ makecharset::c#1 print_char_cursor#18 ] ( main:2::makecharset:12 [ makecharset::c#1 print_char_cursor#18 ] ) always clobbers reg byte a 
Statement [86] *((byte*) print_char_cursor#46) ← (const byte) print_char::ch#0 [ print_char_cursor#46 ] ( main:2::makecharset:12::print_char:81 [ makecharset::c#2 print_char_cursor#46 ] ) always clobbers reg byte a reg byte y 
Statement [96] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:57::memset:92 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y 
Statement [98] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 [ memset::dst#1 ] ( main:2::makecharset:12::print_cls:57::memset:92 [ memset::dst#1 ] ) always clobbers reg byte a 
Statement [100] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] ) always clobbers reg byte a 
Statement [101] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] ) 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#10 c1A#14 c1A#4 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ] : zp ZP_BYTE:10 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] : zp ZP_BYTE:12 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ] : zp ZP_BYTE:13 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:14 [ doplasma::ii#4 doplasma::ii#1 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:15 [ doplasma::screen#5 doplasma::screen#10 doplasma::screen#2 ] : zp ZP_WORD:15 , 
Potential registers zp ZP_BYTE:17 [ doplasma::i2#2 doplasma::i2#1 ] : zp ZP_BYTE:17 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:18 [ makecharset::c#2 makecharset::c#1 ] : zp ZP_WORD:18 , 
Potential registers zp ZP_WORD:20 [ print_char_cursor#46 print_char_cursor#18 print_char_cursor#1 ] : zp ZP_WORD:20 , 
Potential registers zp ZP_BYTE:22 [ makecharset::i#7 makecharset::i#1 ] : zp ZP_BYTE:22 , reg byte x , 
Potential registers zp ZP_BYTE:23 [ makecharset::ii#2 makecharset::ii#1 ] : zp ZP_BYTE:23 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:24 [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ] : zp ZP_BYTE:24 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:25 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:25 , 
Potential registers zp ZP_BYTE:27 [ doplasma::$0 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:28 [ doplasma::$2 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:29 [ doplasma::$4 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:30 [ makecharset::$2 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:31 [ makecharset::s#0 ] : zp ZP_BYTE:31 , reg byte x , 
Potential registers zp ZP_BYTE:32 [ sid_rnd::return#2 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:33 [ makecharset::$3 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:34 [ makecharset::$4 ] : zp ZP_BYTE:34 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:35 [ makecharset::$8 ] : zp ZP_WORD:35 , 
Potential registers zp ZP_WORD:37 [ makecharset::$9 ] : zp ZP_WORD:37 , 
Potential registers zp ZP_WORD:39 [ makecharset::$16 ] : zp ZP_WORD:39 , 
Potential registers zp ZP_BYTE:41 [ makecharset::$11 ] : zp ZP_BYTE:41 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:42 [ sid_rnd::return#0 ] : zp ZP_BYTE:42 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [makecharset] 3,019.83: zp ZP_BYTE:24 [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ] 2,002: zp ZP_BYTE:33 [ makecharset::$3 ] 2,002: zp ZP_BYTE:34 [ makecharset::$4 ] 1,876.88: zp ZP_BYTE:23 [ makecharset::ii#2 makecharset::ii#1 ] 202: zp ZP_WORD:35 [ makecharset::$8 ] 202: zp ZP_WORD:37 [ makecharset::$9 ] 202: zp ZP_WORD:39 [ makecharset::$16 ] 171.7: zp ZP_BYTE:22 [ makecharset::i#7 makecharset::i#1 ] 56.22: zp ZP_BYTE:31 [ makecharset::s#0 ] 22.3: zp ZP_WORD:18 [ makecharset::c#2 makecharset::c#1 ] 22: zp ZP_BYTE:30 [ makecharset::$2 ] 22: zp ZP_BYTE:41 [ makecharset::$11 ] 
Uplift Scope [doplasma] 2,836.17: zp ZP_BYTE:17 [ doplasma::i2#2 doplasma::i2#1 ] 2,002: zp ZP_BYTE:29 [ doplasma::$4 ] 323.36: zp ZP_BYTE:14 [ doplasma::ii#4 doplasma::ii#1 ] 268.25: zp ZP_WORD:15 [ doplasma::screen#5 doplasma::screen#10 doplasma::screen#2 ] 212.1: zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ] 212.1: zp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ] 202: zp ZP_BYTE:27 [ doplasma::$0 ] 202: zp ZP_BYTE:28 [ doplasma::$2 ] 154.17: zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] 154.17: zp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] 147.58: zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] 147.58: zp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] 
Uplift Scope [sid_rnd] 2,002: zp ZP_BYTE:32 [ sid_rnd::return#2 ] 334.33: zp ZP_BYTE:42 [ sid_rnd::return#0 ] 
Uplift Scope [] 16.42: zp ZP_WORD:20 [ print_char_cursor#46 print_char_cursor#18 print_char_cursor#1 ] 14.43: zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ] 14.22: zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ] 13.59: zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ] 13.57: zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] 
Uplift Scope [memset] 33: zp ZP_WORD:25 [ memset::dst#2 memset::dst#1 ] 
Uplift Scope [main] 33: zp ZP_WORD:2 [ main::col#2 main::col#1 ] 
Uplift Scope [RADIX] 
Uplift Scope [print_char] 
Uplift Scope [print_cls] 
Uplift Scope [sid_rnd_init] 

Uplifting [makecharset] best 156957 combination reg byte y [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ] reg byte a [ makecharset::$3 ] zp ZP_BYTE:34 [ makecharset::$4 ] reg byte x [ makecharset::ii#2 makecharset::ii#1 ] zp ZP_WORD:35 [ makecharset::$8 ] zp ZP_WORD:37 [ makecharset::$9 ] zp ZP_WORD:39 [ makecharset::$16 ] zp ZP_BYTE:22 [ makecharset::i#7 makecharset::i#1 ] zp ZP_BYTE:31 [ makecharset::s#0 ] zp ZP_WORD:18 [ makecharset::c#2 makecharset::c#1 ] zp ZP_BYTE:30 [ makecharset::$2 ] zp ZP_BYTE:41 [ makecharset::$11 ] 
Limited combination testing to 100 combinations of 9216 possible.
Uplifting [doplasma] best 132057 combination reg byte y [ doplasma::i2#2 doplasma::i2#1 ] reg byte a [ doplasma::$4 ] reg byte x [ doplasma::ii#4 doplasma::ii#1 ] zp ZP_WORD:15 [ doplasma::screen#5 doplasma::screen#10 doplasma::screen#2 ] zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ] zp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ] zp ZP_BYTE:27 [ doplasma::$0 ] zp ZP_BYTE:28 [ doplasma::$2 ] zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] zp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] zp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] 
Limited combination testing to 100 combinations of 419904 possible.
Uplifting [sid_rnd] best 123054 combination reg byte a [ sid_rnd::return#2 ] reg byte a [ sid_rnd::return#0 ] 
Uplifting [] best 123054 combination zp ZP_WORD:20 [ print_char_cursor#46 print_char_cursor#18 print_char_cursor#1 ] zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ] zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ] zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ] zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] 
Uplifting [memset] best 123054 combination zp ZP_WORD:25 [ memset::dst#2 memset::dst#1 ] 
Uplifting [main] best 123054 combination zp ZP_WORD:2 [ main::col#2 main::col#1 ] 
Uplifting [RADIX] best 123054 combination 
Uplifting [print_char] best 123054 combination 
Uplifting [print_cls] best 123054 combination 
Uplifting [sid_rnd_init] best 123054 combination 
Attempting to uplift remaining variables inzp ZP_BYTE:34 [ makecharset::$4 ]
Uplifting [makecharset] best 123054 combination zp ZP_BYTE:34 [ makecharset::$4 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ]
Uplifting [doplasma] best 123054 combination zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ]
Uplifting [doplasma] best 123054 combination zp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:27 [ doplasma::$0 ]
Uplifting [doplasma] best 122454 combination reg byte a [ doplasma::$0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:28 [ doplasma::$2 ]
Uplifting [doplasma] best 121854 combination reg byte a [ doplasma::$2 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:22 [ makecharset::i#7 makecharset::i#1 ]
Uplifting [makecharset] best 121854 combination zp ZP_BYTE:22 [ makecharset::i#7 makecharset::i#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ]
Uplifting [doplasma] best 121854 combination zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
Uplifting [doplasma] best 121854 combination zp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ]
Uplifting [doplasma] best 121854 combination zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
Uplifting [doplasma] best 121854 combination zp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:31 [ makecharset::s#0 ]
Uplifting [makecharset] best 121854 combination zp ZP_BYTE:31 [ makecharset::s#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:30 [ makecharset::$2 ]
Uplifting [makecharset] best 121814 combination reg byte a [ makecharset::$2 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:41 [ makecharset::$11 ]
Uplifting [makecharset] best 121754 combination reg byte a [ makecharset::$11 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ]
Uplifting [] best 121754 combination zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ]
Uplifting [] best 121754 combination zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ]
Uplifting [] best 121754 combination zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ]
Uplifting [] best 121754 combination zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ] 
Coalescing zero page register with common assignment [ zp ZP_WORD:35 [ makecharset::$8 ] ] with [ zp ZP_WORD:37 [ makecharset::$9 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:35 [ makecharset::$8 makecharset::$9 ] ] with [ zp ZP_WORD:39 [ makecharset::$16 ] ] - score: 1
Allocated (was zp ZP_WORD:15) zp ZP_WORD:14 [ doplasma::screen#5 doplasma::screen#10 doplasma::screen#2 ]
Allocated (was zp ZP_WORD:18) zp ZP_WORD:16 [ makecharset::c#2 makecharset::c#1 ]
Allocated (was zp ZP_WORD:20) zp ZP_WORD:18 [ print_char_cursor#46 print_char_cursor#18 print_char_cursor#1 ]
Allocated (was zp ZP_BYTE:22) zp ZP_BYTE:20 [ makecharset::i#7 makecharset::i#1 ]
Allocated (was zp ZP_WORD:25) zp ZP_WORD:21 [ memset::dst#2 memset::dst#1 ]
Allocated (was zp ZP_BYTE:31) zp ZP_BYTE:23 [ makecharset::s#0 ]
Allocated (was zp ZP_BYTE:34) zp ZP_BYTE:24 [ makecharset::$4 ]
Allocated (was zp ZP_WORD:35) zp ZP_WORD:25 [ makecharset::$8 makecharset::$9 makecharset::$16 ]

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
// A KickC version of the plasma routine from the CC65 samples
// (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
  // Basic 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 SCREEN2 = $2c00
  .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
    .const toD0182_return = (>(SCREEN2&$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 col
    lda #>COLS
    sta 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 col
    bne !+
    inc 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 col+1
    cmp #>COLS+$3e8+1
    bne b1_from_b1
    lda 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 
    // [54] phi from main::@2 to makecharset [phi:main::@2->makecharset]
  makecharset_from_b2:
    jsr makecharset
    // [13] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
  b3_from_b2:
    // [13] phi (byte) c2B#14 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta c2B
    // [13] phi (byte) c2A#14 = (byte) 0 [phi:main::@2->main::@3#1] -- vbuz1=vbuc1 
    lda #0
    sta c2A
    // [13] phi (byte) c1B#14 = (byte) 0 [phi:main::@2->main::@3#2] -- vbuz1=vbuc1 
    lda #0
    sta c1B
    // [13] phi (byte) c1A#14 = (byte) 0 [phi:main::@2->main::@3#3] -- vbuz1=vbuc1 
    lda #0
    sta c1A
    jmp b3
  // Show double-buffered plasma
    // main::@3
  b3:
    // [14] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  b4_from_b3:
    jmp b4
    // main::@4
  b4:
    // [15] call doplasma 
    // [21] phi from main::@4 to doplasma [phi:main::@4->doplasma]
  doplasma_from_b4:
    // [21] phi (byte*) doplasma::screen#10 = (const byte*) SCREEN1#0 [phi:main::@4->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN1
    sta doplasma.screen
    lda #>SCREEN1
    sta doplasma.screen+1
    // [21] phi (byte) c2B#24 = (byte) c2B#14 [phi:main::@4->doplasma#1] -- register_copy 
    // [21] phi (byte) c2A#24 = (byte) c2A#14 [phi:main::@4->doplasma#2] -- register_copy 
    // [21] phi (byte) c1B#10 = (byte) c1B#14 [phi:main::@4->doplasma#3] -- register_copy 
    // [21] phi (byte) c1A#10 = (byte) c1A#14 [phi:main::@4->doplasma#4] -- register_copy 
    jsr doplasma
    // [16] phi from main::@4 to main::toD0181 [phi:main::@4->main::toD0181]
  toD0181_from_b4:
    jmp toD0181
    // main::toD0181
  toD0181:
    jmp b5
    // main::@5
  b5:
    // [17] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // [18] call doplasma 
    // [21] phi from main::@5 to doplasma [phi:main::@5->doplasma]
  doplasma_from_b5:
    // [21] phi (byte*) doplasma::screen#10 = (const byte*) SCREEN2#0 [phi:main::@5->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN2
    sta doplasma.screen
    lda #>SCREEN2
    sta doplasma.screen+1
    // [21] phi (byte) c2B#24 = (byte) c2B#4 [phi:main::@5->doplasma#1] -- register_copy 
    // [21] phi (byte) c2A#24 = (byte) c2A#4 [phi:main::@5->doplasma#2] -- register_copy 
    // [21] phi (byte) c1B#10 = (byte) c1B#4 [phi:main::@5->doplasma#3] -- register_copy 
    // [21] phi (byte) c1A#10 = (byte) c1A#4 [phi:main::@5->doplasma#4] -- register_copy 
    jsr doplasma
    // [19] phi from main::@5 to main::toD0182 [phi:main::@5->main::toD0182]
  toD0182_from_b5:
    jmp toD0182
    // main::toD0182
  toD0182:
    jmp b6
    // main::@6
  b6:
    // [20] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0182_return
    sta D018
    // [13] phi from main::@6 to main::@3 [phi:main::@6->main::@3]
  b3_from_b6:
    // [13] phi (byte) c2B#14 = (byte) c2B#4 [phi:main::@6->main::@3#0] -- register_copy 
    // [13] phi (byte) c2A#14 = (byte) c2A#4 [phi:main::@6->main::@3#1] -- register_copy 
    // [13] phi (byte) c1B#14 = (byte) c1B#4 [phi:main::@6->main::@3#2] -- register_copy 
    // [13] phi (byte) c1A#14 = (byte) c1A#4 [phi:main::@6->main::@3#3] -- register_copy 
    jmp b3
}
  // doplasma
// Render plasma to the passed screen
// doplasma(byte* zeropage($e) screen)
doplasma: {
    .label c1a = 8
    .label c1b = 9
    .label i = $a
    .label c2a = $b
    .label c2b = $c
    .label i1 = $d
    .label screen = $e
    // [22] (byte) doplasma::c1a#0 ← (byte) c1A#10 -- vbuz1=vbuz2 
    lda c1A
    sta c1a
    // [23] (byte) doplasma::c1b#0 ← (byte) c1B#10 -- vbuz1=vbuz2 
    lda c1B
    sta c1b
    // [24] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
  b1_from_doplasma:
    // [24] phi (byte) doplasma::i#2 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta i
    // [24] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#1] -- register_copy 
    // [24] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#2] -- register_copy 
    jmp b1
    // [24] phi from doplasma::@1 to doplasma::@1 [phi:doplasma::@1->doplasma::@1]
  b1_from_b1:
    // [24] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@1->doplasma::@1#0] -- register_copy 
    // [24] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@1->doplasma::@1#1] -- register_copy 
    // [24] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@1->doplasma::@1#2] -- register_copy 
    jmp b1
    // doplasma::@1
  b1:
    // [25] (byte~) doplasma::$0 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
    ldy c1a
    lda SINTABLE,y
    ldy c1b
    clc
    adc SINTABLE,y
    // [26] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$0 -- pbuc1_derefidx_vbuz1=vbuaa 
    ldy i
    sta ybuf,y
    // [27] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 
    lax c1a
    axs #-[4]
    stx c1a
    // [28] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 
    lax c1b
    axs #-[9]
    stx c1b
    // [29] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 
    inc i
    // [30] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@1 -- vbuz1_lt_vbuc1_then_la1 
    lda i
    cmp #$19
    bcc b1_from_b1
    jmp b2
    // doplasma::@2
  b2:
    // [31] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax c1A
    axs #-[3]
    stx c1A
    // [32] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 
    lax c1B
    axs #5
    stx c1B
    // [33] (byte) doplasma::c2a#0 ← (byte) c2A#24 -- vbuz1=vbuz2 
    lda c2A
    sta c2a
    // [34] (byte) doplasma::c2b#0 ← (byte) c2B#24 -- vbuz1=vbuz2 
    lda c2B
    sta c2b
    // [35] phi from doplasma::@2 to doplasma::@3 [phi:doplasma::@2->doplasma::@3]
  b3_from_b2:
    // [35] phi (byte) doplasma::i1#2 = (byte) 0 [phi:doplasma::@2->doplasma::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta i1
    // [35] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@2->doplasma::@3#1] -- register_copy 
    // [35] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@2->doplasma::@3#2] -- register_copy 
    jmp b3
    // [35] phi from doplasma::@3 to doplasma::@3 [phi:doplasma::@3->doplasma::@3]
  b3_from_b3:
    // [35] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@3->doplasma::@3#0] -- register_copy 
    // [35] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@3->doplasma::@3#1] -- register_copy 
    // [35] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@3->doplasma::@3#2] -- register_copy 
    jmp b3
    // doplasma::@3
  b3:
    // [36] (byte~) doplasma::$2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
    ldy c2a
    lda SINTABLE,y
    ldy c2b
    clc
    adc SINTABLE,y
    // [37] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$2 -- pbuc1_derefidx_vbuz1=vbuaa 
    ldy i1
    sta xbuf,y
    // [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax c2a
    axs #-[3]
    stx c2a
    // [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 
    lax c2b
    axs #-[7]
    stx c2b
    // [40] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 
    inc i1
    // [41] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda i1
    cmp #$28
    bcc b3_from_b3
    jmp b4
    // doplasma::@4
  b4:
    // [42] (byte) c2A#4 ← (byte) c2A#24 + (byte) 2 -- vbuz1=vbuz1_plus_2 
    lda c2A
    clc
    adc #2
    sta c2A
    // [43] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 
    lax c2B
    axs #3
    stx c2B
    // [44] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5]
  b5_from_b4:
    // [44] phi (byte*) doplasma::screen#5 = (byte*) doplasma::screen#10 [phi:doplasma::@4->doplasma::@5#0] -- register_copy 
    // [44] phi (byte) doplasma::ii#4 = (byte) 0 [phi:doplasma::@4->doplasma::@5#1] -- vbuxx=vbuc1 
    ldx #0
    jmp b5
    // [44] phi from doplasma::@7 to doplasma::@5 [phi:doplasma::@7->doplasma::@5]
  b5_from_b7:
    // [44] phi (byte*) doplasma::screen#5 = (byte*) doplasma::screen#2 [phi:doplasma::@7->doplasma::@5#0] -- register_copy 
    // [44] phi (byte) doplasma::ii#4 = (byte) doplasma::ii#1 [phi:doplasma::@7->doplasma::@5#1] -- register_copy 
    jmp b5
    // doplasma::@5
  b5:
    // [45] phi from doplasma::@5 to doplasma::@6 [phi:doplasma::@5->doplasma::@6]
  b6_from_b5:
    // [45] phi (byte) doplasma::i2#2 = (byte) 0 [phi:doplasma::@5->doplasma::@6#0] -- vbuyy=vbuc1 
    ldy #0
    jmp b6
    // [45] phi from doplasma::@6 to doplasma::@6 [phi:doplasma::@6->doplasma::@6]
  b6_from_b6:
    // [45] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@6->doplasma::@6#0] -- register_copy 
    jmp b6
    // doplasma::@6
  b6:
    // [46] (byte~) doplasma::$4 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#4) -- vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx 
    lda xbuf,y
    clc
    adc ybuf,x
    // [47] *((byte*) doplasma::screen#5 + (byte) doplasma::i2#2) ← (byte~) doplasma::$4 -- pbuz1_derefidx_vbuyy=vbuaa 
    sta (screen),y
    // [48] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuyy=_inc_vbuyy 
    iny
    // [49] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@6 -- vbuyy_lt_vbuc1_then_la1 
    cpy #$28
    bcc b6_from_b6
    jmp b7
    // doplasma::@7
  b7:
    // [50] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc screen
    sta screen
    bcc !+
    inc screen+1
  !:
    // [51] (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#4 -- vbuxx=_inc_vbuxx 
    inx
    // [52] if((byte) doplasma::ii#1<(byte) $19) goto doplasma::@5 -- vbuxx_lt_vbuc1_then_la1 
    cpx #$19
    bcc b5_from_b7
    jmp breturn
    // doplasma::@return
  breturn:
    // [53] return 
    rts
    xbuf: .fill $28, 0
    ybuf: .fill $19, 0
}
  // makecharset
// Make a plasma-friendly charset where the chars are randomly filled
makecharset: {
    .label _4 = $18
    .label _8 = $19
    .label _9 = $19
    .label s = $17
    .label i = $14
    .label c = $10
    .label _16 = $19
    // [55] call sid_rnd_init 
    jsr sid_rnd_init
    // [56] phi from makecharset to makecharset::@10 [phi:makecharset->makecharset::@10]
  b10_from_makecharset:
    jmp b10
    // makecharset::@10
  b10:
    // [57] call print_cls 
    // [91] phi from makecharset::@10 to print_cls [phi:makecharset::@10->print_cls]
  print_cls_from_b10:
    jsr print_cls
    // [58] phi from makecharset::@10 to makecharset::@1 [phi:makecharset::@10->makecharset::@1]
  b1_from_b10:
    // [58] phi (byte*) print_char_cursor#46 = (const byte*) print_line_cursor#0 [phi:makecharset::@10->makecharset::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta print_char_cursor
    lda #>print_line_cursor
    sta print_char_cursor+1
    // [58] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@10->makecharset::@1#1] -- vwuz1=vbuc1 
    lda #<0
    sta c
    lda #>0
    sta c+1
    jmp b1
    // [58] phi from makecharset::@9 to makecharset::@1 [phi:makecharset::@9->makecharset::@1]
  b1_from_b9:
    // [58] phi (byte*) print_char_cursor#46 = (byte*) print_char_cursor#18 [phi:makecharset::@9->makecharset::@1#0] -- register_copy 
    // [58] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@9->makecharset::@1#1] -- register_copy 
    jmp b1
    // makecharset::@1
  b1:
    // [59] (byte~) makecharset::$2 ← < (word) makecharset::c#2 -- vbuaa=_lo_vwuz1 
    lda c
    // [60] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$2) -- vbuz1=pbuc1_derefidx_vbuaa 
    tay
    lda SINTABLE,y
    sta s
    // [61] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2]
  b2_from_b1:
    // [61] phi (byte) makecharset::i#7 = (byte) 0 [phi:makecharset::@1->makecharset::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta i
    jmp b2
    // [61] phi from makecharset::@6 to makecharset::@2 [phi:makecharset::@6->makecharset::@2]
  b2_from_b6:
    // [61] phi (byte) makecharset::i#7 = (byte) makecharset::i#1 [phi:makecharset::@6->makecharset::@2#0] -- register_copy 
    jmp b2
    // makecharset::@2
  b2:
    // [62] phi from makecharset::@2 to makecharset::@3 [phi:makecharset::@2->makecharset::@3]
  b3_from_b2:
    // [62] phi (byte) makecharset::b#2 = (byte) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuyy=vbuc1 
    ldy #0
    // [62] phi (byte) makecharset::ii#2 = (byte) 0 [phi:makecharset::@2->makecharset::@3#1] -- vbuxx=vbuc1 
    ldx #0
    jmp b3
    // [62] phi from makecharset::@4 to makecharset::@3 [phi:makecharset::@4->makecharset::@3]
  b3_from_b4:
    // [62] phi (byte) makecharset::b#2 = (byte) makecharset::b#3 [phi:makecharset::@4->makecharset::@3#0] -- register_copy 
    // [62] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@4->makecharset::@3#1] -- register_copy 
    jmp b3
    // makecharset::@3
  b3:
    // [63] call sid_rnd 
    jsr sid_rnd
    // [64] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
    jmp b11
    // makecharset::@11
  b11:
    // [65] (byte~) makecharset::$3 ← (byte) sid_rnd::return#2
    // [66] (byte~) makecharset::$4 ← (byte~) makecharset::$3 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 
    and #$ff
    sta _4
    // [67] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4 -- vbuz1_le_vbuz2_then_la1 
    lda s
    cmp _4
    bcs b4_from_b11
    jmp b5
    // makecharset::@5
  b5:
    // [68] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx 
    tya
    ora bittab,x
    tay
    // [69] phi from makecharset::@11 makecharset::@5 to makecharset::@4 [phi:makecharset::@11/makecharset::@5->makecharset::@4]
  b4_from_b11:
  b4_from_b5:
    // [69] phi (byte) makecharset::b#3 = (byte) makecharset::b#2 [phi:makecharset::@11/makecharset::@5->makecharset::@4#0] -- register_copy 
    jmp b4
    // makecharset::@4
  b4:
    // [70] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuxx=_inc_vbuxx 
    inx
    // [71] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@3 -- vbuxx_lt_vbuc1_then_la1 
    cpx #8
    bcc b3_from_b4
    jmp b6
    // makecharset::@6
  b6:
    // [72] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda c
    asl
    sta _8
    lda c+1
    rol
    sta _8+1
    asl _8
    rol _8+1
    asl _8
    rol _8+1
    // [73] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7 -- vwuz1=vwuz1_plus_vbuz2 
    lda i
    clc
    adc _9
    sta _9
    bcc !+
    inc _9+1
  !:
    // [74] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$9 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda _16
    adc #<CHARSET
    sta _16
    lda _16+1
    adc #>CHARSET
    sta _16+1
    // [75] *((byte*~) makecharset::$16) ← (byte) makecharset::b#3 -- _deref_pbuz1=vbuyy 
    tya
    ldy #0
    sta (_16),y
    // [76] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#7 -- vbuz1=_inc_vbuz1 
    inc i
    // [77] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@2 -- vbuz1_lt_vbuc1_then_la1 
    lda i
    cmp #8
    bcc b2_from_b6
    jmp b7
    // makecharset::@7
  b7:
    // [78] (byte~) makecharset::$11 ← (word) makecharset::c#2 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 
    lda c
    and #7
    // [79] if((byte~) makecharset::$11!=(byte) 0) goto makecharset::@9 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne b9_from_b7
    // [80] phi from makecharset::@7 to makecharset::@8 [phi:makecharset::@7->makecharset::@8]
  b8_from_b7:
    jmp b8
    // makecharset::@8
  b8:
    // [81] call print_char 
    jsr print_char
    // [82] phi from makecharset::@7 makecharset::@8 to makecharset::@9 [phi:makecharset::@7/makecharset::@8->makecharset::@9]
  b9_from_b7:
  b9_from_b8:
    // [82] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#46 [phi:makecharset::@7/makecharset::@8->makecharset::@9#0] -- register_copy 
    jmp b9
    // makecharset::@9
  b9:
    // [83] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 
    inc c
    bne !+
    inc c+1
  !:
    // [84] if((word) makecharset::c#1<(word) $100) goto makecharset::@1 -- vwuz1_lt_vwuc1_then_la1 
    lda c+1
    cmp #>$100
    bcc b1_from_b9
    bne !+
    lda c
    cmp #<$100
    bcc b1_from_b9
  !:
    jmp breturn
    // makecharset::@return
  breturn:
    // [85] return 
    rts
    bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80
}
  // print_char
// Print a single char
print_char: {
    .const ch = '.'
    // [86] *((byte*) print_char_cursor#46) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
    lda #ch
    ldy #0
    sta (print_char_cursor),y
    // [87] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#46 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
    jmp breturn
    // print_char::@return
  breturn:
    // [88] return 
    rts
}
  // sid_rnd
// Get a random number from the SID voice 3,
// Must be initialized with sid_rnd_init()
sid_rnd: {
    // [89] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 
    lda SID_VOICE3_OSC
    jmp breturn
    // sid_rnd::@return
  breturn:
    // [90] return 
    rts
}
  // print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    // [92] call memset 
    // [94] phi from print_cls to memset [phi:print_cls->memset]
  memset_from_print_cls:
    jsr memset
    jmp breturn
    // print_cls::@return
  breturn:
    // [93] 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 = $15
    // [95] phi from memset to memset::@1 [phi:memset->memset::@1]
  b1_from_memset:
    // [95] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 
    lda #<str
    sta dst
    lda #>str
    sta dst+1
    jmp b1
    // [95] phi from memset::@1 to memset::@1 [phi:memset::@1->memset::@1]
  b1_from_b1:
    // [95] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@1->memset::@1#0] -- register_copy 
    jmp b1
    // memset::@1
  b1:
    // [96] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 
    lda #c
    ldy #0
    sta (dst),y
    // [97] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc dst
    bne !+
    inc dst+1
  !:
    // [98] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda dst+1
    cmp #>end
    bne b1_from_b1
    lda dst
    cmp #<end
    bne b1_from_b1
    jmp breturn
    // memset::@return
  breturn:
    // [99] return 
    rts
}
  // sid_rnd_init
// Initialize SID voice 3 for random number generation
sid_rnd_init: {
    // [100] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff -- _deref_pwuc1=vwuc2 
    lda #<$ffff
    sta SID_VOICE3_FREQ
    lda #>$ffff
    sta SID_VOICE3_FREQ+1
    // [101] *((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:
    // [102] return 
    rts
}
  // File Data
  .align $100
SINTABLE:
.for(var i=0;i<$100;i++)
        .byte round(127.5+127.5*sin(2*PI*i/256))


ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b1
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp toD0181
Removing instruction jmp b5
Removing instruction jmp toD0182
Removing instruction jmp b6
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp b6
Removing instruction jmp b7
Removing instruction jmp breturn
Removing instruction jmp b10
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b11
Removing instruction jmp b5
Removing instruction jmp b4
Removing instruction jmp b6
Removing instruction jmp b7
Removing instruction jmp b8
Removing instruction jmp b9
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp breturn
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
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 b1_from_b1 with b1
Replacing label b3_from_b3 with b3
Replacing label b6_from_b6 with b6
Replacing label b5_from_b7 with b5
Replacing label b4_from_b11 with b4
Replacing label b3_from_b4 with b3
Replacing label b2_from_b6 with b2
Replacing label b9_from_b7 with b9
Replacing label b1_from_b9 with b1
Replacing label b1_from_b9 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
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 b3:
Removing instruction b4_from_b3:
Removing instruction doplasma_from_b4:
Removing instruction toD0181_from_b4:
Removing instruction toD0181:
Removing instruction toD0182_from_b5:
Removing instruction toD0182:
Removing instruction b1_from_b1:
Removing instruction b3_from_b3:
Removing instruction b5_from_b7:
Removing instruction b6_from_b5:
Removing instruction b6_from_b6:
Removing instruction b10_from_makecharset:
Removing instruction print_cls_from_b10:
Removing instruction b1_from_b9:
Removing instruction b2_from_b6:
Removing instruction b3_from_b2:
Removing instruction b3_from_b4:
Removing instruction b4_from_b11:
Removing instruction b4_from_b5:
Removing instruction b8_from_b7:
Removing instruction b9_from_b7:
Removing instruction b9_from_b8:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction b1_from_main:
Removing instruction b2:
Removing instruction b3_from_b2:
Removing instruction b5:
Removing instruction doplasma_from_b5:
Removing instruction b6:
Removing instruction b3_from_b6:
Removing instruction b1_from_doplasma:
Removing instruction b2:
Removing instruction b3_from_b2:
Removing instruction b4:
Removing instruction b5_from_b4:
Removing instruction b7:
Removing instruction breturn:
Removing instruction b10:
Removing instruction b1_from_b10:
Removing instruction b2_from_b1:
Removing instruction b11:
Removing instruction b5:
Removing instruction b6:
Removing instruction b7:
Removing instruction b8:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction memset_from_print_cls:
Removing instruction breturn:
Removing instruction b1_from_memset:
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 b1
Removing instruction jmp b3
Removing instruction jmp b5
Removing instruction jmp b6
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination

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*) SCREEN2
(const byte*) SCREEN2#0 SCREEN2 = (byte*) 11264
(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(2*PI*i/256))
 }}
(byte) c1A
(byte) c1A#10 c1A zp ZP_BYTE:4 2.6000000000000005
(byte) c1A#14 c1A zp ZP_BYTE:4 11.0
(byte) c1A#4 c1A zp ZP_BYTE:4 0.8275862068965517
(byte) c1B
(byte) c1B#10 c1B zp ZP_BYTE:5 2.3636363636363633
(byte) c1B#14 c1B zp ZP_BYTE:5 11.0
(byte) c1B#4 c1B zp ZP_BYTE:5 0.8571428571428571
(byte) c2A
(byte) c2A#14 c2A zp ZP_BYTE:6 11.0
(byte) c2A#24 c2A zp ZP_BYTE:6 1.2380952380952381
(byte) c2A#4 c2A zp ZP_BYTE:6 1.3333333333333335
(byte) c2B
(byte) c2B#14 c2B zp ZP_BYTE:7 11.0
(byte) c2B#24 c2B zp ZP_BYTE:7 1.1818181818181817
(byte) c2B#4 c2B zp ZP_BYTE:7 1.411764705882353
(void()) doplasma((byte*) doplasma::screen)
(byte~) doplasma::$0 reg byte a 202.0
(byte~) doplasma::$2 reg byte a 202.0
(byte~) doplasma::$4 reg byte a 2002.0
(label) doplasma::@1
(label) doplasma::@2
(label) doplasma::@3
(label) doplasma::@4
(label) doplasma::@5
(label) doplasma::@6
(label) doplasma::@7
(label) doplasma::@return
(byte) doplasma::c1a
(byte) doplasma::c1a#0 c1a zp ZP_BYTE:8 2.0
(byte) doplasma::c1a#1 c1a zp ZP_BYTE:8 50.5
(byte) doplasma::c1a#2 c1a zp ZP_BYTE:8 101.66666666666666
(byte) doplasma::c1b
(byte) doplasma::c1b#0 c1b zp ZP_BYTE:9 4.0
(byte) doplasma::c1b#1 c1b zp ZP_BYTE:9 67.33333333333333
(byte) doplasma::c1b#2 c1b zp ZP_BYTE:9 76.25
(byte) doplasma::c2a
(byte) doplasma::c2a#0 c2a zp ZP_BYTE:11 2.0
(byte) doplasma::c2a#1 c2a zp ZP_BYTE:11 50.5
(byte) doplasma::c2a#2 c2a zp ZP_BYTE:11 101.66666666666666
(byte) doplasma::c2b
(byte) doplasma::c2b#0 c2b zp ZP_BYTE:12 4.0
(byte) doplasma::c2b#1 c2b zp ZP_BYTE:12 67.33333333333333
(byte) doplasma::c2b#2 c2b zp ZP_BYTE:12 76.25
(byte) doplasma::i
(byte) doplasma::i#1 i zp ZP_BYTE:10 151.5
(byte) doplasma::i#2 i zp ZP_BYTE:10 60.599999999999994
(byte) doplasma::i1
(byte) doplasma::i1#1 i1 zp ZP_BYTE:13 151.5
(byte) doplasma::i1#2 i1 zp ZP_BYTE:13 60.599999999999994
(byte) doplasma::i2
(byte) doplasma::i2#1 reg byte y 1501.5
(byte) doplasma::i2#2 reg byte y 1334.6666666666667
(byte) doplasma::ii
(byte) doplasma::ii#1 reg byte x 151.5
(byte) doplasma::ii#4 reg byte x 171.85714285714283
(byte*) doplasma::screen
(byte*) doplasma::screen#10 screen zp ZP_WORD:14 0.08695652173913043
(byte*) doplasma::screen#2 screen zp ZP_WORD:14 67.33333333333333
(byte*) doplasma::screen#5 screen zp ZP_WORD:14 200.83333333333334
(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) }
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(byte*) main::col
(byte*) main::col#1 col zp ZP_WORD:2 16.5
(byte*) main::col#2 col zp ZP_WORD:2 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
(label) main::toD0182
(word~) main::toD0182_$0
(number~) main::toD0182_$1
(number~) main::toD0182_$2
(number~) main::toD0182_$3
(word~) main::toD0182_$4
(byte~) main::toD0182_$5
(number~) main::toD0182_$6
(number~) main::toD0182_$7
(number~) main::toD0182_$8
(byte*) main::toD0182_gfx
(byte) main::toD0182_return
(const byte) main::toD0182_return#0 toD0182_return = >(word)(const byte*) SCREEN2#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f
(byte*) main::toD0182_screen
(void()) makecharset((byte*) makecharset::charset)
(byte~) makecharset::$11 reg byte a 22.0
(byte*~) makecharset::$16 $16 zp ZP_WORD:25 202.0
(byte~) makecharset::$2 reg byte a 22.0
(byte~) makecharset::$3 reg byte a 2002.0
(byte~) makecharset::$4 $4 zp ZP_BYTE:24 2002.0
(word~) makecharset::$8 $8 zp ZP_WORD:25 202.0
(word~) makecharset::$9 $9 zp ZP_WORD:25 202.0
(label) makecharset::@1
(label) makecharset::@10
(label) makecharset::@11
(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#2 reg byte y 500.5
(byte) makecharset::b#3 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:16 16.5
(word) makecharset::c#2 c zp ZP_WORD:16 5.800000000000001
(byte*) makecharset::charset
(byte) makecharset::i
(byte) makecharset::i#1 i zp ZP_BYTE:20 151.5
(byte) makecharset::i#7 i zp ZP_BYTE:20 20.2
(byte) makecharset::ii
(byte) makecharset::ii#1 reg byte x 1501.5
(byte) makecharset::ii#2 reg byte x 375.375
(byte) makecharset::s
(byte) makecharset::s#0 s zp ZP_BYTE:23 56.22222222222223
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
(label) memset::@return
(byte) memset::c
(const byte) memset::c#0 c = (byte) ' '
(byte*) memset::dst
(byte*) memset::dst#1 dst zp ZP_WORD:21 16.5
(byte*) memset::dst#2 dst zp ZP_WORD:21 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:18 4.333333333333333
(byte*) print_char_cursor#18 print_char_cursor zp ZP_WORD:18 11.0
(byte*) print_char_cursor#46 print_char_cursor zp ZP_WORD:18 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_WORD:2 [ main::col#2 main::col#1 ]
zp ZP_BYTE:4 [ c1A#10 c1A#14 c1A#4 ]
zp ZP_BYTE:5 [ c1B#10 c1B#14 c1B#4 ]
zp ZP_BYTE:6 [ c2A#24 c2A#14 c2A#4 ]
zp ZP_BYTE:7 [ c2B#24 c2B#14 c2B#4 ]
zp ZP_BYTE:8 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ]
zp ZP_BYTE:9 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ]
zp ZP_BYTE:10 [ doplasma::i#2 doplasma::i#1 ]
zp ZP_BYTE:11 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ]
zp ZP_BYTE:12 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ]
zp ZP_BYTE:13 [ doplasma::i1#2 doplasma::i1#1 ]
reg byte x [ doplasma::ii#4 doplasma::ii#1 ]
zp ZP_WORD:14 [ doplasma::screen#5 doplasma::screen#10 doplasma::screen#2 ]
reg byte y [ doplasma::i2#2 doplasma::i2#1 ]
zp ZP_WORD:16 [ makecharset::c#2 makecharset::c#1 ]
zp ZP_WORD:18 [ print_char_cursor#46 print_char_cursor#18 print_char_cursor#1 ]
zp ZP_BYTE:20 [ makecharset::i#7 makecharset::i#1 ]
reg byte x [ makecharset::ii#2 makecharset::ii#1 ]
reg byte y [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ]
zp ZP_WORD:21 [ memset::dst#2 memset::dst#1 ]
reg byte a [ doplasma::$0 ]
reg byte a [ doplasma::$2 ]
reg byte a [ doplasma::$4 ]
reg byte a [ makecharset::$2 ]
zp ZP_BYTE:23 [ makecharset::s#0 ]
reg byte a [ sid_rnd::return#2 ]
reg byte a [ makecharset::$3 ]
zp ZP_BYTE:24 [ makecharset::$4 ]
zp ZP_WORD:25 [ makecharset::$8 makecharset::$9 makecharset::$16 ]
reg byte a [ makecharset::$11 ]
reg byte a [ sid_rnd::return#0 ]


FINAL ASSEMBLER
Score: 90512

  // File Comments
// A KickC version of the plasma routine from the CC65 samples
// (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
  // Basic 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 SCREEN2 = $2c00
  .label CHARSET = $2000
  .label print_char_cursor = $12
  .label c1A = 4
  .label c1B = 5
  .label c2A = 6
  .label c2B = 7
  // @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
    .const toD0182_return = (>(SCREEN2&$3fff)*4)|(>CHARSET)/4&$f
    .label col = 2
    // 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 col
    lda #>COLS
    sta 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(char* col : COLS..COLS+1000)
    // [9] (byte*) main::col#1 ← ++ (byte*) main::col#2 -- pbuz1=_inc_pbuz1 
    inc col
    bne !+
    inc 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 col+1
    cmp #>COLS+$3e8+1
    bne b1
    lda 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 
    // [54] phi from main::@2 to makecharset [phi:main::@2->makecharset]
    jsr makecharset
    // [13] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
    // [13] phi (byte) c2B#14 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta c2B
    // [13] phi (byte) c2A#14 = (byte) 0 [phi:main::@2->main::@3#1] -- vbuz1=vbuc1 
    sta c2A
    // [13] phi (byte) c1B#14 = (byte) 0 [phi:main::@2->main::@3#2] -- vbuz1=vbuc1 
    sta c1B
    // [13] phi (byte) c1A#14 = (byte) 0 [phi:main::@2->main::@3#3] -- vbuz1=vbuc1 
    sta c1A
  // Show double-buffered plasma
    // main::@3
    // [14] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
    // main::@4
  b4:
    // doplasma(SCREEN1)
    // [15] call doplasma 
    // [21] phi from main::@4 to doplasma [phi:main::@4->doplasma]
    // [21] phi (byte*) doplasma::screen#10 = (const byte*) SCREEN1#0 [phi:main::@4->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN1
    sta doplasma.screen
    lda #>SCREEN1
    sta doplasma.screen+1
    // [21] phi (byte) c2B#24 = (byte) c2B#14 [phi:main::@4->doplasma#1] -- register_copy 
    // [21] phi (byte) c2A#24 = (byte) c2A#14 [phi:main::@4->doplasma#2] -- register_copy 
    // [21] phi (byte) c1B#10 = (byte) c1B#14 [phi:main::@4->doplasma#3] -- register_copy 
    // [21] phi (byte) c1A#10 = (byte) c1A#14 [phi:main::@4->doplasma#4] -- register_copy 
    jsr doplasma
    // [16] phi from main::@4 to main::toD0181 [phi:main::@4->main::toD0181]
    // main::toD0181
    // main::@5
    // *D018 = toD018(SCREEN1, CHARSET)
    // [17] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // doplasma(SCREEN2)
    // [18] call doplasma 
    // [21] phi from main::@5 to doplasma [phi:main::@5->doplasma]
    // [21] phi (byte*) doplasma::screen#10 = (const byte*) SCREEN2#0 [phi:main::@5->doplasma#0] -- pbuz1=pbuc1 
    lda #<SCREEN2
    sta doplasma.screen
    lda #>SCREEN2
    sta doplasma.screen+1
    // [21] phi (byte) c2B#24 = (byte) c2B#4 [phi:main::@5->doplasma#1] -- register_copy 
    // [21] phi (byte) c2A#24 = (byte) c2A#4 [phi:main::@5->doplasma#2] -- register_copy 
    // [21] phi (byte) c1B#10 = (byte) c1B#4 [phi:main::@5->doplasma#3] -- register_copy 
    // [21] phi (byte) c1A#10 = (byte) c1A#4 [phi:main::@5->doplasma#4] -- register_copy 
    jsr doplasma
    // [19] phi from main::@5 to main::toD0182 [phi:main::@5->main::toD0182]
    // main::toD0182
    // main::@6
    // *D018 = toD018(SCREEN2, CHARSET)
    // [20] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0182_return
    sta D018
    // [13] phi from main::@6 to main::@3 [phi:main::@6->main::@3]
    // [13] phi (byte) c2B#14 = (byte) c2B#4 [phi:main::@6->main::@3#0] -- register_copy 
    // [13] phi (byte) c2A#14 = (byte) c2A#4 [phi:main::@6->main::@3#1] -- register_copy 
    // [13] phi (byte) c1B#14 = (byte) c1B#4 [phi:main::@6->main::@3#2] -- register_copy 
    // [13] phi (byte) c1A#14 = (byte) c1A#4 [phi:main::@6->main::@3#3] -- register_copy 
    jmp b4
}
  // doplasma
// Render plasma to the passed screen
// doplasma(byte* zeropage($e) screen)
doplasma: {
    .label c1a = 8
    .label c1b = 9
    .label i = $a
    .label c2a = $b
    .label c2b = $c
    .label i1 = $d
    .label screen = $e
    // c1a = c1A
    // [22] (byte) doplasma::c1a#0 ← (byte) c1A#10 -- vbuz1=vbuz2 
    lda c1A
    sta c1a
    // c1b = c1B
    // [23] (byte) doplasma::c1b#0 ← (byte) c1B#10 -- vbuz1=vbuz2 
    lda c1B
    sta c1b
    // [24] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
    // [24] phi (byte) doplasma::i#2 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta i
    // [24] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#0 [phi:doplasma->doplasma::@1#1] -- register_copy 
    // [24] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#0 [phi:doplasma->doplasma::@1#2] -- register_copy 
    // [24] phi from doplasma::@1 to doplasma::@1 [phi:doplasma::@1->doplasma::@1]
    // [24] phi (byte) doplasma::i#2 = (byte) doplasma::i#1 [phi:doplasma::@1->doplasma::@1#0] -- register_copy 
    // [24] phi (byte) doplasma::c1b#2 = (byte) doplasma::c1b#1 [phi:doplasma::@1->doplasma::@1#1] -- register_copy 
    // [24] phi (byte) doplasma::c1a#2 = (byte) doplasma::c1a#1 [phi:doplasma::@1->doplasma::@1#2] -- register_copy 
    // doplasma::@1
  b1:
    // SINTABLE[c1a] + SINTABLE[c1b]
    // [25] (byte~) doplasma::$0 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
    ldy c1a
    lda SINTABLE,y
    ldy c1b
    clc
    adc SINTABLE,y
    // ybuf[i] = (SINTABLE[c1a] + SINTABLE[c1b])
    // [26] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$0 -- pbuc1_derefidx_vbuz1=vbuaa 
    ldy i
    sta ybuf,y
    // c1a += 4
    // [27] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1 
    lax c1a
    axs #-[4]
    stx c1a
    // c1b += 9
    // [28] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1 
    lax c1b
    axs #-[9]
    stx c1b
    // for (char i = 0; i < 25; ++i)
    // [29] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 -- vbuz1=_inc_vbuz1 
    inc i
    // [30] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@1 -- vbuz1_lt_vbuc1_then_la1 
    lda i
    cmp #$19
    bcc b1
    // doplasma::@2
    // c1A += 3
    // [31] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax c1A
    axs #-[3]
    stx c1A
    // c1B -= 5
    // [32] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 -- vbuz1=vbuz1_minus_vbuc1 
    lax c1B
    axs #5
    stx c1B
    // c2a = c2A
    // [33] (byte) doplasma::c2a#0 ← (byte) c2A#24 -- vbuz1=vbuz2 
    lda c2A
    sta c2a
    // c2b = c2B
    // [34] (byte) doplasma::c2b#0 ← (byte) c2B#24 -- vbuz1=vbuz2 
    lda c2B
    sta c2b
    // [35] phi from doplasma::@2 to doplasma::@3 [phi:doplasma::@2->doplasma::@3]
    // [35] phi (byte) doplasma::i1#2 = (byte) 0 [phi:doplasma::@2->doplasma::@3#0] -- vbuz1=vbuc1 
    lda #0
    sta i1
    // [35] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#0 [phi:doplasma::@2->doplasma::@3#1] -- register_copy 
    // [35] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#0 [phi:doplasma::@2->doplasma::@3#2] -- register_copy 
    // [35] phi from doplasma::@3 to doplasma::@3 [phi:doplasma::@3->doplasma::@3]
    // [35] phi (byte) doplasma::i1#2 = (byte) doplasma::i1#1 [phi:doplasma::@3->doplasma::@3#0] -- register_copy 
    // [35] phi (byte) doplasma::c2b#2 = (byte) doplasma::c2b#1 [phi:doplasma::@3->doplasma::@3#1] -- register_copy 
    // [35] phi (byte) doplasma::c2a#2 = (byte) doplasma::c2a#1 [phi:doplasma::@3->doplasma::@3#2] -- register_copy 
    // doplasma::@3
  b3:
    // SINTABLE[c2a] + SINTABLE[c2b]
    // [36] (byte~) doplasma::$2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 
    ldy c2a
    lda SINTABLE,y
    ldy c2b
    clc
    adc SINTABLE,y
    // xbuf[i] = (SINTABLE[c2a] + SINTABLE[c2b])
    // [37] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$2 -- pbuc1_derefidx_vbuz1=vbuaa 
    ldy i1
    sta xbuf,y
    // c2a += 3
    // [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 
    lax c2a
    axs #-[3]
    stx c2a
    // c2b += 7
    // [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1 
    lax c2b
    axs #-[7]
    stx c2b
    // for (char i = 0; i < 40; ++i)
    // [40] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 -- vbuz1=_inc_vbuz1 
    inc i1
    // [41] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda i1
    cmp #$28
    bcc b3
    // doplasma::@4
    // c2A += 2
    // [42] (byte) c2A#4 ← (byte) c2A#24 + (byte) 2 -- vbuz1=vbuz1_plus_2 
    lda c2A
    clc
    adc #2
    sta c2A
    // c2B -= 3
    // [43] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 -- vbuz1=vbuz1_minus_vbuc1 
    lax c2B
    axs #3
    stx c2B
    // [44] phi from doplasma::@4 to doplasma::@5 [phi:doplasma::@4->doplasma::@5]
    // [44] phi (byte*) doplasma::screen#5 = (byte*) doplasma::screen#10 [phi:doplasma::@4->doplasma::@5#0] -- register_copy 
    // [44] phi (byte) doplasma::ii#4 = (byte) 0 [phi:doplasma::@4->doplasma::@5#1] -- vbuxx=vbuc1 
    ldx #0
    // [44] phi from doplasma::@7 to doplasma::@5 [phi:doplasma::@7->doplasma::@5]
    // [44] phi (byte*) doplasma::screen#5 = (byte*) doplasma::screen#2 [phi:doplasma::@7->doplasma::@5#0] -- register_copy 
    // [44] phi (byte) doplasma::ii#4 = (byte) doplasma::ii#1 [phi:doplasma::@7->doplasma::@5#1] -- register_copy 
    // doplasma::@5
  b5:
    // [45] phi from doplasma::@5 to doplasma::@6 [phi:doplasma::@5->doplasma::@6]
    // [45] phi (byte) doplasma::i2#2 = (byte) 0 [phi:doplasma::@5->doplasma::@6#0] -- vbuyy=vbuc1 
    ldy #0
    // [45] phi from doplasma::@6 to doplasma::@6 [phi:doplasma::@6->doplasma::@6]
    // [45] phi (byte) doplasma::i2#2 = (byte) doplasma::i2#1 [phi:doplasma::@6->doplasma::@6#0] -- register_copy 
    // doplasma::@6
  b6:
    // xbuf[i] + ybuf[ii]
    // [46] (byte~) doplasma::$4 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#4) -- vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx 
    lda xbuf,y
    clc
    adc ybuf,x
    // screen[i] = (xbuf[i] + ybuf[ii])
    // [47] *((byte*) doplasma::screen#5 + (byte) doplasma::i2#2) ← (byte~) doplasma::$4 -- pbuz1_derefidx_vbuyy=vbuaa 
    sta (screen),y
    // for (char i = 0; i < 40; ++i)
    // [48] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 -- vbuyy=_inc_vbuyy 
    iny
    // [49] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@6 -- vbuyy_lt_vbuc1_then_la1 
    cpy #$28
    bcc b6
    // doplasma::@7
    // screen += 40
    // [50] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc screen
    sta screen
    bcc !+
    inc screen+1
  !:
    // for (char ii = 0; ii < 25; ++ii)
    // [51] (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#4 -- vbuxx=_inc_vbuxx 
    inx
    // [52] if((byte) doplasma::ii#1<(byte) $19) goto doplasma::@5 -- vbuxx_lt_vbuc1_then_la1 
    cpx #$19
    bcc b5
    // doplasma::@return
    // }
    // [53] return 
    rts
    xbuf: .fill $28, 0
    ybuf: .fill $19, 0
}
  // makecharset
// Make a plasma-friendly charset where the chars are randomly filled
makecharset: {
    .label _4 = $18
    .label _8 = $19
    .label _9 = $19
    .label s = $17
    .label i = $14
    .label c = $10
    .label _16 = $19
    // sid_rnd_init()
    // [55] call sid_rnd_init 
    jsr sid_rnd_init
    // [56] phi from makecharset to makecharset::@10 [phi:makecharset->makecharset::@10]
    // makecharset::@10
    // print_cls()
    // [57] call print_cls 
    // [91] phi from makecharset::@10 to print_cls [phi:makecharset::@10->print_cls]
    jsr print_cls
    // [58] phi from makecharset::@10 to makecharset::@1 [phi:makecharset::@10->makecharset::@1]
    // [58] phi (byte*) print_char_cursor#46 = (const byte*) print_line_cursor#0 [phi:makecharset::@10->makecharset::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta print_char_cursor
    lda #>print_line_cursor
    sta print_char_cursor+1
    // [58] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@10->makecharset::@1#1] -- vwuz1=vbuc1 
    lda #<0
    sta c
    sta c+1
    // [58] phi from makecharset::@9 to makecharset::@1 [phi:makecharset::@9->makecharset::@1]
    // [58] phi (byte*) print_char_cursor#46 = (byte*) print_char_cursor#18 [phi:makecharset::@9->makecharset::@1#0] -- register_copy 
    // [58] phi (word) makecharset::c#2 = (word) makecharset::c#1 [phi:makecharset::@9->makecharset::@1#1] -- register_copy 
    // makecharset::@1
  b1:
    // <c
    // [59] (byte~) makecharset::$2 ← < (word) makecharset::c#2 -- vbuaa=_lo_vwuz1 
    lda c
    // s = SINTABLE[<c]
    // [60] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$2) -- vbuz1=pbuc1_derefidx_vbuaa 
    tay
    lda SINTABLE,y
    sta s
    // [61] phi from makecharset::@1 to makecharset::@2 [phi:makecharset::@1->makecharset::@2]
    // [61] phi (byte) makecharset::i#7 = (byte) 0 [phi:makecharset::@1->makecharset::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta i
    // [61] phi from makecharset::@6 to makecharset::@2 [phi:makecharset::@6->makecharset::@2]
    // [61] phi (byte) makecharset::i#7 = (byte) makecharset::i#1 [phi:makecharset::@6->makecharset::@2#0] -- register_copy 
    // makecharset::@2
  b2:
    // [62] phi from makecharset::@2 to makecharset::@3 [phi:makecharset::@2->makecharset::@3]
    // [62] phi (byte) makecharset::b#2 = (byte) 0 [phi:makecharset::@2->makecharset::@3#0] -- vbuyy=vbuc1 
    ldy #0
    // [62] phi (byte) makecharset::ii#2 = (byte) 0 [phi:makecharset::@2->makecharset::@3#1] -- vbuxx=vbuc1 
    ldx #0
    // [62] phi from makecharset::@4 to makecharset::@3 [phi:makecharset::@4->makecharset::@3]
    // [62] phi (byte) makecharset::b#2 = (byte) makecharset::b#3 [phi:makecharset::@4->makecharset::@3#0] -- register_copy 
    // [62] phi (byte) makecharset::ii#2 = (byte) makecharset::ii#1 [phi:makecharset::@4->makecharset::@3#1] -- register_copy 
    // makecharset::@3
  b3:
    // sid_rnd()
    // [63] call sid_rnd 
    jsr sid_rnd
    // [64] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
    // makecharset::@11
    // [65] (byte~) makecharset::$3 ← (byte) sid_rnd::return#2
    // sid_rnd() & 0xFF
    // [66] (byte~) makecharset::$4 ← (byte~) makecharset::$3 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1 
    and #$ff
    sta _4
    // if ((sid_rnd() & 0xFF) > s)
    // [67] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4 -- vbuz1_le_vbuz2_then_la1 
    lda s
    cmp _4
    bcs b4
    // makecharset::@5
    // b |= bittab[ii]
    // [68] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx 
    tya
    ora bittab,x
    tay
    // [69] phi from makecharset::@11 makecharset::@5 to makecharset::@4 [phi:makecharset::@11/makecharset::@5->makecharset::@4]
    // [69] phi (byte) makecharset::b#3 = (byte) makecharset::b#2 [phi:makecharset::@11/makecharset::@5->makecharset::@4#0] -- register_copy 
    // makecharset::@4
  b4:
    // for (char ii = 0; ii < 8; ++ii)
    // [70] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 -- vbuxx=_inc_vbuxx 
    inx
    // [71] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@3 -- vbuxx_lt_vbuc1_then_la1 
    cpx #8
    bcc b3
    // makecharset::@6
    // c*8
    // [72] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte) 3 -- vwuz1=vwuz2_rol_3 
    lda c
    asl
    sta _8
    lda c+1
    rol
    sta _8+1
    asl _8
    rol _8+1
    asl _8
    rol _8+1
    // (c*8) + i
    // [73] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7 -- vwuz1=vwuz1_plus_vbuz2 
    lda i
    clc
    adc _9
    sta _9
    bcc !+
    inc _9+1
  !:
    // charset[(c*8) + i] = b
    // [74] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$9 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda _16
    adc #<CHARSET
    sta _16
    lda _16+1
    adc #>CHARSET
    sta _16+1
    // [75] *((byte*~) makecharset::$16) ← (byte) makecharset::b#3 -- _deref_pbuz1=vbuyy 
    tya
    ldy #0
    sta (_16),y
    // for ( char i = 0; i < 8; ++i)
    // [76] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#7 -- vbuz1=_inc_vbuz1 
    inc i
    // [77] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@2 -- vbuz1_lt_vbuc1_then_la1 
    lda i
    cmp #8
    bcc b2
    // makecharset::@7
    // c & 0x07
    // [78] (byte~) makecharset::$11 ← (word) makecharset::c#2 & (byte) 7 -- vbuaa=vwuz1_band_vbuc1 
    lda c
    and #7
    // if ((c & 0x07) == 0)
    // [79] if((byte~) makecharset::$11!=(byte) 0) goto makecharset::@9 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne b9
    // [80] phi from makecharset::@7 to makecharset::@8 [phi:makecharset::@7->makecharset::@8]
    // makecharset::@8
    // print_char('.')
    // [81] call print_char 
    jsr print_char
    // [82] phi from makecharset::@7 makecharset::@8 to makecharset::@9 [phi:makecharset::@7/makecharset::@8->makecharset::@9]
    // [82] phi (byte*) print_char_cursor#18 = (byte*) print_char_cursor#46 [phi:makecharset::@7/makecharset::@8->makecharset::@9#0] -- register_copy 
    // makecharset::@9
  b9:
    // for (unsigned int c = 0; c < 0x100; ++c)
    // [83] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 -- vwuz1=_inc_vwuz1 
    inc c
    bne !+
    inc c+1
  !:
    // [84] if((word) makecharset::c#1<(word) $100) goto makecharset::@1 -- vwuz1_lt_vwuc1_then_la1 
    lda c+1
    cmp #>$100
    bcc b1
    bne !+
    lda c
    cmp #<$100
    bcc b1
  !:
    // makecharset::@return
    // }
    // [85] 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
    // [86] *((byte*) print_char_cursor#46) ← (const byte) print_char::ch#0 -- _deref_pbuz1=vbuc1 
    lda #ch
    ldy #0
    sta (print_char_cursor),y
    // *(print_char_cursor++) = ch;
    // [87] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#46 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
    // print_char::@return
    // }
    // [88] 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;
    // [89] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1 
    lda SID_VOICE3_OSC
    // sid_rnd::@return
    // }
    // [90] return 
    rts
}
  // print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    // memset(print_screen, ' ', 1000)
    // [92] call memset 
    // [94] phi from print_cls to memset [phi:print_cls->memset]
    jsr memset
    // print_cls::@return
    // }
    // [93] 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 = $15
    // [95] phi from memset to memset::@1 [phi:memset->memset::@1]
    // [95] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 
    lda #<str
    sta dst
    lda #>str
    sta dst+1
    // [95] phi from memset::@1 to memset::@1 [phi:memset::@1->memset::@1]
    // [95] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@1->memset::@1#0] -- register_copy 
    // memset::@1
  b1:
    // *dst = c
    // [96] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 
    lda #c
    ldy #0
    sta (dst),y
    // for(char* dst = str; dst!=end; dst++)
    // [97] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc dst
    bne !+
    inc dst+1
  !:
    // [98] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda dst+1
    cmp #>end
    bne b1
    lda dst
    cmp #<end
    bne b1
    // memset::@return
    // }
    // [99] return 
    rts
}
  // sid_rnd_init
// Initialize SID voice 3 for random number generation
sid_rnd_init: {
    // *SID_VOICE3_FREQ = $ffff
    // [100] *((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
    // [101] *((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
    // }
    // [102] return 
    rts
}
  // File Data
  .align $100
SINTABLE:
.for(var i=0;i<$100;i++)
        .byte round(127.5+127.5*sin(2*PI*i/256))


