Implement full per-scanline offset support for BG1
This commit is contained in:
parent
7dd690ac04
commit
d31bd30649
|
@ -174,6 +174,7 @@ OVERLAY_BELOW equ $4000 ; Overlay is drawn below scanline sprite
|
||||||
|
|
||||||
; GetAddress table IDs
|
; GetAddress table IDs
|
||||||
scanlineHorzOffset equ $0001
|
scanlineHorzOffset equ $0001
|
||||||
|
scanlineHorzOffset2 equ $0002
|
||||||
|
|
||||||
; Tile constants
|
; Tile constants
|
||||||
; TILE_RESERVED_BIT equ $8000
|
; TILE_RESERVED_BIT equ $8000
|
||||||
|
|
|
@ -195,7 +195,8 @@ DIRTY_BIT_BG1_REFRESH equ $0020
|
||||||
DIRTY_BIT_SPRITE_ARRAY equ $0040
|
DIRTY_BIT_SPRITE_ARRAY equ $0040
|
||||||
|
|
||||||
; GetAddress table IDs
|
; GetAddress table IDs
|
||||||
scanlineHorzOffset equ $0001 ; table of 416 words, a double-array of scanline offset values. Must be 0, 163
|
scanlineHorzOffset equ $0001 ; Table of 416 words, a double-array of scanline offset values. Values must be in range [0, 163]
|
||||||
|
scanlineHorzOffset2 equ $0002 ; Table of 416 words, a double-array of scanline offset values. Values must be in range [0, 163]
|
||||||
|
|
||||||
; Script definition
|
; Script definition
|
||||||
YIELD equ $8000
|
YIELD equ $8000
|
||||||
|
@ -297,6 +298,7 @@ _DirectListBottom EXT
|
||||||
|
|
||||||
StartXMod164Tbl EXT
|
StartXMod164Tbl EXT
|
||||||
LastOffsetTbl EXT
|
LastOffsetTbl EXT
|
||||||
|
BG1StartXMod164Tbl EXT
|
||||||
|
|
||||||
; Tool error codes
|
; Tool error codes
|
||||||
NO_TIMERS_AVAILABLE equ 10
|
NO_TIMERS_AVAILABLE equ 10
|
||||||
|
|
26
src/Tool.s
26
src/Tool.s
|
@ -886,13 +886,23 @@ _TSGetAddress
|
||||||
|
|
||||||
lda :tblId,s
|
lda :tblId,s
|
||||||
cmp #scanlineHorzOffset
|
cmp #scanlineHorzOffset
|
||||||
bne :out
|
bne :next_1
|
||||||
|
|
||||||
lda StartXMod164Tbl
|
lda StartXMod164Tbl
|
||||||
sta :output,s
|
sta :output,s
|
||||||
lda StartXMod164Tbl+2
|
lda StartXMod164Tbl+2
|
||||||
sta :output+2,s
|
sta :output+2,s
|
||||||
|
bra :out
|
||||||
|
|
||||||
|
:next_1 cmp #scanlineHorzOffset2
|
||||||
|
bne :next_2
|
||||||
|
|
||||||
|
lda BG1StartXMod164Tbl
|
||||||
|
sta :output,s
|
||||||
|
lda BG1StartXMod164Tbl+2
|
||||||
|
sta :output+2,s
|
||||||
|
bra :out
|
||||||
|
:next_2
|
||||||
:out
|
:out
|
||||||
_TSExit #0;#2
|
_TSExit #0;#2
|
||||||
|
|
||||||
|
@ -904,12 +914,24 @@ _TSSetAddress
|
||||||
_TSEntry
|
_TSEntry
|
||||||
lda :tblId,s
|
lda :tblId,s
|
||||||
cmp #scanlineHorzOffset
|
cmp #scanlineHorzOffset
|
||||||
bne :out
|
bne :next_1
|
||||||
|
|
||||||
lda :ptr,s
|
lda :ptr,s
|
||||||
sta StartXMod164Tbl
|
sta StartXMod164Tbl
|
||||||
lda :ptr+2,s
|
lda :ptr+2,s
|
||||||
sta StartXMod164Tbl+2
|
sta StartXMod164Tbl+2
|
||||||
|
bra :out
|
||||||
|
|
||||||
|
:next_1
|
||||||
|
cmp #scanlineHorzOffset2
|
||||||
|
bne :next_2
|
||||||
|
|
||||||
|
lda :ptr,s
|
||||||
|
sta BG1StartXMod164Tbl
|
||||||
|
lda :ptr+2,s
|
||||||
|
sta BG1StartXMod164Tbl+2
|
||||||
|
bra :out
|
||||||
|
:next_2
|
||||||
:out
|
:out
|
||||||
_TSExit #0;#6
|
_TSExit #0;#6
|
||||||
|
|
||||||
|
|
|
@ -388,13 +388,17 @@ BG1YOffsetTable ENT
|
||||||
; dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
; dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
--^
|
--^
|
||||||
|
|
||||||
; Per-scanline offsets for BG0
|
; Pointer to per-scanline offsets for BG0
|
||||||
StartXMod164Tbl ENT
|
StartXMod164Tbl ENT
|
||||||
dw 0,0
|
dw 0,0
|
||||||
|
|
||||||
LastOffsetTbl ENT
|
LastOffsetTbl ENT
|
||||||
ds 416
|
ds 416
|
||||||
|
|
||||||
|
; Pointer to per-scanline offsets for BG1
|
||||||
|
BG1StartXMod164Tbl ENT
|
||||||
|
dw 0,0
|
||||||
|
|
||||||
; Other Toolset variables
|
; Other Toolset variables
|
||||||
OneSecondCounter ENT
|
OneSecondCounter ENT
|
||||||
dw 0
|
dw 0
|
||||||
|
|
Loading…
Reference in New Issue