Created
August 19, 2018 21:53
-
-
Save nurpax/525811316cdbbb1657940cd6cfa7426d to your computer and use it in GitHub Desktop.
spd sprite loading in kickassembler
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.var spdDataTemplate = "Magic=$0,Version=$3,NumSprites=$4,NumAnims=$5,Bg=$6,Multicol1=$7,Multicol2=$8" | |
.var iiro = LoadBinary("sprites/iiro.spd", spdDataTemplate) | |
.macro setupSprites(spd, data, dblw, dblh) { | |
.const numSprites = spd.getNumSprites()+1 | |
.const spriteMask = ((1 << numSprites)-1) | |
.var xScale = 1 | |
.var yScale = 1 | |
lda #spriteMask | |
.if (dblw || dblh) { | |
.if (dblw) { | |
.eval xScale = 2 | |
sta $d01d | |
} | |
.if (dblh) { | |
.eval yScale = 2 | |
sta $d017 | |
} | |
} | |
sta $d015 // enable sprites | |
.const multicolor = true | |
.if (multicolor) { | |
sta $d01c // multicolor | |
lda #spd.getMulticol1() | |
sta $d025 | |
lda #spd.getMulticol2() | |
sta $d026 | |
} | |
.for (var si = 0; si < numSprites; si++) { | |
lda data + si*64 + 63 | |
sta $d027 + si | |
// init sprite ptrs (note: have to config ptrs to both screen RAMs | |
// since we are double buffering. | |
lda #(data/64) + si | |
sta screen0+$03f8 + si | |
sta screen1+$03f8 + si | |
} | |
// load x,y position | |
ldx #100 | |
.for (var s = 0; s < 4; s++) { | |
stx $d000+s*2 | |
ldy #850+s*21*yScale | |
sty $d000+s*2+1 | |
} | |
} | |
// how to use the macro | |
main: | |
setupSprites(iiro, iiro_spritedata, true, true) | |
.align 64 | |
iiro_spritedata: | |
.for (var si = 0; si < iiro.getNumSprites()+1; si++) { | |
.for (var bi = 0; bi < 64; bi++) { | |
.byte iiro.get(si*64 + bi + 9) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment