1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-08-07 22:25:13 +00:00
Files
kickc/src/test/ref/millfork-benchmarks/plasma-kc.log

4741 lines
214 KiB
Plaintext

Resolved forward reference rand_seed to (word) rand_seed
Setting inferred volatile on symbol affected by address-of (word) last_time
Setting inferred volatile on symbol affected by address-of (word) rand_seed
Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6
Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1
Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1
Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) strlen::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean condition (word) main::count
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Culled Empty Block (label) @14
Culled Empty Block (label) @15
Culled Empty Block (label) @16
Culled Empty Block (label) @17
Culled Empty Block (label) @18
Culled Empty Block (label) @19
Culled Empty Block (label) @20
Culled Empty Block (label) @21
Culled Empty Block (label) @22
Culled Empty Block (label) @23
Culled Empty Block (label) @24
Culled Empty Block (label) @25
Culled Empty Block (label) @26
Culled Empty Block (label) @27
Culled Empty Block (label) @28
Culled Empty Block (label) @29
Culled Empty Block (label) @30
Culled Empty Block (label) @31
Culled Empty Block (label) @32
Culled Empty Block (label) @33
Culled Empty Block (label) @34
Culled Empty Block (label) @35
Culled Empty Block (label) @36
Culled Empty Block (label) @37
Culled Empty Block (label) @38
Culled Empty Block (label) @39
Culled Empty Block (label) @40
Culled Empty Block (label) @41
Culled Empty Block (label) @42
Culled Empty Block (label) @44
Culled Empty Block (label) rand::@1
Culled Empty Block (label) @46
Culled Empty Block (label) doplasma::@4
Culled Empty Block (label) doplasma::@5
Culled Empty Block (label) doplasma::@6
Culled Empty Block (label) doplasma::@10
Culled Empty Block (label) doplasma::@11
Culled Empty Block (label) doplasma::@12
Culled Empty Block (label) doplasma::@23
Culled Empty Block (label) doplasma::@15
Culled Empty Block (label) doplasma::@24
Culled Empty Block (label) doplasma::@19
Culled Empty Block (label) doplasma::@20
Culled Empty Block (label) doplasma::@21
Culled Empty Block (label) doplasma::@22
Culled Empty Block (label) @47
Culled Empty Block (label) makechar::@19
Culled Empty Block (label) makechar::@3
Culled Empty Block (label) makechar::@20
Culled Empty Block (label) makechar::@16
Culled Empty Block (label) makechar::@17
Culled Empty Block (label) makechar::@11
Culled Empty Block (label) makechar::@12
Culled Empty Block (label) makechar::@14
Culled Empty Block (label) makechar::@15
Culled Empty Block (label) makechar::@18
Culled Empty Block (label) @48
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@7
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@13
@13: scope:[] from @begin
(byte*) print_screen#0 ← (byte*)(number) $400
(byte*) print_line_cursor#0 ← (byte*) print_screen#0
(byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0
to:@43
(void()) print_ln()
print_ln: scope:[print_ln] from end::@2
(byte*) print_char_cursor#33 ← phi( end::@2/(byte*) print_char_cursor#11 )
(byte*) print_line_cursor#16 ← phi( end::@2/(byte*) print_line_cursor#17 )
to:print_ln::@1
print_ln::@1: scope:[print_ln] from print_ln print_ln::@1
(byte*) print_char_cursor#17 ← phi( print_ln/(byte*) print_char_cursor#33 print_ln::@1/(byte*) print_char_cursor#17 )
(byte*) print_line_cursor#8 ← phi( print_ln/(byte*) print_line_cursor#16 print_ln::@1/(byte*) print_line_cursor#1 )
(byte*~) print_ln::$0 ← (byte*) print_line_cursor#8 + (number) $28
(byte*) print_line_cursor#1 ← (byte*~) print_ln::$0
(bool~) print_ln::$1 ← (byte*) print_line_cursor#1 < (byte*) print_char_cursor#17
if((bool~) print_ln::$1) goto print_ln::@1
to:print_ln::@2
print_ln::@2: scope:[print_ln] from print_ln::@1
(byte*) print_line_cursor#9 ← phi( print_ln::@1/(byte*) print_line_cursor#1 )
(byte*) print_char_cursor#1 ← (byte*) print_line_cursor#9
to:print_ln::@return
print_ln::@return: scope:[print_ln] from print_ln::@2
(byte*) print_char_cursor#18 ← phi( print_ln::@2/(byte*) print_char_cursor#1 )
(byte*) print_line_cursor#10 ← phi( print_ln::@2/(byte*) print_line_cursor#9 )
(byte*) print_line_cursor#2 ← (byte*) print_line_cursor#10
(byte*) print_char_cursor#2 ← (byte*) print_char_cursor#18
return
to:@return
(void()) print_word((word) print_word::w)
print_word: scope:[print_word] from end::@1
(byte*) print_char_cursor#34 ← phi( end::@1/(byte*) print_char_cursor#36 )
(word) print_word::w#1 ← phi( end::@1/(word) print_word::w#0 )
(byte~) print_word::$0 ← > (word) print_word::w#1
(byte) print_byte::b#0 ← (byte~) print_word::$0
call print_byte
to:print_word::@1
print_word::@1: scope:[print_word] from print_word
(word) print_word::w#2 ← phi( print_word/(word) print_word::w#1 )
(byte*) print_char_cursor#19 ← phi( print_word/(byte*) print_char_cursor#8 )
(byte*) print_char_cursor#3 ← (byte*) print_char_cursor#19
(byte~) print_word::$2 ← < (word) print_word::w#2
(byte) print_byte::b#1 ← (byte~) print_word::$2
call print_byte
to:print_word::@2
print_word::@2: scope:[print_word] from print_word::@1
(byte*) print_char_cursor#20 ← phi( print_word::@1/(byte*) print_char_cursor#8 )
(byte*) print_char_cursor#4 ← (byte*) print_char_cursor#20
to:print_word::@return
print_word::@return: scope:[print_word] from print_word::@2
(byte*) print_char_cursor#21 ← phi( print_word::@2/(byte*) print_char_cursor#4 )
(byte*) print_char_cursor#5 ← (byte*) print_char_cursor#21
return
to:@return
(void()) print_byte((byte) print_byte::b)
print_byte: scope:[print_byte] from print_word print_word::@1
(byte*) print_char_cursor#35 ← phi( print_word/(byte*) print_char_cursor#34 print_word::@1/(byte*) print_char_cursor#3 )
(byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
(byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (number) 4
(byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0)
call print_char
to:print_byte::@1
print_byte::@1: scope:[print_byte] from print_byte
(byte) print_byte::b#3 ← phi( print_byte/(byte) print_byte::b#2 )
(byte*) print_char_cursor#22 ← phi( print_byte/(byte*) print_char_cursor#10 )
(byte*) print_char_cursor#6 ← (byte*) print_char_cursor#22
(number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f
(byte) print_char::ch#1 ← *((const byte*) print_hextab + (number~) print_byte::$2)
call print_char
to:print_byte::@2
print_byte::@2: scope:[print_byte] from print_byte::@1
(byte*) print_char_cursor#23 ← phi( print_byte::@1/(byte*) print_char_cursor#10 )
(byte*) print_char_cursor#7 ← (byte*) print_char_cursor#23
to:print_byte::@return
print_byte::@return: scope:[print_byte] from print_byte::@2
(byte*) print_char_cursor#24 ← phi( print_byte::@2/(byte*) print_char_cursor#7 )
(byte*) print_char_cursor#8 ← (byte*) print_char_cursor#24
return
to:@return
(void()) print_char((byte) print_char::ch)
print_char: scope:[print_char] from print_byte print_byte::@1
(byte*) print_char_cursor#25 ← phi( print_byte/(byte*) print_char_cursor#35 print_byte::@1/(byte*) print_char_cursor#6 )
(byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 )
*((byte*) print_char_cursor#25) ← (byte) print_char::ch#2
(byte*) print_char_cursor#9 ← ++ (byte*) print_char_cursor#25
to:print_char::@return
print_char::@return: scope:[print_char] from print_char
(byte*) print_char_cursor#26 ← phi( print_char/(byte*) print_char_cursor#9 )
(byte*) print_char_cursor#10 ← (byte*) print_char_cursor#26
return
to:@return
@43: scope:[] from @13
(byte*) print_line_cursor#24 ← phi( @13/(byte*) print_line_cursor#0 )
(byte*) print_char_cursor#42 ← phi( @13/(byte*) print_char_cursor#0 )
(word) last_time ← (word) 0
(word) Ticks#0 ← (word) 0
to:@45
(void()) start()
start: scope:[start] from end main::@8
asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1 }
(word) rand_seed ← (number) $194a
to:start::@return
start::@return: scope:[start] from start
return
to:@return
(void()) end()
end: scope:[end] from main::@3
(byte*) print_line_cursor#23 ← phi( main::@3/(byte*) print_line_cursor#18 )
(byte*) print_char_cursor#39 ← phi( main::@3/(byte*) print_char_cursor#37 )
(word) Ticks#1 ← (word) last_time
call start
to:end::@1
end::@1: scope:[end] from end
(byte*) print_line_cursor#20 ← phi( end/(byte*) print_line_cursor#23 )
(byte*) print_char_cursor#36 ← phi( end/(byte*) print_char_cursor#39 )
(word) Ticks#7 ← phi( end/(word) Ticks#1 )
(word) last_time ← (word) last_time - (word) Ticks#7
(word) Ticks#2 ← (word) last_time
(word) print_word::w#0 ← (word) Ticks#2
call print_word
to:end::@2
end::@2: scope:[end] from end::@1
(word) Ticks#15 ← phi( end::@1/(word) Ticks#2 )
(byte*) print_line_cursor#17 ← phi( end::@1/(byte*) print_line_cursor#20 )
(byte*) print_char_cursor#27 ← phi( end::@1/(byte*) print_char_cursor#5 )
(byte*) print_char_cursor#11 ← (byte*) print_char_cursor#27
call print_ln
to:end::@3
end::@3: scope:[end] from end::@2
(word) Ticks#12 ← phi( end::@2/(word) Ticks#15 )
(byte*) print_char_cursor#28 ← phi( end::@2/(byte*) print_char_cursor#2 )
(byte*) print_line_cursor#11 ← phi( end::@2/(byte*) print_line_cursor#2 )
(byte*) print_line_cursor#3 ← (byte*) print_line_cursor#11
(byte*) print_char_cursor#12 ← (byte*) print_char_cursor#28
to:end::@return
end::@return: scope:[end] from end::@3
(byte*) print_line_cursor#12 ← phi( end::@3/(byte*) print_line_cursor#3 )
(byte*) print_char_cursor#29 ← phi( end::@3/(byte*) print_char_cursor#12 )
(word) Ticks#8 ← phi( end::@3/(word) Ticks#12 )
(word) Ticks#3 ← (word) Ticks#8
(byte*) print_char_cursor#13 ← (byte*) print_char_cursor#29
(byte*) print_line_cursor#4 ← (byte*) print_line_cursor#12
return
to:@return
@45: scope:[] from @43
(byte*) print_line_cursor#22 ← phi( @43/(byte*) print_line_cursor#24 )
(byte*) print_char_cursor#41 ← phi( @43/(byte*) print_char_cursor#42 )
(word) Ticks#17 ← phi( @43/(word) Ticks#0 )
(word) rand_seed ← (word) 0
to:@49
(byte()) rand()
rand: scope:[rand] from makechar::@8
asm { ldx#8 ldaRAND_SEED+0 __rand_loop: asl rolRAND_SEED+1 bcc__no_eor eor#$2D __no_eor: dex bne__rand_loop staRAND_SEED+0 }
(byte~) rand::$0 ← ((byte)) (word) rand_seed
(byte) rand::return#0 ← (byte~) rand::$0
to:rand::@return
rand::@return: scope:[rand] from rand
(byte) rand::return#3 ← phi( rand/(byte) rand::return#0 )
(byte) rand::return#1 ← (byte) rand::return#3
return
to:@return
(void()) doplasma((byte*) doplasma::scrn)
doplasma: scope:[doplasma] from main::@10 main::@2
(byte*) doplasma::scrn#13 ← phi( main::@10/(byte*) doplasma::scrn#2 main::@2/(byte*) doplasma::scrn#1 )
(byte) doplasma::c1a#0 ← (byte) 0
(byte) doplasma::c1b#0 ← (byte) 0
(byte) doplasma::c2a#0 ← (byte) 0
(byte) doplasma::c2b#0 ← (byte) 0
(byte) doplasma::c1A#0 ← (byte) 0
(byte) doplasma::c1B#0 ← (byte) 0
(byte) doplasma::c2A#0 ← (byte) 0
(byte) doplasma::c2B#0 ← (byte) 0
(byte) doplasma::i#0 ← (byte) 0
(byte) doplasma::ii#0 ← (byte) 0
(byte) doplasma::j#0 ← (byte) 0
(byte) doplasma::jj#0 ← (byte) 0
(byte) doplasma::c1a#1 ← (byte) doplasma::c1A#0
(byte) doplasma::c1b#1 ← (byte) doplasma::c1B#0
(byte) doplasma::ii#1 ← (number) 0
to:doplasma::@1
doplasma::@1: scope:[doplasma] from doplasma doplasma::@2
(byte*) doplasma::scrn#12 ← phi( doplasma/(byte*) doplasma::scrn#13 doplasma::@2/(byte*) doplasma::scrn#14 )
(byte) doplasma::c2B#4 ← phi( doplasma/(byte) doplasma::c2B#0 doplasma::@2/(byte) doplasma::c2B#6 )
(byte) doplasma::c2A#4 ← phi( doplasma/(byte) doplasma::c2A#0 doplasma::@2/(byte) doplasma::c2A#6 )
(byte) doplasma::c1B#3 ← phi( doplasma/(byte) doplasma::c1B#0 doplasma::@2/(byte) doplasma::c1B#4 )
(byte) doplasma::c1A#3 ← phi( doplasma/(byte) doplasma::c1A#0 doplasma::@2/(byte) doplasma::c1A#4 )
(byte) doplasma::c1b#4 ← phi( doplasma/(byte) doplasma::c1b#1 doplasma::@2/(byte) doplasma::c1b#2 )
(byte) doplasma::c1a#4 ← phi( doplasma/(byte) doplasma::c1a#1 doplasma::@2/(byte) doplasma::c1a#2 )
(byte) doplasma::ii#3 ← phi( doplasma/(byte) doplasma::ii#1 doplasma::@2/(byte) doplasma::ii#2 )
(bool~) doplasma::$0 ← (byte) doplasma::ii#3 < (number) $19
if((bool~) doplasma::$0) goto doplasma::@2
to:doplasma::@3
doplasma::@2: scope:[doplasma] from doplasma::@1
(byte*) doplasma::scrn#14 ← phi( doplasma::@1/(byte*) doplasma::scrn#12 )
(byte) doplasma::c2B#6 ← phi( doplasma::@1/(byte) doplasma::c2B#4 )
(byte) doplasma::c2A#6 ← phi( doplasma::@1/(byte) doplasma::c2A#4 )
(byte) doplasma::c1B#4 ← phi( doplasma::@1/(byte) doplasma::c1B#3 )
(byte) doplasma::c1A#4 ← phi( doplasma::@1/(byte) doplasma::c1A#3 )
(byte) doplasma::ii#4 ← phi( doplasma::@1/(byte) doplasma::ii#3 )
(byte) doplasma::c1b#3 ← phi( doplasma::@1/(byte) doplasma::c1b#4 )
(byte) doplasma::c1a#3 ← phi( doplasma::@1/(byte) doplasma::c1a#4 )
(byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3)
*((const byte*) ybuf + (byte) doplasma::ii#4) ← (byte~) doplasma::$1
(byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (number) 4
(byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (number) 9
(byte) doplasma::ii#2 ← ++ (byte) doplasma::ii#4
to:doplasma::@1
doplasma::@3: scope:[doplasma] from doplasma::@1
(byte*) doplasma::scrn#10 ← phi( doplasma::@1/(byte*) doplasma::scrn#12 )
(byte) doplasma::c2B#2 ← phi( doplasma::@1/(byte) doplasma::c2B#4 )
(byte) doplasma::c2A#2 ← phi( doplasma::@1/(byte) doplasma::c2A#4 )
(byte) doplasma::c1B#2 ← phi( doplasma::@1/(byte) doplasma::c1B#3 )
(byte) doplasma::c1A#2 ← phi( doplasma::@1/(byte) doplasma::c1A#3 )
(byte) doplasma::c1A#1 ← (byte) doplasma::c1A#2 + (number) 3
(byte) doplasma::c1B#1 ← (byte) doplasma::c1B#2 - (number) 5
(byte) doplasma::c2a#1 ← (byte) doplasma::c2A#2
(byte) doplasma::c2b#1 ← (byte) doplasma::c2B#2
(byte) doplasma::i#1 ← (number) 0
to:doplasma::@7
doplasma::@7: scope:[doplasma] from doplasma::@3 doplasma::@8
(byte*) doplasma::scrn#9 ← phi( doplasma::@3/(byte*) doplasma::scrn#10 doplasma::@8/(byte*) doplasma::scrn#11 )
(byte) doplasma::c2B#5 ← phi( doplasma::@3/(byte) doplasma::c2B#2 doplasma::@8/(byte) doplasma::c2B#7 )
(byte) doplasma::c2A#5 ← phi( doplasma::@3/(byte) doplasma::c2A#2 doplasma::@8/(byte) doplasma::c2A#7 )
(byte) doplasma::c2b#4 ← phi( doplasma::@3/(byte) doplasma::c2b#1 doplasma::@8/(byte) doplasma::c2b#2 )
(byte) doplasma::c2a#4 ← phi( doplasma::@3/(byte) doplasma::c2a#1 doplasma::@8/(byte) doplasma::c2a#2 )
(byte) doplasma::i#3 ← phi( doplasma::@3/(byte) doplasma::i#1 doplasma::@8/(byte) doplasma::i#2 )
(bool~) doplasma::$2 ← (byte) doplasma::i#3 < (number) $28
if((bool~) doplasma::$2) goto doplasma::@8
to:doplasma::@9
doplasma::@8: scope:[doplasma] from doplasma::@7
(byte*) doplasma::scrn#11 ← phi( doplasma::@7/(byte*) doplasma::scrn#9 )
(byte) doplasma::c2B#7 ← phi( doplasma::@7/(byte) doplasma::c2B#5 )
(byte) doplasma::c2A#7 ← phi( doplasma::@7/(byte) doplasma::c2A#5 )
(byte) doplasma::i#4 ← phi( doplasma::@7/(byte) doplasma::i#3 )
(byte) doplasma::c2b#3 ← phi( doplasma::@7/(byte) doplasma::c2b#4 )
(byte) doplasma::c2a#3 ← phi( doplasma::@7/(byte) doplasma::c2a#4 )
(byte~) doplasma::$3 ← *((const byte*) sinustable + (byte) doplasma::c2a#3) + *((const byte*) sinustable + (byte) doplasma::c2b#3)
*((const byte*) xbuf + (byte) doplasma::i#4) ← (byte~) doplasma::$3
(byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (number) 3
(byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (number) 7
(byte) doplasma::i#2 ← ++ (byte) doplasma::i#4
to:doplasma::@7
doplasma::@9: scope:[doplasma] from doplasma::@7
(byte*) doplasma::scrn#8 ← phi( doplasma::@7/(byte*) doplasma::scrn#9 )
(byte) doplasma::c2B#3 ← phi( doplasma::@7/(byte) doplasma::c2B#5 )
(byte) doplasma::c2A#3 ← phi( doplasma::@7/(byte) doplasma::c2A#5 )
(byte) doplasma::c2A#1 ← (byte) doplasma::c2A#3 + (number) 2
(byte) doplasma::c2B#1 ← (byte) doplasma::c2B#3 - (number) 3
(byte) doplasma::jj#1 ← (number) 0
to:doplasma::@13
doplasma::@13: scope:[doplasma] from doplasma::@18 doplasma::@9
(byte*) doplasma::scrn#7 ← phi( doplasma::@18/(byte*) doplasma::scrn#0 doplasma::@9/(byte*) doplasma::scrn#8 )
(byte) doplasma::jj#3 ← phi( doplasma::@18/(byte) doplasma::jj#2 doplasma::@9/(byte) doplasma::jj#1 )
(bool~) doplasma::$4 ← (byte) doplasma::jj#3 < (number) $19
if((bool~) doplasma::$4) goto doplasma::@14
to:doplasma::@return
doplasma::@14: scope:[doplasma] from doplasma::@13
(byte*) doplasma::scrn#6 ← phi( doplasma::@13/(byte*) doplasma::scrn#7 )
(byte) doplasma::jj#7 ← phi( doplasma::@13/(byte) doplasma::jj#3 )
(byte) doplasma::j#1 ← (number) 0
to:doplasma::@16
doplasma::@16: scope:[doplasma] from doplasma::@14 doplasma::@17
(byte*) doplasma::scrn#5 ← phi( doplasma::@14/(byte*) doplasma::scrn#6 doplasma::@17/(byte*) doplasma::scrn#3 )
(byte) doplasma::jj#6 ← phi( doplasma::@14/(byte) doplasma::jj#7 doplasma::@17/(byte) doplasma::jj#4 )
(byte) doplasma::j#3 ← phi( doplasma::@14/(byte) doplasma::j#1 doplasma::@17/(byte) doplasma::j#2 )
(bool~) doplasma::$5 ← (byte) doplasma::j#3 < (number) $28
if((bool~) doplasma::$5) goto doplasma::@17
to:doplasma::@18
doplasma::@17: scope:[doplasma] from doplasma::@16
(byte*) doplasma::scrn#3 ← phi( doplasma::@16/(byte*) doplasma::scrn#5 )
(byte) doplasma::jj#4 ← phi( doplasma::@16/(byte) doplasma::jj#6 )
(byte) doplasma::j#4 ← phi( doplasma::@16/(byte) doplasma::j#3 )
(byte~) doplasma::$6 ← *((const byte*) xbuf + (byte) doplasma::j#4) + *((const byte*) ybuf + (byte) doplasma::jj#4)
*((byte*) doplasma::scrn#3 + (byte) doplasma::j#4) ← (byte~) doplasma::$6
(byte) doplasma::j#2 ← ++ (byte) doplasma::j#4
to:doplasma::@16
doplasma::@18: scope:[doplasma] from doplasma::@16
(byte) doplasma::jj#5 ← phi( doplasma::@16/(byte) doplasma::jj#6 )
(byte*) doplasma::scrn#4 ← phi( doplasma::@16/(byte*) doplasma::scrn#5 )
(byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#4 + (number) $28
(byte) doplasma::jj#2 ← ++ (byte) doplasma::jj#5
to:doplasma::@13
doplasma::@return: scope:[doplasma] from doplasma::@13
return
to:@return
(void()) makechar()
makechar: scope:[makechar] from main
(byte) makechar::i#0 ← (byte) 0
(byte) makechar::ii#0 ← (byte) 0
(byte) makechar::b#0 ← (byte) 0
(byte) makechar::s#0 ← (byte) 0
(word) makechar::c#0 ← (word) 0
(word) makechar::c#1 ← (number) 0
to:makechar::@1
makechar::@1: scope:[makechar] from makechar makechar::@6
(word) makechar::c#3 ← phi( makechar/(word) makechar::c#1 makechar::@6/(word) makechar::c#2 )
(bool~) makechar::$0 ← (word) makechar::c#3 < (number) $100
if((bool~) makechar::$0) goto makechar::@2
to:makechar::@return
makechar::@2: scope:[makechar] from makechar::@1
(word) makechar::c#4 ← phi( makechar::@1/(word) makechar::c#3 )
(byte~) makechar::$1 ← ((byte)) (word) makechar::c#4
(byte) makechar::s#1 ← *((const byte*) sinustable + (byte~) makechar::$1)
(byte) makechar::i#1 ← (number) 0
to:makechar::@4
makechar::@4: scope:[makechar] from makechar::@2 makechar::@9
(byte) makechar::s#7 ← phi( makechar::@2/(byte) makechar::s#1 makechar::@9/(byte) makechar::s#9 )
(word) makechar::c#7 ← phi( makechar::@2/(word) makechar::c#4 makechar::@9/(word) makechar::c#6 )
(byte) makechar::i#3 ← phi( makechar::@2/(byte) makechar::i#1 makechar::@9/(byte) makechar::i#2 )
(bool~) makechar::$2 ← (byte) makechar::i#3 < (number) 8
if((bool~) makechar::$2) goto makechar::@5
to:makechar::@6
makechar::@5: scope:[makechar] from makechar::@4
(byte) makechar::s#6 ← phi( makechar::@4/(byte) makechar::s#7 )
(byte) makechar::i#7 ← phi( makechar::@4/(byte) makechar::i#3 )
(word) makechar::c#10 ← phi( makechar::@4/(word) makechar::c#7 )
(byte) makechar::b#1 ← (number) 0
(byte) makechar::ii#1 ← (number) 0
to:makechar::@7
makechar::@6: scope:[makechar] from makechar::@4
(word) makechar::c#5 ← phi( makechar::@4/(word) makechar::c#7 )
(word) makechar::c#2 ← ++ (word) makechar::c#5
to:makechar::@1
makechar::@7: scope:[makechar] from makechar::@10 makechar::@5
(byte) makechar::s#4 ← phi( makechar::@10/(byte) makechar::s#5 makechar::@5/(byte) makechar::s#6 )
(byte) makechar::b#5 ← phi( makechar::@10/(byte) makechar::b#7 makechar::@5/(byte) makechar::b#1 )
(byte) makechar::i#5 ← phi( makechar::@10/(byte) makechar::i#6 makechar::@5/(byte) makechar::i#7 )
(word) makechar::c#8 ← phi( makechar::@10/(word) makechar::c#9 makechar::@5/(word) makechar::c#10 )
(byte) makechar::ii#3 ← phi( makechar::@10/(byte) makechar::ii#2 makechar::@5/(byte) makechar::ii#1 )
(bool~) makechar::$3 ← (byte) makechar::ii#3 < (number) 8
if((bool~) makechar::$3) goto makechar::@8
to:makechar::@9
makechar::@8: scope:[makechar] from makechar::@7
(byte) makechar::i#10 ← phi( makechar::@7/(byte) makechar::i#5 )
(word) makechar::c#13 ← phi( makechar::@7/(word) makechar::c#8 )
(byte) makechar::b#8 ← phi( makechar::@7/(byte) makechar::b#5 )
(byte) makechar::ii#7 ← phi( makechar::@7/(byte) makechar::ii#3 )
(byte) makechar::s#3 ← phi( makechar::@7/(byte) makechar::s#4 )
call rand
(byte) rand::return#2 ← (byte) rand::return#1
to:makechar::@21
makechar::@21: scope:[makechar] from makechar::@8
(byte) makechar::i#9 ← phi( makechar::@8/(byte) makechar::i#10 )
(word) makechar::c#12 ← phi( makechar::@8/(word) makechar::c#13 )
(byte) makechar::b#6 ← phi( makechar::@8/(byte) makechar::b#8 )
(byte) makechar::ii#6 ← phi( makechar::@8/(byte) makechar::ii#7 )
(byte) makechar::s#2 ← phi( makechar::@8/(byte) makechar::s#3 )
(byte) rand::return#4 ← phi( makechar::@8/(byte) rand::return#2 )
(byte~) makechar::$4 ← (byte) rand::return#4
(number~) makechar::$5 ← (byte~) makechar::$4 & (number) $ff
(bool~) makechar::$6 ← (number~) makechar::$5 > (byte) makechar::s#2
(bool~) makechar::$7 ← ! (bool~) makechar::$6
if((bool~) makechar::$7) goto makechar::@10
to:makechar::@13
makechar::@9: scope:[makechar] from makechar::@7
(byte) makechar::s#9 ← phi( makechar::@7/(byte) makechar::s#4 )
(byte) makechar::b#3 ← phi( makechar::@7/(byte) makechar::b#5 )
(byte) makechar::i#4 ← phi( makechar::@7/(byte) makechar::i#5 )
(word) makechar::c#6 ← phi( makechar::@7/(word) makechar::c#8 )
(word~) makechar::$8 ← (word) makechar::c#6 << (number) 3
(word~) makechar::$9 ← (word~) makechar::$8 + (byte) makechar::i#4
*((byte*)(const byte*) CHARSET + (word~) makechar::$9) ← (byte) makechar::b#3
(byte) makechar::i#2 ← ++ (byte) makechar::i#4
to:makechar::@4
makechar::@10: scope:[makechar] from makechar::@13 makechar::@21
(byte) makechar::s#5 ← phi( makechar::@13/(byte) makechar::s#8 makechar::@21/(byte) makechar::s#2 )
(byte) makechar::b#7 ← phi( makechar::@13/(byte) makechar::b#2 makechar::@21/(byte) makechar::b#6 )
(byte) makechar::i#6 ← phi( makechar::@13/(byte) makechar::i#8 makechar::@21/(byte) makechar::i#9 )
(word) makechar::c#9 ← phi( makechar::@13/(word) makechar::c#11 makechar::@21/(word) makechar::c#12 )
(byte) makechar::ii#4 ← phi( makechar::@13/(byte) makechar::ii#5 makechar::@21/(byte) makechar::ii#6 )
(byte) makechar::ii#2 ← ++ (byte) makechar::ii#4
to:makechar::@7
makechar::@13: scope:[makechar] from makechar::@21
(byte) makechar::s#8 ← phi( makechar::@21/(byte) makechar::s#2 )
(byte) makechar::i#8 ← phi( makechar::@21/(byte) makechar::i#9 )
(word) makechar::c#11 ← phi( makechar::@21/(word) makechar::c#12 )
(byte) makechar::ii#5 ← phi( makechar::@21/(byte) makechar::ii#6 )
(byte) makechar::b#4 ← phi( makechar::@21/(byte) makechar::b#6 )
(byte) makechar::b#2 ← (byte) makechar::b#4 | *((const byte*) bittab + (byte) makechar::ii#5)
to:makechar::@10
makechar::@return: scope:[makechar] from makechar::@1
return
to:@return
(signed word()) main()
main: scope:[main] from @49
(byte*) print_line_cursor#29 ← phi( @49/(byte*) print_line_cursor#19 )
(byte*) print_char_cursor#47 ← phi( @49/(byte*) print_char_cursor#38 )
(word) Ticks#22 ← phi( @49/(word) Ticks#14 )
(byte) main::v#0 ← (byte) 0
(byte) main::block#0 ← (byte) 0
(word) main::count#0 ← (word) $1f4
(word) rand_seed ← (number) $194a
call makechar
to:main::@8
main::@8: scope:[main] from main
(byte*) print_line_cursor#27 ← phi( main/(byte*) print_line_cursor#29 )
(byte*) print_char_cursor#45 ← phi( main/(byte*) print_char_cursor#47 )
(word) Ticks#20 ← phi( main/(word) Ticks#22 )
(word) main::count#6 ← phi( main/(word) main::count#0 )
call start
to:main::@9
main::@9: scope:[main] from main::@8
(byte*) print_line_cursor#26 ← phi( main::@8/(byte*) print_line_cursor#27 )
(byte*) print_char_cursor#44 ← phi( main::@8/(byte*) print_char_cursor#45 )
(word) Ticks#19 ← phi( main::@8/(word) Ticks#20 )
(word) main::count#4 ← phi( main::@8/(word) main::count#6 )
(byte) main::block#1 ← *((const byte*) CIA2_PORT_A)
(byte) main::tmp#0 ← (byte) 0
(number~) main::$2 ← (byte) main::block#1 & (number) $fc
(byte) main::tmp#1 ← (number~) main::$2
(byte) main::tmp#2 ← (byte) main::tmp#1 | (byte)(word)(const byte*) SCREEN1>>(number) $e^(number) 3
*((const byte*) CIA2_PORT_A) ← (byte) main::tmp#2
(byte) main::v#1 ← *((const byte*) VIC_MEMORY)
to:main::@1
main::@1: scope:[main] from main::@11 main::@9
(byte*) print_line_cursor#21 ← phi( main::@11/(byte*) print_line_cursor#25 main::@9/(byte*) print_line_cursor#26 )
(byte*) print_char_cursor#40 ← phi( main::@11/(byte*) print_char_cursor#43 main::@9/(byte*) print_char_cursor#44 )
(word) Ticks#16 ← phi( main::@11/(word) Ticks#18 main::@9/(word) Ticks#19 )
(byte) main::block#3 ← phi( main::@11/(byte) main::block#4 main::@9/(byte) main::block#1 )
(byte) main::v#3 ← phi( main::@11/(byte) main::v#4 main::@9/(byte) main::v#1 )
(word) main::count#2 ← phi( main::@11/(word) main::count#1 main::@9/(word) main::count#4 )
(bool~) main::$6 ← (number) 0 != (word) main::count#2
if((bool~) main::$6) goto main::@2
to:main::@3
main::@2: scope:[main] from main::@1
(byte*) print_line_cursor#30 ← phi( main::@1/(byte*) print_line_cursor#21 )
(byte*) print_char_cursor#48 ← phi( main::@1/(byte*) print_char_cursor#40 )
(word) Ticks#23 ← phi( main::@1/(word) Ticks#16 )
(byte) main::block#6 ← phi( main::@1/(byte) main::block#3 )
(byte) main::v#6 ← phi( main::@1/(byte) main::v#3 )
(word) main::count#7 ← phi( main::@1/(word) main::count#2 )
(byte*) doplasma::scrn#1 ← (byte*)(const byte*) SCREEN1
call doplasma
to:main::@10
main::@10: scope:[main] from main::@2
(byte*) print_line_cursor#28 ← phi( main::@2/(byte*) print_line_cursor#30 )
(byte*) print_char_cursor#46 ← phi( main::@2/(byte*) print_char_cursor#48 )
(word) Ticks#21 ← phi( main::@2/(word) Ticks#23 )
(byte) main::block#5 ← phi( main::@2/(byte) main::block#6 )
(byte) main::v#5 ← phi( main::@2/(byte) main::v#6 )
(word) main::count#5 ← phi( main::@2/(word) main::count#7 )
*((const byte*) VIC_MEMORY) ← (const byte) PAGE1
(byte*) doplasma::scrn#2 ← (byte*)(const byte*) SCREEN2
call doplasma
to:main::@11
main::@11: scope:[main] from main::@10
(byte*) print_line_cursor#25 ← phi( main::@10/(byte*) print_line_cursor#28 )
(byte*) print_char_cursor#43 ← phi( main::@10/(byte*) print_char_cursor#46 )
(word) Ticks#18 ← phi( main::@10/(word) Ticks#21 )
(byte) main::block#4 ← phi( main::@10/(byte) main::block#5 )
(byte) main::v#4 ← phi( main::@10/(byte) main::v#5 )
(word) main::count#3 ← phi( main::@10/(word) main::count#5 )
*((const byte*) VIC_MEMORY) ← (const byte) PAGE2
(word) main::count#1 ← -- (word) main::count#3
to:main::@1
main::@3: scope:[main] from main::@1
(byte*) print_line_cursor#18 ← phi( main::@1/(byte*) print_line_cursor#21 )
(byte*) print_char_cursor#37 ← phi( main::@1/(byte*) print_char_cursor#40 )
(word) Ticks#13 ← phi( main::@1/(word) Ticks#16 )
(byte) main::block#2 ← phi( main::@1/(byte) main::block#3 )
(byte) main::v#2 ← phi( main::@1/(byte) main::v#3 )
*((const byte*) VIC_MEMORY) ← (byte) main::v#2
*((const byte*) CIA2_PORT_A) ← (byte) main::block#2
call end
to:main::@12
main::@12: scope:[main] from main::@3
(byte*) print_line_cursor#13 ← phi( main::@3/(byte*) print_line_cursor#4 )
(byte*) print_char_cursor#30 ← phi( main::@3/(byte*) print_char_cursor#13 )
(word) Ticks#9 ← phi( main::@3/(word) Ticks#3 )
(word) Ticks#4 ← (word) Ticks#9
(byte*) print_char_cursor#14 ← (byte*) print_char_cursor#30
(byte*) print_line_cursor#5 ← (byte*) print_line_cursor#13
(signed word) main::return#0 ← (number) 0
to:main::@return
main::@return: scope:[main] from main::@12
(byte*) print_line_cursor#14 ← phi( main::@12/(byte*) print_line_cursor#5 )
(byte*) print_char_cursor#31 ← phi( main::@12/(byte*) print_char_cursor#14 )
(word) Ticks#10 ← phi( main::@12/(word) Ticks#4 )
(signed word) main::return#3 ← phi( main::@12/(signed word) main::return#0 )
(signed word) main::return#1 ← (signed word) main::return#3
(word) Ticks#5 ← (word) Ticks#10
(byte*) print_char_cursor#15 ← (byte*) print_char_cursor#31
(byte*) print_line_cursor#6 ← (byte*) print_line_cursor#14
return
to:@return
@49: scope:[] from @45
(byte*) print_line_cursor#19 ← phi( @45/(byte*) print_line_cursor#22 )
(byte*) print_char_cursor#38 ← phi( @45/(byte*) print_char_cursor#41 )
(word) Ticks#14 ← phi( @45/(word) Ticks#17 )
call main
(signed word) main::return#2 ← (signed word) main::return#1
to:@50
@50: scope:[] from @49
(byte*) print_line_cursor#15 ← phi( @49/(byte*) print_line_cursor#6 )
(byte*) print_char_cursor#32 ← phi( @49/(byte*) print_char_cursor#15 )
(word) Ticks#11 ← phi( @49/(word) Ticks#5 )
(word) Ticks#6 ← (word) Ticks#11
(byte*) print_char_cursor#16 ← (byte*) print_char_cursor#32
(byte*) print_line_cursor#7 ← (byte*) print_line_cursor#15
to:@end
@end: scope:[] from @50
SYMBOL TABLE SSA
(label) @13
(label) @43
(label) @45
(label) @49
(label) @50
(label) @begin
(label) @end
(const byte*) CHARSET = (byte*)(number) $e800
(const byte*) CIA2_PORT_A = (byte*)(number) $dd00
(const byte) PAGE1 = (byte)(word)(const byte*) SCREEN1>>(number) 6&(number) $f0|(word)(const byte*) CHARSET>>(number) $a&(number) $e
(const byte) PAGE2 = (byte)(word)(const byte*) SCREEN2>>(number) 6&(number) $f0|(word)(const byte*) CHARSET>>(number) $a&(number) $e
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(const byte*) SCREEN1 = (byte*)(number) $e000
(const byte*) SCREEN2 = (byte*)(number) $e400
(word) Ticks
(word) Ticks#0
(word) Ticks#1
(word) Ticks#10
(word) Ticks#11
(word) Ticks#12
(word) Ticks#13
(word) Ticks#14
(word) Ticks#15
(word) Ticks#16
(word) Ticks#17
(word) Ticks#18
(word) Ticks#19
(word) Ticks#2
(word) Ticks#20
(word) Ticks#21
(word) Ticks#22
(word) Ticks#23
(word) Ticks#3
(word) Ticks#4
(word) Ticks#5
(word) Ticks#6
(word) Ticks#7
(word) Ticks#8
(word) Ticks#9
(const byte*) VIC_MEMORY = (byte*)(number) $d018
(const byte*) bittab[] = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 }
(void()) doplasma((byte*) doplasma::scrn)
(bool~) doplasma::$0
(byte~) doplasma::$1
(bool~) doplasma::$2
(byte~) doplasma::$3
(bool~) doplasma::$4
(bool~) doplasma::$5
(byte~) doplasma::$6
(label) doplasma::@1
(label) doplasma::@13
(label) doplasma::@14
(label) doplasma::@16
(label) doplasma::@17
(label) doplasma::@18
(label) doplasma::@2
(label) doplasma::@3
(label) doplasma::@7
(label) doplasma::@8
(label) doplasma::@9
(label) doplasma::@return
(byte) doplasma::c1A
(byte) doplasma::c1A#0
(byte) doplasma::c1A#1
(byte) doplasma::c1A#2
(byte) doplasma::c1A#3
(byte) doplasma::c1A#4
(byte) doplasma::c1B
(byte) doplasma::c1B#0
(byte) doplasma::c1B#1
(byte) doplasma::c1B#2
(byte) doplasma::c1B#3
(byte) doplasma::c1B#4
(byte) doplasma::c1a
(byte) doplasma::c1a#0
(byte) doplasma::c1a#1
(byte) doplasma::c1a#2
(byte) doplasma::c1a#3
(byte) doplasma::c1a#4
(byte) doplasma::c1b
(byte) doplasma::c1b#0
(byte) doplasma::c1b#1
(byte) doplasma::c1b#2
(byte) doplasma::c1b#3
(byte) doplasma::c1b#4
(byte) doplasma::c2A
(byte) doplasma::c2A#0
(byte) doplasma::c2A#1
(byte) doplasma::c2A#2
(byte) doplasma::c2A#3
(byte) doplasma::c2A#4
(byte) doplasma::c2A#5
(byte) doplasma::c2A#6
(byte) doplasma::c2A#7
(byte) doplasma::c2B
(byte) doplasma::c2B#0
(byte) doplasma::c2B#1
(byte) doplasma::c2B#2
(byte) doplasma::c2B#3
(byte) doplasma::c2B#4
(byte) doplasma::c2B#5
(byte) doplasma::c2B#6
(byte) doplasma::c2B#7
(byte) doplasma::c2a
(byte) doplasma::c2a#0
(byte) doplasma::c2a#1
(byte) doplasma::c2a#2
(byte) doplasma::c2a#3
(byte) doplasma::c2a#4
(byte) doplasma::c2b
(byte) doplasma::c2b#0
(byte) doplasma::c2b#1
(byte) doplasma::c2b#2
(byte) doplasma::c2b#3
(byte) doplasma::c2b#4
(byte) doplasma::i
(byte) doplasma::i#0
(byte) doplasma::i#1
(byte) doplasma::i#2
(byte) doplasma::i#3
(byte) doplasma::i#4
(byte) doplasma::ii
(byte) doplasma::ii#0
(byte) doplasma::ii#1
(byte) doplasma::ii#2
(byte) doplasma::ii#3
(byte) doplasma::ii#4
(byte) doplasma::j
(byte) doplasma::j#0
(byte) doplasma::j#1
(byte) doplasma::j#2
(byte) doplasma::j#3
(byte) doplasma::j#4
(byte) doplasma::jj
(byte) doplasma::jj#0
(byte) doplasma::jj#1
(byte) doplasma::jj#2
(byte) doplasma::jj#3
(byte) doplasma::jj#4
(byte) doplasma::jj#5
(byte) doplasma::jj#6
(byte) doplasma::jj#7
(byte*) doplasma::scrn
(byte*) doplasma::scrn#0
(byte*) doplasma::scrn#1
(byte*) doplasma::scrn#10
(byte*) doplasma::scrn#11
(byte*) doplasma::scrn#12
(byte*) doplasma::scrn#13
(byte*) doplasma::scrn#14
(byte*) doplasma::scrn#2
(byte*) doplasma::scrn#3
(byte*) doplasma::scrn#4
(byte*) doplasma::scrn#5
(byte*) doplasma::scrn#6
(byte*) doplasma::scrn#7
(byte*) doplasma::scrn#8
(byte*) doplasma::scrn#9
(void()) end()
(label) end::@1
(label) end::@2
(label) end::@3
(label) end::@return
(word) last_time loadstore
(signed word()) main()
(number~) main::$2
(bool~) main::$6
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@2
(label) main::@3
(label) main::@8
(label) main::@9
(label) main::@return
(byte) main::block
(byte) main::block#0
(byte) main::block#1
(byte) main::block#2
(byte) main::block#3
(byte) main::block#4
(byte) main::block#5
(byte) main::block#6
(word) main::count
(word) main::count#0
(word) main::count#1
(word) main::count#2
(word) main::count#3
(word) main::count#4
(word) main::count#5
(word) main::count#6
(word) main::count#7
(signed word) main::return
(signed word) main::return#0
(signed word) main::return#1
(signed word) main::return#2
(signed word) main::return#3
(byte) main::tmp
(byte) main::tmp#0
(byte) main::tmp#1
(byte) main::tmp#2
(byte) main::v
(byte) main::v#0
(byte) main::v#1
(byte) main::v#2
(byte) main::v#3
(byte) main::v#4
(byte) main::v#5
(byte) main::v#6
(void()) makechar()
(bool~) makechar::$0
(byte~) makechar::$1
(bool~) makechar::$2
(bool~) makechar::$3
(byte~) makechar::$4
(number~) makechar::$5
(bool~) makechar::$6
(bool~) makechar::$7
(word~) makechar::$8
(word~) makechar::$9
(label) makechar::@1
(label) makechar::@10
(label) makechar::@13
(label) makechar::@2
(label) makechar::@21
(label) makechar::@4
(label) makechar::@5
(label) makechar::@6
(label) makechar::@7
(label) makechar::@8
(label) makechar::@9
(label) makechar::@return
(byte) makechar::b
(byte) makechar::b#0
(byte) makechar::b#1
(byte) makechar::b#2
(byte) makechar::b#3
(byte) makechar::b#4
(byte) makechar::b#5
(byte) makechar::b#6
(byte) makechar::b#7
(byte) makechar::b#8
(word) makechar::c
(word) makechar::c#0
(word) makechar::c#1
(word) makechar::c#10
(word) makechar::c#11
(word) makechar::c#12
(word) makechar::c#13
(word) makechar::c#2
(word) makechar::c#3
(word) makechar::c#4
(word) makechar::c#5
(word) makechar::c#6
(word) makechar::c#7
(word) makechar::c#8
(word) makechar::c#9
(byte) makechar::i
(byte) makechar::i#0
(byte) makechar::i#1
(byte) makechar::i#10
(byte) makechar::i#2
(byte) makechar::i#3
(byte) makechar::i#4
(byte) makechar::i#5
(byte) makechar::i#6
(byte) makechar::i#7
(byte) makechar::i#8
(byte) makechar::i#9
(byte) makechar::ii
(byte) makechar::ii#0
(byte) makechar::ii#1
(byte) makechar::ii#2
(byte) makechar::ii#3
(byte) makechar::ii#4
(byte) makechar::ii#5
(byte) makechar::ii#6
(byte) makechar::ii#7
(byte) makechar::s
(byte) makechar::s#0
(byte) makechar::s#1
(byte) makechar::s#2
(byte) makechar::s#3
(byte) makechar::s#4
(byte) makechar::s#5
(byte) makechar::s#6
(byte) makechar::s#7
(byte) makechar::s#8
(byte) makechar::s#9
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0
(number~) print_byte::$2
(label) print_byte::@1
(label) print_byte::@2
(label) print_byte::@return
(byte) print_byte::b
(byte) print_byte::b#0
(byte) print_byte::b#1
(byte) print_byte::b#2
(byte) print_byte::b#3
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
(byte) print_char::ch#0
(byte) print_char::ch#1
(byte) print_char::ch#2
(byte*) print_char_cursor
(byte*) print_char_cursor#0
(byte*) print_char_cursor#1
(byte*) print_char_cursor#10
(byte*) print_char_cursor#11
(byte*) print_char_cursor#12
(byte*) print_char_cursor#13
(byte*) print_char_cursor#14
(byte*) print_char_cursor#15
(byte*) print_char_cursor#16
(byte*) print_char_cursor#17
(byte*) print_char_cursor#18
(byte*) print_char_cursor#19
(byte*) print_char_cursor#2
(byte*) print_char_cursor#20
(byte*) print_char_cursor#21
(byte*) print_char_cursor#22
(byte*) print_char_cursor#23
(byte*) print_char_cursor#24
(byte*) print_char_cursor#25
(byte*) print_char_cursor#26
(byte*) print_char_cursor#27
(byte*) print_char_cursor#28
(byte*) print_char_cursor#29
(byte*) print_char_cursor#3
(byte*) print_char_cursor#30
(byte*) print_char_cursor#31
(byte*) print_char_cursor#32
(byte*) print_char_cursor#33
(byte*) print_char_cursor#34
(byte*) print_char_cursor#35
(byte*) print_char_cursor#36
(byte*) print_char_cursor#37
(byte*) print_char_cursor#38
(byte*) print_char_cursor#39
(byte*) print_char_cursor#4
(byte*) print_char_cursor#40
(byte*) print_char_cursor#41
(byte*) print_char_cursor#42
(byte*) print_char_cursor#43
(byte*) print_char_cursor#44
(byte*) print_char_cursor#45
(byte*) print_char_cursor#46
(byte*) print_char_cursor#47
(byte*) print_char_cursor#48
(byte*) print_char_cursor#5
(byte*) print_char_cursor#6
(byte*) print_char_cursor#7
(byte*) print_char_cursor#8
(byte*) print_char_cursor#9
(const byte*) print_hextab[] = (byte*) "0123456789abcdef"z
(byte*) print_line_cursor
(byte*) print_line_cursor#0
(byte*) print_line_cursor#1
(byte*) print_line_cursor#10
(byte*) print_line_cursor#11
(byte*) print_line_cursor#12
(byte*) print_line_cursor#13
(byte*) print_line_cursor#14
(byte*) print_line_cursor#15
(byte*) print_line_cursor#16
(byte*) print_line_cursor#17
(byte*) print_line_cursor#18
(byte*) print_line_cursor#19
(byte*) print_line_cursor#2
(byte*) print_line_cursor#20
(byte*) print_line_cursor#21
(byte*) print_line_cursor#22
(byte*) print_line_cursor#23
(byte*) print_line_cursor#24
(byte*) print_line_cursor#25
(byte*) print_line_cursor#26
(byte*) print_line_cursor#27
(byte*) print_line_cursor#28
(byte*) print_line_cursor#29
(byte*) print_line_cursor#3
(byte*) print_line_cursor#30
(byte*) print_line_cursor#4
(byte*) print_line_cursor#5
(byte*) print_line_cursor#6
(byte*) print_line_cursor#7
(byte*) print_line_cursor#8
(byte*) print_line_cursor#9
(void()) print_ln()
(byte*~) print_ln::$0
(bool~) print_ln::$1
(label) print_ln::@1
(label) print_ln::@2
(label) print_ln::@return
(byte*) print_screen
(byte*) print_screen#0
(void()) print_word((word) print_word::w)
(byte~) print_word::$0
(byte~) print_word::$2
(label) print_word::@1
(label) print_word::@2
(label) print_word::@return
(word) print_word::w
(word) print_word::w#0
(word) print_word::w#1
(word) print_word::w#2
(byte()) rand()
(byte~) rand::$0
(label) rand::@return
(const word*) rand::RAND_SEED = &(word) rand_seed
(byte) rand::return
(byte) rand::return#0
(byte) rand::return#1
(byte) rand::return#2
(byte) rand::return#3
(byte) rand::return#4
(word) rand_seed loadstore
(const byte*) sinustable[(number) $100] = { (byte) $80, (byte) $7d, (byte) $7a, (byte) $77, (byte) $74, (byte) $70, (byte) $6d, (byte) $6a, (byte) $67, (byte) $64, (byte) $61, (byte) $5e, (byte) $5b, (byte) $58, (byte) $55, (byte) $52, (byte) $4f, (byte) $4d, (byte) $4a, (byte) $47, (byte) $44, (byte) $41, (byte) $3f, (byte) $3c, (byte) $39, (byte) $37, (byte) $34, (byte) $32, (byte) $2f, (byte) $2d, (byte) $2b, (byte) $28, (byte) $26, (byte) $24, (byte) $22, (byte) $20, (byte) $1e, (byte) $1c, (byte) $1a, (byte) $18, (byte) $16, (byte) $15, (byte) $13, (byte) $11, (byte) $10, (byte) $f, (byte) $d, (byte) $c, (byte) $b, (byte) $a, (byte) 8, (byte) 7, (byte) 6, (byte) 6, (byte) 5, (byte) 4, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 2, (byte) 2, (byte) 3, (byte) 3, (byte) 4, (byte) 5, (byte) 6, (byte) 6, (byte) 7, (byte) 8, (byte) $a, (byte) $b, (byte) $c, (byte) $d, (byte) $f, (byte) $10, (byte) $11, (byte) $13, (byte) $15, (byte) $16, (byte) $18, (byte) $1a, (byte) $1c, (byte) $1e, (byte) $20, (byte) $22, (byte) $24, (byte) $26, (byte) $28, (byte) $2b, (byte) $2d, (byte) $2f, (byte) $32, (byte) $34, (byte) $37, (byte) $39, (byte) $3c, (byte) $3f, (byte) $41, (byte) $44, (byte) $47, (byte) $4a, (byte) $4d, (byte) $4f, (byte) $52, (byte) $55, (byte) $58, (byte) $5b, (byte) $5e, (byte) $61, (byte) $64, (byte) $67, (byte) $6a, (byte) $6d, (byte) $70, (byte) $74, (byte) $77, (byte) $7a, (byte) $7d, (byte) $80, (byte) $83, (byte) $86, (byte) $89, (byte) $8c, (byte) $90, (byte) $93, (byte) $96, (byte) $99, (byte) $9c, (byte) $9f, (byte) $a2, (byte) $a5, (byte) $a8, (byte) $ab, (byte) $ae, (byte) $b1, (byte) $b3, (byte) $b6, (byte) $b9, (byte) $bc, (byte) $bf, (byte) $c1, (byte) $c4, (byte) $c7, (byte) $c9, (byte) $cc, (byte) $ce, (byte) $d1, (byte) $d3, (byte) $d5, (byte) $d8, (byte) $da, (byte) $dc, (byte) $de, (byte) $e0, (byte) $e2, (byte) $e4, (byte) $e6, (byte) $e8, (byte) $ea, (byte) $eb, (byte) $ed, (byte) $ef, (byte) $f0, (byte) $f1, (byte) $f3, (byte) $f4, (byte) $f5, (byte) $f6, (byte) $f8, (byte) $f9, (byte) $fa, (byte) $fa, (byte) $fb, (byte) $fc, (byte) $fd, (byte) $fd, (byte) $fe, (byte) $fe, (byte) $fe, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $fe, (byte) $fe, (byte) $fe, (byte) $fd, (byte) $fd, (byte) $fc, (byte) $fb, (byte) $fa, (byte) $fa, (byte) $f9, (byte) $f8, (byte) $f6, (byte) $f5, (byte) $f4, (byte) $f3, (byte) $f1, (byte) $f0, (byte) $ef, (byte) $ed, (byte) $eb, (byte) $ea, (byte) $e8, (byte) $e6, (byte) $e4, (byte) $e2, (byte) $e0, (byte) $de, (byte) $dc, (byte) $da, (byte) $d8, (byte) $d5, (byte) $d3, (byte) $d1, (byte) $ce, (byte) $cc, (byte) $c9, (byte) $c7, (byte) $c4, (byte) $c1, (byte) $bf, (byte) $bc, (byte) $b9, (byte) $b6, (byte) $b3, (byte) $b1, (byte) $ae, (byte) $ab, (byte) $a8, (byte) $a5, (byte) $a2, (byte) $9f, (byte) $9c, (byte) $99, (byte) $96, (byte) $93, (byte) $90, (byte) $8c, (byte) $89, (byte) $86, (byte) $83 }
(void()) start()
(label) start::@return
(const word*) start::LAST_TIME = &(word) last_time
(const byte*) xbuf[(number) $28] = { fill( $28, 0) }
(const byte*) ybuf[(number) $19] = { fill( $19, 0) }
Adding number conversion cast (unumber) $f0 in
Adding number conversion cast (unumber) 6 in
Adding number conversion cast (unumber) $e in
Adding number conversion cast (unumber) $a in
Adding number conversion cast (unumber) $f0 in
Adding number conversion cast (unumber) 6 in
Adding number conversion cast (unumber) $e in
Adding number conversion cast (unumber) $a in
Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#8 + (number) $28
Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (number) 4
Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f
Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f
Adding number conversion cast (unumber) $194a in (word) rand_seed ← (number) $194a
Adding number conversion cast (unumber) 0 in (byte) doplasma::ii#1 ← (number) 0
Adding number conversion cast (unumber) $19 in (bool~) doplasma::$0 ← (byte) doplasma::ii#3 < (number) $19
Adding number conversion cast (unumber) 4 in (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (number) 4
Adding number conversion cast (unumber) 9 in (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (number) 9
Adding number conversion cast (unumber) 3 in (byte) doplasma::c1A#1 ← (byte) doplasma::c1A#2 + (number) 3
Adding number conversion cast (unumber) 5 in (byte) doplasma::c1B#1 ← (byte) doplasma::c1B#2 - (number) 5
Adding number conversion cast (unumber) 0 in (byte) doplasma::i#1 ← (number) 0
Adding number conversion cast (unumber) $28 in (bool~) doplasma::$2 ← (byte) doplasma::i#3 < (number) $28
Adding number conversion cast (unumber) 3 in (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (number) 3
Adding number conversion cast (unumber) 7 in (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (number) 7
Adding number conversion cast (unumber) 2 in (byte) doplasma::c2A#1 ← (byte) doplasma::c2A#3 + (number) 2
Adding number conversion cast (unumber) 3 in (byte) doplasma::c2B#1 ← (byte) doplasma::c2B#3 - (number) 3
Adding number conversion cast (unumber) 0 in (byte) doplasma::jj#1 ← (number) 0
Adding number conversion cast (unumber) $19 in (bool~) doplasma::$4 ← (byte) doplasma::jj#3 < (number) $19
Adding number conversion cast (unumber) 0 in (byte) doplasma::j#1 ← (number) 0
Adding number conversion cast (unumber) $28 in (bool~) doplasma::$5 ← (byte) doplasma::j#3 < (number) $28
Adding number conversion cast (unumber) $28 in (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#4 + (number) $28
Adding number conversion cast (unumber) 0 in (word) makechar::c#1 ← (number) 0
Adding number conversion cast (unumber) $100 in (bool~) makechar::$0 ← (word) makechar::c#3 < (number) $100
Adding number conversion cast (unumber) 0 in (byte) makechar::i#1 ← (number) 0
Adding number conversion cast (unumber) 8 in (bool~) makechar::$2 ← (byte) makechar::i#3 < (number) 8
Adding number conversion cast (unumber) 0 in (byte) makechar::b#1 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) makechar::ii#1 ← (number) 0
Adding number conversion cast (unumber) 8 in (bool~) makechar::$3 ← (byte) makechar::ii#3 < (number) 8
Adding number conversion cast (unumber) $ff in (number~) makechar::$5 ← (byte~) makechar::$4 & (number) $ff
Adding number conversion cast (unumber) makechar::$5 in (number~) makechar::$5 ← (byte~) makechar::$4 & (unumber)(number) $ff
Adding number conversion cast (unumber) 3 in (word~) makechar::$8 ← (word) makechar::c#6 << (number) 3
Adding number conversion cast (unumber) $194a in (word) rand_seed ← (number) $194a
Adding number conversion cast (unumber) $fc in (number~) main::$2 ← (byte) main::block#1 & (number) $fc
Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (byte) main::block#1 & (unumber)(number) $fc
Adding number conversion cast (unumber) 3 in (byte) main::tmp#2 ← (byte) main::tmp#1 | (byte)(word)(const byte*) SCREEN1>>(number) $e^(number) 3
Adding number conversion cast (unumber) $e in (byte) main::tmp#2 ← (byte) main::tmp#1 | (byte)(word)(const byte*) SCREEN1>>(number) $e^(unumber)(number) 3
Adding number conversion cast (unumber) 0 in (bool~) main::$6 ← (number) 0 != (word) main::count#2
Adding number conversion cast (snumber) 0 in (signed word) main::return#0 ← (number) 0
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (word) rand_seed ← (unumber)(number) $194a
Inlining cast (byte~) rand::$0 ← (byte)(word) rand_seed
Inlining cast (byte) doplasma::ii#1 ← (unumber)(number) 0
Inlining cast (byte) doplasma::i#1 ← (unumber)(number) 0
Inlining cast (byte) doplasma::jj#1 ← (unumber)(number) 0
Inlining cast (byte) doplasma::j#1 ← (unumber)(number) 0
Inlining cast (word) makechar::c#1 ← (unumber)(number) 0
Inlining cast (byte~) makechar::$1 ← (byte)(word) makechar::c#4
Inlining cast (byte) makechar::i#1 ← (unumber)(number) 0
Inlining cast (byte) makechar::b#1 ← (unumber)(number) 0
Inlining cast (byte) makechar::ii#1 ← (unumber)(number) 0
Inlining cast (word) rand_seed ← (unumber)(number) $194a
Inlining cast (signed word) main::return#0 ← (snumber)(number) 0
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 53272
Simplifying constant pointer cast (byte*) 56576
Simplifying constant pointer cast (byte*) 57344
Simplifying constant pointer cast (byte*) 58368
Simplifying constant pointer cast (byte*) 59392
Simplifying constant integer cast 6
Simplifying constant integer cast $f0
Simplifying constant integer cast $a
Simplifying constant integer cast $e
Simplifying constant integer cast 6
Simplifying constant integer cast $f0
Simplifying constant integer cast $a
Simplifying constant integer cast $e
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast $28
Simplifying constant integer cast 4
Simplifying constant integer cast $f
Simplifying constant integer cast $194a
Simplifying constant integer cast 0
Simplifying constant integer cast $19
Simplifying constant integer cast 4
Simplifying constant integer cast 9
Simplifying constant integer cast 3
Simplifying constant integer cast 5
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast 3
Simplifying constant integer cast 7
Simplifying constant integer cast 2
Simplifying constant integer cast 3
Simplifying constant integer cast 0
Simplifying constant integer cast $19
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast 0
Simplifying constant integer cast $100
Simplifying constant integer cast 0
Simplifying constant integer cast 8
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 8
Simplifying constant integer cast $ff
Simplifying constant integer cast 3
Simplifying constant integer cast (const byte*) CHARSET
Simplifying constant integer cast $194a
Simplifying constant integer cast $fc
Simplifying constant integer cast $e
Simplifying constant integer cast 3
Simplifying constant integer cast 0
Simplifying constant integer cast (const byte*) SCREEN1
Simplifying constant integer cast (const byte*) SCREEN2
Simplifying constant integer cast 0
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 6
Finalized unsigned number type (byte) $f0
Finalized unsigned number type (byte) $a
Finalized unsigned number type (byte) $e
Finalized unsigned number type (byte) 6
Finalized unsigned number type (byte) $f0
Finalized unsigned number type (byte) $a
Finalized unsigned number type (byte) $e
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $f
Finalized unsigned number type (word) $194a
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $19
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 9
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 5
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $19
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $100
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) 3
Finalized unsigned number type (word) $194a
Finalized unsigned number type (byte) $fc
Finalized unsigned number type (byte) $e
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 0
Finalized signed number type (signed byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f
Inferred type updated to byte in (unumber~) makechar::$5 ← (byte~) makechar::$4 & (byte) $ff
Inferred type updated to byte in (unumber~) main::$2 ← (byte) main::block#1 & (byte) $fc
Inversing boolean not [173] (bool~) makechar::$7 ← (byte~) makechar::$5 <= (byte) makechar::s#2 from [172] (bool~) makechar::$6 ← (byte~) makechar::$5 > (byte) makechar::s#2
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte*) print_char_cursor#0 = (byte*) print_line_cursor#0 (byte*) print_screen#0 (byte*) print_char_cursor#42 (byte*) print_line_cursor#24 (byte*) print_char_cursor#41 (byte*) print_line_cursor#22 (byte*) print_char_cursor#38 (byte*) print_line_cursor#19
Alias (byte*) print_line_cursor#1 = (byte*~) print_ln::$0 (byte*) print_line_cursor#9 (byte*) print_char_cursor#1 (byte*) print_line_cursor#10 (byte*) print_char_cursor#18 (byte*) print_line_cursor#2 (byte*) print_char_cursor#2
Alias (byte) print_byte::b#0 = (byte~) print_word::$0
Alias (word) print_word::w#1 = (word) print_word::w#2
Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#3
Alias (byte) print_byte::b#1 = (byte~) print_word::$2
Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#4 (byte*) print_char_cursor#21 (byte*) print_char_cursor#5
Alias (byte) print_byte::b#2 = (byte) print_byte::b#3
Alias (byte*) print_char_cursor#22 = (byte*) print_char_cursor#6
Alias (byte*) print_char_cursor#23 = (byte*) print_char_cursor#7 (byte*) print_char_cursor#24 (byte*) print_char_cursor#8
Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#26 (byte*) print_char_cursor#9
Alias (word) Ticks#1 = (word) Ticks#7
Alias (byte*) print_char_cursor#36 = (byte*) print_char_cursor#39
Alias (byte*) print_line_cursor#17 = (byte*) print_line_cursor#20 (byte*) print_line_cursor#23
Alias (word) Ticks#12 = (word) Ticks#15 (word) Ticks#2 (word) Ticks#8 (word) Ticks#3
Alias (byte*) print_char_cursor#11 = (byte*) print_char_cursor#27
Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#3 (byte*) print_line_cursor#12 (byte*) print_line_cursor#4
Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#28 (byte*) print_char_cursor#29 (byte*) print_char_cursor#13
Alias (word) Ticks#0 = (word) Ticks#17 (word) Ticks#14
Alias (byte) rand::return#0 = (byte~) rand::$0 (byte) rand::return#3 (byte) rand::return#1
Alias (byte) doplasma::c1a#1 = (byte) doplasma::c1A#0
Alias (byte) doplasma::c1b#1 = (byte) doplasma::c1B#0
Alias (byte) doplasma::c1a#3 = (byte) doplasma::c1a#4
Alias (byte) doplasma::c1b#3 = (byte) doplasma::c1b#4
Alias (byte) doplasma::ii#3 = (byte) doplasma::ii#4
Alias (byte) doplasma::c1A#2 = (byte) doplasma::c1A#4 (byte) doplasma::c1A#3
Alias (byte) doplasma::c1B#2 = (byte) doplasma::c1B#4 (byte) doplasma::c1B#3
Alias (byte) doplasma::c2A#2 = (byte) doplasma::c2A#6 (byte) doplasma::c2A#4 (byte) doplasma::c2a#1
Alias (byte) doplasma::c2B#2 = (byte) doplasma::c2B#6 (byte) doplasma::c2B#4 (byte) doplasma::c2b#1
Alias (byte*) doplasma::scrn#10 = (byte*) doplasma::scrn#14 (byte*) doplasma::scrn#12
Alias (byte) doplasma::c2a#3 = (byte) doplasma::c2a#4
Alias (byte) doplasma::c2b#3 = (byte) doplasma::c2b#4
Alias (byte) doplasma::i#3 = (byte) doplasma::i#4
Alias (byte) doplasma::c2A#3 = (byte) doplasma::c2A#7 (byte) doplasma::c2A#5
Alias (byte) doplasma::c2B#3 = (byte) doplasma::c2B#7 (byte) doplasma::c2B#5
Alias (byte*) doplasma::scrn#11 = (byte*) doplasma::scrn#9 (byte*) doplasma::scrn#8
Alias (byte) doplasma::jj#3 = (byte) doplasma::jj#7
Alias (byte*) doplasma::scrn#6 = (byte*) doplasma::scrn#7
Alias (byte) doplasma::j#3 = (byte) doplasma::j#4
Alias (byte) doplasma::jj#4 = (byte) doplasma::jj#6 (byte) doplasma::jj#5
Alias (byte*) doplasma::scrn#3 = (byte*) doplasma::scrn#5 (byte*) doplasma::scrn#4
Alias (word) makechar::c#3 = (word) makechar::c#4
Alias (word) makechar::c#10 = (word) makechar::c#7 (word) makechar::c#5
Alias (byte) makechar::i#3 = (byte) makechar::i#7
Alias (byte) makechar::s#6 = (byte) makechar::s#7
Alias (byte) makechar::s#2 = (byte) makechar::s#3 (byte) makechar::s#4 (byte) makechar::s#9 (byte) makechar::s#8
Alias (byte) makechar::ii#3 = (byte) makechar::ii#7 (byte) makechar::ii#6 (byte) makechar::ii#5
Alias (byte) makechar::b#3 = (byte) makechar::b#8 (byte) makechar::b#5 (byte) makechar::b#6 (byte) makechar::b#4
Alias (word) makechar::c#11 = (word) makechar::c#13 (word) makechar::c#8 (word) makechar::c#12 (word) makechar::c#6
Alias (byte) makechar::i#10 = (byte) makechar::i#5 (byte) makechar::i#9 (byte) makechar::i#4 (byte) makechar::i#8
Alias (byte) rand::return#2 = (byte) rand::return#4
Alias (word) main::count#0 = (word) main::count#6 (word) main::count#4
Alias (word) Ticks#19 = (word) Ticks#20 (word) Ticks#22
Alias (byte*) print_char_cursor#44 = (byte*) print_char_cursor#45 (byte*) print_char_cursor#47
Alias (byte*) print_line_cursor#26 = (byte*) print_line_cursor#27 (byte*) print_line_cursor#29
Alias (byte) main::tmp#1 = (byte~) main::$2
Alias (word) main::count#2 = (word) main::count#7 (word) main::count#5 (word) main::count#3
Alias (byte) main::v#2 = (byte) main::v#6 (byte) main::v#3 (byte) main::v#5 (byte) main::v#4
Alias (byte) main::block#2 = (byte) main::block#6 (byte) main::block#3 (byte) main::block#5 (byte) main::block#4
Alias (word) Ticks#13 = (word) Ticks#23 (word) Ticks#16 (word) Ticks#21 (word) Ticks#18
Alias (byte*) print_char_cursor#37 = (byte*) print_char_cursor#48 (byte*) print_char_cursor#40 (byte*) print_char_cursor#46 (byte*) print_char_cursor#43
Alias (byte*) print_line_cursor#18 = (byte*) print_line_cursor#30 (byte*) print_line_cursor#21 (byte*) print_line_cursor#28 (byte*) print_line_cursor#25
Alias (word) Ticks#10 = (word) Ticks#4 (word) Ticks#9 (word) Ticks#5
Alias (byte*) print_char_cursor#14 = (byte*) print_char_cursor#30 (byte*) print_char_cursor#31 (byte*) print_char_cursor#15
Alias (byte*) print_line_cursor#13 = (byte*) print_line_cursor#5 (byte*) print_line_cursor#14 (byte*) print_line_cursor#6
Alias (signed word) main::return#0 = (signed word) main::return#3 (signed word) main::return#1
Alias (word) Ticks#11 = (word) Ticks#6
Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#32
Alias (byte*) print_line_cursor#15 = (byte*) print_line_cursor#7
Successful SSA optimization Pass2AliasElimination
Alias (byte) makechar::ii#3 = (byte) makechar::ii#4
Alias (word) makechar::c#11 = (word) makechar::c#9
Alias (byte) makechar::i#10 = (byte) makechar::i#6
Alias (byte) makechar::s#2 = (byte) makechar::s#5
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte*) print_line_cursor#16 (byte*) print_line_cursor#17
Identical Phi Values (byte*) print_char_cursor#33 (byte*) print_char_cursor#11
Identical Phi Values (byte*) print_char_cursor#17 (byte*) print_char_cursor#33
Identical Phi Values (word) print_word::w#1 (word) print_word::w#0
Identical Phi Values (byte*) print_char_cursor#34 (byte*) print_char_cursor#36
Identical Phi Values (byte*) print_char_cursor#19 (byte*) print_char_cursor#23
Identical Phi Values (byte*) print_char_cursor#20 (byte*) print_char_cursor#23
Identical Phi Values (byte*) print_char_cursor#22 (byte*) print_char_cursor#10
Identical Phi Values (byte*) print_char_cursor#23 (byte*) print_char_cursor#10
Identical Phi Values (byte*) print_char_cursor#36 (byte*) print_char_cursor#37
Identical Phi Values (byte*) print_line_cursor#17 (byte*) print_line_cursor#18
Identical Phi Values (byte*) print_char_cursor#11 (byte*) print_char_cursor#20
Identical Phi Values (byte*) print_line_cursor#11 (byte*) print_line_cursor#1
Identical Phi Values (byte*) print_char_cursor#12 (byte*) print_line_cursor#1
Identical Phi Values (byte) doplasma::c1A#2 (byte) doplasma::c1a#1
Identical Phi Values (byte) doplasma::c1B#2 (byte) doplasma::c1b#1
Identical Phi Values (byte) doplasma::c2A#2 (byte) doplasma::c2A#0
Identical Phi Values (byte) doplasma::c2B#2 (byte) doplasma::c2B#0
Identical Phi Values (byte*) doplasma::scrn#10 (byte*) doplasma::scrn#13
Identical Phi Values (byte) doplasma::c2A#3 (byte) doplasma::c2A#2
Identical Phi Values (byte) doplasma::c2B#3 (byte) doplasma::c2B#2
Identical Phi Values (byte*) doplasma::scrn#11 (byte*) doplasma::scrn#10
Identical Phi Values (byte) doplasma::jj#4 (byte) doplasma::jj#3
Identical Phi Values (byte*) doplasma::scrn#3 (byte*) doplasma::scrn#6
Identical Phi Values (word) makechar::c#11 (word) makechar::c#10
Identical Phi Values (byte) makechar::i#10 (byte) makechar::i#3
Identical Phi Values (byte) makechar::s#2 (byte) makechar::s#6
Identical Phi Values (word) Ticks#19 (word) Ticks#0
Identical Phi Values (byte*) print_char_cursor#44 (byte*) print_char_cursor#0
Identical Phi Values (byte*) print_line_cursor#26 (byte*) print_char_cursor#0
Identical Phi Values (byte) main::v#2 (byte) main::v#1
Identical Phi Values (byte) main::block#2 (byte) main::block#1
Identical Phi Values (word) Ticks#13 (word) Ticks#19
Identical Phi Values (byte*) print_char_cursor#37 (byte*) print_char_cursor#44
Identical Phi Values (byte*) print_line_cursor#18 (byte*) print_line_cursor#26
Identical Phi Values (word) Ticks#10 (word) Ticks#12
Identical Phi Values (byte*) print_char_cursor#14 (byte*) print_char_cursor#12
Identical Phi Values (byte*) print_line_cursor#13 (byte*) print_line_cursor#11
Identical Phi Values (word) Ticks#11 (word) Ticks#10
Identical Phi Values (byte*) print_char_cursor#16 (byte*) print_char_cursor#14
Identical Phi Values (byte*) print_line_cursor#15 (byte*) print_line_cursor#13
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (word) makechar::c#10 (word) makechar::c#3
Identical Phi Values (byte) makechar::s#6 (byte) makechar::s#1
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) print_ln::$1 [8] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1
Simple Condition (bool~) doplasma::$0 [100] if((byte) doplasma::ii#3<(byte) $19) goto doplasma::@2
Simple Condition (bool~) doplasma::$2 [115] if((byte) doplasma::i#3<(byte) $28) goto doplasma::@8
Simple Condition (bool~) doplasma::$4 [128] if((byte) doplasma::jj#3<(byte) $19) goto doplasma::@14
Simple Condition (bool~) doplasma::$5 [133] if((byte) doplasma::j#3<(byte) $28) goto doplasma::@17
Simple Condition (bool~) makechar::$0 [150] if((word) makechar::c#3<(word) $100) goto makechar::@2
Simple Condition (bool~) makechar::$2 [157] if((byte) makechar::i#3<(byte) 8) goto makechar::@5
Simple Condition (bool~) makechar::$3 [165] if((byte) makechar::ii#3<(byte) 8) goto makechar::@8
Simple Condition (bool~) makechar::$7 [174] if((byte~) makechar::$5<=(byte) makechar::s#1) goto makechar::@10
Simple Condition (bool~) main::$6 [203] if((byte) 0!=(word) main::count#2) goto main::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) print_char_cursor#0 = (byte*) 1024
Constant (const word) Ticks#0 = 0
Constant (const byte) doplasma::c1a#0 = 0
Constant (const byte) doplasma::c1b#0 = 0
Constant (const byte) doplasma::c2a#0 = 0
Constant (const byte) doplasma::c2b#0 = 0
Constant (const byte) doplasma::c1a#1 = 0
Constant (const byte) doplasma::c1b#1 = 0
Constant (const byte) doplasma::c2A#0 = 0
Constant (const byte) doplasma::c2B#0 = 0
Constant (const byte) doplasma::i#0 = 0
Constant (const byte) doplasma::ii#0 = 0
Constant (const byte) doplasma::j#0 = 0
Constant (const byte) doplasma::jj#0 = 0
Constant (const byte) doplasma::ii#1 = 0
Constant (const byte) doplasma::i#1 = 0
Constant (const byte) doplasma::jj#1 = 0
Constant (const byte) doplasma::j#1 = 0
Constant (const byte) makechar::i#0 = 0
Constant (const byte) makechar::ii#0 = 0
Constant (const byte) makechar::b#0 = 0
Constant (const byte) makechar::s#0 = 0
Constant (const word) makechar::c#0 = 0
Constant (const word) makechar::c#1 = 0
Constant (const byte) makechar::i#1 = 0
Constant (const byte) makechar::b#1 = 0
Constant (const byte) makechar::ii#1 = 0
Constant (const byte) main::v#0 = 0
Constant (const byte) main::block#0 = 0
Constant (const word) main::count#0 = $1f4
Constant (const byte) main::tmp#0 = 0
Constant (const byte*) doplasma::scrn#1 = SCREEN1
Constant (const byte*) doplasma::scrn#2 = SCREEN2
Constant (const signed word) main::return#0 = 0
Successful SSA optimization Pass2ConstantIdentification
Constant (const signed word) main::return#2 = main::return#0
Successful SSA optimization Pass2ConstantIdentification
De-inlining pointer[w] to *(pointer+w) [178] *((const byte*) CHARSET + (word~) makechar::$9) ← (byte) makechar::b#3
Successful SSA optimization Pass2DeInlineWordDerefIdx
Simplifying constant evaluating to zero (byte)(word)(const byte*) SCREEN1>>(byte) $e^(byte) 3 in [198] (byte) main::tmp#2 ← (byte) main::tmp#1 | (byte)(word)(const byte*) SCREEN1>>(byte) $e^(byte) 3
Successful SSA optimization PassNSimplifyConstantZero
Simplifying expression containing zero 3 in [108] (byte) doplasma::c1A#1 ← (const byte) doplasma::c1a#1 + (byte) 3
Simplifying expression containing zero 5 in [109] (byte) doplasma::c1B#1 ← (const byte) doplasma::c1b#1 - (byte) 5
Simplifying expression containing zero 2 in [123] (byte) doplasma::c2A#1 ← (const byte) doplasma::c2A#0 + (byte) 2
Simplifying expression containing zero 3 in [124] (byte) doplasma::c2B#1 ← (const byte) doplasma::c2B#0 - (byte) 3
Simplifying expression containing zero main::tmp#1 in [198] (byte) main::tmp#2 ← (byte) main::tmp#1 | (byte) 0
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused variable (byte) doplasma::c1A#1 and assignment [45] (byte) doplasma::c1A#1 ← (byte) 3
Eliminating unused variable (byte) doplasma::c1B#1 and assignment [46] (byte) doplasma::c1B#1 ← (byte) 5
Eliminating unused variable (byte) doplasma::c2A#1 and assignment [54] (byte) doplasma::c2A#1 ← (byte) 2
Eliminating unused variable (byte) doplasma::c2B#1 and assignment [55] (byte) doplasma::c2B#1 ← (byte) 3
Eliminating unused constant (const byte) doplasma::c1a#0
Eliminating unused constant (const byte) doplasma::c1b#0
Eliminating unused constant (const byte) doplasma::c2a#0
Eliminating unused constant (const byte) doplasma::c2b#0
Eliminating unused constant (const byte) doplasma::i#0
Eliminating unused constant (const byte) doplasma::ii#0
Eliminating unused constant (const byte) doplasma::j#0
Eliminating unused constant (const byte) doplasma::jj#0
Eliminating unused constant (const byte) makechar::i#0
Eliminating unused constant (const byte) makechar::ii#0
Eliminating unused constant (const byte) makechar::b#0
Eliminating unused constant (const byte) makechar::s#0
Eliminating unused constant (const word) makechar::c#0
Eliminating unused constant (const byte) main::v#0
Eliminating unused constant (const byte) main::block#0
Eliminating unused constant (const byte) main::tmp#0
Eliminating unused constant (const signed word) main::return#2
Eliminating unused constant (const word) Ticks#0
Successful SSA optimization PassNEliminateUnusedVars
Eliminating unused constant (const signed word) main::return#0
Successful SSA optimization PassNEliminateUnusedVars
Simplifying constant integer cast (word)(const byte*) SCREEN1>>(byte) 6&(byte) $f0|(word)(const byte*) CHARSET>>(byte) $a&(byte) $e
Simplifying constant integer cast (word)(const byte*) SCREEN2>>(byte) 6&(byte) $f0|(word)(const byte*) CHARSET>>(byte) $a&(byte) $e
Successful SSA optimization PassNCastSimplification
Alias (byte) main::tmp#1 = (byte) main::tmp#2
Successful SSA optimization Pass2AliasElimination
Inlining constant with var siblings (const byte) doplasma::c1a#1
Inlining constant with var siblings (const byte) doplasma::c1b#1
Inlining constant with var siblings (const byte) doplasma::ii#1
Inlining constant with var siblings (const byte) doplasma::i#1
Inlining constant with var siblings (const byte) doplasma::jj#1
Inlining constant with var siblings (const byte) doplasma::j#1
Inlining constant with var siblings (const byte*) doplasma::scrn#1
Inlining constant with var siblings (const byte*) doplasma::scrn#2
Inlining constant with var siblings (const word) makechar::c#1
Inlining constant with var siblings (const byte) makechar::i#1
Inlining constant with var siblings (const byte) makechar::b#1
Inlining constant with var siblings (const byte) makechar::ii#1
Inlining constant with var siblings (const word) main::count#0
Inlining constant with var siblings (const byte*) print_char_cursor#0
Constant inlined makechar::c#1 = (byte) 0
Constant inlined makechar::b#1 = (byte) 0
Constant inlined doplasma::i#1 = (byte) 0
Constant inlined makechar::ii#1 = (byte) 0
Constant inlined doplasma::j#1 = (byte) 0
Constant inlined doplasma::ii#1 = (byte) 0
Constant inlined doplasma::jj#1 = (byte) 0
Constant inlined print_char_cursor#0 = (byte*) 1024
Constant inlined main::count#0 = (word) $1f4
Constant inlined doplasma::scrn#2 = (const byte*) SCREEN2
Constant inlined doplasma::scrn#1 = (const byte*) SCREEN1
Constant inlined doplasma::c1a#1 = (byte) 0
Constant inlined doplasma::c1b#1 = (byte) 0
Constant inlined makechar::i#1 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Added new block during phi lifting makechar::@22(between makechar::@21 and makechar::@10)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @13
Adding NOP phi() at start of @49
Adding NOP phi() at start of @50
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@8
Adding NOP phi() at start of main::@12
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of doplasma::@3
Adding NOP phi() at start of doplasma::@14
Adding NOP phi() at start of end::@2
Adding NOP phi() at start of end::@3
Adding NOP phi() at start of print_ln
Adding NOP phi() at start of print_ln::@2
Adding NOP phi() at start of print_word::@2
Adding NOP phi() at start of print_byte::@2
Adding NOP phi() at start of makechar
Adding NOP phi() at start of makechar::@5
Adding NOP phi() at start of makechar::@8
CALL GRAPH
Calls in [] to main:5
Calls in [main] to makechar:9 start:11 end:20 doplasma:24 doplasma:26
Calls in [end] to start:68 print_word:72 print_ln:74
Calls in [print_word] to print_byte:86 print_byte:90
Calls in [print_byte] to print_char:98 print_char:103
Calls in [makechar] to rand:133
Created 21 initial phi equivalence classes
Coalesced [29] main::count#8 ← main::count#1
Coalesced [36] doplasma::scrn#16 ← doplasma::scrn#13
Coalesced [45] doplasma::jj#8 ← doplasma::jj#2
Coalesced [46] doplasma::scrn#15 ← doplasma::scrn#0
Coalesced [50] doplasma::j#5 ← doplasma::j#2
Coalesced [56] doplasma::i#5 ← doplasma::i#2
Coalesced [57] doplasma::c2a#5 ← doplasma::c2a#2
Coalesced [58] doplasma::c2b#5 ← doplasma::c2b#2
Coalesced [64] doplasma::ii#5 ← doplasma::ii#2
Coalesced [65] doplasma::c1a#5 ← doplasma::c1a#2
Coalesced [66] doplasma::c1b#5 ← doplasma::c1b#2
Coalesced [83] print_line_cursor#31 ← print_line_cursor#1
Coalesced [85] print_byte::b#4 ← print_byte::b#0
Coalesced [88] print_byte::b#5 ← print_byte::b#1
Coalesced [89] print_char_cursor#49 ← print_char_cursor#10
Coalesced [96] print_char::ch#3 ← print_char::ch#0
Coalesced [97] print_char_cursor#50 ← print_char_cursor#35
Coalesced [101] print_char::ch#4 ← print_char::ch#1
Coalesced (already) [102] print_char_cursor#51 ← print_char_cursor#10
Coalesced [122] makechar::c#14 ← makechar::c#2
Coalesced [131] makechar::i#11 ← makechar::i#2
Coalesced [139] makechar::b#10 ← makechar::b#2
Coalesced [142] makechar::ii#8 ← makechar::ii#2
Coalesced [143] makechar::b#9 ← makechar::b#7
Coalesced (already) [144] makechar::b#11 ← makechar::b#3
Coalesced down to 18 phi equivalence classes
Culled Empty Block (label) @13
Culled Empty Block (label) @50
Culled Empty Block (label) main::@12
Culled Empty Block (label) doplasma::@3
Culled Empty Block (label) doplasma::@9
Culled Empty Block (label) doplasma::@14
Culled Empty Block (label) end::@3
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) print_ln::@3
Culled Empty Block (label) print_word::@2
Culled Empty Block (label) print_byte::@2
Culled Empty Block (label) makechar::@5
Culled Empty Block (label) makechar::@22
Renumbering block @43 to @1
Renumbering block @45 to @2
Renumbering block @49 to @3
Renumbering block doplasma::@7 to doplasma::@3
Renumbering block doplasma::@8 to doplasma::@4
Renumbering block doplasma::@13 to doplasma::@5
Renumbering block doplasma::@16 to doplasma::@6
Renumbering block doplasma::@17 to doplasma::@7
Renumbering block doplasma::@18 to doplasma::@8
Renumbering block makechar::@4 to makechar::@3
Renumbering block makechar::@6 to makechar::@4
Renumbering block makechar::@7 to makechar::@5
Renumbering block makechar::@8 to makechar::@6
Renumbering block makechar::@9 to makechar::@7
Renumbering block makechar::@10 to makechar::@8
Renumbering block makechar::@13 to makechar::@9
Renumbering block makechar::@21 to makechar::@10
Renumbering block main::@8 to main::@4
Renumbering block main::@9 to main::@5
Renumbering block main::@10 to main::@6
Renumbering block main::@11 to main::@7
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of end::@2
Adding NOP phi() at start of print_ln
Adding NOP phi() at start of makechar
Adding NOP phi() at start of makechar::@6
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi()
to:@1
@1: scope:[] from @begin
[1] (word) last_time ← (word) 0
to:@2
@2: scope:[] from @1
[2] (word) rand_seed ← (word) 0
to:@3
@3: scope:[] from @2
[3] phi()
[4] call main
to:@end
@end: scope:[] from @3
[5] phi()
(signed word()) main()
main: scope:[main] from @3
[6] (word) rand_seed ← (word) $194a
[7] call makechar
to:main::@4
main::@4: scope:[main] from main
[8] phi()
[9] call start
to:main::@5
main::@5: scope:[main] from main::@4
[10] (byte) main::block#1 ← *((const byte*) CIA2_PORT_A)
[11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc
[12] *((const byte*) CIA2_PORT_A) ← (byte) main::tmp#1
[13] (byte) main::v#1 ← *((const byte*) VIC_MEMORY)
to:main::@1
main::@1: scope:[main] from main::@5 main::@7
[14] (word) main::count#2 ← phi( main::@7/(word) main::count#1 main::@5/(word) $1f4 )
[15] if((byte) 0!=(word) main::count#2) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@1
[16] *((const byte*) VIC_MEMORY) ← (byte) main::v#1
[17] *((const byte*) CIA2_PORT_A) ← (byte) main::block#1
[18] call end
to:main::@return
main::@return: scope:[main] from main::@3
[19] return
to:@return
main::@2: scope:[main] from main::@1
[20] phi()
[21] call doplasma
to:main::@6
main::@6: scope:[main] from main::@2
[22] *((const byte*) VIC_MEMORY) ← (const byte) PAGE1
[23] call doplasma
to:main::@7
main::@7: scope:[main] from main::@6
[24] *((const byte*) VIC_MEMORY) ← (const byte) PAGE2
[25] (word) main::count#1 ← -- (word) main::count#2
to:main::@1
(void()) doplasma((byte*) doplasma::scrn)
doplasma: scope:[doplasma] from main::@2 main::@6
[26] (byte*) doplasma::scrn#13 ← phi( main::@6/(const byte*) SCREEN2 main::@2/(const byte*) SCREEN1 )
to:doplasma::@1
doplasma::@1: scope:[doplasma] from doplasma doplasma::@2
[27] (byte) doplasma::c1b#3 ← phi( doplasma/(byte) 0 doplasma::@2/(byte) doplasma::c1b#2 )
[27] (byte) doplasma::c1a#3 ← phi( doplasma/(byte) 0 doplasma::@2/(byte) doplasma::c1a#2 )
[27] (byte) doplasma::ii#3 ← phi( doplasma/(byte) 0 doplasma::@2/(byte) doplasma::ii#2 )
[28] if((byte) doplasma::ii#3<(byte) $19) goto doplasma::@2
to:doplasma::@3
doplasma::@3: scope:[doplasma] from doplasma::@1 doplasma::@4
[29] (byte) doplasma::c2b#3 ← phi( doplasma::@1/(const byte) doplasma::c2B#0 doplasma::@4/(byte) doplasma::c2b#2 )
[29] (byte) doplasma::c2a#3 ← phi( doplasma::@1/(const byte) doplasma::c2A#0 doplasma::@4/(byte) doplasma::c2a#2 )
[29] (byte) doplasma::i#3 ← phi( doplasma::@1/(byte) 0 doplasma::@4/(byte) doplasma::i#2 )
[30] if((byte) doplasma::i#3<(byte) $28) goto doplasma::@4
to:doplasma::@5
doplasma::@5: scope:[doplasma] from doplasma::@3 doplasma::@8
[31] (byte*) doplasma::scrn#6 ← phi( doplasma::@8/(byte*) doplasma::scrn#0 doplasma::@3/(byte*) doplasma::scrn#13 )
[31] (byte) doplasma::jj#3 ← phi( doplasma::@8/(byte) doplasma::jj#2 doplasma::@3/(byte) 0 )
[32] if((byte) doplasma::jj#3<(byte) $19) goto doplasma::@6
to:doplasma::@return
doplasma::@return: scope:[doplasma] from doplasma::@5
[33] return
to:@return
doplasma::@6: scope:[doplasma] from doplasma::@5 doplasma::@7
[34] (byte) doplasma::j#3 ← phi( doplasma::@5/(byte) 0 doplasma::@7/(byte) doplasma::j#2 )
[35] if((byte) doplasma::j#3<(byte) $28) goto doplasma::@7
to:doplasma::@8
doplasma::@8: scope:[doplasma] from doplasma::@6
[36] (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#6 + (byte) $28
[37] (byte) doplasma::jj#2 ← ++ (byte) doplasma::jj#3
to:doplasma::@5
doplasma::@7: scope:[doplasma] from doplasma::@6
[38] (byte~) doplasma::$6 ← *((const byte*) xbuf + (byte) doplasma::j#3) + *((const byte*) ybuf + (byte) doplasma::jj#3)
[39] *((byte*) doplasma::scrn#6 + (byte) doplasma::j#3) ← (byte~) doplasma::$6
[40] (byte) doplasma::j#2 ← ++ (byte) doplasma::j#3
to:doplasma::@6
doplasma::@4: scope:[doplasma] from doplasma::@3
[41] (byte~) doplasma::$3 ← *((const byte*) sinustable + (byte) doplasma::c2a#3) + *((const byte*) sinustable + (byte) doplasma::c2b#3)
[42] *((const byte*) xbuf + (byte) doplasma::i#3) ← (byte~) doplasma::$3
[43] (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (byte) 3
[44] (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (byte) 7
[45] (byte) doplasma::i#2 ← ++ (byte) doplasma::i#3
to:doplasma::@3
doplasma::@2: scope:[doplasma] from doplasma::@1
[46] (byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3)
[47] *((const byte*) ybuf + (byte) doplasma::ii#3) ← (byte~) doplasma::$1
[48] (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (byte) 4
[49] (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (byte) 9
[50] (byte) doplasma::ii#2 ← ++ (byte) doplasma::ii#3
to:doplasma::@1
(void()) end()
end: scope:[end] from main::@3
[51] (word) Ticks#1 ← (word) last_time
[52] call start
to:end::@1
end::@1: scope:[end] from end
[53] (word) last_time ← (word) last_time - (word) Ticks#1
[54] (word) Ticks#12 ← (word) last_time
[55] (word) print_word::w#0 ← (word) Ticks#12
[56] call print_word
to:end::@2
end::@2: scope:[end] from end::@1
[57] phi()
[58] call print_ln
to:end::@return
end::@return: scope:[end] from end::@2
[59] return
to:@return
(void()) print_ln()
print_ln: scope:[print_ln] from end::@2
[60] phi()
to:print_ln::@1
print_ln::@1: scope:[print_ln] from print_ln print_ln::@1
[61] (byte*) print_line_cursor#8 ← phi( print_ln/(byte*) 1024 print_ln::@1/(byte*) print_line_cursor#1 )
[62] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#8 + (byte) $28
[63] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1
to:print_ln::@return
print_ln::@return: scope:[print_ln] from print_ln::@1
[64] return
to:@return
(void()) print_word((word) print_word::w)
print_word: scope:[print_word] from end::@1
[65] (byte) print_byte::b#0 ← > (word) print_word::w#0
[66] call print_byte
to:print_word::@1
print_word::@1: scope:[print_word] from print_word
[67] (byte) print_byte::b#1 ← < (word) print_word::w#0
[68] call print_byte
to:print_word::@return
print_word::@return: scope:[print_word] from print_word::@1
[69] return
to:@return
(void()) print_byte((byte) print_byte::b)
print_byte: scope:[print_byte] from print_word print_word::@1
[70] (byte*) print_char_cursor#35 ← phi( print_word/(byte*) 1024 print_word::@1/(byte*) print_char_cursor#10 )
[70] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
[71] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4
[72] (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0)
[73] call print_char
to:print_byte::@1
print_byte::@1: scope:[print_byte] from print_byte
[74] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f
[75] (byte) print_char::ch#1 ← *((const byte*) print_hextab + (byte~) print_byte::$2)
[76] call print_char
to:print_byte::@return
print_byte::@return: scope:[print_byte] from print_byte::@1
[77] return
to:@return
(void()) print_char((byte) print_char::ch)
print_char: scope:[print_char] from print_byte print_byte::@1
[78] (byte*) print_char_cursor#25 ← phi( print_byte/(byte*) print_char_cursor#35 print_byte::@1/(byte*) print_char_cursor#10 )
[78] (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 )
[79] *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2
[80] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#25
to:print_char::@return
print_char::@return: scope:[print_char] from print_char
[81] return
to:@return
(void()) start()
start: scope:[start] from end main::@4
asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1 }
[83] (word) rand_seed ← (word) $194a
to:start::@return
start::@return: scope:[start] from start
[84] return
to:@return
(void()) makechar()
makechar: scope:[makechar] from main
[85] phi()
to:makechar::@1
makechar::@1: scope:[makechar] from makechar makechar::@4
[86] (word) makechar::c#3 ← phi( makechar/(byte) 0 makechar::@4/(word) makechar::c#2 )
[87] if((word) makechar::c#3<(word) $100) goto makechar::@2
to:makechar::@return
makechar::@return: scope:[makechar] from makechar::@1
[88] return
to:@return
makechar::@2: scope:[makechar] from makechar::@1
[89] (byte~) makechar::$1 ← (byte)(word) makechar::c#3
[90] (byte) makechar::s#1 ← *((const byte*) sinustable + (byte~) makechar::$1)
to:makechar::@3
makechar::@3: scope:[makechar] from makechar::@2 makechar::@7
[91] (byte) makechar::i#3 ← phi( makechar::@2/(byte) 0 makechar::@7/(byte) makechar::i#2 )
[92] if((byte) makechar::i#3<(byte) 8) goto makechar::@5
to:makechar::@4
makechar::@4: scope:[makechar] from makechar::@3
[93] (word) makechar::c#2 ← ++ (word) makechar::c#3
to:makechar::@1
makechar::@5: scope:[makechar] from makechar::@3 makechar::@8
[94] (byte) makechar::b#3 ← phi( makechar::@8/(byte) makechar::b#7 makechar::@3/(byte) 0 )
[94] (byte) makechar::ii#3 ← phi( makechar::@8/(byte) makechar::ii#2 makechar::@3/(byte) 0 )
[95] if((byte) makechar::ii#3<(byte) 8) goto makechar::@6
to:makechar::@7
makechar::@7: scope:[makechar] from makechar::@5
[96] (word~) makechar::$8 ← (word) makechar::c#3 << (byte) 3
[97] (word~) makechar::$9 ← (word~) makechar::$8 + (byte) makechar::i#3
[98] (byte*~) makechar::$10 ← (const byte*) CHARSET + (word~) makechar::$9
[99] *((byte*~) makechar::$10) ← (byte) makechar::b#3
[100] (byte) makechar::i#2 ← ++ (byte) makechar::i#3
to:makechar::@3
makechar::@6: scope:[makechar] from makechar::@5
[101] phi()
[102] call rand
[103] (byte) rand::return#2 ← (byte) rand::return#0
to:makechar::@10
makechar::@10: scope:[makechar] from makechar::@6
[104] (byte~) makechar::$4 ← (byte) rand::return#2
[105] (byte~) makechar::$5 ← (byte~) makechar::$4 & (byte) $ff
[106] if((byte~) makechar::$5<=(byte) makechar::s#1) goto makechar::@8
to:makechar::@9
makechar::@9: scope:[makechar] from makechar::@10
[107] (byte) makechar::b#2 ← (byte) makechar::b#3 | *((const byte*) bittab + (byte) makechar::ii#3)
to:makechar::@8
makechar::@8: scope:[makechar] from makechar::@10 makechar::@9
[108] (byte) makechar::b#7 ← phi( makechar::@9/(byte) makechar::b#2 makechar::@10/(byte) makechar::b#3 )
[109] (byte) makechar::ii#2 ← ++ (byte) makechar::ii#3
to:makechar::@5
(byte()) rand()
rand: scope:[rand] from makechar::@6
asm { ldx#8 ldaRAND_SEED+0 __rand_loop: asl rolRAND_SEED+1 bcc__no_eor eor#$2D __no_eor: dex bne__rand_loop staRAND_SEED+0 }
[111] (byte) rand::return#0 ← (byte)(word) rand_seed
to:rand::@return
rand::@return: scope:[rand] from rand
[112] return
to:@return
VARIABLE REGISTER WEIGHTS
(word) Ticks
(word) Ticks#1 2.0
(word) Ticks#12 4.0
(void()) doplasma((byte*) doplasma::scrn)
(byte~) doplasma::$1 202.0
(byte~) doplasma::$3 202.0
(byte~) doplasma::$6 2002.0
(byte) doplasma::c1A
(byte) doplasma::c1B
(byte) doplasma::c1a
(byte) doplasma::c1a#2 67.33333333333333
(byte) doplasma::c1a#3 75.75
(byte) doplasma::c1b
(byte) doplasma::c1b#2 101.0
(byte) doplasma::c1b#3 60.599999999999994
(byte) doplasma::c2A
(byte) doplasma::c2B
(byte) doplasma::c2a
(byte) doplasma::c2a#2 67.33333333333333
(byte) doplasma::c2a#3 75.75
(byte) doplasma::c2b
(byte) doplasma::c2b#2 101.0
(byte) doplasma::c2b#3 60.599999999999994
(byte) doplasma::i
(byte) doplasma::i#2 202.0
(byte) doplasma::i#3 67.33333333333333
(byte) doplasma::ii
(byte) doplasma::ii#2 202.0
(byte) doplasma::ii#3 67.33333333333333
(byte) doplasma::j
(byte) doplasma::j#2 2002.0
(byte) doplasma::j#3 1251.25
(byte) doplasma::jj
(byte) doplasma::jj#2 202.0
(byte) doplasma::jj#3 163.0
(byte*) doplasma::scrn
(byte*) doplasma::scrn#0 101.0
(byte*) doplasma::scrn#13 6.733333333333333
(byte*) doplasma::scrn#6 186.28571428571428
(void()) end()
(word) last_time loadstore 0.41666666666666663
(signed word()) main()
(byte) main::block
(byte) main::block#1 0.46153846153846156
(word) main::count
(word) main::count#1 22.0
(word) main::count#2 4.714285714285714
(signed word) main::return
(byte) main::tmp
(byte) main::tmp#1 4.0
(byte) main::v
(byte) main::v#1 0.4444444444444444
(void()) makechar()
(byte~) makechar::$1 22.0
(byte*~) makechar::$10 202.0
(byte~) makechar::$4 2002.0
(byte~) makechar::$5 2002.0
(word~) makechar::$8 202.0
(word~) makechar::$9 202.0
(byte) makechar::b
(byte) makechar::b#2 2002.0
(byte) makechar::b#3 282.1818181818182
(byte) makechar::b#7 1501.5
(word) makechar::c
(word) makechar::c#2 22.0
(word) makechar::c#3 6.090909090909091
(byte) makechar::i
(byte) makechar::i#2 202.0
(byte) makechar::i#3 23.764705882352942
(byte) makechar::ii
(byte) makechar::ii#2 2002.0
(byte) makechar::ii#3 400.4
(byte) makechar::s
(byte) makechar::s#1 53.26315789473684
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 4.0
(byte~) print_byte::$2 4.0
(byte) print_byte::b
(byte) print_byte::b#0 4.0
(byte) print_byte::b#1 4.0
(byte) print_byte::b#2 2.0
(void()) print_char((byte) print_char::ch)
(byte) print_char::ch
(byte) print_char::ch#0 4.0
(byte) print_char::ch#1 4.0
(byte) print_char::ch#2 6.0
(byte*) print_char_cursor
(byte*) print_char_cursor#10 1.0
(byte*) print_char_cursor#25 4.0
(byte*) print_char_cursor#35 1.3333333333333333
(byte*) print_line_cursor
(byte*) print_line_cursor#1 16.5
(byte*) print_line_cursor#8 22.0
(void()) print_ln()
(byte*) print_screen
(void()) print_word((word) print_word::w)
(word) print_word::w
(word) print_word::w#0 2.0
(byte()) rand()
(byte) rand::return
(byte) rand::return#0 334.33333333333337
(byte) rand::return#2 2002.0
(word) rand_seed loadstore 0.21428571428571427
(void()) start()
Initial phi equivalence classes
[ main::count#2 main::count#1 ]
[ doplasma::ii#3 doplasma::ii#2 ]
[ doplasma::c1a#3 doplasma::c1a#2 ]
[ doplasma::c1b#3 doplasma::c1b#2 ]
[ doplasma::i#3 doplasma::i#2 ]
[ doplasma::c2a#3 doplasma::c2a#2 ]
[ doplasma::c2b#3 doplasma::c2b#2 ]
[ doplasma::jj#3 doplasma::jj#2 ]
[ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ]
[ doplasma::j#3 doplasma::j#2 ]
[ print_line_cursor#8 print_line_cursor#1 ]
[ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
[ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
[ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ]
[ makechar::c#3 makechar::c#2 ]
[ makechar::i#3 makechar::i#2 ]
[ makechar::ii#3 makechar::ii#2 ]
[ makechar::b#3 makechar::b#7 makechar::b#2 ]
Added variable last_time to live range equivalence class [ last_time ]
Added variable rand_seed to live range equivalence class [ rand_seed ]
Added variable main::block#1 to live range equivalence class [ main::block#1 ]
Added variable main::tmp#1 to live range equivalence class [ main::tmp#1 ]
Added variable main::v#1 to live range equivalence class [ main::v#1 ]
Added variable doplasma::$6 to live range equivalence class [ doplasma::$6 ]
Added variable doplasma::$3 to live range equivalence class [ doplasma::$3 ]
Added variable doplasma::$1 to live range equivalence class [ doplasma::$1 ]
Added variable Ticks#1 to live range equivalence class [ Ticks#1 ]
Added variable Ticks#12 to live range equivalence class [ Ticks#12 ]
Added variable print_word::w#0 to live range equivalence class [ print_word::w#0 ]
Added variable print_byte::$0 to live range equivalence class [ print_byte::$0 ]
Added variable print_byte::$2 to live range equivalence class [ print_byte::$2 ]
Added variable makechar::$1 to live range equivalence class [ makechar::$1 ]
Added variable makechar::s#1 to live range equivalence class [ makechar::s#1 ]
Added variable makechar::$8 to live range equivalence class [ makechar::$8 ]
Added variable makechar::$9 to live range equivalence class [ makechar::$9 ]
Added variable makechar::$10 to live range equivalence class [ makechar::$10 ]
Added variable rand::return#2 to live range equivalence class [ rand::return#2 ]
Added variable makechar::$4 to live range equivalence class [ makechar::$4 ]
Added variable makechar::$5 to live range equivalence class [ makechar::$5 ]
Added variable rand::return#0 to live range equivalence class [ rand::return#0 ]
Complete equivalence classes
[ main::count#2 main::count#1 ]
[ doplasma::ii#3 doplasma::ii#2 ]
[ doplasma::c1a#3 doplasma::c1a#2 ]
[ doplasma::c1b#3 doplasma::c1b#2 ]
[ doplasma::i#3 doplasma::i#2 ]
[ doplasma::c2a#3 doplasma::c2a#2 ]
[ doplasma::c2b#3 doplasma::c2b#2 ]
[ doplasma::jj#3 doplasma::jj#2 ]
[ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ]
[ doplasma::j#3 doplasma::j#2 ]
[ print_line_cursor#8 print_line_cursor#1 ]
[ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
[ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
[ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ]
[ makechar::c#3 makechar::c#2 ]
[ makechar::i#3 makechar::i#2 ]
[ makechar::ii#3 makechar::ii#2 ]
[ makechar::b#3 makechar::b#7 makechar::b#2 ]
[ last_time ]
[ rand_seed ]
[ main::block#1 ]
[ main::tmp#1 ]
[ main::v#1 ]
[ doplasma::$6 ]
[ doplasma::$3 ]
[ doplasma::$1 ]
[ Ticks#1 ]
[ Ticks#12 ]
[ print_word::w#0 ]
[ print_byte::$0 ]
[ print_byte::$2 ]
[ makechar::$1 ]
[ makechar::s#1 ]
[ makechar::$8 ]
[ makechar::$9 ]
[ makechar::$10 ]
[ rand::return#2 ]
[ makechar::$4 ]
[ makechar::$5 ]
[ rand::return#0 ]
Allocated zp[2]:2 [ main::count#2 main::count#1 ]
Allocated zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ]
Allocated zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ]
Allocated zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ]
Allocated zp[1]:7 [ doplasma::i#3 doplasma::i#2 ]
Allocated zp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ]
Allocated zp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ]
Allocated zp[1]:10 [ doplasma::jj#3 doplasma::jj#2 ]
Allocated zp[2]:11 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ]
Allocated zp[1]:13 [ doplasma::j#3 doplasma::j#2 ]
Allocated zp[2]:14 [ print_line_cursor#8 print_line_cursor#1 ]
Allocated zp[1]:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Allocated zp[1]:17 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
Allocated zp[2]:18 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ]
Allocated zp[2]:20 [ makechar::c#3 makechar::c#2 ]
Allocated zp[1]:22 [ makechar::i#3 makechar::i#2 ]
Allocated zp[1]:23 [ makechar::ii#3 makechar::ii#2 ]
Allocated zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ]
Allocated zp[2]:25 [ last_time ]
Allocated zp[2]:27 [ rand_seed ]
Allocated zp[1]:29 [ main::block#1 ]
Allocated zp[1]:30 [ main::tmp#1 ]
Allocated zp[1]:31 [ main::v#1 ]
Allocated zp[1]:32 [ doplasma::$6 ]
Allocated zp[1]:33 [ doplasma::$3 ]
Allocated zp[1]:34 [ doplasma::$1 ]
Allocated zp[2]:35 [ Ticks#1 ]
Allocated zp[2]:37 [ Ticks#12 ]
Allocated zp[2]:39 [ print_word::w#0 ]
Allocated zp[1]:41 [ print_byte::$0 ]
Allocated zp[1]:42 [ print_byte::$2 ]
Allocated zp[1]:43 [ makechar::$1 ]
Allocated zp[1]:44 [ makechar::s#1 ]
Allocated zp[2]:45 [ makechar::$8 ]
Allocated zp[2]:47 [ makechar::$9 ]
Allocated zp[2]:49 [ makechar::$10 ]
Allocated zp[1]:51 [ rand::return#2 ]
Allocated zp[1]:52 [ makechar::$4 ]
Allocated zp[1]:53 [ makechar::$5 ]
Allocated zp[1]:54 [ rand::return#0 ]
INITIAL ASM
Target platform is c64basic / MOS6502X
// File Comments
// Upstart
.pc = $801 "Basic"
:BasicUpstart(__bbegin)
.pc = $80d "Program"
// Global Constants & labels
.label VIC_MEMORY = $d018
// CIA#2 Port A: Serial bus, RS-232, VIC memory bank
.label CIA2_PORT_A = $dd00
.label SCREEN1 = $e000
.label SCREEN2 = $e400
.label CHARSET = $e800
.const PAGE1 = SCREEN1>>6&$f0|CHARSET>>$a&$e
.const PAGE2 = SCREEN2>>6&$f0|CHARSET>>$a&$e
.label last_time = $19
.label rand_seed = $1b
.label print_line_cursor = $e
.label print_char_cursor = $12
.label Ticks = $23
.label Ticks_1 = $25
// @begin
__bbegin:
jmp __b1
// @1
__b1:
// [1] (word) last_time ← (word) 0 -- vwuz1=vwuc1
lda #<0
sta.z last_time
lda #>0
sta.z last_time+1
jmp __b2
// @2
__b2:
// [2] (word) rand_seed ← (word) 0 -- vwuz1=vwuc1
lda #<0
sta.z rand_seed
lda #>0
sta.z rand_seed+1
// [3] phi from @2 to @3 [phi:@2->@3]
__b3_from___b2:
jmp __b3
// @3
__b3:
// [4] call main
jsr main
// [5] phi from @3 to @end [phi:@3->@end]
__bend_from___b3:
jmp __bend
// @end
__bend:
// main
main: {
.label block = $1d
.label tmp = $1e
.label v = $1f
.label count = 2
// [6] (word) rand_seed ← (word) $194a -- vwuz1=vwuc1
lda #<$194a
sta.z rand_seed
lda #>$194a
sta.z rand_seed+1
// [7] call makechar
// [85] phi from main to makechar [phi:main->makechar]
makechar_from_main:
jsr makechar
// [8] phi from main to main::@4 [phi:main->main::@4]
__b4_from_main:
jmp __b4
// main::@4
__b4:
// [9] call start
jsr start
jmp __b5
// main::@5
__b5:
// [10] (byte) main::block#1 ← *((const byte*) CIA2_PORT_A) -- vbuz1=_deref_pbuc1
lda CIA2_PORT_A
sta.z block
// [11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc -- vbuz1=vbuz2_band_vbuc1
lda #$fc
and.z block
sta.z tmp
// [12] *((const byte*) CIA2_PORT_A) ← (byte) main::tmp#1 -- _deref_pbuc1=vbuz1
lda.z tmp
sta CIA2_PORT_A
// [13] (byte) main::v#1 ← *((const byte*) VIC_MEMORY) -- vbuz1=_deref_pbuc1
lda VIC_MEMORY
sta.z v
// [14] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
__b1_from___b5:
// [14] phi (word) main::count#2 = (word) $1f4 [phi:main::@5->main::@1#0] -- vwuz1=vwuc1
lda #<$1f4
sta.z count
lda #>$1f4
sta.z count+1
jmp __b1
/* Run the demo until a key was hit */
// main::@1
__b1:
// [15] if((byte) 0!=(word) main::count#2) goto main::@2 -- vwuc1_neq_vwuz1_then_la1
lda.z count+1
cmp #>0
bne __b2_from___b1
lda.z count
cmp #<0
bne __b2_from___b1
jmp __b3
// main::@3
__b3:
// [16] *((const byte*) VIC_MEMORY) ← (byte) main::v#1 -- _deref_pbuc1=vbuz1
lda.z v
sta VIC_MEMORY
// [17] *((const byte*) CIA2_PORT_A) ← (byte) main::block#1 -- _deref_pbuc1=vbuz1
lda.z block
sta CIA2_PORT_A
// [18] call end
jsr end
jmp __breturn
// main::@return
__breturn:
// [19] return
rts
// [20] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
__b2_from___b1:
jmp __b2
// main::@2
__b2:
// [21] call doplasma
// [26] phi from main::@2 to doplasma [phi:main::@2->doplasma]
doplasma_from___b2:
// [26] phi (byte*) doplasma::scrn#13 = (const byte*) SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1
lda #<SCREEN1
sta.z doplasma.scrn
lda #>SCREEN1
sta.z doplasma.scrn+1
jsr doplasma
jmp __b6
// main::@6
__b6:
// [22] *((const byte*) VIC_MEMORY) ← (const byte) PAGE1 -- _deref_pbuc1=vbuc2
lda #PAGE1
sta VIC_MEMORY
// [23] call doplasma
// [26] phi from main::@6 to doplasma [phi:main::@6->doplasma]
doplasma_from___b6:
// [26] phi (byte*) doplasma::scrn#13 = (const byte*) SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1
lda #<SCREEN2
sta.z doplasma.scrn
lda #>SCREEN2
sta.z doplasma.scrn+1
jsr doplasma
jmp __b7
// main::@7
__b7:
// [24] *((const byte*) VIC_MEMORY) ← (const byte) PAGE2 -- _deref_pbuc1=vbuc2
lda #PAGE2
sta VIC_MEMORY
// [25] (word) main::count#1 ← -- (word) main::count#2 -- vwuz1=_dec_vwuz1
lda.z count
bne !+
dec.z count+1
!:
dec.z count
// [14] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
__b1_from___b7:
// [14] phi (word) main::count#2 = (word) main::count#1 [phi:main::@7->main::@1#0] -- register_copy
jmp __b1
}
// doplasma
// doplasma(byte* zp($b) scrn)
doplasma: {
.const c2A = 0
.const c2B = 0
.label __1 = $22
.label __3 = $21
.label __6 = $20
.label c1a = 5
.label c1b = 6
.label ii = 4
.label c2a = 8
.label c2b = 9
.label i = 7
.label j = $d
.label scrn = $b
.label jj = $a
// [27] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
__b1_from_doplasma:
// [27] phi (byte) doplasma::c1b#3 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1
lda #0
sta.z c1b
// [27] phi (byte) doplasma::c1a#3 = (byte) 0 [phi:doplasma->doplasma::@1#1] -- vbuz1=vbuc1
lda #0
sta.z c1a
// [27] phi (byte) doplasma::ii#3 = (byte) 0 [phi:doplasma->doplasma::@1#2] -- vbuz1=vbuc1
lda #0
sta.z ii
jmp __b1
// doplasma::@1
__b1:
// [28] if((byte) doplasma::ii#3<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1
lda.z ii
cmp #$19
bcc __b2
// [29] phi from doplasma::@1 to doplasma::@3 [phi:doplasma::@1->doplasma::@3]
__b3_from___b1:
// [29] phi (byte) doplasma::c2b#3 = (const byte) doplasma::c2B#0 [phi:doplasma::@1->doplasma::@3#0] -- vbuz1=vbuc1
lda #c2B
sta.z c2b
// [29] phi (byte) doplasma::c2a#3 = (const byte) doplasma::c2A#0 [phi:doplasma::@1->doplasma::@3#1] -- vbuz1=vbuc1
lda #c2A
sta.z c2a
// [29] phi (byte) doplasma::i#3 = (byte) 0 [phi:doplasma::@1->doplasma::@3#2] -- vbuz1=vbuc1
lda #0
sta.z i
jmp __b3
// doplasma::@3
__b3:
// [30] if((byte) doplasma::i#3<(byte) $28) goto doplasma::@4 -- vbuz1_lt_vbuc1_then_la1
lda.z i
cmp #$28
bcc __b4
// [31] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5]
__b5_from___b3:
// [31] phi (byte*) doplasma::scrn#6 = (byte*) doplasma::scrn#13 [phi:doplasma::@3->doplasma::@5#0] -- register_copy
// [31] phi (byte) doplasma::jj#3 = (byte) 0 [phi:doplasma::@3->doplasma::@5#1] -- vbuz1=vbuc1
lda #0
sta.z jj
jmp __b5
// doplasma::@5
__b5:
// [32] if((byte) doplasma::jj#3<(byte) $19) goto doplasma::@6 -- vbuz1_lt_vbuc1_then_la1
lda.z jj
cmp #$19
bcc __b6_from___b5
jmp __breturn
// doplasma::@return
__breturn:
// [33] return
rts
// [34] phi from doplasma::@5 to doplasma::@6 [phi:doplasma::@5->doplasma::@6]
__b6_from___b5:
// [34] phi (byte) doplasma::j#3 = (byte) 0 [phi:doplasma::@5->doplasma::@6#0] -- vbuz1=vbuc1
lda #0
sta.z j
jmp __b6
// doplasma::@6
__b6:
// [35] if((byte) doplasma::j#3<(byte) $28) goto doplasma::@7 -- vbuz1_lt_vbuc1_then_la1
lda.z j
cmp #$28
bcc __b7
jmp __b8
// doplasma::@8
__b8:
// [36] (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z scrn
sta.z scrn
bcc !+
inc.z scrn+1
!:
// [37] (byte) doplasma::jj#2 ← ++ (byte) doplasma::jj#3 -- vbuz1=_inc_vbuz1
inc.z jj
// [31] phi from doplasma::@8 to doplasma::@5 [phi:doplasma::@8->doplasma::@5]
__b5_from___b8:
// [31] phi (byte*) doplasma::scrn#6 = (byte*) doplasma::scrn#0 [phi:doplasma::@8->doplasma::@5#0] -- register_copy
// [31] phi (byte) doplasma::jj#3 = (byte) doplasma::jj#2 [phi:doplasma::@8->doplasma::@5#1] -- register_copy
jmp __b5
// doplasma::@7
__b7:
// [38] (byte~) doplasma::$6 ← *((const byte*) xbuf + (byte) doplasma::j#3) + *((const byte*) ybuf + (byte) doplasma::jj#3) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz3
ldy.z j
lda xbuf,y
ldy.z jj
clc
adc ybuf,y
sta.z __6
// [39] *((byte*) doplasma::scrn#6 + (byte) doplasma::j#3) ← (byte~) doplasma::$6 -- pbuz1_derefidx_vbuz2=vbuz3
lda.z __6
ldy.z j
sta (scrn),y
// [40] (byte) doplasma::j#2 ← ++ (byte) doplasma::j#3 -- vbuz1=_inc_vbuz1
inc.z j
// [34] phi from doplasma::@7 to doplasma::@6 [phi:doplasma::@7->doplasma::@6]
__b6_from___b7:
// [34] phi (byte) doplasma::j#3 = (byte) doplasma::j#2 [phi:doplasma::@7->doplasma::@6#0] -- register_copy
jmp __b6
// doplasma::@4
__b4:
// [41] (byte~) doplasma::$3 ← *((const byte*) sinustable + (byte) doplasma::c2a#3) + *((const byte*) sinustable + (byte) doplasma::c2b#3) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3
ldy.z c2a
lda sinustable,y
ldy.z c2b
clc
adc sinustable,y
sta.z __3
// [42] *((const byte*) xbuf + (byte) doplasma::i#3) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuz2
lda.z __3
ldy.z i
sta xbuf,y
// [43] (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1
lax.z c2a
axs #-[3]
stx.z c2a
// [44] (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1
lax.z c2b
axs #-[7]
stx.z c2b
// [45] (byte) doplasma::i#2 ← ++ (byte) doplasma::i#3 -- vbuz1=_inc_vbuz1
inc.z i
// [29] phi from doplasma::@4 to doplasma::@3 [phi:doplasma::@4->doplasma::@3]
__b3_from___b4:
// [29] phi (byte) doplasma::c2b#3 = (byte) doplasma::c2b#2 [phi:doplasma::@4->doplasma::@3#0] -- register_copy
// [29] phi (byte) doplasma::c2a#3 = (byte) doplasma::c2a#2 [phi:doplasma::@4->doplasma::@3#1] -- register_copy
// [29] phi (byte) doplasma::i#3 = (byte) doplasma::i#2 [phi:doplasma::@4->doplasma::@3#2] -- register_copy
jmp __b3
// doplasma::@2
__b2:
// [46] (byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3
ldy.z c1a
lda sinustable,y
ldy.z c1b
clc
adc sinustable,y
sta.z __1
// [47] *((const byte*) ybuf + (byte) doplasma::ii#3) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuz2
lda.z __1
ldy.z ii
sta ybuf,y
// [48] (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1
lax.z c1a
axs #-[4]
stx.z c1a
// [49] (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1
lax.z c1b
axs #-[9]
stx.z c1b
// [50] (byte) doplasma::ii#2 ← ++ (byte) doplasma::ii#3 -- vbuz1=_inc_vbuz1
inc.z ii
// [27] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1]
__b1_from___b2:
// [27] phi (byte) doplasma::c1b#3 = (byte) doplasma::c1b#2 [phi:doplasma::@2->doplasma::@1#0] -- register_copy
// [27] phi (byte) doplasma::c1a#3 = (byte) doplasma::c1a#2 [phi:doplasma::@2->doplasma::@1#1] -- register_copy
// [27] phi (byte) doplasma::ii#3 = (byte) doplasma::ii#2 [phi:doplasma::@2->doplasma::@1#2] -- register_copy
jmp __b1
}
// end
end: {
// [51] (word) Ticks#1 ← (word) last_time -- vwuz1=vwuz2
lda.z last_time
sta.z Ticks
lda.z last_time+1
sta.z Ticks+1
// [52] call start
jsr start
jmp __b1
// end::@1
__b1:
// [53] (word) last_time ← (word) last_time - (word) Ticks#1 -- vwuz1=vwuz1_minus_vwuz2
lda.z last_time
sec
sbc.z Ticks
sta.z last_time
lda.z last_time+1
sbc.z Ticks+1
sta.z last_time+1
// [54] (word) Ticks#12 ← (word) last_time -- vwuz1=vwuz2
lda.z last_time
sta.z Ticks_1
lda.z last_time+1
sta.z Ticks_1+1
// [55] (word) print_word::w#0 ← (word) Ticks#12 -- vwuz1=vwuz2
lda.z Ticks_1
sta.z print_word.w
lda.z Ticks_1+1
sta.z print_word.w+1
// [56] call print_word
jsr print_word
// [57] phi from end::@1 to end::@2 [phi:end::@1->end::@2]
__b2_from___b1:
jmp __b2
// end::@2
__b2:
// [58] call print_ln
// [60] phi from end::@2 to print_ln [phi:end::@2->print_ln]
print_ln_from___b2:
jsr print_ln
jmp __breturn
// end::@return
__breturn:
// [59] return
rts
}
// print_ln
// Print a newline
print_ln: {
// [61] phi from print_ln to print_ln::@1 [phi:print_ln->print_ln::@1]
__b1_from_print_ln:
// [61] phi (byte*) print_line_cursor#8 = (byte*) 1024 [phi:print_ln->print_ln::@1#0] -- pbuz1=pbuc1
lda #<$400
sta.z print_line_cursor
lda #>$400
sta.z print_line_cursor+1
jmp __b1
// [61] phi from print_ln::@1 to print_ln::@1 [phi:print_ln::@1->print_ln::@1]
__b1_from___b1:
// [61] phi (byte*) print_line_cursor#8 = (byte*) print_line_cursor#1 [phi:print_ln::@1->print_ln::@1#0] -- register_copy
jmp __b1
// print_ln::@1
__b1:
// [62] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#8 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z print_line_cursor
sta.z print_line_cursor
bcc !+
inc.z print_line_cursor+1
!:
// [63] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1
lda.z print_line_cursor+1
cmp.z print_char_cursor+1
bcc __b1_from___b1
bne !+
lda.z print_line_cursor
cmp.z print_char_cursor
bcc __b1_from___b1
!:
jmp __breturn
// print_ln::@return
__breturn:
// [64] return
rts
}
// print_word
// Print a word as HEX
// print_word(word zp($27) w)
print_word: {
.label w = $27
// [65] (byte) print_byte::b#0 ← > (word) print_word::w#0 -- vbuz1=_hi_vwuz2
lda.z w+1
sta.z print_byte.b
// [66] call print_byte
// [70] phi from print_word to print_byte [phi:print_word->print_byte]
print_byte_from_print_word:
// [70] phi (byte*) print_char_cursor#35 = (byte*) 1024 [phi:print_word->print_byte#0] -- pbuz1=pbuc1
lda #<$400
sta.z print_char_cursor
lda #>$400
sta.z print_char_cursor+1
// [70] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy
jsr print_byte
jmp __b1
// print_word::@1
__b1:
// [67] (byte) print_byte::b#1 ← < (word) print_word::w#0 -- vbuz1=_lo_vwuz2
lda.z w
sta.z print_byte.b
// [68] call print_byte
// [70] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte]
print_byte_from___b1:
// [70] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#10 [phi:print_word::@1->print_byte#0] -- register_copy
// [70] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy
jsr print_byte
jmp __breturn
// print_word::@return
__breturn:
// [69] return
rts
}
// print_byte
// Print a byte as HEX
// print_byte(byte zp($10) b)
print_byte: {
.label __0 = $29
.label __2 = $2a
.label b = $10
// [71] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 -- vbuz1=vbuz2_ror_4
lda.z b
lsr
lsr
lsr
lsr
sta.z __0
// [72] (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0) -- vbuz1=pbuc1_derefidx_vbuz2
ldy.z __0
lda print_hextab,y
sta.z print_char.ch
// [73] call print_char
// [78] phi from print_byte to print_char [phi:print_byte->print_char]
print_char_from_print_byte:
// [78] phi (byte*) print_char_cursor#25 = (byte*) print_char_cursor#35 [phi:print_byte->print_char#0] -- register_copy
// [78] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy
jsr print_char
jmp __b1
// print_byte::@1
__b1:
// [74] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f -- vbuz1=vbuz2_band_vbuc1
lda #$f
and.z b
sta.z __2
// [75] (byte) print_char::ch#1 ← *((const byte*) print_hextab + (byte~) print_byte::$2) -- vbuz1=pbuc1_derefidx_vbuz2
ldy.z __2
lda print_hextab,y
sta.z print_char.ch
// [76] call print_char
// [78] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
print_char_from___b1:
// [78] phi (byte*) print_char_cursor#25 = (byte*) print_char_cursor#10 [phi:print_byte::@1->print_char#0] -- register_copy
// [78] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy
jsr print_char
jmp __breturn
// print_byte::@return
__breturn:
// [77] return
rts
}
// print_char
// Print a single char
// print_char(byte zp($11) ch)
print_char: {
.label ch = $11
// [79] *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2 -- _deref_pbuz1=vbuz2
lda.z ch
ldy #0
sta (print_char_cursor),y
// [80] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#25 -- pbuz1=_inc_pbuz1
inc.z print_char_cursor
bne !+
inc.z print_char_cursor+1
!:
jmp __breturn
// print_char::@return
__breturn:
// [81] return
rts
}
// start
start: {
.label LAST_TIME = last_time
// asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1 }
jsr $ffde
sta LAST_TIME
stx LAST_TIME+1
// [83] (word) rand_seed ← (word) $194a -- vwuz1=vwuc1
lda #<$194a
sta.z rand_seed
lda #>$194a
sta.z rand_seed+1
jmp __breturn
// start::@return
__breturn:
// [84] return
rts
}
// makechar
makechar: {
.label __1 = $2b
.label __4 = $34
.label __5 = $35
.label __8 = $2d
.label __9 = $2f
.label s = $2c
.label c = $14
.label i = $16
.label ii = $17
.label b = $18
.label __10 = $31
// [86] phi from makechar to makechar::@1 [phi:makechar->makechar::@1]
__b1_from_makechar:
// [86] phi (word) makechar::c#3 = (byte) 0 [phi:makechar->makechar::@1#0] -- vwuz1=vbuc1
lda #<0
sta.z c
lda #>0
sta.z c+1
jmp __b1
// makechar::@1
__b1:
// [87] if((word) makechar::c#3<(word) $100) goto makechar::@2 -- vwuz1_lt_vwuc1_then_la1
lda.z c+1
cmp #>$100
bcc __b2
bne !+
lda.z c
cmp #<$100
bcc __b2
!:
jmp __breturn
// makechar::@return
__breturn:
// [88] return
rts
// makechar::@2
__b2:
// [89] (byte~) makechar::$1 ← (byte)(word) makechar::c#3 -- vbuz1=_byte_vwuz2
lda.z c
sta.z __1
// [90] (byte) makechar::s#1 ← *((const byte*) sinustable + (byte~) makechar::$1) -- vbuz1=pbuc1_derefidx_vbuz2
ldy.z __1
lda sinustable,y
sta.z s
// [91] phi from makechar::@2 to makechar::@3 [phi:makechar::@2->makechar::@3]
__b3_from___b2:
// [91] phi (byte) makechar::i#3 = (byte) 0 [phi:makechar::@2->makechar::@3#0] -- vbuz1=vbuc1
lda #0
sta.z i
jmp __b3
// makechar::@3
__b3:
// [92] if((byte) makechar::i#3<(byte) 8) goto makechar::@5 -- vbuz1_lt_vbuc1_then_la1
lda.z i
cmp #8
bcc __b5_from___b3
jmp __b4
// makechar::@4
__b4:
// [93] (word) makechar::c#2 ← ++ (word) makechar::c#3 -- vwuz1=_inc_vwuz1
inc.z c
bne !+
inc.z c+1
!:
// [86] phi from makechar::@4 to makechar::@1 [phi:makechar::@4->makechar::@1]
__b1_from___b4:
// [86] phi (word) makechar::c#3 = (word) makechar::c#2 [phi:makechar::@4->makechar::@1#0] -- register_copy
jmp __b1
// [94] phi from makechar::@3 to makechar::@5 [phi:makechar::@3->makechar::@5]
__b5_from___b3:
// [94] phi (byte) makechar::b#3 = (byte) 0 [phi:makechar::@3->makechar::@5#0] -- vbuz1=vbuc1
lda #0
sta.z b
// [94] phi (byte) makechar::ii#3 = (byte) 0 [phi:makechar::@3->makechar::@5#1] -- vbuz1=vbuc1
lda #0
sta.z ii
jmp __b5
// makechar::@5
__b5:
// [95] if((byte) makechar::ii#3<(byte) 8) goto makechar::@6 -- vbuz1_lt_vbuc1_then_la1
lda.z ii
cmp #8
bcc __b6_from___b5
jmp __b7
// makechar::@7
__b7:
// [96] (word~) makechar::$8 ← (word) makechar::c#3 << (byte) 3 -- vwuz1=vwuz2_rol_3
lda.z c
asl
sta.z __8
lda.z c+1
rol
sta.z __8+1
asl.z __8
rol.z __8+1
asl.z __8
rol.z __8+1
// [97] (word~) makechar::$9 ← (word~) makechar::$8 + (byte) makechar::i#3 -- vwuz1=vwuz2_plus_vbuz3
lda.z i
clc
adc.z __8
sta.z __9
lda #0
adc.z __8+1
sta.z __9+1
// [98] (byte*~) makechar::$10 ← (const byte*) CHARSET + (word~) makechar::$9 -- pbuz1=pbuc1_plus_vwuz2
lda.z __9
clc
adc #<CHARSET
sta.z __10
lda.z __9+1
adc #>CHARSET
sta.z __10+1
// [99] *((byte*~) makechar::$10) ← (byte) makechar::b#3 -- _deref_pbuz1=vbuz2
lda.z b
ldy #0
sta (__10),y
// [100] (byte) makechar::i#2 ← ++ (byte) makechar::i#3 -- vbuz1=_inc_vbuz1
inc.z i
// [91] phi from makechar::@7 to makechar::@3 [phi:makechar::@7->makechar::@3]
__b3_from___b7:
// [91] phi (byte) makechar::i#3 = (byte) makechar::i#2 [phi:makechar::@7->makechar::@3#0] -- register_copy
jmp __b3
// [101] phi from makechar::@5 to makechar::@6 [phi:makechar::@5->makechar::@6]
__b6_from___b5:
jmp __b6
// makechar::@6
__b6:
// [102] call rand
jsr rand
// [103] (byte) rand::return#2 ← (byte) rand::return#0 -- vbuz1=vbuz2
lda.z rand.return
sta.z rand.return_1
jmp __b10
// makechar::@10
__b10:
// [104] (byte~) makechar::$4 ← (byte) rand::return#2 -- vbuz1=vbuz2
lda.z rand.return_1
sta.z __4
// [105] (byte~) makechar::$5 ← (byte~) makechar::$4 & (byte) $ff -- vbuz1=vbuz2_band_vbuc1
lda #$ff
and.z __4
sta.z __5
// [106] if((byte~) makechar::$5<=(byte) makechar::s#1) goto makechar::@8 -- vbuz1_le_vbuz2_then_la1
lda.z s
cmp.z __5
bcs __b8_from___b10
jmp __b9
// makechar::@9
__b9:
// [107] (byte) makechar::b#2 ← (byte) makechar::b#3 | *((const byte*) bittab + (byte) makechar::ii#3) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2
lda.z b
ldy.z ii
ora bittab,y
sta.z b
// [108] phi from makechar::@10 makechar::@9 to makechar::@8 [phi:makechar::@10/makechar::@9->makechar::@8]
__b8_from___b10:
__b8_from___b9:
// [108] phi (byte) makechar::b#7 = (byte) makechar::b#3 [phi:makechar::@10/makechar::@9->makechar::@8#0] -- register_copy
jmp __b8
// makechar::@8
__b8:
// [109] (byte) makechar::ii#2 ← ++ (byte) makechar::ii#3 -- vbuz1=_inc_vbuz1
inc.z ii
// [94] phi from makechar::@8 to makechar::@5 [phi:makechar::@8->makechar::@5]
__b5_from___b8:
// [94] phi (byte) makechar::b#3 = (byte) makechar::b#7 [phi:makechar::@8->makechar::@5#0] -- register_copy
// [94] phi (byte) makechar::ii#3 = (byte) makechar::ii#2 [phi:makechar::@8->makechar::@5#1] -- register_copy
jmp __b5
}
// rand
rand: {
.label RAND_SEED = rand_seed
.label return = $36
.label return_1 = $33
// asm { ldx#8 ldaRAND_SEED+0 __rand_loop: asl rolRAND_SEED+1 bcc__no_eor eor#$2D __no_eor: dex bne__rand_loop staRAND_SEED+0 }
ldx #8
lda RAND_SEED+0
__rand_loop:
asl
rol RAND_SEED+1
bcc __no_eor
eor #$2d
__no_eor:
dex
bne __rand_loop
sta RAND_SEED+0
// [111] (byte) rand::return#0 ← (byte)(word) rand_seed -- vbuz1=_byte_vwuz2
lda.z rand_seed
sta.z return
jmp __breturn
// rand::@return
__breturn:
// [112] return
rts
}
// File Data
print_hextab: .text "0123456789abcdef"
.align $100
sinustable: .byte $80, $7d, $7a, $77, $74, $70, $6d, $6a, $67, $64, $61, $5e, $5b, $58, $55, $52, $4f, $4d, $4a, $47, $44, $41, $3f, $3c, $39, $37, $34, $32, $2f, $2d, $2b, $28, $26, $24, $22, $20, $1e, $1c, $1a, $18, $16, $15, $13, $11, $10, $f, $d, $c, $b, $a, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, $a, $b, $c, $d, $f, $10, $11, $13, $15, $16, $18, $1a, $1c, $1e, $20, $22, $24, $26, $28, $2b, $2d, $2f, $32, $34, $37, $39, $3c, $3f, $41, $44, $47, $4a, $4d, $4f, $52, $55, $58, $5b, $5e, $61, $64, $67, $6a, $6d, $70, $74, $77, $7a, $7d, $80, $83, $86, $89, $8c, $90, $93, $96, $99, $9c, $9f, $a2, $a5, $a8, $ab, $ae, $b1, $b3, $b6, $b9, $bc, $bf, $c1, $c4, $c7, $c9, $cc, $ce, $d1, $d3, $d5, $d8, $da, $dc, $de, $e0, $e2, $e4, $e6, $e8, $ea, $eb, $ed, $ef, $f0, $f1, $f3, $f4, $f5, $f6, $f8, $f9, $fa, $fa, $fb, $fc, $fd, $fd, $fe, $fe, $fe, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $fe, $fe, $fe, $fd, $fd, $fc, $fb, $fa, $fa, $f9, $f8, $f6, $f5, $f4, $f3, $f1, $f0, $ef, $ed, $eb, $ea, $e8, $e6, $e4, $e2, $e0, $de, $dc, $da, $d8, $d5, $d3, $d1, $ce, $cc, $c9, $c7, $c4, $c1, $bf, $bc, $b9, $b6, $b3, $b1, $ae, $ab, $a8, $a5, $a2, $9f, $9c, $99, $96, $93, $90, $8c, $89, $86, $83
xbuf: .fill $28, 0
ybuf: .fill $19, 0
bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] (word) last_time ← (word) 0 [ last_time ] ( [ last_time ] ) always clobbers reg byte a
Statement [2] (word) rand_seed ← (word) 0 [ last_time ] ( [ last_time ] ) always clobbers reg byte a
Statement [6] (word) rand_seed ← (word) $194a [ last_time rand_seed ] ( main:4 [ last_time rand_seed ] ) always clobbers reg byte a
Statement [15] if((byte) 0!=(word) main::count#2) goto main::@2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:29 [ main::block#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:31 [ main::v#1 ]
Statement [22] *((const byte*) VIC_MEMORY) ← (const byte) PAGE1 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] ) always clobbers reg byte a
Statement [24] *((const byte*) VIC_MEMORY) ← (const byte) PAGE2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] ) always clobbers reg byte a
Statement [25] (word) main::count#1 ← -- (word) main::count#2 [ last_time main::block#1 main::v#1 main::count#1 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#1 ] ) always clobbers reg byte a
Statement [36] (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#6 + (byte) $28 [ doplasma::jj#3 doplasma::scrn#0 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:10 [ doplasma::jj#3 doplasma::jj#2 ]
Statement [38] (byte~) doplasma::$6 ← *((const byte*) xbuf + (byte) doplasma::j#3) + *((const byte*) ybuf + (byte) doplasma::jj#3) [ doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:13 [ doplasma::j#3 doplasma::j#2 ]
Statement [41] (byte~) doplasma::$3 ← *((const byte*) sinustable + (byte) doplasma::c2a#3) + *((const byte*) sinustable + (byte) doplasma::c2b#3) [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:7 [ doplasma::i#3 doplasma::i#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ]
Statement [43] (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (byte) 3 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] ) always clobbers reg byte a
Statement [44] (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (byte) 7 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] ) always clobbers reg byte a
Statement [46] (byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3) [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ]
Statement [48] (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (byte) 4 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ) always clobbers reg byte a
Statement [49] (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (byte) 9 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ) always clobbers reg byte a
Statement [51] (word) Ticks#1 ← (word) last_time [ last_time Ticks#1 ] ( main:4::end:18 [ last_time Ticks#1 ] ) always clobbers reg byte a
Statement [53] (word) last_time ← (word) last_time - (word) Ticks#1 [ last_time ] ( main:4::end:18 [ last_time ] ) always clobbers reg byte a
Statement [54] (word) Ticks#12 ← (word) last_time [ Ticks#12 ] ( main:4::end:18 [ Ticks#12 ] ) always clobbers reg byte a
Statement [55] (word) print_word::w#0 ← (word) Ticks#12 [ print_word::w#0 ] ( main:4::end:18 [ print_word::w#0 ] ) always clobbers reg byte a
Statement [62] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#8 + (byte) $28 [ print_line_cursor#1 print_char_cursor#10 ] ( main:4::end:18::print_ln:58 [ print_line_cursor#1 print_char_cursor#10 ] ) always clobbers reg byte a
Statement [63] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#10 ] ( main:4::end:18::print_ln:58 [ print_line_cursor#1 print_char_cursor#10 ] ) always clobbers reg byte a
Statement [65] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ print_word::w#0 print_byte::b#0 ] ( main:4::end:18::print_word:56 [ print_word::w#0 print_byte::b#0 ] ) always clobbers reg byte a
Statement [67] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_cursor#10 print_byte::b#1 ] ( main:4::end:18::print_word:56 [ print_char_cursor#10 print_byte::b#1 ] ) always clobbers reg byte a
Statement [71] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_byte::b#2 print_char_cursor#35 print_byte::$0 ] ( main:4::end:18::print_word:56::print_byte:66 [ print_word::w#0 print_byte::b#2 print_char_cursor#35 print_byte::$0 ] main:4::end:18::print_word:56::print_byte:68 [ print_byte::b#2 print_char_cursor#35 print_byte::$0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Statement [74] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#10 print_byte::$2 ] ( main:4::end:18::print_word:56::print_byte:66 [ print_word::w#0 print_char_cursor#10 print_byte::$2 ] main:4::end:18::print_word:56::print_byte:68 [ print_char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a
Statement [79] *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2 [ print_char_cursor#25 ] ( main:4::end:18::print_word:56::print_byte:66::print_char:73 [ print_word::w#0 print_byte::b#2 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:68::print_char:73 [ print_byte::b#2 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:66::print_char:76 [ print_word::w#0 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:68::print_char:76 [ print_char_cursor#25 ] ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Statement asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1 } always clobbers reg byte a reg byte x reg byte y
Statement [83] (word) rand_seed ← (word) $194a [ ] ( main:4::start:9 [ last_time ] main:4::end:18::start:52 [ last_time Ticks#1 ] ) always clobbers reg byte a
Statement [87] if((word) makechar::c#3<(word) $100) goto makechar::@2 [ rand_seed makechar::c#3 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 ] ) always clobbers reg byte a
Statement [89] (byte~) makechar::$1 ← (byte)(word) makechar::c#3 [ rand_seed makechar::c#3 makechar::$1 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::$1 ] ) always clobbers reg byte a
Statement [96] (word~) makechar::$8 ← (word) makechar::c#3 << (byte) 3 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$8 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$8 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:44 [ makechar::s#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:22 [ makechar::i#3 makechar::i#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ]
Statement [97] (word~) makechar::$9 ← (word~) makechar::$8 + (byte) makechar::i#3 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$9 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$9 ] ) always clobbers reg byte a
Statement [98] (byte*~) makechar::$10 ← (const byte*) CHARSET + (word~) makechar::$9 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$10 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$10 ] ) always clobbers reg byte a
Statement [99] *((byte*~) makechar::$10) ← (byte) makechar::b#3 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:44 [ makechar::s#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:22 [ makechar::i#3 makechar::i#2 ]
Statement [107] (byte) makechar::b#2 ← (byte) makechar::b#3 | *((const byte*) bittab + (byte) makechar::ii#3) [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#2 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:23 [ makechar::ii#3 makechar::ii#2 ]
Statement asm { ldx#8 ldaRAND_SEED+0 __rand_loop: asl rolRAND_SEED+1 bcc__no_eor eor#$2D __no_eor: dex bne__rand_loop staRAND_SEED+0 } always clobbers reg byte a reg byte x
Removing always clobbered register reg byte x as potential for zp[1]:44 [ makechar::s#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:22 [ makechar::i#3 makechar::i#2 ]
Removing always clobbered register reg byte x as potential for zp[1]:23 [ makechar::ii#3 makechar::ii#2 ]
Removing always clobbered register reg byte x as potential for zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ]
Statement [111] (byte) rand::return#0 ← (byte)(word) rand_seed [ rand_seed rand::return#0 ] ( main:4::makechar:7::rand:102 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_seed rand::return#0 ] ) always clobbers reg byte a
Statement [1] (word) last_time ← (word) 0 [ last_time ] ( [ last_time ] ) always clobbers reg byte a
Statement [2] (word) rand_seed ← (word) 0 [ last_time ] ( [ last_time ] ) always clobbers reg byte a
Statement [6] (word) rand_seed ← (word) $194a [ last_time rand_seed ] ( main:4 [ last_time rand_seed ] ) always clobbers reg byte a
Statement [11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc [ last_time main::block#1 main::tmp#1 ] ( main:4 [ last_time main::block#1 main::tmp#1 ] ) always clobbers reg byte a
Statement [15] if((byte) 0!=(word) main::count#2) goto main::@2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] ) always clobbers reg byte a
Statement [22] *((const byte*) VIC_MEMORY) ← (const byte) PAGE1 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] ) always clobbers reg byte a
Statement [24] *((const byte*) VIC_MEMORY) ← (const byte) PAGE2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] ) always clobbers reg byte a
Statement [25] (word) main::count#1 ← -- (word) main::count#2 [ last_time main::block#1 main::v#1 main::count#1 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#1 ] ) always clobbers reg byte a
Statement [36] (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#6 + (byte) $28 [ doplasma::jj#3 doplasma::scrn#0 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] ) always clobbers reg byte a
Statement [38] (byte~) doplasma::$6 ← *((const byte*) xbuf + (byte) doplasma::j#3) + *((const byte*) ybuf + (byte) doplasma::jj#3) [ doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] ) always clobbers reg byte a
Statement [41] (byte~) doplasma::$3 ← *((const byte*) sinustable + (byte) doplasma::c2a#3) + *((const byte*) sinustable + (byte) doplasma::c2b#3) [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] ) always clobbers reg byte a
Statement [43] (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (byte) 3 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] ) always clobbers reg byte a
Statement [44] (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (byte) 7 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] ) always clobbers reg byte a
Statement [46] (byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3) [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] ) always clobbers reg byte a
Statement [48] (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (byte) 4 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ) always clobbers reg byte a
Statement [49] (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (byte) 9 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ) always clobbers reg byte a
Statement [51] (word) Ticks#1 ← (word) last_time [ last_time Ticks#1 ] ( main:4::end:18 [ last_time Ticks#1 ] ) always clobbers reg byte a
Statement [53] (word) last_time ← (word) last_time - (word) Ticks#1 [ last_time ] ( main:4::end:18 [ last_time ] ) always clobbers reg byte a
Statement [54] (word) Ticks#12 ← (word) last_time [ Ticks#12 ] ( main:4::end:18 [ Ticks#12 ] ) always clobbers reg byte a
Statement [55] (word) print_word::w#0 ← (word) Ticks#12 [ print_word::w#0 ] ( main:4::end:18 [ print_word::w#0 ] ) always clobbers reg byte a
Statement [62] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#8 + (byte) $28 [ print_line_cursor#1 print_char_cursor#10 ] ( main:4::end:18::print_ln:58 [ print_line_cursor#1 print_char_cursor#10 ] ) always clobbers reg byte a
Statement [63] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#10 ] ( main:4::end:18::print_ln:58 [ print_line_cursor#1 print_char_cursor#10 ] ) always clobbers reg byte a
Statement [65] (byte) print_byte::b#0 ← > (word) print_word::w#0 [ print_word::w#0 print_byte::b#0 ] ( main:4::end:18::print_word:56 [ print_word::w#0 print_byte::b#0 ] ) always clobbers reg byte a
Statement [67] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_cursor#10 print_byte::b#1 ] ( main:4::end:18::print_word:56 [ print_char_cursor#10 print_byte::b#1 ] ) always clobbers reg byte a
Statement [71] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_byte::b#2 print_char_cursor#35 print_byte::$0 ] ( main:4::end:18::print_word:56::print_byte:66 [ print_word::w#0 print_byte::b#2 print_char_cursor#35 print_byte::$0 ] main:4::end:18::print_word:56::print_byte:68 [ print_byte::b#2 print_char_cursor#35 print_byte::$0 ] ) always clobbers reg byte a
Statement [74] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#10 print_byte::$2 ] ( main:4::end:18::print_word:56::print_byte:66 [ print_word::w#0 print_char_cursor#10 print_byte::$2 ] main:4::end:18::print_word:56::print_byte:68 [ print_char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a
Statement [79] *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2 [ print_char_cursor#25 ] ( main:4::end:18::print_word:56::print_byte:66::print_char:73 [ print_word::w#0 print_byte::b#2 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:68::print_char:73 [ print_byte::b#2 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:66::print_char:76 [ print_word::w#0 print_char_cursor#25 ] main:4::end:18::print_word:56::print_byte:68::print_char:76 [ print_char_cursor#25 ] ) always clobbers reg byte y
Statement asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1 } always clobbers reg byte a reg byte x reg byte y
Statement [83] (word) rand_seed ← (word) $194a [ ] ( main:4::start:9 [ last_time ] main:4::end:18::start:52 [ last_time Ticks#1 ] ) always clobbers reg byte a
Statement [87] if((word) makechar::c#3<(word) $100) goto makechar::@2 [ rand_seed makechar::c#3 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 ] ) always clobbers reg byte a
Statement [89] (byte~) makechar::$1 ← (byte)(word) makechar::c#3 [ rand_seed makechar::c#3 makechar::$1 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::$1 ] ) always clobbers reg byte a
Statement [90] (byte) makechar::s#1 ← *((const byte*) sinustable + (byte~) makechar::$1) [ rand_seed makechar::c#3 makechar::s#1 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 ] ) always clobbers reg byte a
Statement [92] if((byte) makechar::i#3<(byte) 8) goto makechar::@5 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 ] ) always clobbers reg byte a
Statement [96] (word~) makechar::$8 ← (word) makechar::c#3 << (byte) 3 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$8 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$8 ] ) always clobbers reg byte a
Statement [97] (word~) makechar::$9 ← (word~) makechar::$8 + (byte) makechar::i#3 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$9 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$9 ] ) always clobbers reg byte a
Statement [98] (byte*~) makechar::$10 ← (const byte*) CHARSET + (word~) makechar::$9 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$10 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$10 ] ) always clobbers reg byte a
Statement [99] *((byte*~) makechar::$10) ← (byte) makechar::b#3 [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 ] ) always clobbers reg byte a reg byte y
Statement [107] (byte) makechar::b#2 ← (byte) makechar::b#3 | *((const byte*) bittab + (byte) makechar::ii#3) [ rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#2 ] ( main:4::makechar:7 [ last_time rand_seed makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#2 ] ) always clobbers reg byte a
Statement asm { ldx#8 ldaRAND_SEED+0 __rand_loop: asl rolRAND_SEED+1 bcc__no_eor eor#$2D __no_eor: dex bne__rand_loop staRAND_SEED+0 } always clobbers reg byte a reg byte x
Statement [111] (byte) rand::return#0 ← (byte)(word) rand_seed [ rand_seed rand::return#0 ] ( main:4::makechar:7::rand:102 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_seed rand::return#0 ] ) always clobbers reg byte a
Potential registers zp[2]:2 [ main::count#2 main::count#1 ] : zp[2]:2 ,
Potential registers zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ] : zp[1]:4 , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ] : zp[1]:5 , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ] : zp[1]:6 , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ doplasma::i#3 doplasma::i#2 ] : zp[1]:7 , reg byte x , reg byte y ,
Potential registers zp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ] : zp[1]:8 , reg byte x , reg byte y ,
Potential registers zp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ] : zp[1]:9 , reg byte x , reg byte y ,
Potential registers zp[1]:10 [ doplasma::jj#3 doplasma::jj#2 ] : zp[1]:10 , reg byte x , reg byte y ,
Potential registers zp[2]:11 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] : zp[2]:11 ,
Potential registers zp[1]:13 [ doplasma::j#3 doplasma::j#2 ] : zp[1]:13 , reg byte x , reg byte y ,
Potential registers zp[2]:14 [ print_line_cursor#8 print_line_cursor#1 ] : zp[2]:14 ,
Potential registers zp[1]:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp[1]:16 , reg byte x ,
Potential registers zp[1]:17 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:18 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ] : zp[2]:18 ,
Potential registers zp[2]:20 [ makechar::c#3 makechar::c#2 ] : zp[2]:20 ,
Potential registers zp[1]:22 [ makechar::i#3 makechar::i#2 ] : zp[1]:22 ,
Potential registers zp[1]:23 [ makechar::ii#3 makechar::ii#2 ] : zp[1]:23 , reg byte y ,
Potential registers zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ] : zp[1]:24 , reg byte y ,
Potential registers zp[2]:25 [ last_time ] : zp[2]:25 ,
Potential registers zp[2]:27 [ rand_seed ] : zp[2]:27 ,
Potential registers zp[1]:29 [ main::block#1 ] : zp[1]:29 , reg byte x , reg byte y ,
Potential registers zp[1]:30 [ main::tmp#1 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:31 [ main::v#1 ] : zp[1]:31 , reg byte x , reg byte y ,
Potential registers zp[1]:32 [ doplasma::$6 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:33 [ doplasma::$3 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:34 [ doplasma::$1 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:35 [ Ticks#1 ] : zp[2]:35 ,
Potential registers zp[2]:37 [ Ticks#12 ] : zp[2]:37 ,
Potential registers zp[2]:39 [ print_word::w#0 ] : zp[2]:39 ,
Potential registers zp[1]:41 [ print_byte::$0 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:42 [ print_byte::$2 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:43 [ makechar::$1 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:44 [ makechar::s#1 ] : zp[1]:44 ,
Potential registers zp[2]:45 [ makechar::$8 ] : zp[2]:45 ,
Potential registers zp[2]:47 [ makechar::$9 ] : zp[2]:47 ,
Potential registers zp[2]:49 [ makechar::$10 ] : zp[2]:49 ,
Potential registers zp[1]:51 [ rand::return#2 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:52 [ makechar::$4 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:53 [ makechar::$5 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:54 [ rand::return#0 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [makechar] 3,785.68: zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ] 2,402.4: zp[1]:23 [ makechar::ii#3 makechar::ii#2 ] 2,002: zp[1]:52 [ makechar::$4 ] 2,002: zp[1]:53 [ makechar::$5 ] 225.76: zp[1]:22 [ makechar::i#3 makechar::i#2 ] 202: zp[2]:45 [ makechar::$8 ] 202: zp[2]:47 [ makechar::$9 ] 202: zp[2]:49 [ makechar::$10 ] 53.26: zp[1]:44 [ makechar::s#1 ] 28.09: zp[2]:20 [ makechar::c#3 makechar::c#2 ] 22: zp[1]:43 [ makechar::$1 ]
Uplift Scope [doplasma] 3,253.25: zp[1]:13 [ doplasma::j#3 doplasma::j#2 ] 2,002: zp[1]:32 [ doplasma::$6 ] 365: zp[1]:10 [ doplasma::jj#3 doplasma::jj#2 ] 294.02: zp[2]:11 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] 269.33: zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ] 269.33: zp[1]:7 [ doplasma::i#3 doplasma::i#2 ] 202: zp[1]:33 [ doplasma::$3 ] 202: zp[1]:34 [ doplasma::$1 ] 161.6: zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ] 161.6: zp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ] 143.08: zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ] 143.08: zp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ]
Uplift Scope [rand] 2,002: zp[1]:51 [ rand::return#2 ] 334.33: zp[1]:54 [ rand::return#0 ]
Uplift Scope [] 38.5: zp[2]:14 [ print_line_cursor#8 print_line_cursor#1 ] 6.33: zp[2]:18 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ] 4: zp[2]:37 [ Ticks#12 ] 2: zp[2]:35 [ Ticks#1 ] 0.42: zp[2]:25 [ last_time ] 0.21: zp[2]:27 [ rand_seed ]
Uplift Scope [main] 26.71: zp[2]:2 [ main::count#2 main::count#1 ] 4: zp[1]:30 [ main::tmp#1 ] 0.46: zp[1]:29 [ main::block#1 ] 0.44: zp[1]:31 [ main::v#1 ]
Uplift Scope [print_byte] 10: zp[1]:16 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp[1]:41 [ print_byte::$0 ] 4: zp[1]:42 [ print_byte::$2 ]
Uplift Scope [print_char] 14: zp[1]:17 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
Uplift Scope [print_word] 2: zp[2]:39 [ print_word::w#0 ]
Uplift Scope [RADIX]
Uplift Scope [print_ln]
Uplift Scope [start]
Uplift Scope [end]
Uplifting [makechar] best 165885 combination zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ] reg byte y [ makechar::ii#3 makechar::ii#2 ] reg byte a [ makechar::$4 ] zp[1]:53 [ makechar::$5 ] zp[1]:22 [ makechar::i#3 makechar::i#2 ] zp[2]:45 [ makechar::$8 ] zp[2]:47 [ makechar::$9 ] zp[2]:49 [ makechar::$10 ] zp[1]:44 [ makechar::s#1 ] zp[2]:20 [ makechar::c#3 makechar::c#2 ] reg byte a [ makechar::$1 ]
Limited combination testing to 100 combinations of 256 possible.
Uplifting [doplasma] best 140985 combination reg byte y [ doplasma::j#3 doplasma::j#2 ] reg byte a [ doplasma::$6 ] reg byte x [ doplasma::jj#3 doplasma::jj#2 ] zp[2]:11 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ] zp[1]:7 [ doplasma::i#3 doplasma::i#2 ] zp[1]:33 [ doplasma::$3 ] zp[1]:34 [ doplasma::$1 ] zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ] zp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ] zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ] zp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ]
Limited combination testing to 100 combinations of 419904 possible.
Uplifting [rand] best 131982 combination reg byte a [ rand::return#2 ] reg byte a [ rand::return#0 ]
Uplifting [] best 131982 combination zp[2]:14 [ print_line_cursor#8 print_line_cursor#1 ] zp[2]:18 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ] zp[2]:37 [ Ticks#12 ] zp[2]:35 [ Ticks#1 ] zp[2]:25 [ last_time ] zp[2]:27 [ rand_seed ]
Uplifting [main] best 131976 combination zp[2]:2 [ main::count#2 main::count#1 ] reg byte a [ main::tmp#1 ] zp[1]:29 [ main::block#1 ] zp[1]:31 [ main::v#1 ]
Uplifting [print_byte] best 131962 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ]
Uplifting [print_char] best 131953 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
Uplifting [print_word] best 131953 combination zp[2]:39 [ print_word::w#0 ]
Uplifting [RADIX] best 131953 combination
Uplifting [print_ln] best 131953 combination
Uplifting [start] best 131953 combination
Uplifting [end] best 131953 combination
Attempting to uplift remaining variables inzp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ]
Uplifting [makechar] best 131953 combination zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ]
Attempting to uplift remaining variables inzp[1]:53 [ makechar::$5 ]
Uplifting [makechar] best 131953 combination zp[1]:53 [ makechar::$5 ]
Attempting to uplift remaining variables inzp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ]
Uplifting [doplasma] best 131953 combination zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ]
Attempting to uplift remaining variables inzp[1]:7 [ doplasma::i#3 doplasma::i#2 ]
Uplifting [doplasma] best 131953 combination zp[1]:7 [ doplasma::i#3 doplasma::i#2 ]
Attempting to uplift remaining variables inzp[1]:22 [ makechar::i#3 makechar::i#2 ]
Uplifting [makechar] best 131953 combination zp[1]:22 [ makechar::i#3 makechar::i#2 ]
Attempting to uplift remaining variables inzp[1]:33 [ doplasma::$3 ]
Uplifting [doplasma] best 131353 combination reg byte a [ doplasma::$3 ]
Attempting to uplift remaining variables inzp[1]:34 [ doplasma::$1 ]
Uplifting [doplasma] best 130753 combination reg byte a [ doplasma::$1 ]
Attempting to uplift remaining variables inzp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ]
Uplifting [doplasma] best 130753 combination zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ]
Attempting to uplift remaining variables inzp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ]
Uplifting [doplasma] best 130753 combination zp[1]:9 [ doplasma::c2b#3 doplasma::c2b#2 ]
Attempting to uplift remaining variables inzp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ]
Uplifting [doplasma] best 130753 combination zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ]
Attempting to uplift remaining variables inzp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ]
Uplifting [doplasma] best 130753 combination zp[1]:8 [ doplasma::c2a#3 doplasma::c2a#2 ]
Attempting to uplift remaining variables inzp[1]:44 [ makechar::s#1 ]
Uplifting [makechar] best 130753 combination zp[1]:44 [ makechar::s#1 ]
Attempting to uplift remaining variables inzp[1]:29 [ main::block#1 ]
Uplifting [main] best 130753 combination zp[1]:29 [ main::block#1 ]
Attempting to uplift remaining variables inzp[1]:31 [ main::v#1 ]
Uplifting [main] best 130753 combination zp[1]:31 [ main::v#1 ]
Coalescing zero page register [ zp[2]:37 [ Ticks#12 ] ] with [ zp[2]:39 [ print_word::w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:45 [ makechar::$8 ] ] with [ zp[2]:47 [ makechar::$9 ] ] - score: 1
Coalescing zero page register [ zp[2]:45 [ makechar::$8 makechar::$9 ] ] with [ zp[2]:49 [ makechar::$10 ] ] - score: 1
Coalescing zero page register [ zp[2]:14 [ print_line_cursor#8 print_line_cursor#1 ] ] with [ zp[2]:2 [ main::count#2 main::count#1 ] ]
Coalescing zero page register [ zp[2]:18 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 ] ] with [ zp[2]:11 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] ]
Coalescing zero page register [ zp[1]:22 [ makechar::i#3 makechar::i#2 ] ] with [ zp[1]:4 [ doplasma::ii#3 doplasma::ii#2 ] ]
Coalescing zero page register [ zp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ] ] with [ zp[1]:5 [ doplasma::c1a#3 doplasma::c1a#2 ] ]
Coalescing zero page register [ zp[2]:35 [ Ticks#1 ] ] with [ zp[2]:20 [ makechar::c#3 makechar::c#2 ] ]
Coalescing zero page register [ zp[1]:44 [ makechar::s#1 ] ] with [ zp[1]:6 [ doplasma::c1b#3 doplasma::c1b#2 ] ]
Coalescing zero page register [ zp[2]:45 [ makechar::$8 makechar::$9 makechar::$10 ] ] with [ zp[2]:37 [ Ticks#12 print_word::w#0 ] ]
Coalescing zero page register [ zp[1]:53 [ makechar::$5 ] ] with [ zp[1]:7 [ doplasma::i#3 doplasma::i#2 ] ]
Allocated (was zp[1]:8) zp[1]:2 [ doplasma::c2a#3 doplasma::c2a#2 ]
Allocated (was zp[1]:9) zp[1]:3 [ doplasma::c2b#3 doplasma::c2b#2 ]
Allocated (was zp[2]:14) zp[2]:4 [ print_line_cursor#8 print_line_cursor#1 main::count#2 main::count#1 ]
Allocated (was zp[2]:18) zp[2]:6 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ]
Allocated (was zp[1]:22) zp[1]:8 [ makechar::i#3 makechar::i#2 doplasma::ii#3 doplasma::ii#2 ]
Allocated (was zp[1]:24) zp[1]:9 [ makechar::b#3 makechar::b#7 makechar::b#2 doplasma::c1a#3 doplasma::c1a#2 ]
Allocated (was zp[2]:25) zp[2]:10 [ last_time ]
Allocated (was zp[2]:27) zp[2]:12 [ rand_seed ]
Allocated (was zp[1]:29) zp[1]:14 [ main::block#1 ]
Allocated (was zp[1]:31) zp[1]:15 [ main::v#1 ]
Allocated (was zp[2]:35) zp[2]:16 [ Ticks#1 makechar::c#3 makechar::c#2 ]
Allocated (was zp[1]:44) zp[1]:18 [ makechar::s#1 doplasma::c1b#3 doplasma::c1b#2 ]
Allocated (was zp[2]:45) zp[2]:19 [ makechar::$8 makechar::$9 makechar::$10 Ticks#12 print_word::w#0 ]
Allocated (was zp[1]:53) zp[1]:21 [ makechar::$5 doplasma::i#3 doplasma::i#2 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
// Upstart
.pc = $801 "Basic"
:BasicUpstart(__bbegin)
.pc = $80d "Program"
// Global Constants & labels
.label VIC_MEMORY = $d018
// CIA#2 Port A: Serial bus, RS-232, VIC memory bank
.label CIA2_PORT_A = $dd00
.label SCREEN1 = $e000
.label SCREEN2 = $e400
.label CHARSET = $e800
.const PAGE1 = SCREEN1>>6&$f0|CHARSET>>$a&$e
.const PAGE2 = SCREEN2>>6&$f0|CHARSET>>$a&$e
.label last_time = $a
.label rand_seed = $c
.label print_line_cursor = 4
.label print_char_cursor = 6
.label Ticks = $10
.label Ticks_1 = $13
// @begin
__bbegin:
jmp __b1
// @1
__b1:
// [1] (word) last_time ← (word) 0 -- vwuz1=vwuc1
lda #<0
sta.z last_time
lda #>0
sta.z last_time+1
jmp __b2
// @2
__b2:
// [2] (word) rand_seed ← (word) 0 -- vwuz1=vwuc1
lda #<0
sta.z rand_seed
lda #>0
sta.z rand_seed+1
// [3] phi from @2 to @3 [phi:@2->@3]
__b3_from___b2:
jmp __b3
// @3
__b3:
// [4] call main
jsr main
// [5] phi from @3 to @end [phi:@3->@end]
__bend_from___b3:
jmp __bend
// @end
__bend:
// main
main: {
.label block = $e
.label v = $f
.label count = 4
// [6] (word) rand_seed ← (word) $194a -- vwuz1=vwuc1
lda #<$194a
sta.z rand_seed
lda #>$194a
sta.z rand_seed+1
// [7] call makechar
// [85] phi from main to makechar [phi:main->makechar]
makechar_from_main:
jsr makechar
// [8] phi from main to main::@4 [phi:main->main::@4]
__b4_from_main:
jmp __b4
// main::@4
__b4:
// [9] call start
jsr start
jmp __b5
// main::@5
__b5:
// [10] (byte) main::block#1 ← *((const byte*) CIA2_PORT_A) -- vbuz1=_deref_pbuc1
lda CIA2_PORT_A
sta.z block
// [11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc -- vbuaa=vbuz1_band_vbuc1
lda #$fc
and.z block
// [12] *((const byte*) CIA2_PORT_A) ← (byte) main::tmp#1 -- _deref_pbuc1=vbuaa
sta CIA2_PORT_A
// [13] (byte) main::v#1 ← *((const byte*) VIC_MEMORY) -- vbuz1=_deref_pbuc1
lda VIC_MEMORY
sta.z v
// [14] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
__b1_from___b5:
// [14] phi (word) main::count#2 = (word) $1f4 [phi:main::@5->main::@1#0] -- vwuz1=vwuc1
lda #<$1f4
sta.z count
lda #>$1f4
sta.z count+1
jmp __b1
/* Run the demo until a key was hit */
// main::@1
__b1:
// [15] if((byte) 0!=(word) main::count#2) goto main::@2 -- vwuc1_neq_vwuz1_then_la1
lda.z count+1
cmp #>0
bne __b2_from___b1
lda.z count
cmp #<0
bne __b2_from___b1
jmp __b3
// main::@3
__b3:
// [16] *((const byte*) VIC_MEMORY) ← (byte) main::v#1 -- _deref_pbuc1=vbuz1
lda.z v
sta VIC_MEMORY
// [17] *((const byte*) CIA2_PORT_A) ← (byte) main::block#1 -- _deref_pbuc1=vbuz1
lda.z block
sta CIA2_PORT_A
// [18] call end
jsr end
jmp __breturn
// main::@return
__breturn:
// [19] return
rts
// [20] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
__b2_from___b1:
jmp __b2
// main::@2
__b2:
// [21] call doplasma
// [26] phi from main::@2 to doplasma [phi:main::@2->doplasma]
doplasma_from___b2:
// [26] phi (byte*) doplasma::scrn#13 = (const byte*) SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1
lda #<SCREEN1
sta.z doplasma.scrn
lda #>SCREEN1
sta.z doplasma.scrn+1
jsr doplasma
jmp __b6
// main::@6
__b6:
// [22] *((const byte*) VIC_MEMORY) ← (const byte) PAGE1 -- _deref_pbuc1=vbuc2
lda #PAGE1
sta VIC_MEMORY
// [23] call doplasma
// [26] phi from main::@6 to doplasma [phi:main::@6->doplasma]
doplasma_from___b6:
// [26] phi (byte*) doplasma::scrn#13 = (const byte*) SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1
lda #<SCREEN2
sta.z doplasma.scrn
lda #>SCREEN2
sta.z doplasma.scrn+1
jsr doplasma
jmp __b7
// main::@7
__b7:
// [24] *((const byte*) VIC_MEMORY) ← (const byte) PAGE2 -- _deref_pbuc1=vbuc2
lda #PAGE2
sta VIC_MEMORY
// [25] (word) main::count#1 ← -- (word) main::count#2 -- vwuz1=_dec_vwuz1
lda.z count
bne !+
dec.z count+1
!:
dec.z count
// [14] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
__b1_from___b7:
// [14] phi (word) main::count#2 = (word) main::count#1 [phi:main::@7->main::@1#0] -- register_copy
jmp __b1
}
// doplasma
// doplasma(byte* zp(6) scrn)
doplasma: {
.const c2A = 0
.const c2B = 0
.label c1a = 9
.label c1b = $12
.label ii = 8
.label c2a = 2
.label c2b = 3
.label i = $15
.label scrn = 6
// [27] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
__b1_from_doplasma:
// [27] phi (byte) doplasma::c1b#3 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1
lda #0
sta.z c1b
// [27] phi (byte) doplasma::c1a#3 = (byte) 0 [phi:doplasma->doplasma::@1#1] -- vbuz1=vbuc1
lda #0
sta.z c1a
// [27] phi (byte) doplasma::ii#3 = (byte) 0 [phi:doplasma->doplasma::@1#2] -- vbuz1=vbuc1
lda #0
sta.z ii
jmp __b1
// doplasma::@1
__b1:
// [28] if((byte) doplasma::ii#3<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1
lda.z ii
cmp #$19
bcc __b2
// [29] phi from doplasma::@1 to doplasma::@3 [phi:doplasma::@1->doplasma::@3]
__b3_from___b1:
// [29] phi (byte) doplasma::c2b#3 = (const byte) doplasma::c2B#0 [phi:doplasma::@1->doplasma::@3#0] -- vbuz1=vbuc1
lda #c2B
sta.z c2b
// [29] phi (byte) doplasma::c2a#3 = (const byte) doplasma::c2A#0 [phi:doplasma::@1->doplasma::@3#1] -- vbuz1=vbuc1
lda #c2A
sta.z c2a
// [29] phi (byte) doplasma::i#3 = (byte) 0 [phi:doplasma::@1->doplasma::@3#2] -- vbuz1=vbuc1
lda #0
sta.z i
jmp __b3
// doplasma::@3
__b3:
// [30] if((byte) doplasma::i#3<(byte) $28) goto doplasma::@4 -- vbuz1_lt_vbuc1_then_la1
lda.z i
cmp #$28
bcc __b4
// [31] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5]
__b5_from___b3:
// [31] phi (byte*) doplasma::scrn#6 = (byte*) doplasma::scrn#13 [phi:doplasma::@3->doplasma::@5#0] -- register_copy
// [31] phi (byte) doplasma::jj#3 = (byte) 0 [phi:doplasma::@3->doplasma::@5#1] -- vbuxx=vbuc1
ldx #0
jmp __b5
// doplasma::@5
__b5:
// [32] if((byte) doplasma::jj#3<(byte) $19) goto doplasma::@6 -- vbuxx_lt_vbuc1_then_la1
cpx #$19
bcc __b6_from___b5
jmp __breturn
// doplasma::@return
__breturn:
// [33] return
rts
// [34] phi from doplasma::@5 to doplasma::@6 [phi:doplasma::@5->doplasma::@6]
__b6_from___b5:
// [34] phi (byte) doplasma::j#3 = (byte) 0 [phi:doplasma::@5->doplasma::@6#0] -- vbuyy=vbuc1
ldy #0
jmp __b6
// doplasma::@6
__b6:
// [35] if((byte) doplasma::j#3<(byte) $28) goto doplasma::@7 -- vbuyy_lt_vbuc1_then_la1
cpy #$28
bcc __b7
jmp __b8
// doplasma::@8
__b8:
// [36] (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z scrn
sta.z scrn
bcc !+
inc.z scrn+1
!:
// [37] (byte) doplasma::jj#2 ← ++ (byte) doplasma::jj#3 -- vbuxx=_inc_vbuxx
inx
// [31] phi from doplasma::@8 to doplasma::@5 [phi:doplasma::@8->doplasma::@5]
__b5_from___b8:
// [31] phi (byte*) doplasma::scrn#6 = (byte*) doplasma::scrn#0 [phi:doplasma::@8->doplasma::@5#0] -- register_copy
// [31] phi (byte) doplasma::jj#3 = (byte) doplasma::jj#2 [phi:doplasma::@8->doplasma::@5#1] -- register_copy
jmp __b5
// doplasma::@7
__b7:
// [38] (byte~) doplasma::$6 ← *((const byte*) xbuf + (byte) doplasma::j#3) + *((const byte*) ybuf + (byte) doplasma::jj#3) -- vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx
lda xbuf,y
clc
adc ybuf,x
// [39] *((byte*) doplasma::scrn#6 + (byte) doplasma::j#3) ← (byte~) doplasma::$6 -- pbuz1_derefidx_vbuyy=vbuaa
sta (scrn),y
// [40] (byte) doplasma::j#2 ← ++ (byte) doplasma::j#3 -- vbuyy=_inc_vbuyy
iny
// [34] phi from doplasma::@7 to doplasma::@6 [phi:doplasma::@7->doplasma::@6]
__b6_from___b7:
// [34] phi (byte) doplasma::j#3 = (byte) doplasma::j#2 [phi:doplasma::@7->doplasma::@6#0] -- register_copy
jmp __b6
// doplasma::@4
__b4:
// [41] (byte~) doplasma::$3 ← *((const byte*) sinustable + (byte) doplasma::c2a#3) + *((const byte*) sinustable + (byte) doplasma::c2b#3) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2
ldy.z c2a
lda sinustable,y
ldy.z c2b
clc
adc sinustable,y
// [42] *((const byte*) xbuf + (byte) doplasma::i#3) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa
ldy.z i
sta xbuf,y
// [43] (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1
lax.z c2a
axs #-[3]
stx.z c2a
// [44] (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1
lax.z c2b
axs #-[7]
stx.z c2b
// [45] (byte) doplasma::i#2 ← ++ (byte) doplasma::i#3 -- vbuz1=_inc_vbuz1
inc.z i
// [29] phi from doplasma::@4 to doplasma::@3 [phi:doplasma::@4->doplasma::@3]
__b3_from___b4:
// [29] phi (byte) doplasma::c2b#3 = (byte) doplasma::c2b#2 [phi:doplasma::@4->doplasma::@3#0] -- register_copy
// [29] phi (byte) doplasma::c2a#3 = (byte) doplasma::c2a#2 [phi:doplasma::@4->doplasma::@3#1] -- register_copy
// [29] phi (byte) doplasma::i#3 = (byte) doplasma::i#2 [phi:doplasma::@4->doplasma::@3#2] -- register_copy
jmp __b3
// doplasma::@2
__b2:
// [46] (byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2
ldy.z c1a
lda sinustable,y
ldy.z c1b
clc
adc sinustable,y
// [47] *((const byte*) ybuf + (byte) doplasma::ii#3) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuaa
ldy.z ii
sta ybuf,y
// [48] (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1
lax.z c1a
axs #-[4]
stx.z c1a
// [49] (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1
lax.z c1b
axs #-[9]
stx.z c1b
// [50] (byte) doplasma::ii#2 ← ++ (byte) doplasma::ii#3 -- vbuz1=_inc_vbuz1
inc.z ii
// [27] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1]
__b1_from___b2:
// [27] phi (byte) doplasma::c1b#3 = (byte) doplasma::c1b#2 [phi:doplasma::@2->doplasma::@1#0] -- register_copy
// [27] phi (byte) doplasma::c1a#3 = (byte) doplasma::c1a#2 [phi:doplasma::@2->doplasma::@1#1] -- register_copy
// [27] phi (byte) doplasma::ii#3 = (byte) doplasma::ii#2 [phi:doplasma::@2->doplasma::@1#2] -- register_copy
jmp __b1
}
// end
end: {
// [51] (word) Ticks#1 ← (word) last_time -- vwuz1=vwuz2
lda.z last_time
sta.z Ticks
lda.z last_time+1
sta.z Ticks+1
// [52] call start
jsr start
jmp __b1
// end::@1
__b1:
// [53] (word) last_time ← (word) last_time - (word) Ticks#1 -- vwuz1=vwuz1_minus_vwuz2
lda.z last_time
sec
sbc.z Ticks
sta.z last_time
lda.z last_time+1
sbc.z Ticks+1
sta.z last_time+1
// [54] (word) Ticks#12 ← (word) last_time -- vwuz1=vwuz2
lda.z last_time
sta.z Ticks_1
lda.z last_time+1
sta.z Ticks_1+1
// [55] (word) print_word::w#0 ← (word) Ticks#12
// [56] call print_word
jsr print_word
// [57] phi from end::@1 to end::@2 [phi:end::@1->end::@2]
__b2_from___b1:
jmp __b2
// end::@2
__b2:
// [58] call print_ln
// [60] phi from end::@2 to print_ln [phi:end::@2->print_ln]
print_ln_from___b2:
jsr print_ln
jmp __breturn
// end::@return
__breturn:
// [59] return
rts
}
// print_ln
// Print a newline
print_ln: {
// [61] phi from print_ln to print_ln::@1 [phi:print_ln->print_ln::@1]
__b1_from_print_ln:
// [61] phi (byte*) print_line_cursor#8 = (byte*) 1024 [phi:print_ln->print_ln::@1#0] -- pbuz1=pbuc1
lda #<$400
sta.z print_line_cursor
lda #>$400
sta.z print_line_cursor+1
jmp __b1
// [61] phi from print_ln::@1 to print_ln::@1 [phi:print_ln::@1->print_ln::@1]
__b1_from___b1:
// [61] phi (byte*) print_line_cursor#8 = (byte*) print_line_cursor#1 [phi:print_ln::@1->print_ln::@1#0] -- register_copy
jmp __b1
// print_ln::@1
__b1:
// [62] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#8 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z print_line_cursor
sta.z print_line_cursor
bcc !+
inc.z print_line_cursor+1
!:
// [63] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1
lda.z print_line_cursor+1
cmp.z print_char_cursor+1
bcc __b1_from___b1
bne !+
lda.z print_line_cursor
cmp.z print_char_cursor
bcc __b1_from___b1
!:
jmp __breturn
// print_ln::@return
__breturn:
// [64] return
rts
}
// print_word
// Print a word as HEX
// print_word(word zp($13) w)
print_word: {
.label w = $13
// [65] (byte) print_byte::b#0 ← > (word) print_word::w#0 -- vbuxx=_hi_vwuz1
lda.z w+1
tax
// [66] call print_byte
// [70] phi from print_word to print_byte [phi:print_word->print_byte]
print_byte_from_print_word:
// [70] phi (byte*) print_char_cursor#35 = (byte*) 1024 [phi:print_word->print_byte#0] -- pbuz1=pbuc1
lda #<$400
sta.z print_char_cursor
lda #>$400
sta.z print_char_cursor+1
// [70] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy
jsr print_byte
jmp __b1
// print_word::@1
__b1:
// [67] (byte) print_byte::b#1 ← < (word) print_word::w#0 -- vbuxx=_lo_vwuz1
lda.z w
tax
// [68] call print_byte
// [70] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte]
print_byte_from___b1:
// [70] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#10 [phi:print_word::@1->print_byte#0] -- register_copy
// [70] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy
jsr print_byte
jmp __breturn
// print_word::@return
__breturn:
// [69] return
rts
}
// print_byte
// Print a byte as HEX
// print_byte(byte register(X) b)
print_byte: {
// [71] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 -- vbuaa=vbuxx_ror_4
txa
lsr
lsr
lsr
lsr
// [72] (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa
tay
lda print_hextab,y
// [73] call print_char
// [78] phi from print_byte to print_char [phi:print_byte->print_char]
print_char_from_print_byte:
// [78] phi (byte*) print_char_cursor#25 = (byte*) print_char_cursor#35 [phi:print_byte->print_char#0] -- register_copy
// [78] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy
jsr print_char
jmp __b1
// print_byte::@1
__b1:
// [74] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f -- vbuxx=vbuxx_band_vbuc1
lda #$f
axs #0
// [75] (byte) print_char::ch#1 ← *((const byte*) print_hextab + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx
lda print_hextab,x
// [76] call print_char
// [78] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
print_char_from___b1:
// [78] phi (byte*) print_char_cursor#25 = (byte*) print_char_cursor#10 [phi:print_byte::@1->print_char#0] -- register_copy
// [78] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy
jsr print_char
jmp __breturn
// print_byte::@return
__breturn:
// [77] return
rts
}
// print_char
// Print a single char
// print_char(byte register(A) ch)
print_char: {
// [79] *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2 -- _deref_pbuz1=vbuaa
ldy #0
sta (print_char_cursor),y
// [80] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#25 -- pbuz1=_inc_pbuz1
inc.z print_char_cursor
bne !+
inc.z print_char_cursor+1
!:
jmp __breturn
// print_char::@return
__breturn:
// [81] return
rts
}
// start
start: {
.label LAST_TIME = last_time
// asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1 }
jsr $ffde
sta LAST_TIME
stx LAST_TIME+1
// [83] (word) rand_seed ← (word) $194a -- vwuz1=vwuc1
lda #<$194a
sta.z rand_seed
lda #>$194a
sta.z rand_seed+1
jmp __breturn
// start::@return
__breturn:
// [84] return
rts
}
// makechar
makechar: {
.label __5 = $15
.label __8 = $13
.label __9 = $13
.label s = $12
.label c = $10
.label i = 8
.label b = 9
.label __10 = $13
// [86] phi from makechar to makechar::@1 [phi:makechar->makechar::@1]
__b1_from_makechar:
// [86] phi (word) makechar::c#3 = (byte) 0 [phi:makechar->makechar::@1#0] -- vwuz1=vbuc1
lda #<0
sta.z c
lda #>0
sta.z c+1
jmp __b1
// makechar::@1
__b1:
// [87] if((word) makechar::c#3<(word) $100) goto makechar::@2 -- vwuz1_lt_vwuc1_then_la1
lda.z c+1
cmp #>$100
bcc __b2
bne !+
lda.z c
cmp #<$100
bcc __b2
!:
jmp __breturn
// makechar::@return
__breturn:
// [88] return
rts
// makechar::@2
__b2:
// [89] (byte~) makechar::$1 ← (byte)(word) makechar::c#3 -- vbuaa=_byte_vwuz1
lda.z c
// [90] (byte) makechar::s#1 ← *((const byte*) sinustable + (byte~) makechar::$1) -- vbuz1=pbuc1_derefidx_vbuaa
tay
lda sinustable,y
sta.z s
// [91] phi from makechar::@2 to makechar::@3 [phi:makechar::@2->makechar::@3]
__b3_from___b2:
// [91] phi (byte) makechar::i#3 = (byte) 0 [phi:makechar::@2->makechar::@3#0] -- vbuz1=vbuc1
lda #0
sta.z i
jmp __b3
// makechar::@3
__b3:
// [92] if((byte) makechar::i#3<(byte) 8) goto makechar::@5 -- vbuz1_lt_vbuc1_then_la1
lda.z i
cmp #8
bcc __b5_from___b3
jmp __b4
// makechar::@4
__b4:
// [93] (word) makechar::c#2 ← ++ (word) makechar::c#3 -- vwuz1=_inc_vwuz1
inc.z c
bne !+
inc.z c+1
!:
// [86] phi from makechar::@4 to makechar::@1 [phi:makechar::@4->makechar::@1]
__b1_from___b4:
// [86] phi (word) makechar::c#3 = (word) makechar::c#2 [phi:makechar::@4->makechar::@1#0] -- register_copy
jmp __b1
// [94] phi from makechar::@3 to makechar::@5 [phi:makechar::@3->makechar::@5]
__b5_from___b3:
// [94] phi (byte) makechar::b#3 = (byte) 0 [phi:makechar::@3->makechar::@5#0] -- vbuz1=vbuc1
lda #0
sta.z b
// [94] phi (byte) makechar::ii#3 = (byte) 0 [phi:makechar::@3->makechar::@5#1] -- vbuyy=vbuc1
ldy #0
jmp __b5
// makechar::@5
__b5:
// [95] if((byte) makechar::ii#3<(byte) 8) goto makechar::@6 -- vbuyy_lt_vbuc1_then_la1
cpy #8
bcc __b6_from___b5
jmp __b7
// makechar::@7
__b7:
// [96] (word~) makechar::$8 ← (word) makechar::c#3 << (byte) 3 -- vwuz1=vwuz2_rol_3
lda.z c
asl
sta.z __8
lda.z c+1
rol
sta.z __8+1
asl.z __8
rol.z __8+1
asl.z __8
rol.z __8+1
// [97] (word~) makechar::$9 ← (word~) makechar::$8 + (byte) makechar::i#3 -- vwuz1=vwuz1_plus_vbuz2
lda.z i
clc
adc.z __9
sta.z __9
bcc !+
inc.z __9+1
!:
// [98] (byte*~) makechar::$10 ← (const byte*) CHARSET + (word~) makechar::$9 -- pbuz1=pbuc1_plus_vwuz1
clc
lda.z __10
adc #<CHARSET
sta.z __10
lda.z __10+1
adc #>CHARSET
sta.z __10+1
// [99] *((byte*~) makechar::$10) ← (byte) makechar::b#3 -- _deref_pbuz1=vbuz2
lda.z b
ldy #0
sta (__10),y
// [100] (byte) makechar::i#2 ← ++ (byte) makechar::i#3 -- vbuz1=_inc_vbuz1
inc.z i
// [91] phi from makechar::@7 to makechar::@3 [phi:makechar::@7->makechar::@3]
__b3_from___b7:
// [91] phi (byte) makechar::i#3 = (byte) makechar::i#2 [phi:makechar::@7->makechar::@3#0] -- register_copy
jmp __b3
// [101] phi from makechar::@5 to makechar::@6 [phi:makechar::@5->makechar::@6]
__b6_from___b5:
jmp __b6
// makechar::@6
__b6:
// [102] call rand
jsr rand
// [103] (byte) rand::return#2 ← (byte) rand::return#0
jmp __b10
// makechar::@10
__b10:
// [104] (byte~) makechar::$4 ← (byte) rand::return#2
// [105] (byte~) makechar::$5 ← (byte~) makechar::$4 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1
and #$ff
sta.z __5
// [106] if((byte~) makechar::$5<=(byte) makechar::s#1) goto makechar::@8 -- vbuz1_le_vbuz2_then_la1
lda.z s
cmp.z __5
bcs __b8_from___b10
jmp __b9
// makechar::@9
__b9:
// [107] (byte) makechar::b#2 ← (byte) makechar::b#3 | *((const byte*) bittab + (byte) makechar::ii#3) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuyy
lda bittab,y
ora.z b
sta.z b
// [108] phi from makechar::@10 makechar::@9 to makechar::@8 [phi:makechar::@10/makechar::@9->makechar::@8]
__b8_from___b10:
__b8_from___b9:
// [108] phi (byte) makechar::b#7 = (byte) makechar::b#3 [phi:makechar::@10/makechar::@9->makechar::@8#0] -- register_copy
jmp __b8
// makechar::@8
__b8:
// [109] (byte) makechar::ii#2 ← ++ (byte) makechar::ii#3 -- vbuyy=_inc_vbuyy
iny
// [94] phi from makechar::@8 to makechar::@5 [phi:makechar::@8->makechar::@5]
__b5_from___b8:
// [94] phi (byte) makechar::b#3 = (byte) makechar::b#7 [phi:makechar::@8->makechar::@5#0] -- register_copy
// [94] phi (byte) makechar::ii#3 = (byte) makechar::ii#2 [phi:makechar::@8->makechar::@5#1] -- register_copy
jmp __b5
}
// rand
rand: {
.label RAND_SEED = rand_seed
// asm { ldx#8 ldaRAND_SEED+0 __rand_loop: asl rolRAND_SEED+1 bcc__no_eor eor#$2D __no_eor: dex bne__rand_loop staRAND_SEED+0 }
ldx #8
lda RAND_SEED+0
__rand_loop:
asl
rol RAND_SEED+1
bcc __no_eor
eor #$2d
__no_eor:
dex
bne __rand_loop
sta RAND_SEED+0
// [111] (byte) rand::return#0 ← (byte)(word) rand_seed -- vbuaa=_byte_vwuz1
lda.z rand_seed
jmp __breturn
// rand::@return
__breturn:
// [112] return
rts
}
// File Data
print_hextab: .text "0123456789abcdef"
.align $100
sinustable: .byte $80, $7d, $7a, $77, $74, $70, $6d, $6a, $67, $64, $61, $5e, $5b, $58, $55, $52, $4f, $4d, $4a, $47, $44, $41, $3f, $3c, $39, $37, $34, $32, $2f, $2d, $2b, $28, $26, $24, $22, $20, $1e, $1c, $1a, $18, $16, $15, $13, $11, $10, $f, $d, $c, $b, $a, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, $a, $b, $c, $d, $f, $10, $11, $13, $15, $16, $18, $1a, $1c, $1e, $20, $22, $24, $26, $28, $2b, $2d, $2f, $32, $34, $37, $39, $3c, $3f, $41, $44, $47, $4a, $4d, $4f, $52, $55, $58, $5b, $5e, $61, $64, $67, $6a, $6d, $70, $74, $77, $7a, $7d, $80, $83, $86, $89, $8c, $90, $93, $96, $99, $9c, $9f, $a2, $a5, $a8, $ab, $ae, $b1, $b3, $b6, $b9, $bc, $bf, $c1, $c4, $c7, $c9, $cc, $ce, $d1, $d3, $d5, $d8, $da, $dc, $de, $e0, $e2, $e4, $e6, $e8, $ea, $eb, $ed, $ef, $f0, $f1, $f3, $f4, $f5, $f6, $f8, $f9, $fa, $fa, $fb, $fc, $fd, $fd, $fe, $fe, $fe, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $fe, $fe, $fe, $fd, $fd, $fc, $fb, $fa, $fa, $f9, $f8, $f6, $f5, $f4, $f3, $f1, $f0, $ef, $ed, $eb, $ea, $e8, $e6, $e4, $e2, $e0, $de, $dc, $da, $d8, $d5, $d3, $d1, $ce, $cc, $c9, $c7, $c4, $c1, $bf, $bc, $b9, $b6, $b3, $b1, $ae, $ab, $a8, $a5, $a2, $9f, $9c, $99, $96, $93, $90, $8c, $89, $86, $83
xbuf: .fill $28, 0
ybuf: .fill $19, 0
bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __bend
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __breturn
Removing instruction jmp __b2
Removing instruction jmp __b6
Removing instruction jmp __b7
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __b5
Removing instruction jmp __breturn
Removing instruction jmp __b6
Removing instruction jmp __b8
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b7
Removing instruction jmp __b6
Removing instruction jmp __b10
Removing instruction jmp __b9
Removing instruction jmp __b8
Removing instruction jmp __breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #>0
Removing instruction lda #>0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #>0
Replacing instruction ldy #0 with TAY
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label __bbegin with __b1
Replacing label __b2_from___b1 with __b2
Replacing label __b2_from___b1 with __b2
Replacing label __b1_from___b1 with __b1
Replacing label __b1_from___b1 with __b1
Replacing label __b6_from___b5 with __b6
Replacing label __b8_from___b10 with __b8
Removing instruction __bbegin:
Removing instruction __b3_from___b2:
Removing instruction __bend_from___b3:
Removing instruction __b4_from_main:
Removing instruction __b2_from___b1:
Removing instruction doplasma_from___b2:
Removing instruction __b2_from___b1:
Removing instruction print_ln_from___b2:
Removing instruction __b1_from___b1:
Removing instruction __b6_from___b5:
Removing instruction __b8_from___b10:
Removing instruction __b8_from___b9:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction __b2:
Removing instruction __b3:
Removing instruction __bend:
Removing instruction makechar_from_main:
Removing instruction __b4:
Removing instruction __b5:
Removing instruction __b1_from___b5:
Removing instruction __b3:
Removing instruction __breturn:
Removing instruction __b6:
Removing instruction doplasma_from___b6:
Removing instruction __b7:
Removing instruction __b1_from___b7:
Removing instruction __b1_from_doplasma:
Removing instruction __b3_from___b1:
Removing instruction __b5_from___b3:
Removing instruction __breturn:
Removing instruction __b8:
Removing instruction __b5_from___b8:
Removing instruction __b6_from___b7:
Removing instruction __b3_from___b4:
Removing instruction __b1_from___b2:
Removing instruction __b1:
Removing instruction __b2:
Removing instruction __breturn:
Removing instruction __b1_from_print_ln:
Removing instruction __breturn:
Removing instruction print_byte_from_print_word:
Removing instruction __b1:
Removing instruction print_byte_from___b1:
Removing instruction __breturn:
Removing instruction print_char_from_print_byte:
Removing instruction __b1:
Removing instruction print_char_from___b1:
Removing instruction __breturn:
Removing instruction __breturn:
Removing instruction __breturn:
Removing instruction __b1_from_makechar:
Removing instruction __breturn:
Removing instruction __b3_from___b2:
Removing instruction __b4:
Removing instruction __b1_from___b4:
Removing instruction __b7:
Removing instruction __b3_from___b7:
Removing instruction __b10:
Removing instruction __b9:
Removing instruction __b5_from___b8:
Removing instruction __breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Relabelling long label __b6_from___b5 to b1
Relabelling long label __b5_from___b3 to b1
Succesful ASM optimization Pass5RelabelLongLabels
Adding RTS to root block
Succesful ASM optimization Pass5AddMainRts
Removing instruction jmp __b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #<0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
FINAL SYMBOL TABLE
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(const byte*) CHARSET = (byte*) 59392
(const byte*) CIA2_PORT_A = (byte*) 56576
(const byte) PAGE1 = (word)(const byte*) SCREEN1>>(byte) 6&(byte) $f0|(word)(const byte*) CHARSET>>(byte) $a&(byte) $e
(const byte) PAGE2 = (word)(const byte*) SCREEN2>>(byte) 6&(byte) $f0|(word)(const byte*) CHARSET>>(byte) $a&(byte) $e
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(const byte*) SCREEN1 = (byte*) 57344
(const byte*) SCREEN2 = (byte*) 58368
(word) Ticks
(word) Ticks#1 Ticks zp[2]:16 2.0
(word) Ticks#12 Ticks_1 zp[2]:19 4.0
(const byte*) VIC_MEMORY = (byte*) 53272
(const byte*) bittab[] = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 }
(void()) doplasma((byte*) doplasma::scrn)
(byte~) doplasma::$1 reg byte a 202.0
(byte~) doplasma::$3 reg byte a 202.0
(byte~) doplasma::$6 reg byte a 2002.0
(label) doplasma::@1
(label) doplasma::@2
(label) doplasma::@3
(label) doplasma::@4
(label) doplasma::@5
(label) doplasma::@6
(label) doplasma::@7
(label) doplasma::@8
(label) doplasma::@return
(byte) doplasma::c1A
(byte) doplasma::c1B
(byte) doplasma::c1a
(byte) doplasma::c1a#2 c1a zp[1]:9 67.33333333333333
(byte) doplasma::c1a#3 c1a zp[1]:9 75.75
(byte) doplasma::c1b
(byte) doplasma::c1b#2 c1b zp[1]:18 101.0
(byte) doplasma::c1b#3 c1b zp[1]:18 60.599999999999994
(byte) doplasma::c2A
(const byte) doplasma::c2A#0 c2A = (byte) 0
(byte) doplasma::c2B
(const byte) doplasma::c2B#0 c2B = (byte) 0
(byte) doplasma::c2a
(byte) doplasma::c2a#2 c2a zp[1]:2 67.33333333333333
(byte) doplasma::c2a#3 c2a zp[1]:2 75.75
(byte) doplasma::c2b
(byte) doplasma::c2b#2 c2b zp[1]:3 101.0
(byte) doplasma::c2b#3 c2b zp[1]:3 60.599999999999994
(byte) doplasma::i
(byte) doplasma::i#2 i zp[1]:21 202.0
(byte) doplasma::i#3 i zp[1]:21 67.33333333333333
(byte) doplasma::ii
(byte) doplasma::ii#2 ii zp[1]:8 202.0
(byte) doplasma::ii#3 ii zp[1]:8 67.33333333333333
(byte) doplasma::j
(byte) doplasma::j#2 reg byte y 2002.0
(byte) doplasma::j#3 reg byte y 1251.25
(byte) doplasma::jj
(byte) doplasma::jj#2 reg byte x 202.0
(byte) doplasma::jj#3 reg byte x 163.0
(byte*) doplasma::scrn
(byte*) doplasma::scrn#0 scrn zp[2]:6 101.0
(byte*) doplasma::scrn#13 scrn zp[2]:6 6.733333333333333
(byte*) doplasma::scrn#6 scrn zp[2]:6 186.28571428571428
(void()) end()
(label) end::@1
(label) end::@2
(label) end::@return
(word) last_time loadstore zp[2]:10 0.41666666666666663
(signed word()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@return
(byte) main::block
(byte) main::block#1 block zp[1]:14 0.46153846153846156
(word) main::count
(word) main::count#1 count zp[2]:4 22.0
(word) main::count#2 count zp[2]:4 4.714285714285714
(signed word) main::return
(byte) main::tmp
(byte) main::tmp#1 reg byte a 4.0
(byte) main::v
(byte) main::v#1 v zp[1]:15 0.4444444444444444
(void()) makechar()
(byte~) makechar::$1 reg byte a 22.0
(byte*~) makechar::$10 zp[2]:19 202.0
(byte~) makechar::$4 reg byte a 2002.0
(byte~) makechar::$5 zp[1]:21 2002.0
(word~) makechar::$8 zp[2]:19 202.0
(word~) makechar::$9 zp[2]:19 202.0
(label) makechar::@1
(label) makechar::@10
(label) makechar::@2
(label) makechar::@3
(label) makechar::@4
(label) makechar::@5
(label) makechar::@6
(label) makechar::@7
(label) makechar::@8
(label) makechar::@9
(label) makechar::@return
(byte) makechar::b
(byte) makechar::b#2 b zp[1]:9 2002.0
(byte) makechar::b#3 b zp[1]:9 282.1818181818182
(byte) makechar::b#7 b zp[1]:9 1501.5
(word) makechar::c
(word) makechar::c#2 c zp[2]:16 22.0
(word) makechar::c#3 c zp[2]:16 6.090909090909091
(byte) makechar::i
(byte) makechar::i#2 i zp[1]:8 202.0
(byte) makechar::i#3 i zp[1]:8 23.764705882352942
(byte) makechar::ii
(byte) makechar::ii#2 reg byte y 2002.0
(byte) makechar::ii#3 reg byte y 400.4
(byte) makechar::s
(byte) makechar::s#1 s zp[1]:18 53.26315789473684
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte x 4.0
(label) print_byte::@1
(label) print_byte::@return
(byte) print_byte::b
(byte) print_byte::b#0 reg byte x 4.0
(byte) print_byte::b#1 reg byte x 4.0
(byte) print_byte::b#2 reg byte x 2.0
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
(byte) print_char::ch#0 reg byte a 4.0
(byte) print_char::ch#1 reg byte a 4.0
(byte) print_char::ch#2 reg byte a 6.0
(byte*) print_char_cursor
(byte*) print_char_cursor#10 print_char_cursor zp[2]:6 1.0
(byte*) print_char_cursor#25 print_char_cursor zp[2]:6 4.0
(byte*) print_char_cursor#35 print_char_cursor zp[2]:6 1.3333333333333333
(const byte*) print_hextab[] = (byte*) "0123456789abcdef"z
(byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp[2]:4 16.5
(byte*) print_line_cursor#8 print_line_cursor zp[2]:4 22.0
(void()) print_ln()
(label) print_ln::@1
(label) print_ln::@return
(byte*) print_screen
(void()) print_word((word) print_word::w)
(label) print_word::@1
(label) print_word::@return
(word) print_word::w
(word) print_word::w#0 w zp[2]:19 2.0
(byte()) rand()
(label) rand::@return
(const word*) rand::RAND_SEED = &(word) rand_seed
(byte) rand::return
(byte) rand::return#0 reg byte a 334.33333333333337
(byte) rand::return#2 reg byte a 2002.0
(word) rand_seed loadstore zp[2]:12 0.21428571428571427
(const byte*) sinustable[(number) $100] = { (byte) $80, (byte) $7d, (byte) $7a, (byte) $77, (byte) $74, (byte) $70, (byte) $6d, (byte) $6a, (byte) $67, (byte) $64, (byte) $61, (byte) $5e, (byte) $5b, (byte) $58, (byte) $55, (byte) $52, (byte) $4f, (byte) $4d, (byte) $4a, (byte) $47, (byte) $44, (byte) $41, (byte) $3f, (byte) $3c, (byte) $39, (byte) $37, (byte) $34, (byte) $32, (byte) $2f, (byte) $2d, (byte) $2b, (byte) $28, (byte) $26, (byte) $24, (byte) $22, (byte) $20, (byte) $1e, (byte) $1c, (byte) $1a, (byte) $18, (byte) $16, (byte) $15, (byte) $13, (byte) $11, (byte) $10, (byte) $f, (byte) $d, (byte) $c, (byte) $b, (byte) $a, (byte) 8, (byte) 7, (byte) 6, (byte) 6, (byte) 5, (byte) 4, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 2, (byte) 2, (byte) 3, (byte) 3, (byte) 4, (byte) 5, (byte) 6, (byte) 6, (byte) 7, (byte) 8, (byte) $a, (byte) $b, (byte) $c, (byte) $d, (byte) $f, (byte) $10, (byte) $11, (byte) $13, (byte) $15, (byte) $16, (byte) $18, (byte) $1a, (byte) $1c, (byte) $1e, (byte) $20, (byte) $22, (byte) $24, (byte) $26, (byte) $28, (byte) $2b, (byte) $2d, (byte) $2f, (byte) $32, (byte) $34, (byte) $37, (byte) $39, (byte) $3c, (byte) $3f, (byte) $41, (byte) $44, (byte) $47, (byte) $4a, (byte) $4d, (byte) $4f, (byte) $52, (byte) $55, (byte) $58, (byte) $5b, (byte) $5e, (byte) $61, (byte) $64, (byte) $67, (byte) $6a, (byte) $6d, (byte) $70, (byte) $74, (byte) $77, (byte) $7a, (byte) $7d, (byte) $80, (byte) $83, (byte) $86, (byte) $89, (byte) $8c, (byte) $90, (byte) $93, (byte) $96, (byte) $99, (byte) $9c, (byte) $9f, (byte) $a2, (byte) $a5, (byte) $a8, (byte) $ab, (byte) $ae, (byte) $b1, (byte) $b3, (byte) $b6, (byte) $b9, (byte) $bc, (byte) $bf, (byte) $c1, (byte) $c4, (byte) $c7, (byte) $c9, (byte) $cc, (byte) $ce, (byte) $d1, (byte) $d3, (byte) $d5, (byte) $d8, (byte) $da, (byte) $dc, (byte) $de, (byte) $e0, (byte) $e2, (byte) $e4, (byte) $e6, (byte) $e8, (byte) $ea, (byte) $eb, (byte) $ed, (byte) $ef, (byte) $f0, (byte) $f1, (byte) $f3, (byte) $f4, (byte) $f5, (byte) $f6, (byte) $f8, (byte) $f9, (byte) $fa, (byte) $fa, (byte) $fb, (byte) $fc, (byte) $fd, (byte) $fd, (byte) $fe, (byte) $fe, (byte) $fe, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $fe, (byte) $fe, (byte) $fe, (byte) $fd, (byte) $fd, (byte) $fc, (byte) $fb, (byte) $fa, (byte) $fa, (byte) $f9, (byte) $f8, (byte) $f6, (byte) $f5, (byte) $f4, (byte) $f3, (byte) $f1, (byte) $f0, (byte) $ef, (byte) $ed, (byte) $eb, (byte) $ea, (byte) $e8, (byte) $e6, (byte) $e4, (byte) $e2, (byte) $e0, (byte) $de, (byte) $dc, (byte) $da, (byte) $d8, (byte) $d5, (byte) $d3, (byte) $d1, (byte) $ce, (byte) $cc, (byte) $c9, (byte) $c7, (byte) $c4, (byte) $c1, (byte) $bf, (byte) $bc, (byte) $b9, (byte) $b6, (byte) $b3, (byte) $b1, (byte) $ae, (byte) $ab, (byte) $a8, (byte) $a5, (byte) $a2, (byte) $9f, (byte) $9c, (byte) $99, (byte) $96, (byte) $93, (byte) $90, (byte) $8c, (byte) $89, (byte) $86, (byte) $83 }
(void()) start()
(label) start::@return
(const word*) start::LAST_TIME = &(word) last_time
(const byte*) xbuf[(number) $28] = { fill( $28, 0) }
(const byte*) ybuf[(number) $19] = { fill( $19, 0) }
zp[1]:2 [ doplasma::c2a#3 doplasma::c2a#2 ]
zp[1]:3 [ doplasma::c2b#3 doplasma::c2b#2 ]
reg byte x [ doplasma::jj#3 doplasma::jj#2 ]
reg byte y [ doplasma::j#3 doplasma::j#2 ]
zp[2]:4 [ print_line_cursor#8 print_line_cursor#1 main::count#2 main::count#1 ]
reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
zp[2]:6 [ print_char_cursor#25 print_char_cursor#35 print_char_cursor#10 doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ]
zp[1]:8 [ makechar::i#3 makechar::i#2 doplasma::ii#3 doplasma::ii#2 ]
reg byte y [ makechar::ii#3 makechar::ii#2 ]
zp[1]:9 [ makechar::b#3 makechar::b#7 makechar::b#2 doplasma::c1a#3 doplasma::c1a#2 ]
zp[2]:10 [ last_time ]
zp[2]:12 [ rand_seed ]
zp[1]:14 [ main::block#1 ]
reg byte a [ main::tmp#1 ]
zp[1]:15 [ main::v#1 ]
reg byte a [ doplasma::$6 ]
reg byte a [ doplasma::$3 ]
reg byte a [ doplasma::$1 ]
zp[2]:16 [ Ticks#1 makechar::c#3 makechar::c#2 ]
reg byte a [ print_byte::$0 ]
reg byte x [ print_byte::$2 ]
reg byte a [ makechar::$1 ]
zp[1]:18 [ makechar::s#1 doplasma::c1b#3 doplasma::c1b#2 ]
zp[2]:19 [ makechar::$8 makechar::$9 makechar::$10 Ticks#12 print_word::w#0 ]
reg byte a [ rand::return#2 ]
reg byte a [ makechar::$4 ]
zp[1]:21 [ makechar::$5 doplasma::i#3 doplasma::i#2 ]
reg byte a [ rand::return#0 ]
FINAL ASSEMBLER
Score: 104147
// File Comments
// Upstart
.pc = $801 "Basic"
:BasicUpstart(__b1)
.pc = $80d "Program"
// Global Constants & labels
.label VIC_MEMORY = $d018
// CIA#2 Port A: Serial bus, RS-232, VIC memory bank
.label CIA2_PORT_A = $dd00
.label SCREEN1 = $e000
.label SCREEN2 = $e400
.label CHARSET = $e800
.const PAGE1 = SCREEN1>>6&$f0|CHARSET>>$a&$e
.const PAGE2 = SCREEN2>>6&$f0|CHARSET>>$a&$e
.label last_time = $a
.label rand_seed = $c
.label print_line_cursor = 4
.label print_char_cursor = 6
.label Ticks = $10
.label Ticks_1 = $13
// @begin
// @1
__b1:
// last_time
// [1] (word) last_time ← (word) 0 -- vwuz1=vwuc1
lda #<0
sta.z last_time
sta.z last_time+1
// @2
// rand_seed
// [2] (word) rand_seed ← (word) 0 -- vwuz1=vwuc1
sta.z rand_seed
sta.z rand_seed+1
// [3] phi from @2 to @3 [phi:@2->@3]
// @3
// [4] call main
jsr main
rts
// [5] phi from @3 to @end [phi:@3->@end]
// @end
// main
main: {
.label block = $e
.label v = $f
.label count = 4
// rand_seed = 6474
// [6] (word) rand_seed ← (word) $194a -- vwuz1=vwuc1
lda #<$194a
sta.z rand_seed
lda #>$194a
sta.z rand_seed+1
// makechar()
// [7] call makechar
// [85] phi from main to makechar [phi:main->makechar]
jsr makechar
// [8] phi from main to main::@4 [phi:main->main::@4]
// main::@4
// start()
// [9] call start
jsr start
// main::@5
// block = *CIA2_PORT_A
// [10] (byte) main::block#1 ← *((const byte*) CIA2_PORT_A) -- vbuz1=_deref_pbuc1
lda CIA2_PORT_A
sta.z block
// tmp = block & 0xFC
// [11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc -- vbuaa=vbuz1_band_vbuc1
lda #$fc
and.z block
// *CIA2_PORT_A = tmp
// [12] *((const byte*) CIA2_PORT_A) ← (byte) main::tmp#1 -- _deref_pbuc1=vbuaa
sta CIA2_PORT_A
// v = *VIC_MEMORY
// [13] (byte) main::v#1 ← *((const byte*) VIC_MEMORY) -- vbuz1=_deref_pbuc1
lda VIC_MEMORY
sta.z v
// [14] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
// [14] phi (word) main::count#2 = (word) $1f4 [phi:main::@5->main::@1#0] -- vwuz1=vwuc1
lda #<$1f4
sta.z count
lda #>$1f4
sta.z count+1
/* Run the demo until a key was hit */
// main::@1
__b1:
// while (count)
// [15] if((byte) 0!=(word) main::count#2) goto main::@2 -- vwuc1_neq_vwuz1_then_la1
lda.z count+1
cmp #>0
bne __b2
lda.z count
cmp #<0
bne __b2
// main::@3
// *VIC_MEMORY = v
// [16] *((const byte*) VIC_MEMORY) ← (byte) main::v#1 -- _deref_pbuc1=vbuz1
lda.z v
sta VIC_MEMORY
// *CIA2_PORT_A = block
// [17] *((const byte*) CIA2_PORT_A) ← (byte) main::block#1 -- _deref_pbuc1=vbuz1
lda.z block
sta CIA2_PORT_A
// end()
// [18] call end
jsr end
// main::@return
// }
// [19] return
rts
// [20] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
// main::@2
__b2:
// doplasma ((char*)SCREEN1)
// [21] call doplasma
// [26] phi from main::@2 to doplasma [phi:main::@2->doplasma]
// [26] phi (byte*) doplasma::scrn#13 = (const byte*) SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1
lda #<SCREEN1
sta.z doplasma.scrn
lda #>SCREEN1
sta.z doplasma.scrn+1
jsr doplasma
// main::@6
// *VIC_MEMORY = PAGE1
// [22] *((const byte*) VIC_MEMORY) ← (const byte) PAGE1 -- _deref_pbuc1=vbuc2
lda #PAGE1
sta VIC_MEMORY
// doplasma ((char*)SCREEN2)
// [23] call doplasma
// [26] phi from main::@6 to doplasma [phi:main::@6->doplasma]
// [26] phi (byte*) doplasma::scrn#13 = (const byte*) SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1
lda #<SCREEN2
sta.z doplasma.scrn
lda #>SCREEN2
sta.z doplasma.scrn+1
jsr doplasma
// main::@7
// *VIC_MEMORY = PAGE2
// [24] *((const byte*) VIC_MEMORY) ← (const byte) PAGE2 -- _deref_pbuc1=vbuc2
lda #PAGE2
sta VIC_MEMORY
// --count;
// [25] (word) main::count#1 ← -- (word) main::count#2 -- vwuz1=_dec_vwuz1
lda.z count
bne !+
dec.z count+1
!:
dec.z count
// [14] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
// [14] phi (word) main::count#2 = (word) main::count#1 [phi:main::@7->main::@1#0] -- register_copy
jmp __b1
}
// doplasma
// doplasma(byte* zp(6) scrn)
doplasma: {
.const c2A = 0
.const c2B = 0
.label c1a = 9
.label c1b = $12
.label ii = 8
.label c2a = 2
.label c2b = 3
.label i = $15
.label scrn = 6
// [27] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1]
// [27] phi (byte) doplasma::c1b#3 = (byte) 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1
lda #0
sta.z c1b
// [27] phi (byte) doplasma::c1a#3 = (byte) 0 [phi:doplasma->doplasma::@1#1] -- vbuz1=vbuc1
sta.z c1a
// [27] phi (byte) doplasma::ii#3 = (byte) 0 [phi:doplasma->doplasma::@1#2] -- vbuz1=vbuc1
sta.z ii
// doplasma::@1
__b1:
// for (ii = 0; ii < 25; ++ii)
// [28] if((byte) doplasma::ii#3<(byte) $19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1
lda.z ii
cmp #$19
bcc __b2
// [29] phi from doplasma::@1 to doplasma::@3 [phi:doplasma::@1->doplasma::@3]
// [29] phi (byte) doplasma::c2b#3 = (const byte) doplasma::c2B#0 [phi:doplasma::@1->doplasma::@3#0] -- vbuz1=vbuc1
lda #c2B
sta.z c2b
// [29] phi (byte) doplasma::c2a#3 = (const byte) doplasma::c2A#0 [phi:doplasma::@1->doplasma::@3#1] -- vbuz1=vbuc1
lda #c2A
sta.z c2a
// [29] phi (byte) doplasma::i#3 = (byte) 0 [phi:doplasma::@1->doplasma::@3#2] -- vbuz1=vbuc1
lda #0
sta.z i
// doplasma::@3
__b3:
// for (i = 0; i < 40; ++i)
// [30] if((byte) doplasma::i#3<(byte) $28) goto doplasma::@4 -- vbuz1_lt_vbuc1_then_la1
lda.z i
cmp #$28
bcc __b4
// [31] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5]
// [31] phi (byte*) doplasma::scrn#6 = (byte*) doplasma::scrn#13 [phi:doplasma::@3->doplasma::@5#0] -- register_copy
// [31] phi (byte) doplasma::jj#3 = (byte) 0 [phi:doplasma::@3->doplasma::@5#1] -- vbuxx=vbuc1
ldx #0
// doplasma::@5
__b5:
// for (jj = 0; jj < 25; ++jj)
// [32] if((byte) doplasma::jj#3<(byte) $19) goto doplasma::@6 -- vbuxx_lt_vbuc1_then_la1
cpx #$19
bcc b1
// doplasma::@return
// }
// [33] return
rts
// [34] phi from doplasma::@5 to doplasma::@6 [phi:doplasma::@5->doplasma::@6]
b1:
// [34] phi (byte) doplasma::j#3 = (byte) 0 [phi:doplasma::@5->doplasma::@6#0] -- vbuyy=vbuc1
ldy #0
// doplasma::@6
__b6:
// for (j = 0; j < 40; ++j)
// [35] if((byte) doplasma::j#3<(byte) $28) goto doplasma::@7 -- vbuyy_lt_vbuc1_then_la1
cpy #$28
bcc __b7
// doplasma::@8
// scrn += 40
// [36] (byte*) doplasma::scrn#0 ← (byte*) doplasma::scrn#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z scrn
sta.z scrn
bcc !+
inc.z scrn+1
!:
// for (jj = 0; jj < 25; ++jj)
// [37] (byte) doplasma::jj#2 ← ++ (byte) doplasma::jj#3 -- vbuxx=_inc_vbuxx
inx
// [31] phi from doplasma::@8 to doplasma::@5 [phi:doplasma::@8->doplasma::@5]
// [31] phi (byte*) doplasma::scrn#6 = (byte*) doplasma::scrn#0 [phi:doplasma::@8->doplasma::@5#0] -- register_copy
// [31] phi (byte) doplasma::jj#3 = (byte) doplasma::jj#2 [phi:doplasma::@8->doplasma::@5#1] -- register_copy
jmp __b5
// doplasma::@7
__b7:
// xbuf[j] + ybuf[jj]
// [38] (byte~) doplasma::$6 ← *((const byte*) xbuf + (byte) doplasma::j#3) + *((const byte*) ybuf + (byte) doplasma::jj#3) -- vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx
lda xbuf,y
clc
adc ybuf,x
// scrn[j] = (xbuf[j] + ybuf[jj])
// [39] *((byte*) doplasma::scrn#6 + (byte) doplasma::j#3) ← (byte~) doplasma::$6 -- pbuz1_derefidx_vbuyy=vbuaa
sta (scrn),y
// for (j = 0; j < 40; ++j)
// [40] (byte) doplasma::j#2 ← ++ (byte) doplasma::j#3 -- vbuyy=_inc_vbuyy
iny
// [34] phi from doplasma::@7 to doplasma::@6 [phi:doplasma::@7->doplasma::@6]
// [34] phi (byte) doplasma::j#3 = (byte) doplasma::j#2 [phi:doplasma::@7->doplasma::@6#0] -- register_copy
jmp __b6
// doplasma::@4
__b4:
// sinustable[c2a] + sinustable[c2b]
// [41] (byte~) doplasma::$3 ← *((const byte*) sinustable + (byte) doplasma::c2a#3) + *((const byte*) sinustable + (byte) doplasma::c2b#3) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2
ldy.z c2a
lda sinustable,y
ldy.z c2b
clc
adc sinustable,y
// xbuf[i] = (sinustable[c2a] + sinustable[c2b])
// [42] *((const byte*) xbuf + (byte) doplasma::i#3) ← (byte~) doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa
ldy.z i
sta xbuf,y
// c2a += 3
// [43] (byte) doplasma::c2a#2 ← (byte) doplasma::c2a#3 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1
lax.z c2a
axs #-[3]
stx.z c2a
// c2b += 7
// [44] (byte) doplasma::c2b#2 ← (byte) doplasma::c2b#3 + (byte) 7 -- vbuz1=vbuz1_plus_vbuc1
lax.z c2b
axs #-[7]
stx.z c2b
// for (i = 0; i < 40; ++i)
// [45] (byte) doplasma::i#2 ← ++ (byte) doplasma::i#3 -- vbuz1=_inc_vbuz1
inc.z i
// [29] phi from doplasma::@4 to doplasma::@3 [phi:doplasma::@4->doplasma::@3]
// [29] phi (byte) doplasma::c2b#3 = (byte) doplasma::c2b#2 [phi:doplasma::@4->doplasma::@3#0] -- register_copy
// [29] phi (byte) doplasma::c2a#3 = (byte) doplasma::c2a#2 [phi:doplasma::@4->doplasma::@3#1] -- register_copy
// [29] phi (byte) doplasma::i#3 = (byte) doplasma::i#2 [phi:doplasma::@4->doplasma::@3#2] -- register_copy
jmp __b3
// doplasma::@2
__b2:
// sinustable[c1a] + sinustable[c1b]
// [46] (byte~) doplasma::$1 ← *((const byte*) sinustable + (byte) doplasma::c1a#3) + *((const byte*) sinustable + (byte) doplasma::c1b#3) -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2
ldy.z c1a
lda sinustable,y
ldy.z c1b
clc
adc sinustable,y
// ybuf[ii] = (sinustable[c1a] + sinustable[c1b])
// [47] *((const byte*) ybuf + (byte) doplasma::ii#3) ← (byte~) doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuaa
ldy.z ii
sta ybuf,y
// c1a += 4
// [48] (byte) doplasma::c1a#2 ← (byte) doplasma::c1a#3 + (byte) 4 -- vbuz1=vbuz1_plus_vbuc1
lax.z c1a
axs #-[4]
stx.z c1a
// c1b += 9
// [49] (byte) doplasma::c1b#2 ← (byte) doplasma::c1b#3 + (byte) 9 -- vbuz1=vbuz1_plus_vbuc1
lax.z c1b
axs #-[9]
stx.z c1b
// for (ii = 0; ii < 25; ++ii)
// [50] (byte) doplasma::ii#2 ← ++ (byte) doplasma::ii#3 -- vbuz1=_inc_vbuz1
inc.z ii
// [27] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1]
// [27] phi (byte) doplasma::c1b#3 = (byte) doplasma::c1b#2 [phi:doplasma::@2->doplasma::@1#0] -- register_copy
// [27] phi (byte) doplasma::c1a#3 = (byte) doplasma::c1a#2 [phi:doplasma::@2->doplasma::@1#1] -- register_copy
// [27] phi (byte) doplasma::ii#3 = (byte) doplasma::ii#2 [phi:doplasma::@2->doplasma::@1#2] -- register_copy
jmp __b1
}
// end
end: {
// Ticks = last_time
// [51] (word) Ticks#1 ← (word) last_time -- vwuz1=vwuz2
lda.z last_time
sta.z Ticks
lda.z last_time+1
sta.z Ticks+1
// start()
// [52] call start
jsr start
// end::@1
// last_time -= Ticks
// [53] (word) last_time ← (word) last_time - (word) Ticks#1 -- vwuz1=vwuz1_minus_vwuz2
lda.z last_time
sec
sbc.z Ticks
sta.z last_time
lda.z last_time+1
sbc.z Ticks+1
sta.z last_time+1
// Ticks = last_time
// [54] (word) Ticks#12 ← (word) last_time -- vwuz1=vwuz2
lda.z last_time
sta.z Ticks_1
lda.z last_time+1
sta.z Ticks_1+1
// print_word(Ticks)
// [55] (word) print_word::w#0 ← (word) Ticks#12
// [56] call print_word
jsr print_word
// [57] phi from end::@1 to end::@2 [phi:end::@1->end::@2]
// end::@2
// print_ln()
// [58] call print_ln
// [60] phi from end::@2 to print_ln [phi:end::@2->print_ln]
jsr print_ln
// end::@return
// }
// [59] return
rts
}
// print_ln
// Print a newline
print_ln: {
// [61] phi from print_ln to print_ln::@1 [phi:print_ln->print_ln::@1]
// [61] phi (byte*) print_line_cursor#8 = (byte*) 1024 [phi:print_ln->print_ln::@1#0] -- pbuz1=pbuc1
lda #<$400
sta.z print_line_cursor
lda #>$400
sta.z print_line_cursor+1
// [61] phi from print_ln::@1 to print_ln::@1 [phi:print_ln::@1->print_ln::@1]
// [61] phi (byte*) print_line_cursor#8 = (byte*) print_line_cursor#1 [phi:print_ln::@1->print_ln::@1#0] -- register_copy
// print_ln::@1
__b1:
// print_line_cursor + $28
// [62] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#8 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z print_line_cursor
sta.z print_line_cursor
bcc !+
inc.z print_line_cursor+1
!:
// while (print_line_cursor<print_char_cursor)
// [63] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1
lda.z print_line_cursor+1
cmp.z print_char_cursor+1
bcc __b1
bne !+
lda.z print_line_cursor
cmp.z print_char_cursor
bcc __b1
!:
// print_ln::@return
// }
// [64] return
rts
}
// print_word
// Print a word as HEX
// print_word(word zp($13) w)
print_word: {
.label w = $13
// print_byte(>w)
// [65] (byte) print_byte::b#0 ← > (word) print_word::w#0 -- vbuxx=_hi_vwuz1
lda.z w+1
tax
// [66] call print_byte
// [70] phi from print_word to print_byte [phi:print_word->print_byte]
// [70] phi (byte*) print_char_cursor#35 = (byte*) 1024 [phi:print_word->print_byte#0] -- pbuz1=pbuc1
lda #<$400
sta.z print_char_cursor
lda #>$400
sta.z print_char_cursor+1
// [70] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy
jsr print_byte
// print_word::@1
// print_byte(<w)
// [67] (byte) print_byte::b#1 ← < (word) print_word::w#0 -- vbuxx=_lo_vwuz1
lda.z w
tax
// [68] call print_byte
// [70] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte]
// [70] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#10 [phi:print_word::@1->print_byte#0] -- register_copy
// [70] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy
jsr print_byte
// print_word::@return
// }
// [69] return
rts
}
// print_byte
// Print a byte as HEX
// print_byte(byte register(X) b)
print_byte: {
// b>>4
// [71] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 -- vbuaa=vbuxx_ror_4
txa
lsr
lsr
lsr
lsr
// print_char(print_hextab[b>>4])
// [72] (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa
tay
lda print_hextab,y
// [73] call print_char
// [78] phi from print_byte to print_char [phi:print_byte->print_char]
// [78] phi (byte*) print_char_cursor#25 = (byte*) print_char_cursor#35 [phi:print_byte->print_char#0] -- register_copy
// [78] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy
jsr print_char
// print_byte::@1
// b&$f
// [74] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f -- vbuxx=vbuxx_band_vbuc1
lda #$f
axs #0
// print_char(print_hextab[b&$f])
// [75] (byte) print_char::ch#1 ← *((const byte*) print_hextab + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx
lda print_hextab,x
// [76] call print_char
// [78] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
// [78] phi (byte*) print_char_cursor#25 = (byte*) print_char_cursor#10 [phi:print_byte::@1->print_char#0] -- register_copy
// [78] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy
jsr print_char
// print_byte::@return
// }
// [77] return
rts
}
// print_char
// Print a single char
// print_char(byte register(A) ch)
print_char: {
// *(print_char_cursor++) = ch
// [79] *((byte*) print_char_cursor#25) ← (byte) print_char::ch#2 -- _deref_pbuz1=vbuaa
ldy #0
sta (print_char_cursor),y
// *(print_char_cursor++) = ch;
// [80] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#25 -- pbuz1=_inc_pbuz1
inc.z print_char_cursor
bne !+
inc.z print_char_cursor+1
!:
// print_char::@return
// }
// [81] return
rts
}
// start
start: {
.label LAST_TIME = last_time
// asm
// asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1 }
jsr $ffde
sta LAST_TIME
stx LAST_TIME+1
// rand_seed = 6474
// [83] (word) rand_seed ← (word) $194a -- vwuz1=vwuc1
lda #<$194a
sta.z rand_seed
lda #>$194a
sta.z rand_seed+1
// start::@return
// }
// [84] return
rts
}
// makechar
makechar: {
.label __5 = $15
.label __8 = $13
.label __9 = $13
.label s = $12
.label c = $10
.label i = 8
.label b = 9
.label __10 = $13
// [86] phi from makechar to makechar::@1 [phi:makechar->makechar::@1]
// [86] phi (word) makechar::c#3 = (byte) 0 [phi:makechar->makechar::@1#0] -- vwuz1=vbuc1
lda #<0
sta.z c
sta.z c+1
// makechar::@1
__b1:
// for (c = 0; c < 0x100; ++c)
// [87] if((word) makechar::c#3<(word) $100) goto makechar::@2 -- vwuz1_lt_vwuc1_then_la1
lda.z c+1
cmp #>$100
bcc __b2
bne !+
lda.z c
cmp #<$100
bcc __b2
!:
// makechar::@return
// }
// [88] return
rts
// makechar::@2
__b2:
// (char)c
// [89] (byte~) makechar::$1 ← (byte)(word) makechar::c#3 -- vbuaa=_byte_vwuz1
lda.z c
// s = sinustable[(char)c]
// [90] (byte) makechar::s#1 ← *((const byte*) sinustable + (byte~) makechar::$1) -- vbuz1=pbuc1_derefidx_vbuaa
tay
lda sinustable,y
sta.z s
// [91] phi from makechar::@2 to makechar::@3 [phi:makechar::@2->makechar::@3]
// [91] phi (byte) makechar::i#3 = (byte) 0 [phi:makechar::@2->makechar::@3#0] -- vbuz1=vbuc1
lda #0
sta.z i
// makechar::@3
__b3:
// for (i = 0; i < 8; ++i)
// [92] if((byte) makechar::i#3<(byte) 8) goto makechar::@5 -- vbuz1_lt_vbuc1_then_la1
lda.z i
cmp #8
bcc b1
// makechar::@4
// for (c = 0; c < 0x100; ++c)
// [93] (word) makechar::c#2 ← ++ (word) makechar::c#3 -- vwuz1=_inc_vwuz1
inc.z c
bne !+
inc.z c+1
!:
// [86] phi from makechar::@4 to makechar::@1 [phi:makechar::@4->makechar::@1]
// [86] phi (word) makechar::c#3 = (word) makechar::c#2 [phi:makechar::@4->makechar::@1#0] -- register_copy
jmp __b1
// [94] phi from makechar::@3 to makechar::@5 [phi:makechar::@3->makechar::@5]
b1:
// [94] phi (byte) makechar::b#3 = (byte) 0 [phi:makechar::@3->makechar::@5#0] -- vbuz1=vbuc1
lda #0
sta.z b
// [94] phi (byte) makechar::ii#3 = (byte) 0 [phi:makechar::@3->makechar::@5#1] -- vbuyy=vbuc1
tay
// makechar::@5
__b5:
// for (ii = 0; ii < 8; ++ii)
// [95] if((byte) makechar::ii#3<(byte) 8) goto makechar::@6 -- vbuyy_lt_vbuc1_then_la1
cpy #8
bcc __b6
// makechar::@7
// c<<3
// [96] (word~) makechar::$8 ← (word) makechar::c#3 << (byte) 3 -- vwuz1=vwuz2_rol_3
lda.z c
asl
sta.z __8
lda.z c+1
rol
sta.z __8+1
asl.z __8
rol.z __8+1
asl.z __8
rol.z __8+1
// (c<<3) + i
// [97] (word~) makechar::$9 ← (word~) makechar::$8 + (byte) makechar::i#3 -- vwuz1=vwuz1_plus_vbuz2
lda.z i
clc
adc.z __9
sta.z __9
bcc !+
inc.z __9+1
!:
// ((char*)CHARSET) [(c<<3) + i] = b
// [98] (byte*~) makechar::$10 ← (const byte*) CHARSET + (word~) makechar::$9 -- pbuz1=pbuc1_plus_vwuz1
clc
lda.z __10
adc #<CHARSET
sta.z __10
lda.z __10+1
adc #>CHARSET
sta.z __10+1
// [99] *((byte*~) makechar::$10) ← (byte) makechar::b#3 -- _deref_pbuz1=vbuz2
lda.z b
ldy #0
sta (__10),y
// for (i = 0; i < 8; ++i)
// [100] (byte) makechar::i#2 ← ++ (byte) makechar::i#3 -- vbuz1=_inc_vbuz1
inc.z i
// [91] phi from makechar::@7 to makechar::@3 [phi:makechar::@7->makechar::@3]
// [91] phi (byte) makechar::i#3 = (byte) makechar::i#2 [phi:makechar::@7->makechar::@3#0] -- register_copy
jmp __b3
// [101] phi from makechar::@5 to makechar::@6 [phi:makechar::@5->makechar::@6]
// makechar::@6
__b6:
// rand()
// [102] call rand
jsr rand
// [103] (byte) rand::return#2 ← (byte) rand::return#0
// makechar::@10
// [104] (byte~) makechar::$4 ← (byte) rand::return#2
// rand() & 0xFF
// [105] (byte~) makechar::$5 ← (byte~) makechar::$4 & (byte) $ff -- vbuz1=vbuaa_band_vbuc1
and #$ff
sta.z __5
// if ((rand() & 0xFF) > s)
// [106] if((byte~) makechar::$5<=(byte) makechar::s#1) goto makechar::@8 -- vbuz1_le_vbuz2_then_la1
lda.z s
cmp.z __5
bcs __b8
// makechar::@9
// b |= bittab[ii]
// [107] (byte) makechar::b#2 ← (byte) makechar::b#3 | *((const byte*) bittab + (byte) makechar::ii#3) -- vbuz1=vbuz1_bor_pbuc1_derefidx_vbuyy
lda bittab,y
ora.z b
sta.z b
// [108] phi from makechar::@10 makechar::@9 to makechar::@8 [phi:makechar::@10/makechar::@9->makechar::@8]
// [108] phi (byte) makechar::b#7 = (byte) makechar::b#3 [phi:makechar::@10/makechar::@9->makechar::@8#0] -- register_copy
// makechar::@8
__b8:
// for (ii = 0; ii < 8; ++ii)
// [109] (byte) makechar::ii#2 ← ++ (byte) makechar::ii#3 -- vbuyy=_inc_vbuyy
iny
// [94] phi from makechar::@8 to makechar::@5 [phi:makechar::@8->makechar::@5]
// [94] phi (byte) makechar::b#3 = (byte) makechar::b#7 [phi:makechar::@8->makechar::@5#0] -- register_copy
// [94] phi (byte) makechar::ii#3 = (byte) makechar::ii#2 [phi:makechar::@8->makechar::@5#1] -- register_copy
jmp __b5
}
// rand
rand: {
.label RAND_SEED = rand_seed
// asm
// asm { ldx#8 ldaRAND_SEED+0 __rand_loop: asl rolRAND_SEED+1 bcc__no_eor eor#$2D __no_eor: dex bne__rand_loop staRAND_SEED+0 }
ldx #8
lda RAND_SEED+0
__rand_loop:
asl
rol RAND_SEED+1
bcc __no_eor
eor #$2d
__no_eor:
dex
bne __rand_loop
sta RAND_SEED+0
// (char)rand_seed
// [111] (byte) rand::return#0 ← (byte)(word) rand_seed -- vbuaa=_byte_vwuz1
lda.z rand_seed
// rand::@return
// }
// [112] return
rts
}
// File Data
print_hextab: .text "0123456789abcdef"
.align $100
sinustable: .byte $80, $7d, $7a, $77, $74, $70, $6d, $6a, $67, $64, $61, $5e, $5b, $58, $55, $52, $4f, $4d, $4a, $47, $44, $41, $3f, $3c, $39, $37, $34, $32, $2f, $2d, $2b, $28, $26, $24, $22, $20, $1e, $1c, $1a, $18, $16, $15, $13, $11, $10, $f, $d, $c, $b, $a, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, $a, $b, $c, $d, $f, $10, $11, $13, $15, $16, $18, $1a, $1c, $1e, $20, $22, $24, $26, $28, $2b, $2d, $2f, $32, $34, $37, $39, $3c, $3f, $41, $44, $47, $4a, $4d, $4f, $52, $55, $58, $5b, $5e, $61, $64, $67, $6a, $6d, $70, $74, $77, $7a, $7d, $80, $83, $86, $89, $8c, $90, $93, $96, $99, $9c, $9f, $a2, $a5, $a8, $ab, $ae, $b1, $b3, $b6, $b9, $bc, $bf, $c1, $c4, $c7, $c9, $cc, $ce, $d1, $d3, $d5, $d8, $da, $dc, $de, $e0, $e2, $e4, $e6, $e8, $ea, $eb, $ed, $ef, $f0, $f1, $f3, $f4, $f5, $f6, $f8, $f9, $fa, $fa, $fb, $fc, $fd, $fd, $fe, $fe, $fe, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $fe, $fe, $fe, $fd, $fd, $fc, $fb, $fa, $fa, $f9, $f8, $f6, $f5, $f4, $f3, $f1, $f0, $ef, $ed, $eb, $ea, $e8, $e6, $e4, $e2, $e0, $de, $dc, $da, $d8, $d5, $d3, $d1, $ce, $cc, $c9, $c7, $c4, $c1, $bf, $bc, $b9, $b6, $b3, $b1, $ae, $ab, $a8, $a5, $a2, $9f, $9c, $99, $96, $93, $90, $8c, $89, $86, $83
xbuf: .fill $28, 0
ybuf: .fill $19, 0
bittab: .byte 1, 2, 4, 8, $10, $20, $40, $80