mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-09-29 03:56:15 +00:00
55 lines
1.2 KiB
NASM
55 lines
1.2 KiB
NASM
// Tests a sub-optimal fragment synthesis
|
|
// vbuaa=vbuxx_band_pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuc1_band_vbuxx < vbuaa=pbuz1_derefidx_vbuaa_band_vbuxx < vbuaa=pbuz1_derefidx_vbuyy_band_vbuxx < vbuaa=pbuz1_derefidx_vbuyy_band_vbuaa < vbuaa=vbuaa_band_pbuz1_derefidx_vbuyy - clobber:A Y cycles:11.5
|
|
// Commodore 64 PRG executable file
|
|
.file [name="fragment-synth.prg", type="prg", segments="Program"]
|
|
.segmentdef Program [segments="Basic, Code, Data"]
|
|
.segmentdef Basic [start=$0801]
|
|
.segmentdef Code [start=$80d]
|
|
.segmentdef Data [startAfter="Code"]
|
|
.segment Basic
|
|
:BasicUpstart(main)
|
|
.segment Code
|
|
main: {
|
|
.label screen = $400
|
|
// z[2] = $f0
|
|
lda #$f0
|
|
sta $450+2
|
|
// z[3] = $0f
|
|
lda #$f
|
|
sta $450+3
|
|
// fct(x, z)
|
|
lda #<$450
|
|
sta.z fct.z
|
|
lda #>$450
|
|
sta.z fct.z+1
|
|
ldx #$aa
|
|
jsr fct
|
|
// fct(x, z)
|
|
// byte a1 = fct(x, z)
|
|
// screen[0] = a1
|
|
sta screen
|
|
// fct(x, z)
|
|
lda #<$450+1
|
|
sta.z fct.z
|
|
lda #>$450+1
|
|
sta.z fct.z+1
|
|
ldx #$55
|
|
jsr fct
|
|
// fct(x, z)
|
|
// byte a2 = fct(x, z)
|
|
// screen[1] = a2
|
|
sta screen+1
|
|
// }
|
|
rts
|
|
}
|
|
// fct(byte register(X) x, byte* zp(2) z)
|
|
fct: {
|
|
.label z = 2
|
|
// x & z[2]
|
|
ldy #2
|
|
txa
|
|
and (z),y
|
|
// }
|
|
rts
|
|
}
|