1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-23 23:32:55 +00:00

Added test for memcpy

This commit is contained in:
jespergravgaard 2019-06-22 10:36:13 +02:00
parent 1e3a6a2750
commit 03e76570b8
13 changed files with 5198 additions and 3505 deletions

View File

@ -1,6 +1,6 @@
clc
lda {z1}
adc {z1}
adc {z2}
sta {z1}
lda {z1}+1
adc #0

View File

@ -7,7 +7,8 @@ typedef word size_t ;
void* memcpy( void* destination, void* source, size_t num ) {
byte* src = source;
byte* dst = destination;
for( size_t i=0; i<num; i++) *dst++ = *src++;
byte* src_end = (byte*)source+num;
while(src!=src_end) *dst++ = *src++;
return destination;
}

View File

@ -35,6 +35,11 @@ public class TestPrograms {
public TestPrograms() {
}
@Test
public void testMemcpy0() throws IOException, URISyntaxException {
compileAndCompare("memcpy-0", log());
}
@Test
public void testBitmapPlot2() throws IOException, URISyntaxException {
compileAndCompare("bitmap-plot-2", log());

View File

@ -22,7 +22,7 @@ void main() {
word idx_x = 0;
word idx_y = 0x80;
signed word r = 0;
byte r_add = 4;
byte r_add = 32;
while(true) {
signed word cos_x = SINUS[idx_x];
signed dword xpos = mul16s(r, cos_x);
@ -37,7 +37,7 @@ void main() {
idx_y += r_add;
if(idx_y>=512) idx_y = 0;
r += r_add;
//if((idx_x==0) && (r_add!=1)) r_add /= 2;
if((idx_x==0) && (r_add!=1)) r_add /= 2;
if(r>=512*12+256) break;
}
while(true)

18
src/test/kc/memcpy-0.kc Normal file
View File

@ -0,0 +1,18 @@
// Test memcpy - copy charset and screen using memcpy() from stdlib string
import "c64"
import "string"
const byte* CHARSET = 0x2000;
const byte* SCREEN = 0x0400;
const byte* SCREEN_COPY = 0x2400;
void main() {
*D018 = toD018(SCREEN_COPY, CHARSET);
memcpy(SCREEN_COPY, SCREEN, 0x0400);
asm { sei }
*PROCPORT = PROCPORT_RAM_CHARROM;
memcpy(CHARSET, CHARGEN, 0x0800);
*PROCPORT = PROCPORT_BASIC_KERNEL_IO;
asm { cli }
}

View File

@ -44,8 +44,8 @@
.const PI_HALF_u4f28 = $1921fb54
.label BITMAP = $2000
.label SCREEN = $400
.label rem16u = $2b
.label frame_cnt = $31
.label rem16u = $2c
.label frame_cnt = $32
bbegin:
// Counts frames - updated by the IRQ
lda #1
@ -53,24 +53,24 @@ bbegin:
jsr main
rts
main: {
.const r_add = 4
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label _9 = $32
.label _11 = $32
.label _15 = $34
.label _17 = $34
.label _18 = $34
.label _28 = 8
.label _29 = 8
.label cos_x = 8
.label xpos = $a
.label sin_y = 8
.label ypos = $a
.label _9 = $33
.label _11 = $33
.label _15 = $35
.label _17 = $35
.label _18 = $35
.label _32 = 9
.label _33 = 9
.label cos_x = 9
.label xpos = $b
.label sin_y = 9
.label ypos = $b
.label idx_x = 2
.label idx_y = 6
.label r = 4
.label _30 = 8
.label _31 = 8
.label r_add = 8
.label _34 = 9
.label _35 = 9
jsr sin16s_gen2
jsr bitmap_init
jsr bitmap_clear
@ -79,6 +79,8 @@ main: {
lda #toD0181_return
sta D018
jsr init_irq
lda #$20
sta r_add
lda #$80
sta idx_y
lda #0
@ -90,17 +92,17 @@ main: {
b2:
lda idx_x
asl
sta _28
sta _32
lda idx_x+1
rol
sta _28+1
sta _32+1
clc
lda _30
lda _34
adc #<SINUS
sta _30
lda _30+1
sta _34
lda _34+1
adc #>SINUS
sta _30+1
sta _34+1
ldy #0
lda (cos_x),y
tax
@ -130,17 +132,17 @@ main: {
sta bitmap_plot.x+1
lda idx_y
asl
sta _29
sta _33
lda idx_y+1
rol
sta _29+1
sta _33+1
clc
lda _31
lda _35
adc #<SINUS
sta _31
lda _31+1
sta _35
lda _35+1
adc #>SINUS
sta _31+1
sta _35+1
ldy #0
lda (sin_y),y
tax
@ -179,7 +181,7 @@ main: {
jsr bitmap_plot
ldx frame_cnt
inc plots_per_frame,x
lda #r_add
lda r_add
clc
adc idx_x
sta idx_x
@ -198,7 +200,7 @@ main: {
sta idx_x
sta idx_x+1
b3:
lda #r_add
lda r_add
clc
adc idx_y
sta idx_y
@ -217,20 +219,22 @@ main: {
sta idx_y
sta idx_y+1
b4:
lda #r_add
sta $fe
ora #$7f
bmi !+
lda #0
!:
sta $ff
clc
lda r
adc $fe
adc r_add
sta r
lda r+1
adc $ff
adc #0
sta r+1
lda idx_x
bne b5
lda idx_x+1
bne b5
lda #1
cmp r_add
beq b5
lsr r_add
b5:
lda r
cmp #<$200*$c+$100
lda r+1
@ -238,19 +242,19 @@ main: {
bvc !+
eor #$80
!:
bpl b5
bpl b7
jmp b2
b5:
b7:
inc BORDERCOL
jmp b5
jmp b7
}
// Plot a single dot in the bitmap
// bitmap_plot(signed word zeropage($32) x, byte register(A) y)
// bitmap_plot(signed word zeropage($33) x, byte register(A) y)
bitmap_plot: {
.label _1 = $38
.label plotter = $36
.label x = $32
.label _3 = $36
.label _1 = $39
.label plotter = $37
.label x = $33
.label _3 = $37
tay
lda bitmap_plot_yhi,y
sta _3+1
@ -279,16 +283,16 @@ bitmap_plot: {
}
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zeropage(4) a, signed word zeropage(8) b)
// mul16s(signed word zeropage(4) a, signed word zeropage(9) b)
mul16s: {
.label _9 = $3a
.label _13 = $3c
.label _16 = $3a
.label _17 = $3c
.label m = $a
.label return = $a
.label _9 = $3b
.label _13 = $3d
.label _16 = $3b
.label _17 = $3d
.label m = $b
.label return = $b
.label a = 4
.label b = 8
.label b = 9
lda b
sta mul16u.mb
lda b+1
@ -340,13 +344,13 @@ mul16s: {
rts
}
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($10) a, word zeropage($e) b)
// mul16u(word zeropage($11) a, word zeropage($f) b)
mul16u: {
.label mb = $12
.label a = $10
.label res = $a
.label return = $a
.label b = $e
.label mb = $13
.label a = $11
.label res = $b
.label return = $b
.label b = $f
lda #0
sta res
sta res+1
@ -441,12 +445,12 @@ bitmap_clear: {
rts
}
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zeropage($16) str, byte register(X) c, word zeropage($18) num)
// memset(void* zeropage($17) str, byte register(X) c, word zeropage($19) num)
memset: {
.label end = $18
.label dst = $16
.label str = $16
.label num = $18
.label end = $19
.label dst = $17
.label str = $17
.label num = $19
lda end
clc
adc str
@ -472,8 +476,8 @@ memset: {
}
// Initialize bitmap plotting tables
bitmap_init: {
.label _7 = $3e
.label yoffs = $1a
.label _7 = $3f
.label yoffs = $1b
ldx #0
lda #$80
b1:
@ -518,18 +522,18 @@ bitmap_init: {
// Generate signed word sinus table - with values in the range min-max.
// sintab - the table to generate into
// wavelength - the number of sinus points in a total sinus wavelength (the size of the table)
// sin16s_gen2(signed word* zeropage($20) sintab)
// sin16s_gen2(signed word* zeropage($21) sintab)
sin16s_gen2: {
.label wavelength = $200
.const min = -$1001
.const max = $1001
.const ampl = max-min
.label _5 = $a
.label _6 = $43
.label step = $3f
.label sintab = $20
.label x = $1c
.label i = $22
.label _5 = $b
.label _6 = $44
.label step = $40
.label sintab = $21
.label x = $1d
.label i = $23
jsr div32u16u
lda #0
sta i
@ -606,21 +610,21 @@ sin16s_gen2: {
// Calculate signed word sinus sin(x)
// x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28
// result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff
// sin16s(dword zeropage($25) x)
// sin16s(dword zeropage($26) x)
sin16s: {
.label _4 = $25
.label x = $25
.label _4 = $26
.label x = $26
.label return = 4
.label x1 = $45
.label x2 = $29
.label x3 = $29
.label x3_6 = $47
.label x1 = $46
.label x2 = $2a
.label x3 = $2a
.label x3_6 = $48
.label usinx = 4
.label x4 = $29
.label x5 = $47
.label x5_128 = $47
.label x4 = $2a
.label x5 = $48
.label x5_128 = $48
.label sinx = 4
.label isUpper = $24
.label isUpper = $25
lda x+3
cmp #>PI_u4f28>>$10
bcc b4
@ -782,15 +786,15 @@ sin16s: {
}
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
// mulu16_sel(word zeropage($29) v1, word zeropage($e) v2, byte register(X) select)
// mulu16_sel(word zeropage($2a) v1, word zeropage($f) v2, byte register(X) select)
mulu16_sel: {
.label _0 = $a
.label _1 = $a
.label v1 = $29
.label v2 = $e
.label return = $47
.label return_1 = $29
.label return_10 = $29
.label _0 = $b
.label _1 = $b
.label v1 = $2a
.label v2 = $f
.label return = $48
.label return_1 = $2a
.label return_10 = $2a
lda v1
sta mul16u.a
lda v1+1
@ -822,9 +826,9 @@ mulu16_sel: {
// Divide unsigned 32-bit dword dividend with a 16-bit word divisor
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
.label quotient_hi = $49
.label quotient_lo = $2f
.label return = $3f
.label quotient_hi = $4a
.label quotient_lo = $30
.label return = $40
lda #<PI2_u4f28>>$10
sta divr16u.dividend
lda #>PI2_u4f28>>$10
@ -856,12 +860,12 @@ div32u16u: {
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// divr16u(word zeropage($2d) dividend, word zeropage($2b) rem)
// divr16u(word zeropage($2e) dividend, word zeropage($2c) rem)
divr16u: {
.label rem = $2b
.label dividend = $2d
.label quotient = $2f
.label return = $2f
.label rem = $2c
.label dividend = $2e
.label quotient = $30
.label return = $30
ldx #0
txa
sta quotient

View File

@ -13,421 +13,432 @@
main: scope:[main] from @2
[5] phi()
[6] call sin16s_gen2
to:main::@7
main::@7: scope:[main] from main
to:main::@9
main::@9: scope:[main] from main
[7] phi()
[8] call bitmap_init
to:main::@8
main::@8: scope:[main] from main::@7
to:main::@10
main::@10: scope:[main] from main::@9
[9] phi()
[10] call bitmap_clear
to:main::@9
main::@9: scope:[main] from main::@8
to:main::@11
main::@11: scope:[main] from main::@10
[11] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3
to:main::toD0181
main::toD0181: scope:[main] from main::@9
main::toD0181: scope:[main] from main::@11
[12] phi()
to:main::@6
main::@6: scope:[main] from main::toD0181
to:main::@8
main::@8: scope:[main] from main::toD0181
[13] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
[14] call init_irq
to:main::@1
main::@1: scope:[main] from main::@4 main::@6
[15] (word) main::idx_y#3 ← phi( main::@6/(byte) $80 main::@4/(word) main::idx_y#10 )
[15] (signed word) main::r#10 ← phi( main::@6/(signed byte) 0 main::@4/(signed word) main::r#1 )
[15] (word) main::idx_x#3 ← phi( main::@6/(byte) 0 main::@4/(word) main::idx_x#10 )
main::@1: scope:[main] from main::@5 main::@8
[15] (byte) main::r_add#10 ← phi( main::@8/(byte) $20 main::@5/(byte) main::r_add#12 )
[15] (word) main::idx_y#3 ← phi( main::@8/(byte) $80 main::@5/(word) main::idx_y#10 )
[15] (signed word) main::r#10 ← phi( main::@8/(signed byte) 0 main::@5/(signed word) main::r#1 )
[15] (word) main::idx_x#11 ← phi( main::@8/(byte) 0 main::@5/(word) main::idx_x#10 )
to:main::@2
main::@2: scope:[main] from main::@1
[16] (word~) main::$28 ← (word) main::idx_x#3 << (byte) 1
[17] (signed word*~) main::$30 ← (const signed word[$200]) SINUS#0 + (word~) main::$28
[18] (signed word) main::cos_x#0 ← *((signed word*~) main::$30)
[16] (word~) main::$32 ← (word) main::idx_x#11 << (byte) 1
[17] (signed word*~) main::$34 ← (const signed word[$200]) SINUS#0 + (word~) main::$32
[18] (signed word) main::cos_x#0 ← *((signed word*~) main::$34)
[19] (signed word) mul16s::a#1 ← (signed word) main::r#10
[20] (signed word) mul16s::b#1 ← (signed word) main::cos_x#0
[21] call mul16s
[22] (signed dword) mul16s::return#3 ← (signed dword) mul16s::return#0
to:main::@10
main::@10: scope:[main] from main::@2
to:main::@12
main::@12: scope:[main] from main::@2
[23] (signed dword) main::xpos#0 ← (signed dword) mul16s::return#3
[24] (word~) main::$9 ← > (signed dword) main::xpos#0
[25] (signed word~) main::$11 ← (signed word)(word~) main::$9 >> (signed byte) 2
[26] (signed word) bitmap_plot::x#0 ← (signed word) $a0 + (signed word~) main::$11
[27] (word~) main::$29 ← (word) main::idx_y#3 << (byte) 1
[28] (signed word*~) main::$31 ← (const signed word[$200]) SINUS#0 + (word~) main::$29
[29] (signed word) main::sin_y#0 ← *((signed word*~) main::$31)
[27] (word~) main::$33 ← (word) main::idx_y#3 << (byte) 1
[28] (signed word*~) main::$35 ← (const signed word[$200]) SINUS#0 + (word~) main::$33
[29] (signed word) main::sin_y#0 ← *((signed word*~) main::$35)
[30] (signed word) mul16s::a#2 ← (signed word) main::r#10
[31] (signed word) mul16s::b#2 ← (signed word) main::sin_y#0
[32] call mul16s
[33] (signed dword) mul16s::return#4 ← (signed dword) mul16s::return#0
to:main::@11
main::@11: scope:[main] from main::@10
to:main::@13
main::@13: scope:[main] from main::@12
[34] (signed dword) main::ypos#0 ← (signed dword) mul16s::return#4
[35] (word~) main::$15 ← > (signed dword) main::ypos#0
[36] (signed word~) main::$17 ← (signed word)(word~) main::$15 >> (signed byte) 2
[37] (signed word~) main::$18 ← (signed byte) $64 + (signed word~) main::$17
[38] (byte) bitmap_plot::y#0 ← (byte)(word)(signed word~) main::$18
[39] call bitmap_plot
to:main::@12
main::@12: scope:[main] from main::@11
to:main::@14
main::@14: scope:[main] from main::@13
[40] *((const byte[$100]) plots_per_frame#0 + (byte) frame_cnt#0) ← ++ *((const byte[$100]) plots_per_frame#0 + (byte) frame_cnt#0)
[41] (word) main::idx_x#1 ← (word) main::idx_x#3 + (const byte) main::r_add#0
[42] if((word) main::idx_x#1<(word) $200) goto main::@13
[41] (word) main::idx_x#1 ← (word) main::idx_x#11 + (byte) main::r_add#10
[42] if((word) main::idx_x#1<(word) $200) goto main::@16
to:main::@3
main::@13: scope:[main] from main::@12
main::@16: scope:[main] from main::@14
[43] phi()
to:main::@3
main::@3: scope:[main] from main::@12 main::@13
[44] (word) main::idx_x#10 ← phi( main::@12/(byte) 0 main::@13/(word) main::idx_x#1 )
[45] (word) main::idx_y#1 ← (word) main::idx_y#3 + (const byte) main::r_add#0
[46] if((word) main::idx_y#1<(word) $200) goto main::@14
main::@3: scope:[main] from main::@14 main::@16
[44] (word) main::idx_x#10 ← phi( main::@14/(byte) 0 main::@16/(word) main::idx_x#1 )
[45] (word) main::idx_y#1 ← (word) main::idx_y#3 + (byte) main::r_add#10
[46] if((word) main::idx_y#1<(word) $200) goto main::@17
to:main::@4
main::@14: scope:[main] from main::@3
main::@17: scope:[main] from main::@3
[47] phi()
to:main::@4
main::@4: scope:[main] from main::@14 main::@3
[48] (word) main::idx_y#10 ← phi( main::@3/(byte) 0 main::@14/(word) main::idx_y#1 )
[49] (signed word) main::r#1 ← (signed word) main::r#10 + (const byte) main::r_add#0
[50] if((signed word) main::r#1>=(signed word)(number) $200*(number) $c+(number) $100) goto main::@5
to:main::@1
main::@5: scope:[main] from main::@4 main::@5
[51] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
main::@4: scope:[main] from main::@17 main::@3
[48] (word) main::idx_y#10 ← phi( main::@3/(byte) 0 main::@17/(word) main::idx_y#1 )
[49] (signed word) main::r#1 ← (signed word) main::r#10 + (byte) main::r_add#10
[50] if((word) main::idx_x#10!=(byte) 0) goto main::@5
to:main::@15
main::@15: scope:[main] from main::@4
[51] if((byte) main::r_add#10==(byte) 1) goto main::@5
to:main::@6
main::@6: scope:[main] from main::@15
[52] (byte) main::r_add#1 ← (byte) main::r_add#10 >> (byte) 1
to:main::@5
bitmap_plot: scope:[bitmap_plot] from main::@11
[52] (word~) bitmap_plot::$3 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0)
[53] (word~) bitmap_plot::$1 ← (word)(signed word) bitmap_plot::x#0 & (word) $fff8
[54] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1
[55] (byte~) bitmap_plot::$2 ← < (word)(signed word) bitmap_plot::x#0
[56] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[$100]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2)
main::@5: scope:[main] from main::@15 main::@4 main::@6
[53] (byte) main::r_add#12 ← phi( main::@6/(byte) main::r_add#1 main::@4/(byte) main::r_add#10 )
[54] if((signed word) main::r#1>=(signed word)(number) $200*(number) $c+(number) $100) goto main::@7
to:main::@1
main::@7: scope:[main] from main::@5 main::@7
[55] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
to:main::@7
bitmap_plot: scope:[bitmap_plot] from main::@13
[56] (word~) bitmap_plot::$3 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0)
[57] (word~) bitmap_plot::$1 ← (word)(signed word) bitmap_plot::x#0 & (word) $fff8
[58] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1
[59] (byte~) bitmap_plot::$2 ← < (word)(signed word) bitmap_plot::x#0
[60] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[$100]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2)
to:bitmap_plot::@return
bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot
[57] return
[61] return
to:@return
mul16s: scope:[mul16s] from main::@10 main::@2 sin16s_gen2::@3
[58] (signed word) mul16s::b#3 ← phi( main::@2/(signed word) mul16s::b#1 main::@10/(signed word) mul16s::b#2 sin16s_gen2::@3/(const signed word) sin16s_gen2::ampl#0 )
[58] (signed word) mul16s::a#3 ← phi( main::@2/(signed word) mul16s::a#1 main::@10/(signed word) mul16s::a#2 sin16s_gen2::@3/(signed word) mul16s::a#0 )
[59] (dword~) mul16u::mb#6 ← (word)(signed word) mul16s::b#3
[60] (word~) mul16u::a#8 ← (word)(signed word) mul16s::a#3
[61] call mul16u
[62] (dword) mul16u::return#2 ← (dword) mul16u::res#2
mul16s: scope:[mul16s] from main::@12 main::@2 sin16s_gen2::@3
[62] (signed word) mul16s::b#3 ← phi( main::@2/(signed word) mul16s::b#1 main::@12/(signed word) mul16s::b#2 sin16s_gen2::@3/(const signed word) sin16s_gen2::ampl#0 )
[62] (signed word) mul16s::a#3 ← phi( main::@2/(signed word) mul16s::a#1 main::@12/(signed word) mul16s::a#2 sin16s_gen2::@3/(signed word) mul16s::a#0 )
[63] (dword~) mul16u::mb#6 ← (word)(signed word) mul16s::b#3
[64] (word~) mul16u::a#8 ← (word)(signed word) mul16s::a#3
[65] call mul16u
[66] (dword) mul16u::return#2 ← (dword) mul16u::res#2
to:mul16s::@5
mul16s::@5: scope:[mul16s] from mul16s
[63] (dword) mul16s::m#0 ← (dword) mul16u::return#2
[64] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1
[67] (dword) mul16s::m#0 ← (dword) mul16u::return#2
[68] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1
to:mul16s::@3
mul16s::@3: scope:[mul16s] from mul16s::@5
[65] (word~) mul16s::$9 ← > (dword) mul16s::m#0
[66] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3
[67] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16
[69] (word~) mul16s::$9 ← > (dword) mul16s::m#0
[70] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3
[71] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16
to:mul16s::@1
mul16s::@1: scope:[mul16s] from mul16s::@3 mul16s::@5
[68] (dword) mul16s::m#5 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@5/(dword) mul16s::m#0 )
[69] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2
[72] (dword) mul16s::m#5 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@5/(dword) mul16s::m#0 )
[73] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2
to:mul16s::@4
mul16s::@4: scope:[mul16s] from mul16s::@1
[70] (word~) mul16s::$13 ← > (dword) mul16s::m#5
[71] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3
[72] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17
[74] (word~) mul16s::$13 ← > (dword) mul16s::m#5
[75] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3
[76] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17
to:mul16s::@2
mul16s::@2: scope:[mul16s] from mul16s::@1 mul16s::@4
[73] (dword) mul16s::m#4 ← phi( mul16s::@1/(dword) mul16s::m#5 mul16s::@4/(dword) mul16s::m#2 )
[74] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4
[77] (dword) mul16s::m#4 ← phi( mul16s::@1/(dword) mul16s::m#5 mul16s::@4/(dword) mul16s::m#2 )
[78] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4
to:mul16s::@return
mul16s::@return: scope:[mul16s] from mul16s::@2
[75] return
to:@return
mul16u: scope:[mul16u] from mul16s mulu16_sel
[76] (word) mul16u::a#6 ← phi( mul16s/(word~) mul16u::a#8 mulu16_sel/(word) mul16u::a#2 )
[76] (dword) mul16u::mb#0 ← phi( mul16s/(dword~) mul16u::mb#6 mulu16_sel/(word) mul16u::b#1 )
to:mul16u::@1
mul16u::@1: scope:[mul16u] from mul16u mul16u::@3
[77] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 )
[77] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 )
[77] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 )
[78] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2
to:mul16u::@return
mul16u::@return: scope:[mul16u] from mul16u::@1
[79] return
to:@return
mul16u: scope:[mul16u] from mul16s mulu16_sel
[80] (word) mul16u::a#6 ← phi( mul16s/(word~) mul16u::a#8 mulu16_sel/(word) mul16u::a#2 )
[80] (dword) mul16u::mb#0 ← phi( mul16s/(dword~) mul16u::mb#6 mulu16_sel/(word) mul16u::b#1 )
to:mul16u::@1
mul16u::@1: scope:[mul16u] from mul16u mul16u::@3
[81] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 )
[81] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 )
[81] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 )
[82] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2
to:mul16u::@return
mul16u::@return: scope:[mul16u] from mul16u::@1
[83] return
to:@return
mul16u::@2: scope:[mul16u] from mul16u::@1
[80] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1
[81] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3
[84] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1
[85] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3
to:mul16u::@4
mul16u::@4: scope:[mul16u] from mul16u::@2
[82] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2
[86] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2
to:mul16u::@3
mul16u::@3: scope:[mul16u] from mul16u::@2 mul16u::@4
[83] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 )
[84] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1
[85] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1
[87] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 )
[88] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1
[89] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1
to:mul16u::@1
init_irq: scope:[init_irq] from main::@6
init_irq: scope:[init_irq] from main::@8
asm { sei }
[87] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[88] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
[89] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
[90] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) | (byte) $80
[91] *((const byte*) RASTER#0) ← (byte) 0
[92] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[93] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) irq()
[91] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[92] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
[93] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
[94] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) | (byte) $80
[95] *((const byte*) RASTER#0) ← (byte) 0
[96] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[97] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) irq()
asm { cli }
to:init_irq::@return
init_irq::@return: scope:[init_irq] from init_irq
[95] return
[99] return
to:@return
bitmap_clear: scope:[bitmap_clear] from main::@8
[96] phi()
[97] call memset
bitmap_clear: scope:[bitmap_clear] from main::@10
[100] phi()
[101] call memset
to:bitmap_clear::@1
bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear
[98] phi()
[99] call memset
[102] phi()
[103] call memset
to:bitmap_clear::@return
bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@1
[100] return
[104] return
to:@return
memset: scope:[memset] from bitmap_clear bitmap_clear::@1
[101] (byte) memset::c#3 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 )
[101] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 )
[101] (void*) memset::str#2 ← phi( bitmap_clear/(void*)(const byte*) SCREEN#0 bitmap_clear::@1/(void*)(const byte*) BITMAP#0 )
[102] (byte*) memset::end#0 ← (byte*)(void*) memset::str#2 + (word) memset::num#2
[103] (byte*~) memset::dst#3 ← (byte*)(void*) memset::str#2
[105] (byte) memset::c#3 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 )
[105] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 )
[105] (void*) memset::str#2 ← phi( bitmap_clear/(void*)(const byte*) SCREEN#0 bitmap_clear::@1/(void*)(const byte*) BITMAP#0 )
[106] (byte*) memset::end#0 ← (byte*)(void*) memset::str#2 + (word) memset::num#2
[107] (byte*~) memset::dst#3 ← (byte*)(void*) memset::str#2
to:memset::@1
memset::@1: scope:[memset] from memset memset::@1
[104] (byte*) memset::dst#2 ← phi( memset/(byte*~) memset::dst#3 memset::@1/(byte*) memset::dst#1 )
[105] *((byte*) memset::dst#2) ← (byte) memset::c#3
[106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
[107] if((byte*) memset::dst#1!=(byte*) memset::end#0) goto memset::@1
[108] (byte*) memset::dst#2 ← phi( memset/(byte*~) memset::dst#3 memset::@1/(byte*) memset::dst#1 )
[109] *((byte*) memset::dst#2) ← (byte) memset::c#3
[110] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
[111] if((byte*) memset::dst#1!=(byte*) memset::end#0) goto memset::@1
to:memset::@return
memset::@return: scope:[memset] from memset::@1
[108] return
[112] return
to:@return
bitmap_init: scope:[bitmap_init] from main::@7
[109] phi()
bitmap_init: scope:[bitmap_init] from main::@9
[113] phi()
to:bitmap_init::@1
bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2
[110] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 )
[110] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 )
[111] *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3
[112] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1
[113] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6
[114] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 )
[114] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 )
[115] *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3
[116] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1
[117] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6
to:bitmap_init::@2
bitmap_init::@6: scope:[bitmap_init] from bitmap_init::@1
[114] phi()
[118] phi()
to:bitmap_init::@2
bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@6
[115] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 )
[116] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2
[117] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1
[119] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 )
[120] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2
[121] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1
to:bitmap_init::@3
bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@4
[118] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP#0 bitmap_init::@4/(byte*) bitmap_init::yoffs#4 )
[118] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 )
[119] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7
[120] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2
[121] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4
[122] *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5
[123] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2
[124] *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6
[125] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4
[122] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP#0 bitmap_init::@4/(byte*) bitmap_init::yoffs#4 )
[122] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 )
[123] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7
[124] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2
[125] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4
[126] *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5
[127] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2
[128] *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6
[129] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4
to:bitmap_init::@5
bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@3
[126] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8
[130] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8
to:bitmap_init::@4
bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@3 bitmap_init::@5
[127] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 )
[128] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2
[129] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3
[131] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 )
[132] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2
[133] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3
to:bitmap_init::@return
bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4
[130] return
[134] return
to:@return
sin16s_gen2: scope:[sin16s_gen2] from main
[131] phi()
[132] call div32u16u
[133] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0
[135] phi()
[136] call div32u16u
[137] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0
to:sin16s_gen2::@2
sin16s_gen2::@2: scope:[sin16s_gen2] from sin16s_gen2
[134] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2
[138] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2
to:sin16s_gen2::@1
sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@2 sin16s_gen2::@4
[135] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@2/(byte) 0 sin16s_gen2::@4/(word) sin16s_gen2::i#1 )
[135] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@2/(const signed word[$200]) SINUS#0 sin16s_gen2::@4/(signed word*) sin16s_gen2::sintab#0 )
[135] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@2/(byte) 0 sin16s_gen2::@4/(dword) sin16s_gen2::x#1 )
[136] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2
[137] call sin16s
[138] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1
[139] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@2/(byte) 0 sin16s_gen2::@4/(word) sin16s_gen2::i#1 )
[139] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@2/(const signed word[$200]) SINUS#0 sin16s_gen2::@4/(signed word*) sin16s_gen2::sintab#0 )
[139] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@2/(byte) 0 sin16s_gen2::@4/(dword) sin16s_gen2::x#1 )
[140] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2
[141] call sin16s
[142] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1
to:sin16s_gen2::@3
sin16s_gen2::@3: scope:[sin16s_gen2] from sin16s_gen2::@1
[139] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0
[140] call mul16s
[141] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0
[143] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0
[144] call mul16s
[145] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0
to:sin16s_gen2::@4
sin16s_gen2::@4: scope:[sin16s_gen2] from sin16s_gen2::@3
[142] (signed dword~) sin16s_gen2::$5 ← (signed dword) mul16s::return#2
[143] (word~) sin16s_gen2::$6 ← > (signed dword~) sin16s_gen2::$5
[144] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$6
[145] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD
[146] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0
[147] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2
[148] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@1
[146] (signed dword~) sin16s_gen2::$5 ← (signed dword) mul16s::return#2
[147] (word~) sin16s_gen2::$6 ← > (signed dword~) sin16s_gen2::$5
[148] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$6
[149] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD
[150] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0
[151] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2
[152] if((word) sin16s_gen2::i#1<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@1
to:sin16s_gen2::@return
sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@4
[149] return
[153] return
to:@return
sin16s: scope:[sin16s] from sin16s_gen2::@1
[150] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1
[154] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1
to:sin16s::@4
sin16s::@4: scope:[sin16s] from sin16s
[151] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0
[155] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0
to:sin16s::@1
sin16s::@1: scope:[sin16s] from sin16s sin16s::@4
[152] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 )
[152] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 )
[153] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2
[156] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 )
[156] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 )
[157] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2
to:sin16s::@5
sin16s::@5: scope:[sin16s] from sin16s::@1
[154] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4
[158] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4
to:sin16s::@2
sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5
[155] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 )
[156] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3
[157] (word) sin16s::x1#0 ← > (dword~) sin16s::$4
[158] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
[159] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
[160] call mulu16_sel
[161] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
[159] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 )
[160] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3
[161] (word) sin16s::x1#0 ← > (dword~) sin16s::$4
[162] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
[163] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
[164] call mulu16_sel
[165] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
to:sin16s::@7
sin16s::@7: scope:[sin16s] from sin16s::@2
[162] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0
[163] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
[164] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0
[165] call mulu16_sel
[166] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12
[166] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0
[167] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
[168] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0
[169] call mulu16_sel
[170] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12
to:sin16s::@8
sin16s::@8: scope:[sin16s] from sin16s::@7
[167] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
[168] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
[169] call mulu16_sel
[170] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
[171] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
[172] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
[173] call mulu16_sel
[174] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
to:sin16s::@9
sin16s::@9: scope:[sin16s] from sin16s::@8
[171] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
[172] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0
[173] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
[174] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0
[175] call mulu16_sel
[176] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12
[175] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
[176] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0
[177] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
[178] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0
[179] call mulu16_sel
[180] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12
to:sin16s::@10
sin16s::@10: scope:[sin16s] from sin16s::@9
[177] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
[178] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
[179] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0
[180] call mulu16_sel
[181] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
[181] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
[182] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
[183] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0
[184] call mulu16_sel
[185] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
to:sin16s::@11
sin16s::@11: scope:[sin16s] from sin16s::@10
[182] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
[183] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4
[184] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0
[185] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12
[186] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
[187] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4
[188] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0
[189] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12
to:sin16s::@6
sin16s::@6: scope:[sin16s] from sin16s::@11
[186] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1
[190] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1
to:sin16s::@3
sin16s::@3: scope:[sin16s] from sin16s::@12 sin16s::@6
[187] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word~) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 )
[191] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word~) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 )
to:sin16s::@return
sin16s::@return: scope:[sin16s] from sin16s::@3
[188] return
[192] return
to:@return
sin16s::@12: scope:[sin16s] from sin16s::@11
[189] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
[193] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
to:sin16s::@3
mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@2 sin16s::@7 sin16s::@8 sin16s::@9
[190] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 )
[190] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 )
[190] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 )
[191] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5
[192] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
[193] call mul16u
[194] (dword) mul16u::return#3 ← (dword) mul16u::res#2
[194] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 )
[194] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 )
[194] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 )
[195] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5
[196] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
[197] call mul16u
[198] (dword) mul16u::return#3 ← (dword) mul16u::res#2
to:mulu16_sel::@1
mulu16_sel::@1: scope:[mulu16_sel] from mulu16_sel
[195] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
[196] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5
[197] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1
[199] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
[200] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5
[201] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1
to:mulu16_sel::@return
mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1
[198] return
[202] return
to:@return
div32u16u: scope:[div32u16u] from sin16s_gen2
[199] phi()
[200] call divr16u
[201] (word) divr16u::return#2 ← (word) divr16u::return#0
[203] phi()
[204] call divr16u
[205] (word) divr16u::return#2 ← (word) divr16u::return#0
to:div32u16u::@1
div32u16u::@1: scope:[div32u16u] from div32u16u
[202] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2
[203] (word) divr16u::rem#4 ← (word) rem16u#1
[204] call divr16u
[205] (word) divr16u::return#3 ← (word) divr16u::return#0
[206] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2
[207] (word) divr16u::rem#4 ← (word) rem16u#1
[208] call divr16u
[209] (word) divr16u::return#3 ← (word) divr16u::return#0
to:div32u16u::@2
div32u16u::@2: scope:[div32u16u] from div32u16u::@1
[206] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
[207] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0
[210] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
[211] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0
to:div32u16u::@return
div32u16u::@return: scope:[div32u16u] from div32u16u::@2
[208] return
[212] return
to:@return
divr16u: scope:[divr16u] from div32u16u div32u16u::@1
[209] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28#0 div32u16u::@1/<(const dword) PI2_u4f28#0 )
[209] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 )
[213] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28#0 div32u16u::@1/<(const dword) PI2_u4f28#0 )
[213] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 )
to:divr16u::@1
divr16u::@1: scope:[divr16u] from divr16u divr16u::@3
[210] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 )
[210] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 )
[210] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 )
[210] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
[211] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1
[212] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
[213] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80
[214] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2
[214] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 )
[214] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 )
[214] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 )
[214] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
[215] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1
[216] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
[217] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80
[218] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2
to:divr16u::@4
divr16u::@4: scope:[divr16u] from divr16u::@1
[215] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1
[219] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1
to:divr16u::@2
divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4
[216] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
[217] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1
[218] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1
[219] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3
[220] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
[221] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1
[222] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1
[223] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3
to:divr16u::@5
divr16u::@5: scope:[divr16u] from divr16u::@2
[220] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
[221] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0
[224] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
[225] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0
to:divr16u::@3
divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5
[222] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
[222] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
[223] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
[224] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1
[226] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
[226] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
[227] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
[228] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1
to:divr16u::@6
divr16u::@6: scope:[divr16u] from divr16u::@3
[225] (word) rem16u#1 ← (word) divr16u::rem#11
[229] (word) rem16u#1 ← (word) divr16u::rem#11
to:divr16u::@return
divr16u::@return: scope:[divr16u] from divr16u::@6
[226] return
[230] return
to:@return
irq: scope:[irq] from
[227] *((const byte*) BGCOL#0) ← (const byte) WHITE#0
[228] if((byte) 0==(byte) frame_cnt#0) goto irq::@1
[231] *((const byte*) BGCOL#0) ← (const byte) WHITE#0
[232] if((byte) 0==(byte) frame_cnt#0) goto irq::@1
to:irq::@2
irq::@2: scope:[irq] from irq
[229] (byte) frame_cnt#1 ← ++ (byte) frame_cnt#0
[233] (byte) frame_cnt#1 ← ++ (byte) frame_cnt#0
to:irq::@1
irq::@1: scope:[irq] from irq irq::@2
[230] (byte) frame_cnt#2 ← phi( irq/(byte) frame_cnt#0 irq::@2/(byte) frame_cnt#1 )
[231] *((const byte*) BGCOL#0) ← (const byte) BLACK#0
[232] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
[234] (byte) frame_cnt#2 ← phi( irq/(byte) frame_cnt#0 irq::@2/(byte) frame_cnt#1 )
[235] *((const byte*) BGCOL#0) ← (const byte) BLACK#0
[236] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:irq::@return
irq::@return: scope:[irq] from irq::@1
[233] return
[237] return
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -69,7 +69,7 @@
(byte~) bitmap_init::$4 reg byte a 22.0
(byte~) bitmap_init::$5 reg byte a 22.0
(byte~) bitmap_init::$6 reg byte a 22.0
(byte~) bitmap_init::$7 $7 zp ZP_BYTE:62 5.5
(byte~) bitmap_init::$7 $7 zp ZP_BYTE:63 5.5
(label) bitmap_init::@1
(label) bitmap_init::@2
(label) bitmap_init::@3
@ -90,18 +90,18 @@
(byte) bitmap_init::y#1 reg byte x 16.5
(byte) bitmap_init::y#2 reg byte x 5.5
(byte*) bitmap_init::yoffs
(byte*) bitmap_init::yoffs#1 yoffs zp ZP_WORD:26 22.0
(byte*) bitmap_init::yoffs#2 yoffs zp ZP_WORD:26 6.875
(byte*) bitmap_init::yoffs#4 yoffs zp ZP_WORD:26 11.0
(byte*) bitmap_init::yoffs#1 yoffs zp ZP_WORD:27 22.0
(byte*) bitmap_init::yoffs#2 yoffs zp ZP_WORD:27 6.875
(byte*) bitmap_init::yoffs#4 yoffs zp ZP_WORD:27 11.0
(void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y)
(word~) bitmap_plot::$1 $1 zp ZP_WORD:56 4.0
(word~) bitmap_plot::$1 $1 zp ZP_WORD:57 4.0
(byte~) bitmap_plot::$2 reg byte a 4.0
(word~) bitmap_plot::$3 $3 zp ZP_WORD:54 1.0
(word~) bitmap_plot::$3 $3 zp ZP_WORD:55 1.0
(label) bitmap_plot::@return
(byte*) bitmap_plot::plotter
(byte*) bitmap_plot::plotter#1 plotter zp ZP_WORD:54 3.0
(byte*) bitmap_plot::plotter#1 plotter zp ZP_WORD:55 3.0
(word) bitmap_plot::x
(signed word) bitmap_plot::x#0 x zp ZP_WORD:50 0.6875
(signed word) bitmap_plot::x#0 x zp ZP_WORD:51 0.6875
(byte) bitmap_plot::y
(byte) bitmap_plot::y#0 reg byte a 15.0
(byte[$100]) bitmap_plot_bit
@ -119,12 +119,12 @@
(word) div32u16u::divisor
(dword) div32u16u::quotient
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_hi#0 quotient_hi zp ZP_WORD:73 0.8
(word) div32u16u::quotient_hi#0 quotient_hi zp ZP_WORD:74 0.8
(word) div32u16u::quotient_lo
(word) div32u16u::quotient_lo#0 quotient_lo zp ZP_WORD:47 4.0
(word) div32u16u::quotient_lo#0 quotient_lo zp ZP_WORD:48 4.0
(dword) div32u16u::return
(dword) div32u16u::return#0 return zp ZP_DWORD:63 1.3333333333333333
(dword) div32u16u::return#2 return zp ZP_DWORD:63 4.0
(dword) div32u16u::return#0 return zp ZP_DWORD:64 1.3333333333333333
(dword) div32u16u::return#2 return zp ZP_DWORD:64 4.0
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(byte~) divr16u::$1 reg byte a 22.0
(byte~) divr16u::$2 reg byte a 22.0
@ -136,34 +136,34 @@
(label) divr16u::@6
(label) divr16u::@return
(word) divr16u::dividend
(word) divr16u::dividend#0 dividend zp ZP_WORD:45 2.75
(word) divr16u::dividend#3 dividend zp ZP_WORD:45 5.0
(word) divr16u::dividend#5 dividend zp ZP_WORD:45 2.0
(word) divr16u::dividend#0 dividend zp ZP_WORD:46 2.75
(word) divr16u::dividend#3 dividend zp ZP_WORD:46 5.0
(word) divr16u::dividend#5 dividend zp ZP_WORD:46 2.0
(word) divr16u::divisor
(byte) divr16u::i
(byte) divr16u::i#1 reg byte x 16.5
(byte) divr16u::i#2 reg byte x 1.6923076923076923
(word) divr16u::quotient
(word) divr16u::quotient#1 quotient zp ZP_WORD:47 16.5
(word) divr16u::quotient#2 quotient zp ZP_WORD:47 11.0
(word) divr16u::quotient#3 quotient zp ZP_WORD:47 2.75
(word) divr16u::quotient#1 quotient zp ZP_WORD:48 16.5
(word) divr16u::quotient#2 quotient zp ZP_WORD:48 11.0
(word) divr16u::quotient#3 quotient zp ZP_WORD:48 2.75
(word) divr16u::rem
(word) divr16u::rem#0 rem zp ZP_WORD:43 8.25
(word) divr16u::rem#1 rem zp ZP_WORD:43 22.0
(word) divr16u::rem#10 rem zp ZP_WORD:43 4.0
(word) divr16u::rem#11 rem zp ZP_WORD:43 11.666666666666666
(word) divr16u::rem#2 rem zp ZP_WORD:43 22.0
(word) divr16u::rem#4 rem zp ZP_WORD:43 4.0
(word) divr16u::rem#5 rem zp ZP_WORD:43 24.0
(word) divr16u::rem#6 rem zp ZP_WORD:43 11.0
(word) divr16u::rem#0 rem zp ZP_WORD:44 8.25
(word) divr16u::rem#1 rem zp ZP_WORD:44 22.0
(word) divr16u::rem#10 rem zp ZP_WORD:44 4.0
(word) divr16u::rem#11 rem zp ZP_WORD:44 11.666666666666666
(word) divr16u::rem#2 rem zp ZP_WORD:44 22.0
(word) divr16u::rem#4 rem zp ZP_WORD:44 4.0
(word) divr16u::rem#5 rem zp ZP_WORD:44 24.0
(word) divr16u::rem#6 rem zp ZP_WORD:44 11.0
(word) divr16u::return
(word) divr16u::return#0 return zp ZP_WORD:47 5.285714285714286
(word) divr16u::return#2 return zp ZP_WORD:47 4.0
(word) divr16u::return#3 return zp ZP_WORD:47 4.0
(word) divr16u::return#0 return zp ZP_WORD:48 5.285714285714286
(word) divr16u::return#2 return zp ZP_WORD:48 4.0
(word) divr16u::return#3 return zp ZP_WORD:48 4.0
(byte) frame_cnt
(byte) frame_cnt#0 frame_cnt zp ZP_BYTE:49 0.6000000000000001
(byte) frame_cnt#1 frame_cnt zp ZP_BYTE:49 4.0
(byte) frame_cnt#2 frame_cnt zp ZP_BYTE:49 40.0
(byte) frame_cnt#0 frame_cnt zp ZP_BYTE:50 0.5555555555555556
(byte) frame_cnt#1 frame_cnt zp ZP_BYTE:50 4.0
(byte) frame_cnt#2 frame_cnt zp ZP_BYTE:50 40.0
(void()) init_irq()
(label) init_irq::@return
interrupt(HARDWARE_CLOBBER)(void()) irq()
@ -171,21 +171,24 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) irq::@2
(label) irq::@return
(void()) main()
(signed word~) main::$11 $11 zp ZP_WORD:50 22.0
(word~) main::$15 $15 zp ZP_WORD:52 11.0
(signed word~) main::$17 $17 zp ZP_WORD:52 22.0
(signed word~) main::$18 $18 zp ZP_WORD:52 11.0
(word~) main::$28 $28 zp ZP_WORD:8 22.0
(word~) main::$29 $29 zp ZP_WORD:8 22.0
(signed word*~) main::$30 $30 zp ZP_WORD:8 22.0
(signed word*~) main::$31 $31 zp ZP_WORD:8 22.0
(word~) main::$9 $9 zp ZP_WORD:50 11.0
(signed word~) main::$11 $11 zp ZP_WORD:51 22.0
(word~) main::$15 $15 zp ZP_WORD:53 11.0
(signed word~) main::$17 $17 zp ZP_WORD:53 22.0
(signed word~) main::$18 $18 zp ZP_WORD:53 11.0
(word~) main::$32 $32 zp ZP_WORD:9 22.0
(word~) main::$33 $33 zp ZP_WORD:9 22.0
(signed word*~) main::$34 $34 zp ZP_WORD:9 22.0
(signed word*~) main::$35 $35 zp ZP_WORD:9 22.0
(word~) main::$9 $9 zp ZP_WORD:51 11.0
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@13
(label) main::@14
(label) main::@15
(label) main::@16
(label) main::@17
(label) main::@2
(label) main::@3
(label) main::@4
@ -195,22 +198,24 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) main::@8
(label) main::@9
(signed word) main::cos_x
(signed word) main::cos_x#0 cos_x zp ZP_WORD:8 11.0
(signed word) main::cos_x#0 cos_x zp ZP_WORD:9 11.0
(word) main::idx_x
(word) main::idx_x#1 idx_x zp ZP_WORD:2 11.0
(word) main::idx_x#10 idx_x zp ZP_WORD:2 3.142857142857143
(word) main::idx_x#3 idx_x zp ZP_WORD:2 1.2692307692307692
(word) main::idx_x#10 idx_x zp ZP_WORD:2 3.0
(word) main::idx_x#11 idx_x zp ZP_WORD:2 1.2692307692307692
(word) main::idx_y
(word) main::idx_y#1 idx_y zp ZP_WORD:6 11.0
(word) main::idx_y#10 idx_y zp ZP_WORD:6 7.333333333333333
(word) main::idx_y#10 idx_y zp ZP_WORD:6 3.142857142857143
(word) main::idx_y#3 idx_y zp ZP_WORD:6 1.0999999999999999
(signed word) main::r
(signed word) main::r#1 r zp ZP_WORD:4 16.5
(signed word) main::r#1 r zp ZP_WORD:4 5.5
(signed word) main::r#10 r zp ZP_WORD:4 1.2941176470588236
(byte) main::r_add
(const byte) main::r_add#0 r_add = (byte) 4
(byte) main::r_add#1 r_add zp ZP_BYTE:8 22.0
(byte) main::r_add#10 r_add zp ZP_BYTE:8 2.081081081081081
(byte) main::r_add#12 r_add zp ZP_BYTE:8 16.5
(signed word) main::sin_y
(signed word) main::sin_y#0 sin_y zp ZP_WORD:8 11.0
(signed word) main::sin_y#0 sin_y zp ZP_WORD:9 11.0
(label) main::toD0181
(word~) main::toD0181_$0
(number~) main::toD0181_$1
@ -227,31 +232,31 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte*) main::toD0181_screen
(word) main::x
(signed dword) main::xpos
(signed dword) main::xpos#0 xpos zp ZP_DWORD:10 22.0
(signed dword) main::xpos#0 xpos zp ZP_DWORD:11 22.0
(word) main::y
(signed dword) main::ypos
(signed dword) main::ypos#0 ypos zp ZP_DWORD:10 22.0
(signed dword) main::ypos#0 ypos zp ZP_DWORD:11 22.0
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
(label) memset::@return
(byte) memset::c
(byte) memset::c#3 reg byte x 1.5714285714285714
(byte*) memset::dst
(byte*) memset::dst#1 dst zp ZP_WORD:22 16.5
(byte*) memset::dst#2 dst zp ZP_WORD:22 17.5
(byte*~) memset::dst#3 dst zp ZP_WORD:22 4.0
(byte*) memset::dst#1 dst zp ZP_WORD:23 16.5
(byte*) memset::dst#2 dst zp ZP_WORD:23 17.5
(byte*~) memset::dst#3 dst zp ZP_WORD:23 4.0
(byte*) memset::end
(byte*) memset::end#0 end zp ZP_WORD:24 2.1666666666666665
(byte*) memset::end#0 end zp ZP_WORD:25 2.1666666666666665
(word) memset::num
(word) memset::num#2 num zp ZP_WORD:24 2.0
(word) memset::num#2 num zp ZP_WORD:25 2.0
(void*) memset::return
(void*) memset::str
(void*) memset::str#2 str zp ZP_WORD:22
(void*) memset::str#2 str zp ZP_WORD:23
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$13 $13 zp ZP_WORD:60 4.0
(word~) mul16s::$16 $16 zp ZP_WORD:58 4.0
(word~) mul16s::$17 $17 zp ZP_WORD:60 4.0
(word~) mul16s::$9 $9 zp ZP_WORD:58 4.0
(word~) mul16s::$13 $13 zp ZP_WORD:61 4.0
(word~) mul16s::$16 $16 zp ZP_WORD:59 4.0
(word~) mul16s::$17 $17 zp ZP_WORD:61 4.0
(word~) mul16s::$9 $9 zp ZP_WORD:59 4.0
(label) mul16s::@1
(label) mul16s::@2
(label) mul16s::@3
@ -264,20 +269,20 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(signed word) mul16s::a#2 a zp ZP_WORD:4 11.0
(signed word) mul16s::a#3 a zp ZP_WORD:4 2.692307692307692
(signed word) mul16s::b
(signed word) mul16s::b#1 b zp ZP_WORD:8 22.0
(signed word) mul16s::b#2 b zp ZP_WORD:8 22.0
(signed word) mul16s::b#3 b zp ZP_WORD:8 2.1818181818181817
(signed word) mul16s::b#1 b zp ZP_WORD:9 22.0
(signed word) mul16s::b#2 b zp ZP_WORD:9 22.0
(signed word) mul16s::b#3 b zp ZP_WORD:9 2.1818181818181817
(dword) mul16s::m
(dword) mul16s::m#0 m zp ZP_DWORD:10 2.0
(dword) mul16s::m#1 m zp ZP_DWORD:10 4.0
(dword) mul16s::m#2 m zp ZP_DWORD:10 4.0
(dword) mul16s::m#4 m zp ZP_DWORD:10 4.0
(dword) mul16s::m#5 m zp ZP_DWORD:10 2.5
(dword) mul16s::m#0 m zp ZP_DWORD:11 2.0
(dword) mul16s::m#1 m zp ZP_DWORD:11 4.0
(dword) mul16s::m#2 m zp ZP_DWORD:11 4.0
(dword) mul16s::m#4 m zp ZP_DWORD:11 4.0
(dword) mul16s::m#5 m zp ZP_DWORD:11 2.5
(signed dword) mul16s::return
(signed dword) mul16s::return#0 return zp ZP_DWORD:10 7.000000000000001
(signed dword) mul16s::return#2 return zp ZP_DWORD:10 22.0
(signed dword) mul16s::return#3 return zp ZP_DWORD:10 22.0
(signed dword) mul16s::return#4 return zp ZP_DWORD:10 22.0
(signed dword) mul16s::return#0 return zp ZP_DWORD:11 7.000000000000001
(signed dword) mul16s::return#2 return zp ZP_DWORD:11 22.0
(signed dword) mul16s::return#3 return zp ZP_DWORD:11 22.0
(signed dword) mul16s::return#4 return zp ZP_DWORD:11 22.0
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte~) mul16u::$1 reg byte a 202.0
(label) mul16u::@1
@ -286,58 +291,58 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) mul16u::@4
(label) mul16u::@return
(word) mul16u::a
(word) mul16u::a#0 a zp ZP_WORD:16 101.0
(word) mul16u::a#2 a zp ZP_WORD:16 2.0
(word) mul16u::a#3 a zp ZP_WORD:16 67.66666666666666
(word) mul16u::a#6 a zp ZP_WORD:16 6.0
(word~) mul16u::a#8 a zp ZP_WORD:16 4.0
(word) mul16u::a#0 a zp ZP_WORD:17 101.0
(word) mul16u::a#2 a zp ZP_WORD:17 2.0
(word) mul16u::a#3 a zp ZP_WORD:17 67.66666666666666
(word) mul16u::a#6 a zp ZP_WORD:17 6.0
(word~) mul16u::a#8 a zp ZP_WORD:17 4.0
(word) mul16u::b
(word) mul16u::b#1 b zp ZP_WORD:14 4.0
(word) mul16u::b#1 b zp ZP_WORD:15 4.0
(dword) mul16u::mb
(dword) mul16u::mb#0 mb zp ZP_DWORD:18 6.0
(dword) mul16u::mb#1 mb zp ZP_DWORD:18 202.0
(dword) mul16u::mb#2 mb zp ZP_DWORD:18 43.57142857142858
(dword~) mul16u::mb#6 mb zp ZP_DWORD:18 2.0
(dword) mul16u::mb#0 mb zp ZP_DWORD:19 6.0
(dword) mul16u::mb#1 mb zp ZP_DWORD:19 202.0
(dword) mul16u::mb#2 mb zp ZP_DWORD:19 43.57142857142858
(dword~) mul16u::mb#6 mb zp ZP_DWORD:19 2.0
(dword) mul16u::res
(dword) mul16u::res#1 res zp ZP_DWORD:10 202.0
(dword) mul16u::res#2 res zp ZP_DWORD:10 43.85714285714286
(dword) mul16u::res#6 res zp ZP_DWORD:10 101.0
(dword) mul16u::res#1 res zp ZP_DWORD:11 202.0
(dword) mul16u::res#2 res zp ZP_DWORD:11 43.85714285714286
(dword) mul16u::res#6 res zp ZP_DWORD:11 101.0
(dword) mul16u::return
(dword) mul16u::return#2 return zp ZP_DWORD:10 4.0
(dword) mul16u::return#3 return zp ZP_DWORD:10 4.0
(dword) mul16u::return#2 return zp ZP_DWORD:11 4.0
(dword) mul16u::return#3 return zp ZP_DWORD:11 4.0
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
(dword~) mulu16_sel::$0 $0 zp ZP_DWORD:10 4.0
(dword~) mulu16_sel::$1 $1 zp ZP_DWORD:10 4.0
(dword~) mulu16_sel::$0 $0 zp ZP_DWORD:11 4.0
(dword~) mulu16_sel::$1 $1 zp ZP_DWORD:11 4.0
(label) mulu16_sel::@1
(label) mulu16_sel::@return
(word) mulu16_sel::return
(word) mulu16_sel::return#0 return zp ZP_WORD:71 4.0
(word) mulu16_sel::return#1 return#1 zp ZP_WORD:41 4.0
(word) mulu16_sel::return#10 return#10 zp ZP_WORD:41 4.0
(word) mulu16_sel::return#11 return zp ZP_WORD:71 4.0
(word) mulu16_sel::return#12 return zp ZP_WORD:71 1.714285714285714
(word) mulu16_sel::return#2 return zp ZP_WORD:71 4.0
(word) mulu16_sel::return#0 return zp ZP_WORD:72 4.0
(word) mulu16_sel::return#1 return#1 zp ZP_WORD:42 4.0
(word) mulu16_sel::return#10 return#10 zp ZP_WORD:42 4.0
(word) mulu16_sel::return#11 return zp ZP_WORD:72 4.0
(word) mulu16_sel::return#12 return zp ZP_WORD:72 1.714285714285714
(word) mulu16_sel::return#2 return zp ZP_WORD:72 4.0
(byte) mulu16_sel::select
(byte) mulu16_sel::select#5 reg byte x 0.3333333333333333
(word) mulu16_sel::v1
(word) mulu16_sel::v1#0 v1 zp ZP_WORD:41 2.0
(word) mulu16_sel::v1#1 v1 zp ZP_WORD:41 2.0
(word) mulu16_sel::v1#2 v1 zp ZP_WORD:41 4.0
(word) mulu16_sel::v1#3 v1 zp ZP_WORD:41 2.0
(word) mulu16_sel::v1#4 v1 zp ZP_WORD:41 2.0
(word) mulu16_sel::v1#5 v1 zp ZP_WORD:41 12.0
(word) mulu16_sel::v1#0 v1 zp ZP_WORD:42 2.0
(word) mulu16_sel::v1#1 v1 zp ZP_WORD:42 2.0
(word) mulu16_sel::v1#2 v1 zp ZP_WORD:42 4.0
(word) mulu16_sel::v1#3 v1 zp ZP_WORD:42 2.0
(word) mulu16_sel::v1#4 v1 zp ZP_WORD:42 2.0
(word) mulu16_sel::v1#5 v1 zp ZP_WORD:42 12.0
(word) mulu16_sel::v2
(word) mulu16_sel::v2#0 v2 zp ZP_WORD:14 4.0
(word) mulu16_sel::v2#1 v2 zp ZP_WORD:14 4.0
(word) mulu16_sel::v2#3 v2 zp ZP_WORD:14 4.0
(word) mulu16_sel::v2#4 v2 zp ZP_WORD:14 4.0
(word) mulu16_sel::v2#5 v2 zp ZP_WORD:14 5.0
(word) mulu16_sel::v2#0 v2 zp ZP_WORD:15 4.0
(word) mulu16_sel::v2#1 v2 zp ZP_WORD:15 4.0
(word) mulu16_sel::v2#3 v2 zp ZP_WORD:15 4.0
(word) mulu16_sel::v2#4 v2 zp ZP_WORD:15 4.0
(word) mulu16_sel::v2#5 v2 zp ZP_WORD:15 5.0
(byte[$100]) plots_per_frame
(const byte[$100]) plots_per_frame#0 plots_per_frame = { fill( $100, 0) }
(word) rem16u
(word) rem16u#1 rem16u zp ZP_WORD:43 0.8
(word) rem16u#1 rem16u zp ZP_WORD:44 0.8
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$4 $4 zp ZP_DWORD:37 4.0
(dword~) sin16s::$4 $4 zp ZP_DWORD:38 4.0
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
@ -352,7 +357,7 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) sin16s::@9
(label) sin16s::@return
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 isUpper zp ZP_BYTE:36 0.06060606060606061
(byte) sin16s::isUpper#2 isUpper zp ZP_BYTE:37 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 return zp ZP_WORD:4 22.0
(signed word) sin16s::return#1 return zp ZP_WORD:4 5.0
@ -363,28 +368,28 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(word) sin16s::usinx#0 usinx zp ZP_WORD:4 0.3333333333333333
(word) sin16s::usinx#1 usinx zp ZP_WORD:4 1.0
(dword) sin16s::x
(dword) sin16s::x#0 x zp ZP_DWORD:37 8.5
(dword) sin16s::x#1 x zp ZP_DWORD:37 4.0
(dword) sin16s::x#2 x zp ZP_DWORD:37 4.0
(dword) sin16s::x#4 x zp ZP_DWORD:37 5.0
(dword) sin16s::x#6 x zp ZP_DWORD:37 6.0
(dword) sin16s::x#0 x zp ZP_DWORD:38 8.5
(dword) sin16s::x#1 x zp ZP_DWORD:38 4.0
(dword) sin16s::x#2 x zp ZP_DWORD:38 4.0
(dword) sin16s::x#4 x zp ZP_DWORD:38 5.0
(dword) sin16s::x#6 x zp ZP_DWORD:38 6.0
(word) sin16s::x1
(word) sin16s::x1#0 x1 zp ZP_WORD:69 0.6363636363636365
(word) sin16s::x1#0 x1 zp ZP_WORD:70 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 x2 zp ZP_WORD:41 4.0
(word) sin16s::x2#0 x2 zp ZP_WORD:42 4.0
(word) sin16s::x3
(word) sin16s::x3#0 x3 zp ZP_WORD:41 1.0
(word) sin16s::x3#0 x3 zp ZP_WORD:42 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 x3_6 zp ZP_WORD:71 4.0
(word) sin16s::x3_6#0 x3_6 zp ZP_WORD:72 4.0
(word) sin16s::x4
(word) sin16s::x4#0 x4 zp ZP_WORD:41 4.0
(word) sin16s::x4#0 x4 zp ZP_WORD:42 4.0
(word) sin16s::x5
(word) sin16s::x5#0 x5 zp ZP_WORD:71 4.0
(word) sin16s::x5#0 x5 zp ZP_WORD:72 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 x5_128 zp ZP_WORD:71 4.0
(word) sin16s::x5_128#0 x5_128 zp ZP_WORD:72 4.0
(void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max)
(signed dword~) sin16s_gen2::$5 $5 zp ZP_DWORD:10 22.0
(word~) sin16s_gen2::$6 $6 zp ZP_WORD:67 11.0
(signed dword~) sin16s_gen2::$5 $5 zp ZP_DWORD:11 22.0
(word~) sin16s_gen2::$6 $6 zp ZP_WORD:68 11.0
(label) sin16s_gen2::@1
(label) sin16s_gen2::@2
(label) sin16s_gen2::@3
@ -393,68 +398,69 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(signed word) sin16s_gen2::ampl
(const signed word) sin16s_gen2::ampl#0 ampl = (const signed word) sin16s_gen2::max#0-(const signed word) sin16s_gen2::min#0
(word) sin16s_gen2::i
(word) sin16s_gen2::i#1 i zp ZP_WORD:34 16.5
(word) sin16s_gen2::i#2 i zp ZP_WORD:34 1.8333333333333333
(word) sin16s_gen2::i#1 i zp ZP_WORD:35 16.5
(word) sin16s_gen2::i#2 i zp ZP_WORD:35 1.8333333333333333
(signed word) sin16s_gen2::max
(const signed word) sin16s_gen2::max#0 max = (signed word) $1001
(signed word) sin16s_gen2::min
(const signed word) sin16s_gen2::min#0 min = (signed word) -$1001
(signed word) sin16s_gen2::offs
(signed word*) sin16s_gen2::sintab
(signed word*) sin16s_gen2::sintab#0 sintab zp ZP_WORD:32 5.5
(signed word*) sin16s_gen2::sintab#2 sintab zp ZP_WORD:32 3.3000000000000003
(signed word*) sin16s_gen2::sintab#0 sintab zp ZP_WORD:33 5.5
(signed word*) sin16s_gen2::sintab#2 sintab zp ZP_WORD:33 3.3000000000000003
(dword) sin16s_gen2::step
(dword) sin16s_gen2::step#0 step zp ZP_DWORD:63 0.8666666666666666
(dword) sin16s_gen2::step#0 step zp ZP_DWORD:64 0.8666666666666666
(word) sin16s_gen2::wavelength
(const word) sin16s_gen2::wavelength#0 wavelength = (word) $200
(dword) sin16s_gen2::x
(dword) sin16s_gen2::x#1 x zp ZP_DWORD:28 7.333333333333333
(dword) sin16s_gen2::x#2 x zp ZP_DWORD:28 3.0
(dword) sin16s_gen2::x#1 x zp ZP_DWORD:29 7.333333333333333
(dword) sin16s_gen2::x#2 x zp ZP_DWORD:29 3.0
zp ZP_WORD:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ]
zp ZP_WORD:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ]
zp ZP_WORD:4 [ main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ]
zp ZP_WORD:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ]
zp ZP_WORD:8 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$28 main::$30 main::$29 main::$31 ]
zp ZP_DWORD:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$5 mulu16_sel::$0 mulu16_sel::$1 ]
zp ZP_WORD:14 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ]
zp ZP_WORD:16 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 ]
zp ZP_DWORD:18 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#6 mul16u::mb#1 ]
zp ZP_WORD:22 [ memset::str#2 memset::dst#2 memset::dst#3 memset::dst#1 ]
zp ZP_WORD:24 [ memset::num#2 memset::end#0 ]
zp ZP_BYTE:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ]
zp ZP_WORD:9 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$32 main::$34 main::$33 main::$35 ]
zp ZP_DWORD:11 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$5 mulu16_sel::$0 mulu16_sel::$1 ]
zp ZP_WORD:15 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ]
zp ZP_WORD:17 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 ]
zp ZP_DWORD:19 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#6 mul16u::mb#1 ]
zp ZP_WORD:23 [ memset::str#2 memset::dst#2 memset::dst#3 memset::dst#1 ]
zp ZP_WORD:25 [ memset::num#2 memset::end#0 ]
reg byte x [ memset::c#3 ]
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
zp ZP_WORD:26 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
zp ZP_DWORD:28 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
zp ZP_WORD:32 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
zp ZP_WORD:34 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ]
zp ZP_BYTE:36 [ sin16s::isUpper#2 ]
zp ZP_DWORD:37 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ]
zp ZP_WORD:41 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
zp ZP_WORD:27 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
zp ZP_DWORD:29 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
zp ZP_WORD:33 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
zp ZP_WORD:35 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ]
zp ZP_BYTE:37 [ sin16s::isUpper#2 ]
zp ZP_DWORD:38 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ]
zp ZP_WORD:42 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
reg byte x [ mulu16_sel::select#5 ]
zp ZP_WORD:43 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ]
zp ZP_WORD:45 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ]
zp ZP_WORD:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ]
zp ZP_WORD:44 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ]
zp ZP_WORD:46 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ]
zp ZP_WORD:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
zp ZP_BYTE:49 [ frame_cnt#2 frame_cnt#0 frame_cnt#1 ]
zp ZP_WORD:50 [ main::$9 main::$11 bitmap_plot::x#0 ]
zp ZP_WORD:52 [ main::$15 main::$17 main::$18 ]
zp ZP_BYTE:50 [ frame_cnt#2 frame_cnt#0 frame_cnt#1 ]
zp ZP_WORD:51 [ main::$9 main::$11 bitmap_plot::x#0 ]
zp ZP_WORD:53 [ main::$15 main::$17 main::$18 ]
reg byte a [ bitmap_plot::y#0 ]
zp ZP_WORD:54 [ bitmap_plot::$3 bitmap_plot::plotter#1 ]
zp ZP_WORD:56 [ bitmap_plot::$1 ]
zp ZP_WORD:55 [ bitmap_plot::$3 bitmap_plot::plotter#1 ]
zp ZP_WORD:57 [ bitmap_plot::$1 ]
reg byte a [ bitmap_plot::$2 ]
zp ZP_WORD:58 [ mul16s::$9 mul16s::$16 ]
zp ZP_WORD:60 [ mul16s::$13 mul16s::$17 ]
zp ZP_WORD:59 [ mul16s::$9 mul16s::$16 ]
zp ZP_WORD:61 [ mul16s::$13 mul16s::$17 ]
reg byte a [ mul16u::$1 ]
zp ZP_BYTE:62 [ bitmap_init::$7 ]
zp ZP_BYTE:63 [ bitmap_init::$7 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]
zp ZP_DWORD:63 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp ZP_WORD:67 [ sin16s_gen2::$6 ]
zp ZP_WORD:69 [ sin16s::x1#0 ]
zp ZP_WORD:71 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ]
zp ZP_WORD:73 [ div32u16u::quotient_hi#0 ]
zp ZP_DWORD:64 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp ZP_WORD:68 [ sin16s_gen2::$6 ]
zp ZP_WORD:70 [ sin16s::x1#0 ]
zp ZP_WORD:72 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ]
zp ZP_WORD:74 [ div32u16u::quotient_hi#0 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]

93
src/test/ref/memcpy-0.asm Normal file
View File

@ -0,0 +1,93 @@
// Test memcpy - copy charset and screen
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
// Processor Port Register controlling RAM/ROM configuration and the datasette
.label PROCPORT = 1
// RAM in $A000, $E000 CHAR ROM in $D000
.const PROCPORT_RAM_CHARROM = $31
// BASIC in $A000, I/O in $D000, KERNEL in $E000
.const PROCPORT_BASIC_KERNEL_IO = $37
// The address of the CHARGEN character set
.label CHARGEN = $d000
.label D018 = $d018
.label CHARSET = $2000
.label SCREEN = $400
.label SCREEN_COPY = $2400
main: {
.const toD0181_return = (>(SCREEN_COPY&$3fff)*4)|(>CHARSET)/4&$f
lda #toD0181_return
sta D018
lda #<$400
sta memcpy.num
lda #>$400
sta memcpy.num+1
lda #<SCREEN_COPY
sta memcpy.destination
lda #>SCREEN_COPY
sta memcpy.destination+1
lda #<SCREEN
sta memcpy.source
lda #>SCREEN
sta memcpy.source+1
jsr memcpy
sei
lda #PROCPORT_RAM_CHARROM
sta PROCPORT
lda #<$800
sta memcpy.num
lda #>$800
sta memcpy.num+1
lda #<CHARSET
sta memcpy.destination
lda #>CHARSET
sta memcpy.destination+1
lda #<CHARGEN
sta memcpy.source
lda #>CHARGEN
sta memcpy.source+1
jsr memcpy
lda #PROCPORT_BASIC_KERNEL_IO
sta PROCPORT
cli
rts
}
// Copy block of memory (forwards)
// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination.
// memcpy(void* zeropage(4) destination, void* zeropage(2) source, word zeropage(6) num)
memcpy: {
.label dst = 4
.label src = 2
.label i = 8
.label source = 2
.label destination = 4
.label num = 6
lda #0
sta i
sta i+1
b1:
ldy #0
lda (src),y
sta (dst),y
inc dst
bne !+
inc dst+1
!:
inc src
bne !+
inc src+1
!:
inc i
bne !+
inc i+1
!:
lda i+1
cmp num+1
bcc b1
bne !+
lda i
cmp num
bcc b1
!:
rts
}

51
src/test/ref/memcpy-0.cfg Normal file
View File

@ -0,0 +1,51 @@
@begin: scope:[] from
[0] phi()
to:@1
@1: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @1
[3] phi()
main: scope:[main] from @1
[4] phi()
to:main::toD0181
main::toD0181: scope:[main] from main
[5] phi()
to:main::@1
main::@1: scope:[main] from main::toD0181
[6] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
[7] call memcpy
to:main::@2
main::@2: scope:[main] from main::@1
asm { sei }
[9] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0
[10] call memcpy
to:main::@3
main::@3: scope:[main] from main::@2
[11] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_BASIC_KERNEL_IO#0
asm { cli }
to:main::@return
main::@return: scope:[main] from main::@3
[13] return
to:@return
memcpy: scope:[memcpy] from main::@1 main::@2
[14] (word) memcpy::num#3 ← phi( main::@1/(word) $400 main::@2/(word) $800 )
[14] (void*) memcpy::destination#2 ← phi( main::@1/(void*)(const byte*) SCREEN_COPY#0 main::@2/(void*)(const byte*) CHARSET#0 )
[14] (void*) memcpy::source#2 ← phi( main::@1/(void*)(const byte*) SCREEN#0 main::@2/(void*)(const byte*) CHARGEN#0 )
[15] (byte*~) memcpy::src#3 ← (byte*)(void*) memcpy::source#2
[16] (byte*~) memcpy::dst#3 ← (byte*)(void*) memcpy::destination#2
to:memcpy::@1
memcpy::@1: scope:[memcpy] from memcpy memcpy::@1
[17] (word) memcpy::i#2 ← phi( memcpy/(byte) 0 memcpy::@1/(word) memcpy::i#1 )
[17] (byte*) memcpy::dst#2 ← phi( memcpy/(byte*~) memcpy::dst#3 memcpy::@1/(byte*) memcpy::dst#1 )
[17] (byte*) memcpy::src#2 ← phi( memcpy/(byte*~) memcpy::src#3 memcpy::@1/(byte*) memcpy::src#1 )
[18] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2)
[19] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2
[20] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2
[21] (word) memcpy::i#1 ← ++ (word) memcpy::i#2
[22] if((word) memcpy::i#1<(word) memcpy::num#3) goto memcpy::@1
to:memcpy::@return
memcpy::@return: scope:[memcpy] from memcpy::@1
[23] return
to:@return

1220
src/test/ref/memcpy-0.log Normal file

File diff suppressed because it is too large Load Diff

64
src/test/ref/memcpy-0.sym Normal file
View File

@ -0,0 +1,64 @@
(label) @1
(label) @begin
(label) @end
(byte*) CHARGEN
(const byte*) CHARGEN#0 CHARGEN = (byte*) 53248
(byte*) CHARSET
(const byte*) CHARSET#0 CHARSET = (byte*) 8192
(byte*) D018
(const byte*) D018#0 D018 = (byte*) 53272
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = (byte*) 1
(byte) PROCPORT_BASIC_KERNEL_IO
(const byte) PROCPORT_BASIC_KERNEL_IO#0 PROCPORT_BASIC_KERNEL_IO = (byte) $37
(byte) PROCPORT_RAM_CHARROM
(const byte) PROCPORT_RAM_CHARROM#0 PROCPORT_RAM_CHARROM = (byte) $31
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = (byte*) 1024
(byte*) SCREEN_COPY
(const byte*) SCREEN_COPY#0 SCREEN_COPY = (byte*) 9216
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@return
(label) main::toD0181
(word~) main::toD0181_$0
(number~) main::toD0181_$1
(number~) main::toD0181_$2
(number~) main::toD0181_$3
(word~) main::toD0181_$4
(byte~) main::toD0181_$5
(number~) main::toD0181_$6
(number~) main::toD0181_$7
(number~) main::toD0181_$8
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN_COPY#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f
(byte*) main::toD0181_screen
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
(label) memcpy::@1
(label) memcpy::@return
(void*) memcpy::destination
(void*) memcpy::destination#2 destination zp ZP_WORD:4
(byte*) memcpy::dst
(byte*) memcpy::dst#1 dst zp ZP_WORD:4 5.5
(byte*) memcpy::dst#2 dst zp ZP_WORD:4 17.5
(byte*~) memcpy::dst#3 dst zp ZP_WORD:4 4.0
(word) memcpy::i
(word) memcpy::i#1 i zp ZP_WORD:8 16.5
(word) memcpy::i#2 i zp ZP_WORD:8 5.5
(word) memcpy::num
(word) memcpy::num#3 num zp ZP_WORD:6 1.2222222222222223
(void*) memcpy::return
(void*) memcpy::source
(void*) memcpy::source#2 source zp ZP_WORD:2
(byte*) memcpy::src
(byte*) memcpy::src#1 src zp ZP_WORD:2 7.333333333333333
(byte*) memcpy::src#2 src zp ZP_WORD:2 11.666666666666666
(byte*~) memcpy::src#3 src zp ZP_WORD:2 2.0
zp ZP_WORD:2 [ memcpy::source#2 memcpy::src#2 memcpy::src#3 memcpy::src#1 ]
zp ZP_WORD:4 [ memcpy::destination#2 memcpy::dst#2 memcpy::dst#3 memcpy::dst#1 ]
zp ZP_WORD:6 [ memcpy::num#3 ]
zp ZP_WORD:8 [ memcpy::i#2 memcpy::i#1 ]