1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-03-24 15:32:58 +00:00

Optimized unrolled plasma to ~16.500 cycles per screen.

This commit is contained in:
jespergravgaard 2019-04-15 11:31:15 +02:00
parent 8234877eeb
commit aecf1ea7b2
5 changed files with 2020 additions and 1980 deletions

View File

@ -1,5 +1,6 @@
// A KickC version of the plasma routine from the CC65 samples
// This version has an unrolled inner loop to reach ~50FPS
// This version has an unrolled inner loop to reach 50+FPS
// This version also optimizes the inner loop by calculating the Y buffer as a set of differences
// (w)2001 by groepaz/hitmen
// Cleanup and porting to CC65 by Ullrich von Bassewitz.
// Ported to KickC by Jesper Gravgaard.
@ -45,8 +46,12 @@ void doplasma(unsigned char* screen) {
unsigned char c1a = c1A;
unsigned char c1b = c1B;
unsigned char yprev = 0;
// Calculate ybuff as a bunch of differences
for (unsigned char i = 0; i < 25; ++i) {
ybuf[i] = (SINTABLE[c1a] + SINTABLE[c1b]);
unsigned char yval = (SINTABLE[c1a] + SINTABLE[c1b]);
ybuf[i] = yval - yprev;
yprev = yval;
c1a += 4;
c1b += 9;
}
@ -62,10 +67,13 @@ void doplasma(unsigned char* screen) {
c2A += 2;
c2B -= 3;
for (unsigned char i = 0; i < 40; ++i) {
unsigned char xval = xbuf[i];
// Find the first value on the row
unsigned char val = xbuf[i];
// Calculate the next values as sums of diffs
// Use experimental loop unrolling to increase the speed
inline for (unsigned char ii = 0; ii < 25; ++ii) {
(screen+ii*40)[i] = xval + ybuf[ii];
val += ybuf[ii];
(screen+ii*40)[i] = val;
}
}
}

View File

@ -78,22 +78,31 @@ doplasma: {
sta c1a
lda c1B
sta c1b
lda #0
sta i
b1:
ldy c1a
lda SINTABLE,y
ldy c1b
clc
adc SINTABLE,y
ldy i
sta ybuf,y
sta ybuf
lda #1
sta i
// Calculate ybuff as a bunch of differences
b1:
lax c1a
axs #-[4]
stx c1a
lax c1b
axs #-[9]
stx c1b
ldy c1a
lda SINTABLE,y
ldy c1b
clc
adc SINTABLE,y
ldy i
sec
sbc ybuf+-1,y
sta ybuf,y
inc i
lda i
cmp #$19
@ -137,105 +146,81 @@ doplasma: {
stx c2B
ldx #0
b5:
ldy xbuf,x
// Use experimental loop unrolling to increase the speed
tya
lda xbuf,x
clc
adc ybuf
sta SCREEN1,x
tya
// Calculate the next values as sums of diffs
// Use experimental loop unrolling to increase the speed
clc
adc ybuf+1
sta SCREEN1+1*$28,x
tya
clc
adc ybuf+2
sta SCREEN1+2*$28,x
tya
clc
adc ybuf+3
sta SCREEN1+3*$28,x
tya
clc
adc ybuf+4
sta SCREEN1+4*$28,x
tya
clc
adc ybuf+5
sta SCREEN1+5*$28,x
tya
clc
adc ybuf+6
sta SCREEN1+6*$28,x
tya
clc
adc ybuf+7
sta SCREEN1+7*$28,x
tya
clc
adc ybuf+8
sta SCREEN1+8*$28,x
tya
clc
adc ybuf+9
sta SCREEN1+9*$28,x
tya
clc
adc ybuf+$a
sta SCREEN1+$a*$28,x
tya
clc
adc ybuf+$b
sta SCREEN1+$b*$28,x
tya
clc
adc ybuf+$c
sta SCREEN1+$c*$28,x
tya
clc
adc ybuf+$d
sta SCREEN1+$d*$28,x
tya
clc
adc ybuf+$e
sta SCREEN1+$e*$28,x
tya
clc
adc ybuf+$f
sta SCREEN1+$f*$28,x
tya
clc
adc ybuf+$10
sta SCREEN1+$10*$28,x
tya
clc
adc ybuf+$11
sta SCREEN1+$11*$28,x
tya
clc
adc ybuf+$12
sta SCREEN1+$12*$28,x
tya
clc
adc ybuf+$13
sta SCREEN1+$13*$28,x
tya
clc
adc ybuf+$14
sta SCREEN1+$14*$28,x
tya
clc
adc ybuf+$15
sta SCREEN1+$15*$28,x
tya
clc
adc ybuf+$16
sta SCREEN1+$16*$28,x
tya
clc
adc ybuf+$17
sta SCREEN1+$17*$28,x
tya
clc
adc ybuf+$18
sta SCREEN1+$18*$28,x

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -111,45 +111,22 @@
(byte) WHITE
(byte) YELLOW
(byte) c1A
(byte) c1A#1 c1A zp ZP_BYTE:4 1.3636363636363638
(byte) c1A#3 c1A zp ZP_BYTE:4 0.18840579710144925
(byte) c1A#1 c1A zp ZP_BYTE:4 1.0714285714285714
(byte) c1A#3 c1A zp ZP_BYTE:4 0.1911764705882353
(byte) c1B
(byte) c1B#1 c1B zp ZP_BYTE:5 1.25
(byte) c1B#3 c1B zp ZP_BYTE:5 0.1911764705882353
(byte) c1B#1 c1B zp ZP_BYTE:5 0.9999999999999999
(byte) c1B#3 c1B zp ZP_BYTE:5 0.19402985074626866
(byte) c2A
(byte) c2A#1 c2A zp ZP_BYTE:6 0.6818181818181819
(byte) c2A#3 c2A zp ZP_BYTE:6 0.22413793103448276
(byte) c2A#1 c2A zp ZP_BYTE:6 0.6
(byte) c2A#3 c2A zp ZP_BYTE:6 0.22807017543859648
(byte) c2B
(byte) c2B#1 c2B zp ZP_BYTE:7 0.6521739130434783
(byte) c2B#3 c2B zp ZP_BYTE:7 0.22807017543859648
(byte) c2B#1 c2B zp ZP_BYTE:7 0.5769230769230769
(byte) c2B#3 c2B zp ZP_BYTE:7 0.23214285714285715
(void()) doplasma((byte*) doplasma::screen)
(byte~) doplasma::$0 reg byte a 202.0
(byte~) doplasma::$11 reg byte a 202.0
(byte~) doplasma::$14 reg byte a 202.0
(byte~) doplasma::$17 reg byte a 202.0
(byte~) doplasma::$2 reg byte a 202.0
(byte~) doplasma::$20 reg byte a 202.0
(byte~) doplasma::$23 reg byte a 202.0
(byte~) doplasma::$26 reg byte a 202.0
(byte~) doplasma::$29 reg byte a 202.0
(byte~) doplasma::$32 reg byte a 202.0
(byte~) doplasma::$35 reg byte a 202.0
(byte~) doplasma::$38 reg byte a 202.0
(byte~) doplasma::$41 reg byte a 202.0
(byte~) doplasma::$44 reg byte a 202.0
(byte~) doplasma::$47 reg byte a 202.0
(byte~) doplasma::$50 reg byte a 202.0
(byte~) doplasma::$53 reg byte a 202.0
(byte~) doplasma::$56 reg byte a 202.0
(byte~) doplasma::$59 reg byte a 202.0
(byte~) doplasma::$6 reg byte a 202.0
(byte~) doplasma::$62 reg byte a 202.0
(byte~) doplasma::$65 reg byte a 202.0
(byte~) doplasma::$68 reg byte a 202.0
(byte~) doplasma::$71 reg byte a 202.0
(byte~) doplasma::$74 reg byte a 202.0
(byte~) doplasma::$77 reg byte a 202.0
(byte~) doplasma::$80 reg byte a 202.0
(byte~) doplasma::$0 reg byte a 4.0
(byte~) doplasma::$1 reg byte a 202.0
(byte~) doplasma::$3 reg byte a 202.0
(byte~) doplasma::$5 reg byte a 202.0
(label) doplasma::@1
(label) doplasma::@2
(label) doplasma::@3
@ -172,7 +149,6 @@
(label) doplasma::@6_21
(label) doplasma::@6_22
(label) doplasma::@6_23
(label) doplasma::@6_24
(label) doplasma::@6_3
(label) doplasma::@6_4
(label) doplasma::@6_5
@ -183,13 +159,13 @@
(label) doplasma::@7
(label) doplasma::@return
(byte) doplasma::c1a
(byte) doplasma::c1a#0 c1a zp ZP_BYTE:8 2.0
(byte) doplasma::c1a#1 c1a zp ZP_BYTE:8 50.5
(byte) doplasma::c1a#2 c1a zp ZP_BYTE:8 101.66666666666666
(byte) doplasma::c1a#0 c1a zp ZP_BYTE:8 1.5
(byte) doplasma::c1a#1 c1a zp ZP_BYTE:8 43.285714285714285
(byte) doplasma::c1a#2 c1a zp ZP_BYTE:8 204.0
(byte) doplasma::c1b
(byte) doplasma::c1b#0 c1b zp ZP_BYTE:9 4.0
(byte) doplasma::c1b#1 c1b zp ZP_BYTE:9 67.33333333333333
(byte) doplasma::c1b#2 c1b zp ZP_BYTE:9 76.25
(byte) doplasma::c1b#0 c1b zp ZP_BYTE:9 2.0
(byte) doplasma::c1b#1 c1b zp ZP_BYTE:9 50.5
(byte) doplasma::c1b#2 c1b zp ZP_BYTE:9 102.0
(byte) doplasma::c2a
(byte) doplasma::c2a#0 c2a zp ZP_BYTE:8 2.0
(byte) doplasma::c2a#1 c2a zp ZP_BYTE:8 50.5
@ -200,19 +176,43 @@
(byte) doplasma::c2b#2 c2b zp ZP_BYTE:9 76.25
(byte) doplasma::i
(byte) doplasma::i#1 i zp ZP_BYTE:10 151.5
(byte) doplasma::i#2 i zp ZP_BYTE:10 60.599999999999994
(byte) doplasma::i#2 i zp ZP_BYTE:10 67.33333333333333
(byte) doplasma::i1
(byte) doplasma::i1#1 i1 zp ZP_BYTE:10 151.5
(byte) doplasma::i1#2 i1 zp ZP_BYTE:10 60.599999999999994
(byte) doplasma::i2
(byte) doplasma::i2#1 reg byte x 151.5
(byte) doplasma::i2#2 reg byte x 54.3846153846154
(byte) doplasma::i2#2 reg byte x 55.45098039215691
(byte) doplasma::ii
(byte*) doplasma::screen
(byte) doplasma::val
(byte) doplasma::val#0 reg byte a 151.5
(byte) doplasma::val#1 reg byte a 151.5
(byte) doplasma::val#10 reg byte a 151.5
(byte) doplasma::val#12 reg byte a 151.5
(byte) doplasma::val#14 reg byte a 151.5
(byte) doplasma::val#16 reg byte a 151.5
(byte) doplasma::val#18 reg byte a 151.5
(byte) doplasma::val#20 reg byte a 151.5
(byte) doplasma::val#22 reg byte a 151.5
(byte) doplasma::val#24 reg byte a 151.5
(byte) doplasma::val#26 reg byte a 151.5
(byte) doplasma::val#28 reg byte a 151.5
(byte) doplasma::val#30 reg byte a 151.5
(byte) doplasma::val#32 reg byte a 151.5
(byte) doplasma::val#34 reg byte a 151.5
(byte) doplasma::val#36 reg byte a 151.5
(byte) doplasma::val#38 reg byte a 151.5
(byte) doplasma::val#4 reg byte a 151.5
(byte) doplasma::val#40 reg byte a 151.5
(byte) doplasma::val#42 reg byte a 151.5
(byte) doplasma::val#44 reg byte a 151.5
(byte) doplasma::val#46 reg byte a 151.5
(byte) doplasma::val#48 reg byte a 202.0
(byte) doplasma::val#6 reg byte a 151.5
(byte) doplasma::val#8 reg byte a 151.5
(byte[$28]) doplasma::xbuf
(const byte[$28]) doplasma::xbuf#0 xbuf = { fill( $28, 0) }
(byte) doplasma::xval
(byte) doplasma::xval#0 reg byte y 53.59183673469388
(byte[$19]) doplasma::ybuf
(const byte[$19]) doplasma::ybuf#0 ybuf = { fill( $19, 0) }
(void()) main()
@ -314,33 +314,34 @@ zp ZP_WORD:11 [ print_char_cursor#45 print_char_cursor#18 print_char_cursor#1 ]
reg byte x [ makecharset::ii#2 makecharset::ii#1 ]
reg byte y [ makecharset::b#2 makecharset::b#3 makecharset::b#1 ]
reg byte a [ doplasma::$0 ]
reg byte a [ doplasma::$2 ]
reg byte y [ doplasma::xval#0 ]
reg byte a [ doplasma::$6 ]
reg byte a [ doplasma::$11 ]
reg byte a [ doplasma::$14 ]
reg byte a [ doplasma::$17 ]
reg byte a [ doplasma::$20 ]
reg byte a [ doplasma::$23 ]
reg byte a [ doplasma::$26 ]
reg byte a [ doplasma::$29 ]
reg byte a [ doplasma::$32 ]
reg byte a [ doplasma::$35 ]
reg byte a [ doplasma::$38 ]
reg byte a [ doplasma::$41 ]
reg byte a [ doplasma::$44 ]
reg byte a [ doplasma::$47 ]
reg byte a [ doplasma::$50 ]
reg byte a [ doplasma::$53 ]
reg byte a [ doplasma::$56 ]
reg byte a [ doplasma::$59 ]
reg byte a [ doplasma::$62 ]
reg byte a [ doplasma::$65 ]
reg byte a [ doplasma::$68 ]
reg byte a [ doplasma::$71 ]
reg byte a [ doplasma::$74 ]
reg byte a [ doplasma::$77 ]
reg byte a [ doplasma::$80 ]
reg byte a [ doplasma::$1 ]
reg byte a [ doplasma::$3 ]
reg byte a [ doplasma::$5 ]
reg byte a [ doplasma::val#0 ]
reg byte a [ doplasma::val#1 ]
reg byte a [ doplasma::val#4 ]
reg byte a [ doplasma::val#6 ]
reg byte a [ doplasma::val#8 ]
reg byte a [ doplasma::val#10 ]
reg byte a [ doplasma::val#12 ]
reg byte a [ doplasma::val#14 ]
reg byte a [ doplasma::val#16 ]
reg byte a [ doplasma::val#18 ]
reg byte a [ doplasma::val#20 ]
reg byte a [ doplasma::val#22 ]
reg byte a [ doplasma::val#24 ]
reg byte a [ doplasma::val#26 ]
reg byte a [ doplasma::val#28 ]
reg byte a [ doplasma::val#30 ]
reg byte a [ doplasma::val#32 ]
reg byte a [ doplasma::val#34 ]
reg byte a [ doplasma::val#36 ]
reg byte a [ doplasma::val#38 ]
reg byte a [ doplasma::val#40 ]
reg byte a [ doplasma::val#42 ]
reg byte a [ doplasma::val#44 ]
reg byte a [ doplasma::val#46 ]
reg byte a [ doplasma::val#48 ]
reg byte a [ makecharset::$2 ]
reg byte a [ sid_rnd::return#2 ]
reg byte a [ makecharset::$3 ]