2022-07-05 04:55:32 +00:00
|
|
|
; Special routines for the dirty tile renderer that draws directly to the graphics screen
|
|
|
|
|
|
|
|
; A = tile address
|
|
|
|
; Y = screen address
|
2022-07-06 04:48:33 +00:00
|
|
|
SpriteUnder0Dirty
|
|
|
|
ConstTile0Dirty
|
2022-07-05 04:55:32 +00:00
|
|
|
lda TileStore+TS_SCREEN_ADDR,x ; Get the on-screen address of this tile
|
|
|
|
tax
|
|
|
|
pei DP2_BANK01_AND_TILESTORE_BANKS
|
|
|
|
plb
|
|
|
|
|
|
|
|
]line equ 0
|
|
|
|
lup 8
|
|
|
|
stz: {]line*SHR_LINE_WIDTH}+0,x
|
|
|
|
stz: {]line*SHR_LINE_WIDTH}+2,x
|
|
|
|
]line equ ]line+1
|
2022-07-06 04:48:33 +00:00
|
|
|
--^
|
2022-07-05 04:55:32 +00:00
|
|
|
|
|
|
|
plb
|
|
|
|
rts
|
|
|
|
|
2022-07-06 04:48:33 +00:00
|
|
|
; Sprite over a zero tile
|
|
|
|
OneSpriteDirtyOver0
|
|
|
|
ldy TileStore+TS_SCREEN_ADDR,x
|
|
|
|
tax
|
|
|
|
|
|
|
|
pei DP2_BANK01_AND_TILESTORE_BANKS
|
|
|
|
plb
|
|
|
|
|
|
|
|
]line equ 0
|
|
|
|
lup 8
|
|
|
|
ldal spritedata+{]line*SPRITE_PLANE_SPAN}+0,x
|
|
|
|
sta: {]line*SHR_LINE_WIDTH}+0,y
|
|
|
|
ldal spritedata+{]line*SPRITE_PLANE_SPAN}+2,x
|
|
|
|
sta: {]line*SHR_LINE_WIDTH}+2,y
|
|
|
|
]line equ ]line+1
|
|
|
|
--^
|
|
|
|
|
|
|
|
plb
|
|
|
|
rts
|
|
|
|
|
|
|
|
; Multiple sprites (copied to direct page temp space)
|
|
|
|
SpriteOver0Dirty
|
|
|
|
ldy TileStore+TS_SCREEN_ADDR,x
|
|
|
|
pei DP2_BANK01_AND_TILESTORE_BANKS
|
|
|
|
plb
|
|
|
|
|
|
|
|
]line equ 0
|
|
|
|
lup 8
|
|
|
|
lda tmp_sprite_data+{]line*4}+0
|
|
|
|
sta: {]line*SHR_LINE_WIDTH}+0,y
|
|
|
|
lda tmp_sprite_data+{]line*4}+2
|
|
|
|
sta: {]line*SHR_LINE_WIDTH}+2,y
|
|
|
|
]line equ ]line+1
|
|
|
|
--^
|
|
|
|
|
|
|
|
plb
|
|
|
|
rts
|
|
|
|
|
|
|
|
CopyTileADirty
|
2022-07-05 04:55:32 +00:00
|
|
|
ldy TileStore+TS_SCREEN_ADDR,x ; Get the on-screen address of this tile
|
|
|
|
lda TileStore+TS_TILE_ADDR,x ; load the address of this tile's data (pre-calculated)
|
|
|
|
tax
|
|
|
|
|
|
|
|
pei DP2_BANK01_AND_TILESTORE_BANKS
|
|
|
|
plb
|
|
|
|
|
|
|
|
]line equ 0
|
|
|
|
lup 8
|
|
|
|
ldal tiledata+{]line*4}+0,x
|
|
|
|
sta: {]line*SHR_LINE_WIDTH}+0,y
|
|
|
|
ldal tiledata+{]line*4}+2,x
|
|
|
|
sta: {]line*SHR_LINE_WIDTH}+2,y
|
|
|
|
]line equ ]line+1
|
2022-07-06 04:48:33 +00:00
|
|
|
--^
|
2022-07-05 04:55:32 +00:00
|
|
|
|
|
|
|
plb
|
|
|
|
rts
|
|
|
|
|
2022-07-06 04:48:33 +00:00
|
|
|
CopyTileVDirty
|
2022-07-05 04:55:32 +00:00
|
|
|
ldy TileStore+TS_SCREEN_ADDR,x ; Get the on-screen address of this tile
|
|
|
|
lda TileStore+TS_TILE_ADDR,x ; load the address of this tile's data (pre-calculated)
|
|
|
|
tax
|
|
|
|
|
|
|
|
pei DP2_BANK01_AND_TILESTORE_BANKS
|
|
|
|
plb
|
|
|
|
|
|
|
|
]src equ 7
|
|
|
|
]dest equ 0
|
|
|
|
lup 8
|
|
|
|
ldal tiledata+{]src*4}+0,x
|
|
|
|
sta: {]line*SHR_LINE_WIDTH}+0,y
|
|
|
|
ldal tiledata+{]src*4}+2,x
|
|
|
|
sta: {]line*SHR_LINE_WIDTH}+2,y
|
|
|
|
]src equ ]src-1
|
|
|
|
]dest equ ]dest+1
|
|
|
|
--^
|
2022-07-06 04:48:33 +00:00
|
|
|
|
2022-07-05 04:55:32 +00:00
|
|
|
plb
|
|
|
|
rts
|
|
|
|
|
|
|
|
; DirtySpriteLine srcLine,destLine,dpAddr,offset
|
2022-07-06 04:48:33 +00:00
|
|
|
DirtySpriteOver mac
|
|
|
|
lda: tiledata+{]1*TILE_DATA_SPAN}+]4,y
|
2022-07-05 04:55:32 +00:00
|
|
|
andl spritemask+{]2*SPRITE_PLANE_SPAN}+]4,x
|
|
|
|
oral spritedata+{]2*SPRITE_PLANE_SPAN}+]4,x
|
|
|
|
sta ]3+]4
|
|
|
|
<<<
|
|
|
|
|
2022-07-06 04:48:33 +00:00
|
|
|
DirtySpriteUnder mac
|
|
|
|
ldal spritedata+{]2*SPRITE_PLANE_SPAN}+]4,x
|
|
|
|
and tiledata+{]1*TILE_DATA_SPAN}+32+]4,y
|
|
|
|
ora tiledata+{]1*TILE_DATA_SPAN}+]4,y
|
|
|
|
sta ]3+]4
|
|
|
|
<<<
|
|
|
|
|
2022-07-05 04:55:32 +00:00
|
|
|
; Special routine for a single sprite
|
2022-07-06 04:48:33 +00:00
|
|
|
OneSpriteDirtyOverA
|
2022-07-06 19:55:27 +00:00
|
|
|
|
2022-07-06 04:48:33 +00:00
|
|
|
ldy TileStore+TS_TILE_ADDR,x
|
|
|
|
lda TileStore+TS_SCREEN_ADDR,x
|
|
|
|
ldx sprite_ptr0
|
|
|
|
|
|
|
|
phd
|
|
|
|
pei DP2_TILEDATA_AND_TILESTORE_BANKS
|
|
|
|
plb
|
|
|
|
sei
|
|
|
|
clc
|
|
|
|
tcd
|
|
|
|
|
|
|
|
_R0W1
|
|
|
|
|
|
|
|
DirtySpriteOver 0;0;$00;0
|
|
|
|
DirtySpriteOver 0;0;$00;2
|
|
|
|
DirtySpriteOver 1;1;$A0;0
|
|
|
|
DirtySpriteOver 1;1;$A0;2
|
|
|
|
|
|
|
|
tdc
|
|
|
|
adc #320
|
|
|
|
tcd
|
|
|
|
|
|
|
|
DirtySpriteOver 2;2;$00;0
|
|
|
|
DirtySpriteOver 2;2;$00;2
|
|
|
|
DirtySpriteOver 3;3;$A0;0
|
|
|
|
DirtySpriteOver 3;3;$A0;2
|
|
|
|
|
|
|
|
tdc
|
|
|
|
adc #320
|
|
|
|
tcd
|
|
|
|
|
|
|
|
DirtySpriteOver 4;4;$00;0
|
|
|
|
DirtySpriteOver 4;4;$00;2
|
|
|
|
DirtySpriteOver 5;5;$A0;0
|
|
|
|
DirtySpriteOver 5;5;$A0;2
|
|
|
|
|
|
|
|
tdc
|
|
|
|
adc #320
|
|
|
|
tcd
|
|
|
|
|
|
|
|
DirtySpriteOver 6;6;$00;0
|
|
|
|
DirtySpriteOver 6;6;$00;2
|
|
|
|
DirtySpriteOver 7;7;$A0;0
|
|
|
|
DirtySpriteOver 7;7;$A0;2
|
|
|
|
|
|
|
|
_R0W0
|
|
|
|
|
|
|
|
cli
|
|
|
|
plb
|
|
|
|
pld
|
|
|
|
rts
|
|
|
|
|
|
|
|
OneSpriteDirtyUnderA
|
2022-07-05 04:55:32 +00:00
|
|
|
ldy TileStore+TS_TILE_ADDR,x
|
|
|
|
lda TileStore+TS_SCREEN_ADDR,x
|
|
|
|
ldx sprite_ptr0
|
|
|
|
|
|
|
|
phd
|
|
|
|
pei DP2_TILEDATA_AND_TILESTORE_BANKS
|
|
|
|
plb
|
|
|
|
sei
|
|
|
|
clc
|
|
|
|
tcd
|
|
|
|
|
|
|
|
_R0W1
|
|
|
|
|
2022-07-06 04:48:33 +00:00
|
|
|
DirtySpriteUnder 0;0;$00;0
|
|
|
|
DirtySpriteUnder 0;0;$00;2
|
|
|
|
DirtySpriteUnder 1;1;$A0;0
|
|
|
|
DirtySpriteUnder 1;1;$A0;2
|
2022-07-05 04:55:32 +00:00
|
|
|
|
|
|
|
tdc
|
|
|
|
adc #320
|
|
|
|
tcd
|
|
|
|
|
2022-07-06 04:48:33 +00:00
|
|
|
DirtySpriteUnder 2;2;$00;0
|
|
|
|
DirtySpriteUnder 2;2;$00;2
|
|
|
|
DirtySpriteUnder 3;3;$A0;0
|
|
|
|
DirtySpriteUnder 3;3;$A0;2
|
2022-07-05 04:55:32 +00:00
|
|
|
|
|
|
|
tdc
|
|
|
|
adc #320
|
|
|
|
tcd
|
|
|
|
|
2022-07-06 04:48:33 +00:00
|
|
|
DirtySpriteUnder 4;4;$00;0
|
|
|
|
DirtySpriteUnder 4;4;$00;2
|
|
|
|
DirtySpriteUnder 5;5;$A0;0
|
|
|
|
DirtySpriteUnder 5;5;$A0;2
|
2022-07-05 04:55:32 +00:00
|
|
|
|
|
|
|
tdc
|
|
|
|
adc #320
|
|
|
|
tcd
|
|
|
|
|
2022-07-06 04:48:33 +00:00
|
|
|
DirtySpriteUnder 6;6;$00;0
|
|
|
|
DirtySpriteUnder 6;6;$00;2
|
|
|
|
DirtySpriteOver 7;7;$A0;0
|
|
|
|
DirtySpriteUnder 7;7;$A0;2
|
2022-07-05 04:55:32 +00:00
|
|
|
|
|
|
|
_R0W0
|
|
|
|
|
|
|
|
cli
|
|
|
|
plb
|
|
|
|
pld
|
|
|
|
rts
|
|
|
|
|
2022-07-06 04:48:33 +00:00
|
|
|
OneSpriteDirtyOverV
|
2022-07-05 04:55:32 +00:00
|
|
|
ldy TileStore+TS_TILE_ADDR,x
|
|
|
|
lda TileStore+TS_SCREEN_ADDR,x
|
|
|
|
ldx sprite_ptr0
|
|
|
|
|
|
|
|
phd
|
|
|
|
pei DP2_TILEDATA_AND_TILESTORE_BANKS
|
|
|
|
plb
|
|
|
|
sei
|
|
|
|
clc
|
|
|
|
tcd
|
|
|
|
|
|
|
|
_R0W1
|
|
|
|
|
2022-07-06 04:48:33 +00:00
|
|
|
DirtySpriteOver 7;0;$00;0
|
|
|
|
DirtySpriteOver 7;0;$00;2
|
|
|
|
DirtySpriteOver 6;1;$A0;0
|
|
|
|
DirtySpriteOver 6;1;$A0;2
|
2022-07-05 04:55:32 +00:00
|
|
|
|
|
|
|
tdc
|
|
|
|
adc #320
|
|
|
|
tcd
|
|
|
|
|
2022-07-06 04:48:33 +00:00
|
|
|
DirtySpriteOver 5;2;$00;0
|
|
|
|
DirtySpriteOver 5;2;$00;2
|
|
|
|
DirtySpriteOver 4;3;$A0;0
|
|
|
|
DirtySpriteOver 4;3;$A0;2
|
2022-07-05 04:55:32 +00:00
|
|
|
|
|
|
|
tdc
|
|
|
|
adc #320
|
|
|
|
tcd
|
|
|
|
|
2022-07-06 04:48:33 +00:00
|
|
|
DirtySpriteOver 3;4;$00;0
|
|
|
|
DirtySpriteOver 3;4;$00;2
|
|
|
|
DirtySpriteOver 2;5;$A0;0
|
|
|
|
DirtySpriteOver 2;5;$A0;2
|
2022-07-05 04:55:32 +00:00
|
|
|
|
|
|
|
tdc
|
|
|
|
adc #320
|
|
|
|
tcd
|
|
|
|
|
2022-07-06 04:48:33 +00:00
|
|
|
DirtySpriteOver 1;6;$00;0
|
|
|
|
DirtySpriteOver 1;6;$00;2
|
|
|
|
DirtySpriteOver 0;7;$A0;0
|
|
|
|
DirtySpriteOver 0;7;$A0;2
|
|
|
|
|
|
|
|
_R0W0
|
|
|
|
|
|
|
|
cli
|
|
|
|
plb
|
|
|
|
pld
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
|
|
OneSpriteDirtyUnderV
|
|
|
|
ldy TileStore+TS_TILE_ADDR,x
|
|
|
|
lda TileStore+TS_SCREEN_ADDR,x
|
|
|
|
ldx sprite_ptr0
|
|
|
|
|
|
|
|
phd
|
|
|
|
pei DP2_TILEDATA_AND_TILESTORE_BANKS
|
|
|
|
plb
|
|
|
|
sei
|
|
|
|
clc
|
|
|
|
tcd
|
|
|
|
|
|
|
|
_R0W1
|
|
|
|
|
|
|
|
DirtySpriteUnder 7;0;$00;0
|
|
|
|
DirtySpriteUnder 7;0;$00;2
|
|
|
|
DirtySpriteUnder 6;1;$A0;0
|
|
|
|
DirtySpriteUnder 6;1;$A0;2
|
|
|
|
|
|
|
|
tdc
|
|
|
|
adc #320
|
|
|
|
tcd
|
|
|
|
|
|
|
|
DirtySpriteUnder 5;2;$00;0
|
|
|
|
DirtySpriteUnder 5;2;$00;2
|
|
|
|
DirtySpriteUnder 4;3;$A0;0
|
|
|
|
DirtySpriteUnder 4;3;$A0;2
|
|
|
|
|
|
|
|
tdc
|
|
|
|
adc #320
|
|
|
|
tcd
|
|
|
|
|
|
|
|
DirtySpriteUnder 3;4;$00;0
|
|
|
|
DirtySpriteUnder 3;4;$00;2
|
|
|
|
DirtySpriteUnder 2;5;$A0;0
|
|
|
|
DirtySpriteUnder 2;5;$A0;2
|
|
|
|
|
|
|
|
tdc
|
|
|
|
adc #320
|
|
|
|
tcd
|
|
|
|
|
|
|
|
DirtySpriteUnder 1;6;$00;0
|
|
|
|
DirtySpriteUnder 1;6;$00;2
|
|
|
|
DirtySpriteUnder 0;7;$A0;0
|
|
|
|
DirtySpriteUnder 0;7;$A0;2
|
2022-07-05 04:55:32 +00:00
|
|
|
|
|
|
|
_R0W0
|
|
|
|
|
|
|
|
cli
|
|
|
|
plb
|
|
|
|
pld
|
|
|
|
rts
|
|
|
|
|
|
|
|
; Generic routine for multiple sprites -- expect sprites to be in tmp_sprite_data and tmp_sprite_mask
|
2022-07-06 04:48:33 +00:00
|
|
|
SpriteOverADirty
|
2022-07-05 04:55:32 +00:00
|
|
|
ldy TileStore+TS_SCREEN_ADDR,x
|
|
|
|
lda TileStore+TS_TILE_ADDR,x
|
|
|
|
tax
|
|
|
|
|
|
|
|
pei DP2_TILEDATA_AND_TILESTORE_BANKS
|
|
|
|
plb
|
|
|
|
|
|
|
|
]line equ 0
|
|
|
|
lup 8
|
|
|
|
ldal tiledata+{]line*TILE_DATA_SPAN}+0,x
|
2022-07-06 04:48:33 +00:00
|
|
|
and tmp_sprite_mask+{]line*4}+0
|
|
|
|
ora tmp_sprite_data+{]line*4}+0
|
2022-07-05 04:55:32 +00:00
|
|
|
sta: {]line*SHR_LINE_WIDTH}+0,y
|
|
|
|
|
|
|
|
ldal tiledata+{]line*TILE_DATA_SPAN}+2,x
|
2022-07-06 04:48:33 +00:00
|
|
|
and tmp_sprite_mask+{]line*4}+2
|
|
|
|
ora tmp_sprite_data+{]line*4}+2
|
2022-07-05 04:55:32 +00:00
|
|
|
sta: {]line*SHR_LINE_WIDTH}+2,y
|
|
|
|
]line equ ]line+1
|
|
|
|
--^
|
|
|
|
|
|
|
|
plb
|
|
|
|
rts
|
|
|
|
|
2022-07-06 04:48:33 +00:00
|
|
|
SpriteUnderADirty
|
|
|
|
ldy TileStore+TS_SCREEN_ADDR,x
|
|
|
|
lda TileStore+TS_TILE_ADDR,x
|
|
|
|
tax
|
|
|
|
|
|
|
|
pei DP2_TILEDATA_AND_TILESTORE_BANKS
|
|
|
|
plb
|
|
|
|
|
|
|
|
]line equ 0
|
|
|
|
lup 8
|
|
|
|
lda tmp_sprite_data+{]line*4}+0
|
|
|
|
andl tiledata+{]line*TILE_DATA_SPAN}+32,x
|
|
|
|
oral tiledata+{]line*TILE_DATA_SPAN}+0,x
|
|
|
|
sta: {]line*SHR_LINE_WIDTH}+0,y
|
|
|
|
|
|
|
|
lda tmp_sprite_data+{]line*4}+2
|
|
|
|
andl tiledata+{]line*TILE_DATA_SPAN}+32+2,x
|
|
|
|
oral tiledata+{]line*TILE_DATA_SPAN}+2,x
|
|
|
|
sta: {]line*SHR_LINE_WIDTH}+2,y
|
|
|
|
]line equ ]line+1
|
|
|
|
--^
|
|
|
|
|
|
|
|
plb
|
|
|
|
rts
|
|
|
|
|
|
|
|
SpriteOverVDirty
|
2022-07-05 04:55:32 +00:00
|
|
|
ldy TileStore+TS_SCREEN_ADDR,x
|
|
|
|
lda TileStore+TS_TILE_ADDR,x
|
|
|
|
tax
|
|
|
|
|
|
|
|
pei DP2_TILEDATA_AND_TILESTORE_BANKS
|
|
|
|
plb
|
|
|
|
|
|
|
|
]src equ 7
|
|
|
|
]dest equ 0
|
|
|
|
lup 8
|
|
|
|
ldal tiledata+{]src*TILE_DATA_SPAN}+0,x
|
2022-07-06 04:48:33 +00:00
|
|
|
and tmp_sprite_mask+{]dest*4}+0
|
|
|
|
ora tmp_sprite_data+{]dest*4}+0
|
2022-07-05 04:55:32 +00:00
|
|
|
sta: {]dest*SHR_LINE_WIDTH}+0,y
|
|
|
|
|
|
|
|
ldal tiledata+{]src*TILE_DATA_SPAN}+2,x
|
2022-07-06 04:48:33 +00:00
|
|
|
and tmp_sprite_mask+{]dest*4}+2
|
|
|
|
ora tmp_sprite_data+{]dest*4}+2
|
|
|
|
sta: {]dest*SHR_LINE_WIDTH}+2,y
|
|
|
|
]src equ ]src-1
|
|
|
|
]dest equ ]dest+1
|
|
|
|
--^
|
|
|
|
|
|
|
|
plb
|
|
|
|
rts
|
|
|
|
|
|
|
|
SpriteUnderVDirty
|
|
|
|
ldy TileStore+TS_SCREEN_ADDR,x
|
|
|
|
lda TileStore+TS_TILE_ADDR,x
|
|
|
|
tax
|
|
|
|
|
|
|
|
pei DP2_TILEDATA_AND_TILESTORE_BANKS
|
|
|
|
plb
|
|
|
|
|
|
|
|
]src equ 7
|
|
|
|
]dest equ 0
|
|
|
|
lup 8
|
|
|
|
|
|
|
|
lda tmp_sprite_data+{]dest*4}+0
|
|
|
|
andl tiledata+{]src*TILE_DATA_SPAN}+32,x
|
|
|
|
oral tiledata+{]src*TILE_DATA_SPAN}+0,x
|
|
|
|
sta: {]dest*SHR_LINE_WIDTH}+0,y
|
|
|
|
|
|
|
|
lda tmp_sprite_data+{]dest*4}+2
|
|
|
|
andl tiledata+{]src*TILE_DATA_SPAN}+32+2,x
|
|
|
|
oral tiledata+{]src*TILE_DATA_SPAN}+2,x
|
2022-07-05 04:55:32 +00:00
|
|
|
sta: {]dest*SHR_LINE_WIDTH}+2,y
|
2022-07-06 04:48:33 +00:00
|
|
|
|
2022-07-05 04:55:32 +00:00
|
|
|
]src equ ]src-1
|
|
|
|
]dest equ ]dest+1
|
|
|
|
--^
|
|
|
|
|
|
|
|
plb
|
|
|
|
rts
|