From 4e2fb36ae2716ada2959f83b94cc49a636012952 Mon Sep 17 00:00:00 2001 From: Rob McMullen Date: Sun, 25 Jun 2017 08:29:10 -0700 Subject: [PATCH] WIP for multiple sprites --- Makefile.rob | 29 ++++-- apple-sprite9x11.png | Bin 0 -> 207 bytes bwtest.s | 2 + multitest.s | 223 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 248 insertions(+), 6 deletions(-) create mode 100644 apple-sprite9x11.png create mode 100644 multitest.s diff --git a/Makefile.rob b/Makefile.rob index 34e5b16..fcc09b9 100644 --- a/Makefile.rob +++ b/Makefile.rob @@ -1,20 +1,37 @@ COLORSPRITE = moldy_burger.png #COLORSPRITE = boxw_mag.png #COLORSPRITE = apple.png -BWSPRITE = apple.png +BWSPRITE = apple-sprite9x11.png -all: bwtest.dsk colortest.dsk +all: multitest.dsk -bwtest.dsk: HiSprite.py bwtest.s $(BWSPRITE) - python HiSprite.py -a mac65 -p 6502 -s hgrbw $(BWSPRITE) -n bwsprite -t -c -r > bwsprite.s +rowlookup.s: HiSprite.py + python HiSprite.py -a mac65 -p 6502 -r > rowlookup.s + +colbw.s: HiSprite.py + python HiSprite.py -a mac65 -p 6502 -s hgrbw -c > collookupbw.s + +collookupcolor.s: HiSprite.py + python HiSprite.py -a mac65 -p 6502 -c > collookupcolor.s + +bwsprite.s: HiSprite.py colbw.s rowlookup.s $(BWSPRITE) + python HiSprite.py -a mac65 -p 6502 -s hgrbw $(BWSPRITE) -n bwsprite -m > bwsprite.s + +colorsprite.s: HiSprite.py collookupcolor.s rowlookup.s $(COLORSPRITE) + python HiSprite.py -a mac65 -p 6502 -s hgrcolor $(COLORSPRITE) -n colorsprite -m > colorsprite.s + +bwtest.dsk: HiSprite.py bwtest.s bwsprite.s atasm -obwtest.xex bwtest.s -Lbwtest.var -gbwtest.lst atrcopy bwtest.dsk boot -b bwtest.xex --brun 6000 -f -colortest.dsk: HiSprite.py colortest.s $(COLORSPRITE) - python HiSprite.py -a mac65 -p 6502 -s hgrcolor $(COLORSPRITE) -n colorsprite -t -c -r -m > colorsprite.s +colortest.dsk: HiSprite.py colortest.s bwsprite.s atasm -ocolortest.xex colortest.s -Lcolortest.var -gcolortest.lst atrcopy colortest.dsk boot -b colortest.xex --brun 6000 -f +multitest.dsk: HiSprite.py multitest.s colorsprite.s bwsprite.s + atasm -omultitest.xex multitest.s -Lmultitest.var -gmultitest.lst + atrcopy multitest.dsk boot -b multitest.xex --brun 6000 -f + clean: rm -f bwtest.dsk bwtest.xex bwtest.var bwtest.lst rm -f colortest.dsk colortest.xex colortest.var colortest.lst diff --git a/apple-sprite9x11.png b/apple-sprite9x11.png new file mode 100644 index 0000000000000000000000000000000000000000..dec9382fde5514aabb19f97cfa61e720841f7a1d GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRY!2~3gtPOlX0tFtC#XvD(5N2eUHAey{$X?>< z>&pI+O_En$sC8NLcA$`KW=KSdbAE1aYF-JD%fR4Vl$uzQnxasiS(2gP?&%wlqL<1J z6nFJ>aSV~TJh$JG>wp6XbNbuEe`Zdoxic^7R8#efIZVwnbUbTTXdN&Un9MNY3V(Fm u-LnophrYe=D?jk^zNp~LpQ}$>mvNgPDAdVVa&XZ(kWHShelF{r5}E)27C=P+ literal 0 HcmV?d00001 diff --git a/bwtest.s b/bwtest.s index e9b097d..b154ad5 100644 --- a/bwtest.s +++ b/bwtest.s @@ -72,3 +72,5 @@ clr1 rts .include bwsprite.s + .include rowlookup.s + .include collookupbw.s diff --git a/multitest.s b/multitest.s new file mode 100644 index 0000000..47a3ca6 --- /dev/null +++ b/multitest.s @@ -0,0 +1,223 @@ +; os memory map +CLRTEXT = $c050 +SETTEXT = $c051 +CLRMIXED = $c052 +SETMIXED = $c053 +TXTPAGE1 = $c054 +TXTPAGE2 = $c055 +CLRHIRES = $c056 +SETHIRES = $c057 + +; ROM entry points +COUT = $fded +ROMWAIT = $fca8 + +; Zero page locations we use (unused by Monitor, Applesoft, or ProDOS) +PARAM0 = $06 +PARAM1 = $07 +PARAM2 = $08 +PARAM3 = $09 +SCRATCH0 = $19 +SCRATCH1 = $1a +SPRITEPTR_L = $1b +SPRITEPTR_H = $1c + + *= $80 +drawptr .ds 2 + + + *= $6000 + +start + bit CLRTEXT ; start with HGR page 1, full screen + bit CLRMIXED + bit TXTPAGE1 + bit SETHIRES + +gameloop + jmp draw + + jsr clrscr + + ldx #0 +?1 + txa + sta $2000,x + inx + bne ?1 + +; Draw sprites by looping through the list of sprites +renderinit + lda #drawlist + sta drawptr+1 + ldy #0 + +renderloop + lda (drawptr),y + sta jsrsprite+1 + iny + lda (drawptr),y + beq renderend ; check high byte is 0 ==> end of list + sta jsrsprite+2 + iny + lda (drawptr),y ; x coord + sta PARAM0 + iny + lda (drawptr),y ; y coord + sta PARAM1 + +jsrsprite + jsr $ffff + + ; skip y coords + iny + iny + bne renderLoop + + jsr wait + inc PARAM0 + lda PARAM0 + cmp #100 + bcc checky + lda #0 + sta PARAM0 + +movementLoop: + ; Find our sprite pointer + lda spriteNum + asl + tax + lda META_BUFFERS+1,x + sta SPRITEPTR_H + lda META_BUFFERS,x + sta SPRITEPTR_L + + ; Apply X velocity to X coordinate + clc + ldy #0 + lda (SPRITEPTR_L),y + ldy #2 + adc (SPRITEPTR_L),y + bmi flipX + cmp #MAXPOSX + bpl flipX + + ; Store the new X + ldy #0 + sta (SPRITEPTR_L),y + +adjustY: + ; Apply Y velocity to Y coordinate + clc + ldy #1 + lda (SPRITEPTR_L),y + ldy #3 + adc (SPRITEPTR_L),y + bmi flipY + cmp #MAXPOSY + bpl flipY + + ; Store the new Y + ldy #1 + sta (SPRITEPTR_L),y + +continueMovementList: + dec spriteNum + bmi movementRestartList + jmp movementLoop + +flipX: + lda (SPRITEPTR_L),y + eor #$ff + inc + sta (SPRITEPTR_L),y + bra adjustY + +flipY: + lda (SPRITEPTR_L),y + eor #$ff + inc + sta (SPRITEPTR_L),y + bra continueMovementList + +movementRestartList: + lda #MAXSPRITEINDEX + sta spriteNum + jmp renderLoop + + +checky + inc PARAM1 + lda PARAM1 + cmp #100 + bcc loop + lda #0 + sta PARAM1 + beq loop + +wait + ldy #$06 ; Loop a bit +wait_outer + ldx #$ff +wait_inner + nop + nop + nop + nop + nop + nop + nop + dex + bne wait_inner + dey + bne wait_outer + rts + + +clrscr + lda #0 + sta clr1+1 + lda #$20 + sta clr1+2 +clr0 + lda #$81 + ldy #0 +clr1 + sta $ffff,y + iny + bne clr1 + inc clr1+2 + ldx clr1+2 + cpx #$40 + bcc clr1 + rts + + +drawlist + .word SPRITE1 + .word SPRITE2 + .word 0 + + +SPRITE1 + .word COLORSPRITE + .byte 80 ; X pos + .byte 116 ; Y pos + .byte -1 ; X vec + .byte -3 ; Y vec + +SPRITE2 + .word BWSPRITE + .byte 64 ; X pos + .byte 126 ; Y pos + .byte 4 ; X vec + .byte 3 ; Y vec + + + .include colorsprite.s + .include bwsprite.s + .include rowlookup.s + .include collookupbw.s + .include collookupcolor.s