mirror of
https://github.com/robmcmullen/asmgen.git
synced 2024-12-21 23:29:31 +00:00
WIP for multiple sprites
This commit is contained in:
parent
0b39577fac
commit
4e2fb36ae2
29
Makefile.rob
29
Makefile.rob
@ -1,20 +1,37 @@
|
|||||||
COLORSPRITE = moldy_burger.png
|
COLORSPRITE = moldy_burger.png
|
||||||
#COLORSPRITE = boxw_mag.png
|
#COLORSPRITE = boxw_mag.png
|
||||||
#COLORSPRITE = apple.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)
|
rowlookup.s: HiSprite.py
|
||||||
python HiSprite.py -a mac65 -p 6502 -s hgrbw $(BWSPRITE) -n bwsprite -t -c -r > bwsprite.s
|
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
|
atasm -obwtest.xex bwtest.s -Lbwtest.var -gbwtest.lst
|
||||||
atrcopy bwtest.dsk boot -b bwtest.xex --brun 6000 -f
|
atrcopy bwtest.dsk boot -b bwtest.xex --brun 6000 -f
|
||||||
|
|
||||||
colortest.dsk: HiSprite.py colortest.s $(COLORSPRITE)
|
colortest.dsk: HiSprite.py colortest.s bwsprite.s
|
||||||
python HiSprite.py -a mac65 -p 6502 -s hgrcolor $(COLORSPRITE) -n colorsprite -t -c -r -m > colorsprite.s
|
|
||||||
atasm -ocolortest.xex colortest.s -Lcolortest.var -gcolortest.lst
|
atasm -ocolortest.xex colortest.s -Lcolortest.var -gcolortest.lst
|
||||||
atrcopy colortest.dsk boot -b colortest.xex --brun 6000 -f
|
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:
|
clean:
|
||||||
rm -f bwtest.dsk bwtest.xex bwtest.var bwtest.lst
|
rm -f bwtest.dsk bwtest.xex bwtest.var bwtest.lst
|
||||||
rm -f colortest.dsk colortest.xex colortest.var colortest.lst
|
rm -f colortest.dsk colortest.xex colortest.var colortest.lst
|
||||||
|
BIN
apple-sprite9x11.png
Normal file
BIN
apple-sprite9x11.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 207 B |
2
bwtest.s
2
bwtest.s
@ -72,3 +72,5 @@ clr1
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
.include bwsprite.s
|
.include bwsprite.s
|
||||||
|
.include rowlookup.s
|
||||||
|
.include collookupbw.s
|
||||||
|
223
multitest.s
Normal file
223
multitest.s
Normal file
@ -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
|
||||||
|
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
|
Loading…
Reference in New Issue
Block a user