2022-04-20 12:43:16 +00:00
|
|
|
; Alternate entry point that takes arguments in registers instead of using a _Sprite
|
|
|
|
; record
|
|
|
|
;
|
|
|
|
; Y = VBUFF address
|
|
|
|
; X = Tile Data address
|
|
|
|
; A = Sprite Flags
|
2022-06-01 03:53:33 +00:00
|
|
|
DISP_VFLIP equ $0004 ; hard code these because they are internal values
|
|
|
|
DISP_HFLIP equ $0002
|
|
|
|
DISP_MASK equ $0018 ; Preserve the size bits
|
|
|
|
|
2022-04-20 12:43:16 +00:00
|
|
|
_DrawSpriteStamp
|
|
|
|
sty tmp1
|
|
|
|
stx tmp2
|
2022-06-01 03:53:33 +00:00
|
|
|
xba
|
2022-04-20 12:43:16 +00:00
|
|
|
and #DISP_MASK ; dispatch to all of the different orientations
|
|
|
|
sta tmp3
|
2022-02-18 18:12:32 +00:00
|
|
|
|
|
|
|
phb
|
|
|
|
pea #^tiledata ; Set the bank to the tile data
|
|
|
|
plb
|
|
|
|
|
2022-06-01 03:53:33 +00:00
|
|
|
; X = sprite ID
|
|
|
|
; Y = Tile Data
|
|
|
|
; A = VBUFF address
|
2022-02-18 18:12:32 +00:00
|
|
|
ldx tmp3
|
|
|
|
ldy tmp2
|
|
|
|
lda tmp1
|
|
|
|
jsr _DrawSprite
|
|
|
|
|
|
|
|
lda tmp3
|
2022-02-21 21:45:11 +00:00
|
|
|
ora #DISP_HFLIP
|
2022-02-18 18:12:32 +00:00
|
|
|
tax
|
|
|
|
ldy tmp2
|
|
|
|
lda tmp1
|
|
|
|
clc
|
2022-06-01 03:53:33 +00:00
|
|
|
adc #3*4
|
2022-02-18 18:12:32 +00:00
|
|
|
jsr _DrawSprite
|
|
|
|
|
|
|
|
lda tmp3
|
2022-02-21 21:45:11 +00:00
|
|
|
ora #DISP_VFLIP
|
2022-02-18 18:12:32 +00:00
|
|
|
tax
|
|
|
|
ldy tmp2
|
|
|
|
lda tmp1
|
|
|
|
clc
|
2022-06-01 03:53:33 +00:00
|
|
|
adc #6*4
|
2022-02-18 18:12:32 +00:00
|
|
|
jsr _DrawSprite
|
|
|
|
|
|
|
|
lda tmp3
|
2022-02-18 22:20:07 +00:00
|
|
|
ora #DISP_HFLIP+DISP_VFLIP
|
2022-02-18 18:12:32 +00:00
|
|
|
tax
|
|
|
|
ldy tmp2
|
|
|
|
lda tmp1
|
|
|
|
clc
|
2022-06-01 03:53:33 +00:00
|
|
|
adc #9*4
|
2022-02-18 18:12:32 +00:00
|
|
|
jsr _DrawSprite
|
|
|
|
|
|
|
|
; Restore bank
|
|
|
|
plb ; pop extra byte
|
|
|
|
plb
|
|
|
|
rts
|
|
|
|
;
|
|
|
|
; X = _Sprites array offset
|
|
|
|
_DrawSprite
|
|
|
|
jmp (draw_sprite,x)
|
|
|
|
|
2022-07-22 03:51:25 +00:00
|
|
|
draw_sprite dw draw_8x8,draw_8x8h,draw_8x8v,draw_8x8hv ; 8 wide x 8 tall
|
|
|
|
dw draw_8x16,draw_8x16h,draw_8x16v,draw_8x16hv ; 8 wide x 16 tall
|
|
|
|
dw draw_16x8,draw_16x8h,draw_16x8v,draw_16x8hv ; 16 wide by 8 tall
|
|
|
|
dw draw_16x16,draw_16x16h,draw_16x16v,draw_16x16hv ; 16 wide by 16 tall
|
2022-02-18 18:12:32 +00:00
|
|
|
|
|
|
|
dw :rtn,:rtn,:rtn,:rtn ; hidden bit is set
|
|
|
|
dw :rtn,:rtn,:rtn,:rtn
|
|
|
|
dw :rtn,:rtn,:rtn,:rtn
|
|
|
|
dw :rtn,:rtn,:rtn,:rtn
|
|
|
|
:rtn rts
|
|
|
|
|
|
|
|
draw_8x8
|
2022-07-22 03:51:25 +00:00
|
|
|
tax
|
|
|
|
jmp _DrawTile8x8
|
|
|
|
|
2022-02-18 18:12:32 +00:00
|
|
|
draw_8x8h
|
|
|
|
tax
|
2022-07-22 03:51:25 +00:00
|
|
|
clc
|
|
|
|
tya
|
|
|
|
adc #64
|
|
|
|
tay
|
2022-02-18 18:12:32 +00:00
|
|
|
jmp _DrawTile8x8
|
|
|
|
|
|
|
|
draw_8x8v
|
2022-07-22 03:51:25 +00:00
|
|
|
tax
|
|
|
|
jmp _DrawTile8x8V
|
|
|
|
|
2022-02-18 18:12:32 +00:00
|
|
|
draw_8x8hv
|
|
|
|
tax
|
2022-07-22 03:51:25 +00:00
|
|
|
clc
|
|
|
|
tya
|
|
|
|
adc #64
|
|
|
|
tay
|
2022-02-18 18:12:32 +00:00
|
|
|
jmp _DrawTile8x8V
|
|
|
|
|
|
|
|
draw_8x16
|
2022-07-22 03:51:25 +00:00
|
|
|
tax
|
|
|
|
jsr _DrawTile8x8
|
|
|
|
clc
|
|
|
|
txa
|
|
|
|
adc #{8*SPRITE_PLANE_SPAN}
|
|
|
|
tax
|
|
|
|
tya
|
|
|
|
adc #{128*32} ; 32 tiles to the next vertical one, each tile is 128 bytes
|
|
|
|
tay
|
|
|
|
jmp _DrawTile8x8
|
|
|
|
|
2022-02-18 18:12:32 +00:00
|
|
|
draw_8x16h
|
|
|
|
tax
|
2022-07-22 03:51:25 +00:00
|
|
|
clc
|
|
|
|
tya
|
|
|
|
adc #64
|
|
|
|
tay
|
2022-02-18 18:12:32 +00:00
|
|
|
jsr _DrawTile8x8
|
|
|
|
clc
|
|
|
|
txa
|
|
|
|
adc #{8*SPRITE_PLANE_SPAN}
|
|
|
|
tax
|
|
|
|
tya
|
|
|
|
adc #{128*32} ; 32 tiles to the next vertical one, each tile is 128 bytes
|
|
|
|
tay
|
|
|
|
jmp _DrawTile8x8
|
|
|
|
|
|
|
|
draw_8x16v
|
2022-07-22 03:51:25 +00:00
|
|
|
clc
|
2022-02-18 18:12:32 +00:00
|
|
|
tax
|
2022-07-22 03:51:25 +00:00
|
|
|
tya
|
|
|
|
pha
|
|
|
|
adc #{128*32}
|
|
|
|
tay
|
2022-02-18 18:12:32 +00:00
|
|
|
jsr _DrawTile8x8V
|
|
|
|
clc
|
|
|
|
txa
|
|
|
|
adc #{8*SPRITE_PLANE_SPAN}
|
|
|
|
tax
|
2022-07-22 03:51:25 +00:00
|
|
|
ply
|
|
|
|
jmp _DrawTile8x8V
|
|
|
|
|
|
|
|
draw_8x16hv
|
|
|
|
clc
|
|
|
|
tax
|
2022-02-18 18:12:32 +00:00
|
|
|
tya
|
2022-07-22 03:51:25 +00:00
|
|
|
adc #64
|
|
|
|
pha
|
2022-02-18 18:12:32 +00:00
|
|
|
adc #{128*32}
|
|
|
|
tay
|
2022-07-22 03:51:25 +00:00
|
|
|
jsr _DrawTile8x8V
|
|
|
|
clc
|
|
|
|
txa
|
|
|
|
adc #{8*SPRITE_PLANE_SPAN}
|
|
|
|
tax
|
|
|
|
ply
|
2022-02-18 18:12:32 +00:00
|
|
|
jmp _DrawTile8x8V
|
|
|
|
|
|
|
|
draw_16x8
|
|
|
|
tax
|
|
|
|
jsr _DrawTile8x8
|
|
|
|
clc
|
|
|
|
txa
|
|
|
|
adc #4
|
|
|
|
tax
|
|
|
|
tya
|
|
|
|
adc #128 ; Next tile is 128 bytes away
|
|
|
|
tay
|
|
|
|
jmp _DrawTile8x8
|
|
|
|
|
|
|
|
draw_16x8h
|
|
|
|
clc
|
|
|
|
tax
|
|
|
|
tya
|
2022-07-22 03:51:25 +00:00
|
|
|
adc #64
|
2022-02-18 18:12:32 +00:00
|
|
|
pha
|
|
|
|
adc #128
|
|
|
|
tay
|
|
|
|
jsr _DrawTile8x8
|
|
|
|
txa
|
|
|
|
adc #4
|
|
|
|
tax
|
|
|
|
ply
|
|
|
|
jmp _DrawTile8x8
|
|
|
|
|
|
|
|
draw_16x8v
|
|
|
|
tax
|
|
|
|
jsr _DrawTile8x8V
|
|
|
|
clc
|
|
|
|
txa
|
|
|
|
adc #4
|
|
|
|
tax
|
|
|
|
tya
|
|
|
|
adc #128
|
|
|
|
tay
|
|
|
|
jmp _DrawTile8x8V
|
|
|
|
|
|
|
|
draw_16x8hv
|
|
|
|
clc
|
|
|
|
tax
|
|
|
|
tya
|
2022-07-22 03:51:25 +00:00
|
|
|
adc #64
|
2022-02-18 18:12:32 +00:00
|
|
|
pha
|
|
|
|
adc #128
|
|
|
|
tay
|
|
|
|
jsr _DrawTile8x8V
|
|
|
|
txa
|
|
|
|
adc #4
|
|
|
|
tax
|
|
|
|
ply
|
|
|
|
jmp _DrawTile8x8V
|
|
|
|
|
2022-06-01 03:53:33 +00:00
|
|
|
; X = sprite ID
|
|
|
|
; Y = Tile Data
|
|
|
|
; A = VBUFF address
|
2022-02-18 18:12:32 +00:00
|
|
|
draw_16x16
|
|
|
|
clc
|
|
|
|
tax
|
|
|
|
jsr _DrawTile8x8
|
|
|
|
txa
|
|
|
|
adc #4
|
|
|
|
tax
|
|
|
|
tya
|
|
|
|
adc #128
|
|
|
|
tay
|
|
|
|
jsr _DrawTile8x8
|
|
|
|
txa
|
|
|
|
adc #{8*SPRITE_PLANE_SPAN}-4
|
|
|
|
tax
|
|
|
|
tya
|
|
|
|
adc #{128*{32-1}}
|
|
|
|
tay
|
|
|
|
jsr _DrawTile8x8
|
|
|
|
txa
|
|
|
|
adc #4
|
|
|
|
tax
|
|
|
|
tya
|
|
|
|
adc #128
|
|
|
|
tay
|
|
|
|
jmp _DrawTile8x8
|
|
|
|
|
|
|
|
draw_16x16h
|
|
|
|
clc
|
|
|
|
tax
|
|
|
|
tya
|
2022-02-21 21:45:11 +00:00
|
|
|
adc #64
|
2022-02-18 18:12:32 +00:00
|
|
|
pha
|
|
|
|
adc #128
|
|
|
|
tay
|
|
|
|
jsr _DrawTile8x8
|
|
|
|
|
|
|
|
txa
|
|
|
|
adc #4
|
|
|
|
tax
|
|
|
|
ply
|
|
|
|
jsr _DrawTile8x8
|
|
|
|
|
|
|
|
txa
|
|
|
|
adc #{8*SPRITE_PLANE_SPAN}-4
|
|
|
|
tax
|
|
|
|
tya
|
|
|
|
adc #{128*32}
|
|
|
|
pha
|
|
|
|
adc #128
|
|
|
|
tay
|
|
|
|
jsr _DrawTile8x8
|
|
|
|
|
|
|
|
txa
|
|
|
|
adc #4
|
|
|
|
tax
|
|
|
|
ply
|
|
|
|
jmp _DrawTile8x8
|
|
|
|
|
|
|
|
draw_16x16v
|
|
|
|
clc
|
|
|
|
tax
|
|
|
|
tya
|
|
|
|
pha ; store some copies
|
|
|
|
phx
|
|
|
|
pha
|
|
|
|
adc #{128*32}
|
|
|
|
tay
|
|
|
|
jsr _DrawTile8x8V
|
|
|
|
|
|
|
|
txa
|
|
|
|
adc #{8*SPRITE_PLANE_SPAN}
|
|
|
|
tax
|
|
|
|
ply
|
|
|
|
jsr _DrawTile8x8V
|
|
|
|
|
|
|
|
pla
|
|
|
|
adc #4
|
|
|
|
tax
|
|
|
|
lda 1,s
|
|
|
|
adc #{128*{32+1}}
|
|
|
|
tay
|
|
|
|
jsr _DrawTile8x8V
|
|
|
|
|
|
|
|
txa
|
|
|
|
adc #{8*SPRITE_PLANE_SPAN}
|
|
|
|
tax
|
|
|
|
pla
|
|
|
|
adc #128
|
|
|
|
tay
|
|
|
|
jmp _DrawTile8x8V
|
|
|
|
|
|
|
|
draw_16x16hv
|
|
|
|
clc
|
|
|
|
tax
|
|
|
|
tya
|
|
|
|
pha
|
2022-06-08 22:17:28 +00:00
|
|
|
adc #{128*{32+1}}+64 ; Bottom-right source to top-left
|
2022-02-18 18:12:32 +00:00
|
|
|
tay
|
|
|
|
jsr _DrawTile8x8V
|
|
|
|
|
|
|
|
txa
|
|
|
|
adc #4
|
|
|
|
tax
|
|
|
|
lda 1,s
|
2022-06-08 22:17:28 +00:00
|
|
|
adc #{128*32}+64
|
2022-02-18 18:12:32 +00:00
|
|
|
tay
|
|
|
|
jsr _DrawTile8x8V
|
|
|
|
|
|
|
|
txa
|
|
|
|
adc #{8*SPRITE_PLANE_SPAN}-4
|
|
|
|
tax
|
|
|
|
lda 1,s
|
2022-06-08 22:17:28 +00:00
|
|
|
adc #128+64
|
2022-02-18 18:12:32 +00:00
|
|
|
tay
|
|
|
|
jsr _DrawTile8x8V
|
|
|
|
|
|
|
|
txa
|
|
|
|
adc #4
|
|
|
|
tax
|
2022-06-08 22:17:28 +00:00
|
|
|
pla
|
|
|
|
adc #64
|
|
|
|
tay
|
2022-02-18 18:12:32 +00:00
|
|
|
jmp _DrawTile8x8V
|
|
|
|
|
|
|
|
|
|
|
|
; X = sprite vbuff address
|
|
|
|
; Y = tile data pointer
|
|
|
|
_DrawTile8x8
|
|
|
|
_CopyTile8x8
|
|
|
|
]line equ 0
|
|
|
|
lup 8
|
|
|
|
lda: tiledata+32+{]line*4},y
|
|
|
|
stal spritemask+{]line*SPRITE_PLANE_SPAN},x
|
|
|
|
lda: tiledata+{]line*4},y
|
|
|
|
stal spritedata+{]line*SPRITE_PLANE_SPAN},x
|
|
|
|
|
|
|
|
lda: tiledata+32+{]line*4}+2,y
|
|
|
|
stal spritemask+{]line*SPRITE_PLANE_SPAN}+2,x
|
|
|
|
lda: tiledata+{]line*4}+2,y
|
|
|
|
stal spritedata+{]line*SPRITE_PLANE_SPAN}+2,x
|
|
|
|
]line equ ]line+1
|
|
|
|
--^
|
|
|
|
rts
|
|
|
|
|
|
|
|
_DrawTile8x8V
|
|
|
|
_CopyTile8x8V
|
|
|
|
]line equ 0
|
|
|
|
lup 8
|
|
|
|
lda: tiledata+32+{{7-]line}*4},y
|
|
|
|
stal spritemask+{]line*SPRITE_PLANE_SPAN},x
|
|
|
|
lda: tiledata+{{7-]line}*4},y
|
|
|
|
stal spritedata+{]line*SPRITE_PLANE_SPAN},x
|
|
|
|
|
|
|
|
lda: tiledata+32+{{7-]line}*4}+2,y
|
|
|
|
stal spritemask+{]line*SPRITE_PLANE_SPAN}+2,x
|
|
|
|
lda: tiledata+{{7-]line}*4}+2,y
|
|
|
|
stal spritedata+{]line*SPRITE_PLANE_SPAN}+2,x
|
|
|
|
]line equ ]line+1
|
|
|
|
--^
|
|
|
|
rts
|