1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-02-19 08:31:01 +00:00

fixed tests

This commit is contained in:
jespergravgaard 2019-06-22 00:36:24 +02:00
parent f2a770182e
commit 1e3a6a2750
4 changed files with 11756 additions and 0 deletions

View File

@ -0,0 +1,902 @@
// Tests the simple bitmap plotter - and counts plots per frame in an IRQ
// Plots a fullscreen elipsis
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
.const SIZEOF_SIGNED_WORD = 2
// Processor port data direction register
.label PROCPORT_DDR = 0
// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
.const PROCPORT_DDR_MEMORY_MASK = 7
// Processor Port Register controlling RAM/ROM configuration and the datasette
.label PROCPORT = 1
// RAM in $A000, $E000 I/O in $D000
.const PROCPORT_RAM_IO = $35
.label RASTER = $d012
.label BGCOL = $d021
.label VIC_CONTROL = $d011
.label D011 = $d011
.const VIC_BMM = $20
.const VIC_DEN = $10
.const VIC_RSEL = 8
.label D018 = $d018
// VIC II IRQ Status Register
.label IRQ_STATUS = $d019
// VIC II IRQ Enable Register
.label IRQ_ENABLE = $d01a
// Bits for the IRQ Status/Enable Registers
.const IRQ_RASTER = 1
// CIA#1 Interrupt Status & Control Register
.label CIA1_INTERRUPT = $dc0d
// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
.const CIA_INTERRUPT_CLEAR = $7f
// The vector used when the HARDWARE serves IRQ interrupts
.label HARDWARE_IRQ = $fffe
// The colors of the C64
.const BLACK = 0
.const WHITE = 1
// PI*2 in u[4.28] format
.const PI2_u4f28 = $6487ed51
// PI in u[4.28] format
.const PI_u4f28 = $3243f6a9
// PI/2 in u[4.28] format
.const PI_HALF_u4f28 = $1921fb54
.label BITMAP = $2000
.label SCREEN = $400
.label rem16u = $2b
.label frame_cnt = $31
bbegin:
// Counts frames - updated by the IRQ
lda #1
sta frame_cnt
jsr main
rts
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label _9 = $a
.label _14 = $a
.label _24 = 8
.label _25 = 8
.label cos_x = 8
.label xpos = $a
.label x = $32
.label sin_y = 8
.label ypos = $a
.label y = $34
.label idx_x = 2
.label idx_y = 4
.label _26 = 8
.label _27 = 8
jsr sin16s_gen2
jsr bitmap_init
jsr bitmap_clear
lda #VIC_BMM|VIC_DEN|VIC_RSEL|3
sta D011
lda #toD0181_return
sta D018
jsr init_irq
lda #$80
sta idx_y
lda #0
sta idx_y+1
sta idx_x
sta idx_x+1
b2:
lda idx_x
asl
sta _24
lda idx_x+1
rol
sta _24+1
clc
lda _26
adc #<SINUS
sta _26
lda _26+1
adc #>SINUS
sta _26+1
ldy #0
lda (cos_x),y
tax
iny
lda (cos_x),y
stx cos_x
sta cos_x+1
lda #<$a0
sta mul16s.a
lda #>$a0
sta mul16s.a+1
jsr mul16s
asl _9
rol _9+1
rol _9+2
rol _9+3
asl _9
rol _9+1
rol _9+2
rol _9+3
asl _9
rol _9+1
rol _9+2
rol _9+3
asl _9
rol _9+1
rol _9+2
rol _9+3
clc
lda #<$a0
adc _9+2
sta x
lda #>$a0
adc _9+3
sta x+1
lda idx_y
asl
sta _25
lda idx_y+1
rol
sta _25+1
clc
lda _27
adc #<SINUS
sta _27
lda _27+1
adc #>SINUS
sta _27+1
ldy #0
lda (sin_y),y
tax
iny
lda (sin_y),y
stx sin_y
sta sin_y+1
lda #$64
sta mul16s.a
lda #0
sta mul16s.a+1
jsr mul16s
asl _14
rol _14+1
rol _14+2
rol _14+3
asl _14
rol _14+1
rol _14+2
rol _14+3
asl _14
rol _14+1
rol _14+2
rol _14+3
asl _14
rol _14+1
rol _14+2
rol _14+3
clc
lda #<$64
adc _14+2
sta y
lda #>$64
adc _14+3
sta y+1
lda y
tax
jsr bitmap_plot
inc idx_x
bne !+
inc idx_x+1
!:
lda idx_x+1
cmp #>$200
bne b3
lda idx_x
cmp #<$200
bne b3
lda #0
sta idx_x
sta idx_x+1
b3:
inc idx_y
bne !+
inc idx_y+1
!:
lda idx_y+1
cmp #>$200
bne b4
lda idx_y
cmp #<$200
bne b4
lda #0
sta idx_y
sta idx_y+1
b4:
ldx frame_cnt
inc plots_per_frame,x
jmp b2
}
// Plot a single dot in the bitmap
// bitmap_plot(word zeropage($32) x, byte register(X) y)
bitmap_plot: {
.label _1 = $38
.label plotter = $36
.label x = $32
.label _3 = $36
lda bitmap_plot_yhi,x
sta _3+1
lda bitmap_plot_ylo,x
sta _3
lda x
and #<$fff8
sta _1
lda x+1
and #>$fff8
sta _1+1
lda plotter
clc
adc _1
sta plotter
lda plotter+1
adc _1+1
sta plotter+1
lda x
tay
lda bitmap_plot_bit,y
ldy #0
ora (plotter),y
sta (plotter),y
rts
}
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zeropage(6) a, signed word zeropage(8) b)
mul16s: {
.label _9 = $3a
.label _13 = $3c
.label _16 = $3a
.label _17 = 6
.label m = $a
.label return = $a
.label a = 6
.label b = 8
lda b
sta mul16u.mb
lda b+1
sta mul16u.mb+1
lda #0
sta mul16u.mb+2
sta mul16u.mb+3
lda a
sta mul16u.a
lda a+1
sta mul16u.a+1
jsr mul16u
lda a+1
bpl b1
lda m+2
sta _9
lda m+3
sta _9+1
lda _16
sec
sbc b
sta _16
lda _16+1
sbc b+1
sta _16+1
lda _16
sta m+2
lda _16+1
sta m+3
b1:
lda b+1
bpl b2
lda m+2
sta _13
lda m+3
sta _13+1
lda _13
sec
sbc _17
sta _17
lda _13+1
sbc _17+1
sta _17+1
lda _17
sta m+2
lda _17+1
sta m+3
b2:
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: {
.label mb = $12
.label a = $10
.label res = $a
.label return = $a
.label b = $e
lda #0
sta res
sta res+1
sta res+2
sta res+3
b1:
lda a
bne b2
lda a+1
bne b2
rts
b2:
lda a
and #1
cmp #0
beq b3
lda res
clc
adc mb
sta res
lda res+1
adc mb+1
sta res+1
lda res+2
adc mb+2
sta res+2
lda res+3
adc mb+3
sta res+3
b3:
lsr a+1
ror a
asl mb
rol mb+1
rol mb+2
rol mb+3
jmp b1
}
// Setup the IRQ
init_irq: {
sei
// Disable kernal & basic
lda #PROCPORT_DDR_MEMORY_MASK
sta PROCPORT_DDR
lda #PROCPORT_RAM_IO
sta PROCPORT
// Disable CIA 1 Timer IRQ
lda #CIA_INTERRUPT_CLEAR
sta CIA1_INTERRUPT
// Set raster line to $100
lda #$80
ora VIC_CONTROL
sta VIC_CONTROL
lda #0
sta RASTER
// Enable Raster Interrupt
lda #IRQ_RASTER
sta IRQ_ENABLE
// Set the IRQ routine
lda #<irq
sta HARDWARE_IRQ
lda #>irq
sta HARDWARE_IRQ+1
cli
rts
}
// Clear all graphics on the bitmap
// bgcol - the background color to fill the screen with
// fgcol - the foreground color to fill the screen with
bitmap_clear: {
.const col = WHITE*$10
ldx #col
lda #<$3e8
sta memset.num
lda #>$3e8
sta memset.num+1
lda #<SCREEN
sta memset.str
lda #>SCREEN
sta memset.str+1
jsr memset
ldx #0
lda #<$1f40
sta memset.num
lda #>$1f40
sta memset.num+1
lda #<BITMAP
sta memset.str
lda #>BITMAP
sta memset.str+1
jsr memset
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: {
.label end = $18
.label dst = $16
.label str = $16
.label num = $18
lda end
clc
adc str
sta end
lda end+1
adc str+1
sta end+1
b1:
txa
ldy #0
sta (dst),y
inc dst
bne !+
inc dst+1
!:
lda dst+1
cmp end+1
bne b1
lda dst
cmp end
bne b1
rts
}
// Initialize bitmap plotting tables
bitmap_init: {
.label _7 = $3e
.label yoffs = $1a
ldx #0
lda #$80
b1:
sta bitmap_plot_bit,x
lsr
cmp #0
bne b2
lda #$80
b2:
inx
cpx #0
bne b1
lda #<BITMAP
sta yoffs
lda #>BITMAP
sta yoffs+1
ldx #0
b3:
lda #7
sax _7
lda yoffs
ora _7
sta bitmap_plot_ylo,x
lda yoffs+1
sta bitmap_plot_yhi,x
lda #7
cmp _7
bne b4
clc
lda yoffs
adc #<$28*8
sta yoffs
lda yoffs+1
adc #>$28*8
sta yoffs+1
b4:
inx
cpx #0
bne b3
rts
}
// 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: {
.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
jsr div32u16u
lda #0
sta i
sta i+1
lda #<SINUS
sta sintab
lda #>SINUS
sta sintab+1
lda #0
sta x
sta x+1
sta x+2
sta x+3
// u[4.28]
b1:
lda x
sta sin16s.x
lda x+1
sta sin16s.x+1
lda x+2
sta sin16s.x+2
lda x+3
sta sin16s.x+3
jsr sin16s
lda #<ampl
sta mul16s.b
lda #>ampl
sta mul16s.b+1
jsr mul16s
lda _5+2
sta _6
lda _5+3
sta _6+1
ldy #0
lda _6
sta (sintab),y
iny
lda _6+1
sta (sintab),y
lda #SIZEOF_SIGNED_WORD
clc
adc sintab
sta sintab
bcc !+
inc sintab+1
!:
lda x
clc
adc step
sta x
lda x+1
adc step+1
sta x+1
lda x+2
adc step+2
sta x+2
lda x+3
adc step+3
sta x+3
inc i
bne !+
inc i+1
!:
lda i+1
cmp #>wavelength
bcc b1
bne !+
lda i
cmp #<wavelength
bcc b1
!:
rts
}
// 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: {
.label _4 = $25
.label x = $25
.label return = 6
.label x1 = $45
.label x2 = $29
.label x3 = $29
.label x3_6 = $47
.label usinx = 6
.label x4 = $29
.label x5 = $47
.label x5_128 = $47
.label sinx = 6
.label isUpper = $24
lda x+3
cmp #>PI_u4f28>>$10
bcc b4
bne !+
lda x+2
cmp #<PI_u4f28>>$10
bcc b4
bne !+
lda x+1
cmp #>PI_u4f28
bcc b4
bne !+
lda x
cmp #<PI_u4f28
bcc b4
!:
lda x
sec
sbc #<PI_u4f28
sta x
lda x+1
sbc #>PI_u4f28
sta x+1
lda x+2
sbc #<PI_u4f28>>$10
sta x+2
lda x+3
sbc #>PI_u4f28>>$10
sta x+3
lda #1
sta isUpper
jmp b1
b4:
lda #0
sta isUpper
b1:
lda x+3
cmp #>PI_HALF_u4f28>>$10
bcc b2
bne !+
lda x+2
cmp #<PI_HALF_u4f28>>$10
bcc b2
bne !+
lda x+1
cmp #>PI_HALF_u4f28
bcc b2
bne !+
lda x
cmp #<PI_HALF_u4f28
bcc b2
!:
lda #<PI_u4f28
sec
sbc x
sta x
lda #>PI_u4f28
sbc x+1
sta x+1
lda #<PI_u4f28>>$10
sbc x+2
sta x+2
lda #>PI_u4f28>>$10
sbc x+3
sta x+3
b2:
ldy #3
!:
asl _4
rol _4+1
rol _4+2
rol _4+3
dey
bne !-
lda _4+2
sta x1
lda _4+3
sta x1+1
lda x1
sta mulu16_sel.v1
lda x1+1
sta mulu16_sel.v1+1
lda x1
sta mulu16_sel.v2
lda x1+1
sta mulu16_sel.v2+1
ldx #0
jsr mulu16_sel
lda mulu16_sel.return
sta x2
lda mulu16_sel.return+1
sta x2+1
lda x1
sta mulu16_sel.v2
lda x1+1
sta mulu16_sel.v2+1
ldx #1
jsr mulu16_sel
lda mulu16_sel.return
sta mulu16_sel.return_1
lda mulu16_sel.return+1
sta mulu16_sel.return_1+1
ldx #1
lda #<$10000/6
sta mulu16_sel.v2
lda #>$10000/6
sta mulu16_sel.v2+1
jsr mulu16_sel
lda x1
sec
sbc x3_6
sta usinx
lda x1+1
sbc x3_6+1
sta usinx+1
lda x1
sta mulu16_sel.v2
lda x1+1
sta mulu16_sel.v2+1
ldx #0
jsr mulu16_sel
lda mulu16_sel.return
sta mulu16_sel.return_10
lda mulu16_sel.return+1
sta mulu16_sel.return_10+1
lda x1
sta mulu16_sel.v2
lda x1+1
sta mulu16_sel.v2+1
ldx #0
jsr mulu16_sel
lsr x5_128+1
ror x5_128
lsr x5_128+1
ror x5_128
lsr x5_128+1
ror x5_128
lsr x5_128+1
ror x5_128
lda usinx
clc
adc x5_128
sta usinx
lda usinx+1
adc x5_128+1
sta usinx+1
lda isUpper
cmp #0
beq b3
sec
lda #0
sbc sinx
sta sinx
lda #0
sbc sinx+1
sta sinx+1
b3:
rts
}
// 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: {
.label _0 = $a
.label _1 = $a
.label v1 = $29
.label v2 = $e
.label return = $47
.label return_1 = $29
.label return_10 = $29
lda v1
sta mul16u.a
lda v1+1
sta mul16u.a+1
lda mul16u.b
sta mul16u.mb
lda mul16u.b+1
sta mul16u.mb+1
lda #0
sta mul16u.mb+2
sta mul16u.mb+3
jsr mul16u
cpx #0
beq !e+
!:
asl _1
rol _1+1
rol _1+2
rol _1+3
dex
bne !-
!e:
lda _1+2
sta return
lda _1+3
sta return+1
rts
}
// 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
lda #<PI2_u4f28>>$10
sta divr16u.dividend
lda #>PI2_u4f28>>$10
sta divr16u.dividend+1
lda #0
sta divr16u.rem
sta divr16u.rem+1
jsr divr16u
lda divr16u.return
sta quotient_hi
lda divr16u.return+1
sta quotient_hi+1
lda #<PI2_u4f28&$ffff
sta divr16u.dividend
lda #>PI2_u4f28&$ffff
sta divr16u.dividend+1
jsr divr16u
lda quotient_hi
sta return+2
lda quotient_hi+1
sta return+3
lda quotient_lo
sta return
lda quotient_lo+1
sta return+1
rts
}
// Performs division on two 16 bit unsigned words and an initial remainder
// 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: {
.label rem = $2b
.label dividend = $2d
.label quotient = $2f
.label return = $2f
ldx #0
txa
sta quotient
sta quotient+1
b1:
asl rem
rol rem+1
lda dividend+1
and #$80
cmp #0
beq b2
lda #1
ora rem
sta rem
b2:
asl dividend
rol dividend+1
asl quotient
rol quotient+1
lda rem+1
cmp #>sin16s_gen2.wavelength
bcc b3
bne !+
lda rem
cmp #<sin16s_gen2.wavelength
bcc b3
!:
inc quotient
bne !+
inc quotient+1
!:
lda rem
sec
sbc #<sin16s_gen2.wavelength
sta rem
lda rem+1
sbc #>sin16s_gen2.wavelength
sta rem+1
b3:
inx
cpx #$10
bne b1
rts
}
// Interrupt Routine counting frames
irq: {
sta rega+1
lda #WHITE
sta BGCOL
lda #0
cmp frame_cnt
beq b1
inc frame_cnt
b1:
lda #BLACK
sta BGCOL
// Acknowledge the IRQ
lda #IRQ_RASTER
sta IRQ_STATUS
rega:
lda #00
rti
}
// Tables for the plotter - initialized by calling bitmap_init();
bitmap_plot_ylo: .fill $100, 0
bitmap_plot_yhi: .fill $100, 0
bitmap_plot_bit: .fill $100, 0
plots_per_frame: .fill $100, 0
.align $100
SINUS: .fill 2*$200, 0

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,453 @@
(label) @1
(label) @2
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = (byte*) 53281
(byte*) BITMAP
(const byte*) BITMAP#0 BITMAP = (byte*) 8192
(byte) BLACK
(const byte) BLACK#0 BLACK = (byte) 0
(byte*) CIA1_INTERRUPT
(const byte*) CIA1_INTERRUPT#0 CIA1_INTERRUPT = (byte*) 56333
(byte) CIA_INTERRUPT_CLEAR
(const byte) CIA_INTERRUPT_CLEAR#0 CIA_INTERRUPT_CLEAR = (byte) $7f
(byte*) D011
(const byte*) D011#0 D011 = (byte*) 53265
(byte*) D018
(const byte*) D018#0 D018 = (byte*) 53272
(void()**) HARDWARE_IRQ
(const void()**) HARDWARE_IRQ#0 HARDWARE_IRQ = (void()**) 65534
(byte*) IRQ_ENABLE
(const byte*) IRQ_ENABLE#0 IRQ_ENABLE = (byte*) 53274
(byte) IRQ_RASTER
(const byte) IRQ_RASTER#0 IRQ_RASTER = (byte) 1
(byte*) IRQ_STATUS
(const byte*) IRQ_STATUS#0 IRQ_STATUS = (byte*) 53273
(dword) PI2_u4f28
(const dword) PI2_u4f28#0 PI2_u4f28 = (dword) $6487ed51
(dword) PI_HALF_u4f28
(const dword) PI_HALF_u4f28#0 PI_HALF_u4f28 = (dword) $1921fb54
(dword) PI_u4f28
(const dword) PI_u4f28#0 PI_u4f28 = (dword) $3243f6a9
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = (byte*) 1
(byte*) PROCPORT_DDR
(const byte*) PROCPORT_DDR#0 PROCPORT_DDR = (byte*) 0
(byte) PROCPORT_DDR_MEMORY_MASK
(const byte) PROCPORT_DDR_MEMORY_MASK#0 PROCPORT_DDR_MEMORY_MASK = (byte) 7
(byte) PROCPORT_RAM_IO
(const byte) PROCPORT_RAM_IO#0 PROCPORT_RAM_IO = (byte) $35
(byte*) RASTER
(const byte*) RASTER#0 RASTER = (byte*) 53266
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = (byte*) 1024
(signed word[$200]) SINUS
(const signed word[$200]) SINUS#0 SINUS = { fill( $200, 0) }
(const byte) SIZEOF_SIGNED_WORD SIZEOF_SIGNED_WORD = (byte) 2
(byte) VIC_BMM
(const byte) VIC_BMM#0 VIC_BMM = (byte) $20
(byte*) VIC_CONTROL
(const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265
(byte) VIC_DEN
(const byte) VIC_DEN#0 VIC_DEN = (byte) $10
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte) 8
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte) 1
(void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol)
(label) bitmap_clear::@1
(label) bitmap_clear::@return
(byte) bitmap_clear::bgcol
(byte) bitmap_clear::col
(const byte) bitmap_clear::col#0 col = (const byte) WHITE#0*(byte) $10
(byte) bitmap_clear::fgcol
(byte*) bitmap_gfx
(void()) bitmap_init((byte*) bitmap_init::gfx , (byte*) bitmap_init::screen)
(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
(label) bitmap_init::@1
(label) bitmap_init::@2
(label) bitmap_init::@3
(label) bitmap_init::@4
(label) bitmap_init::@5
(label) bitmap_init::@6
(label) bitmap_init::@return
(byte) bitmap_init::bits
(byte) bitmap_init::bits#1 reg byte a 11.0
(byte) bitmap_init::bits#3 reg byte a 16.5
(byte) bitmap_init::bits#4 reg byte a 7.333333333333333
(byte*) bitmap_init::gfx
(byte*) bitmap_init::screen
(byte) bitmap_init::x
(byte) bitmap_init::x#1 reg byte x 16.5
(byte) bitmap_init::x#2 reg byte x 5.5
(byte) bitmap_init::y
(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
(void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y)
(word~) bitmap_plot::$1 $1 zp ZP_WORD:56 4.0
(byte~) bitmap_plot::$2 reg byte a 4.0
(word~) bitmap_plot::$3 $3 zp ZP_WORD:54 1.0
(label) bitmap_plot::@return
(byte*) bitmap_plot::plotter
(byte*) bitmap_plot::plotter#1 plotter zp ZP_WORD:54 3.0
(word) bitmap_plot::x
(word) bitmap_plot::x#0 x zp ZP_WORD:50 3.75
(byte) bitmap_plot::y
(byte) bitmap_plot::y#0 reg byte x 7.5
(byte[$100]) bitmap_plot_bit
(const byte[$100]) bitmap_plot_bit#0 bitmap_plot_bit = { fill( $100, 0) }
(byte[$100]) bitmap_plot_yhi
(const byte[$100]) bitmap_plot_yhi#0 bitmap_plot_yhi = { fill( $100, 0) }
(byte[$100]) bitmap_plot_ylo
(const byte[$100]) bitmap_plot_ylo#0 bitmap_plot_ylo = { fill( $100, 0) }
(byte*) bitmap_screen
(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(label) div32u16u::@1
(label) div32u16u::@2
(label) div32u16u::@return
(dword) div32u16u::dividend
(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_lo
(word) div32u16u::quotient_lo#0 quotient_lo zp ZP_WORD:47 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
(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
(label) divr16u::@1
(label) divr16u::@2
(label) divr16u::@3
(label) divr16u::@4
(label) divr16u::@5
(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::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::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::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
(byte) frame_cnt
(byte) frame_cnt#0 frame_cnt zp ZP_BYTE:49 0.6382978723404255
(byte) frame_cnt#1 frame_cnt zp ZP_BYTE:49 4.0
(byte) frame_cnt#10 frame_cnt zp ZP_BYTE:49 40.0
(void()) init_irq()
(label) init_irq::@return
interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) irq::@1
(label) irq::@2
(label) irq::@return
(void()) main()
(word~) main::$10 reg byte alu 22.0
(signed dword~) main::$14 $14 zp ZP_DWORD:10 22.0
(word~) main::$15 reg byte alu 22.0
(word~) main::$24 $24 zp ZP_WORD:8 22.0
(word~) main::$25 $25 zp ZP_WORD:8 22.0
(signed word*~) main::$26 $26 zp ZP_WORD:8 22.0
(signed word*~) main::$27 $27 zp ZP_WORD:8 22.0
(signed dword~) main::$9 $9 zp ZP_DWORD:10 22.0
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@13
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(signed word) main::cos_x
(signed word) main::cos_x#0 cos_x zp ZP_WORD:8 22.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.6666666666666665
(word) main::idx_x#3 idx_x zp ZP_WORD:2 1.375
(word) main::idx_y
(word) main::idx_y#1 idx_y zp ZP_WORD:4 11.0
(word) main::idx_y#10 idx_y zp ZP_WORD:4 11.0
(word) main::idx_y#3 idx_y zp ZP_WORD:4 1.1785714285714286
(signed word) main::sin_y
(signed word) main::sin_y#0 sin_y zp ZP_WORD:8 22.0
(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#0&(word) $3fff*(byte) 4|>(word)(const byte*) BITMAP#0/(byte) 4&(byte) $f
(byte*) main::toD0181_screen
(word) main::x
(word) main::x#0 x zp ZP_WORD:50 1.8333333333333333
(signed dword) main::xpos
(signed dword) main::xpos#0 xpos zp ZP_DWORD:10 22.0
(word) main::y
(word) main::y#0 y zp ZP_WORD:52 11.0
(signed dword) main::ypos
(signed dword) main::ypos#0 ypos zp ZP_DWORD:10 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::end
(byte*) memset::end#0 end zp ZP_WORD:24 2.1666666666666665
(word) memset::num
(word) memset::num#2 num zp ZP_WORD:24 2.0
(void*) memset::return
(void*) memset::str
(void*) memset::str#2 str zp ZP_WORD:22
(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:6 4.0
(word~) mul16s::$9 $9 zp ZP_WORD:58 4.0
(label) mul16s::@1
(label) mul16s::@2
(label) mul16s::@3
(label) mul16s::@4
(label) mul16s::@5
(label) mul16s::@return
(signed word) mul16s::a
(signed word) mul16s::a#0 a zp ZP_WORD:6 22.0
(signed word) mul16s::a#3 a zp ZP_WORD:6 1.0
(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
(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
(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
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte~) mul16u::$1 reg byte a 202.0
(label) mul16u::@1
(label) mul16u::@2
(label) mul16u::@3
(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::b
(word) mul16u::b#1 b zp ZP_WORD:14 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::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::return
(dword) mul16u::return#2 return zp ZP_DWORD:10 4.0
(dword) mul16u::return#3 return zp ZP_DWORD:10 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
(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
(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::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
(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
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$4 $4 zp ZP_DWORD:37 4.0
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
(label) sin16s::@12
(label) sin16s::@2
(label) sin16s::@3
(label) sin16s::@4
(label) sin16s::@5
(label) sin16s::@6
(label) sin16s::@7
(label) sin16s::@8
(label) sin16s::@9
(label) sin16s::@return
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 isUpper zp ZP_BYTE:36 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 return zp ZP_WORD:6 22.0
(signed word) sin16s::return#1 return zp ZP_WORD:6 5.0
(signed word~) sin16s::return#5 return zp ZP_WORD:6 4.0
(signed word) sin16s::sinx
(signed word) sin16s::sinx#1 sinx zp ZP_WORD:6 4.0
(word) sin16s::usinx
(word) sin16s::usinx#0 usinx zp ZP_WORD:6 0.3333333333333333
(word) sin16s::usinx#1 usinx zp ZP_WORD:6 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
(word) sin16s::x1
(word) sin16s::x1#0 x1 zp ZP_WORD:69 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 x2 zp ZP_WORD:41 4.0
(word) sin16s::x3
(word) sin16s::x3#0 x3 zp ZP_WORD:41 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 x3_6 zp ZP_WORD:71 4.0
(word) sin16s::x4
(word) sin16s::x4#0 x4 zp ZP_WORD:41 4.0
(word) sin16s::x5
(word) sin16s::x5#0 x5 zp ZP_WORD:71 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 x5_128 zp ZP_WORD:71 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
(label) sin16s_gen2::@1
(label) sin16s_gen2::@2
(label) sin16s_gen2::@3
(label) sin16s_gen2::@4
(label) sin16s_gen2::@return
(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
(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
(dword) sin16s_gen2::step
(dword) sin16s_gen2::step#0 step zp ZP_DWORD:63 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
zp ZP_WORD:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ]
zp ZP_WORD:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ]
zp ZP_WORD:6 [ mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ]
zp ZP_WORD:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$24 main::$26 main::$25 main::$27 ]
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 main::$9 main::$14 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 ]
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 ]
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 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
zp ZP_BYTE:49 [ frame_cnt#10 frame_cnt#0 frame_cnt#1 ]
reg byte alu [ main::$10 ]
zp ZP_WORD:50 [ main::x#0 bitmap_plot::x#0 ]
reg byte alu [ main::$15 ]
zp ZP_WORD:52 [ main::y#0 ]
reg byte x [ bitmap_plot::y#0 ]
zp ZP_WORD:54 [ bitmap_plot::$3 bitmap_plot::plotter#1 ]
zp ZP_WORD:56 [ bitmap_plot::$1 ]
reg byte a [ bitmap_plot::$2 ]
zp ZP_WORD:58 [ mul16s::$9 mul16s::$16 ]
zp ZP_WORD:60 [ mul16s::$13 ]
reg byte a [ mul16u::$1 ]
zp ZP_BYTE:62 [ 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 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]