mirror of
https://github.com/lscharen/iigs-game-engine.git
synced 2024-12-03 06:50:10 +00:00
Add hook for VBL callback
This commit is contained in:
parent
3eba3fa8e6
commit
4ee67fb8be
@ -175,9 +175,11 @@ OVERLAY_SOLID equ $8000 ; Overlay covers the scan line and is fu
|
||||
OVERLAY_ABOVE equ $0000 ; Overlay is drawn above scanline sprites
|
||||
OVERLAY_BELOW equ $4000 ; Overlay is drawn below scanline sprites
|
||||
|
||||
; GetAddress table IDs
|
||||
; GetAddress IDs
|
||||
scanlineHorzOffset equ $0001
|
||||
scanlineHorzOffset2 equ $0002
|
||||
tileStore equ $0003
|
||||
vblCallback equ $0004
|
||||
|
||||
; CopyPicToBG1 flags
|
||||
COPY_PIC_NORMAL equ $0000 ; Copy into BG1 buffer in "normal mode"
|
||||
|
@ -166,8 +166,14 @@ OneSecHandler mx %11
|
||||
|
||||
; This is OK, it's referenced by a long address
|
||||
VBLTASK hex 00000000
|
||||
dw 0
|
||||
TaskCnt dw 1
|
||||
hex 5AA5
|
||||
VblTaskCode mx %11
|
||||
lda #1
|
||||
stal TaskCnt ; Reset the task count
|
||||
_VblTaskPatch jml _TaskStub ; Just something to catch the interrupt
|
||||
_TaskStub rtl
|
||||
mx %00
|
||||
|
||||
; Reset the engine to a known state
|
||||
; Blitter initialization
|
||||
|
@ -192,6 +192,7 @@ DIRTY_BIT_SPRITE_ARRAY equ $0040
|
||||
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]
|
||||
tileStore equ $0003
|
||||
vblCallback equ $0004 ; User routine to be called by VBL interrupt. Set to $000000 to disconnect
|
||||
|
||||
; CopyPicToBG1 flags
|
||||
COPY_PIC_NORMAL equ $0000 ; Copy into BG1 buffer in "normal mode" treating the buffer as a 164x208 pixmap with stride of 256
|
||||
|
14
src/Master.s
14
src/Master.s
@ -2,7 +2,7 @@
|
||||
|
||||
TYP $BA ; Tool set file
|
||||
DSK Tool160
|
||||
XPL
|
||||
XPL
|
||||
|
||||
; Main toolbox interface and code
|
||||
|
||||
@ -12,41 +12,41 @@
|
||||
; 64KB Tile Memory
|
||||
|
||||
ASM static/TileData.s
|
||||
KND #$1001 ; Type and Attributes ($10=Static,$01=Data)
|
||||
KND #$1101 ; Type and Attributes ($10=Static,$01=Data)
|
||||
ALI BANK
|
||||
SNA TDATA
|
||||
|
||||
; 64KB Sprite Plane Data
|
||||
|
||||
ASM static/SprData.s
|
||||
KND #$1001 ; Type and Attributes ($11=Static+Bank Relative,$01=Data)
|
||||
KND #$1101 ; Type and Attributes ($11=Static+Bank Relative,$01=Data)
|
||||
ALI BANK
|
||||
SNA SDATA
|
||||
|
||||
; 64KB Sprite Mask Data
|
||||
|
||||
ASM static/SprMask.s
|
||||
KND #$1001 ; Type and Attributes ($11=Static+Bank Relative,$01=Data)
|
||||
KND #$1101 ; Type and Attributes ($11=Static+Bank Relative,$01=Data)
|
||||
ALI BANK
|
||||
SNA SMASK
|
||||
|
||||
; 64KB Tile Store
|
||||
|
||||
ASM static/TileStore.s
|
||||
KND #$1001 ; Type and Attributes ($11=Static+Bank Relative,$01=Data)
|
||||
KND #$1101 ; Type and Attributes ($11=Static+Bank Relative,$01=Data)
|
||||
ALI BANK
|
||||
SNA TSTORE
|
||||
|
||||
; 64KB Rotation Data Tables
|
||||
|
||||
ASM RotData.s
|
||||
KND #$1001 ; Type and Attributes ($11=Static+Bank Relative,$01=Data)
|
||||
KND #$1101 ; Type and Attributes ($11=Static+Bank Relative,$01=Data)
|
||||
ALI BANK
|
||||
SNA ROTDATA
|
||||
|
||||
; Additional code
|
||||
|
||||
; ASM FastCopies.s
|
||||
; KND #$1001 ; Type and Attributes ($11=Static+Bank Relative,$01=Data)
|
||||
; KND #$1101 ; Type and Attributes ($11=Static+Bank Relative,$01=Data)
|
||||
; ALI BANK
|
||||
; SNA FASTCPY
|
||||
|
@ -6,7 +6,7 @@
|
||||
; X = first tile
|
||||
; Y = last tile
|
||||
;
|
||||
; To copy in three tiles starting at tile 5, for example, X = 5 and Y = 9
|
||||
; To copy in four tiles starting at tile 5, for example, X = 5 and Y = 9
|
||||
_LoadTileSet
|
||||
txa
|
||||
_Mul128 ; Jump to the target location
|
||||
|
26
src/Tool.s
26
src/Tool.s
@ -887,7 +887,7 @@ _TSSetBG1Scale
|
||||
sta BG1Scaling
|
||||
_TSExit #0;#2
|
||||
|
||||
; Pointer GetAddress(tblId)
|
||||
; Pointer GetAddress(addrId)
|
||||
_TSGetAddress
|
||||
:tblId equ FirstParam+0
|
||||
:output equ FirstParam+2
|
||||
@ -919,7 +919,7 @@ _TSGetAddress
|
||||
:out
|
||||
_TSExit #0;#2
|
||||
|
||||
; SetAddress(tblId, Pointer)
|
||||
; SetAddress(addrId, Pointer)
|
||||
_TSSetAddress
|
||||
:ptr equ FirstParam+0
|
||||
:tblId equ FirstParam+4
|
||||
@ -944,7 +944,27 @@ _TSSetAddress
|
||||
lda :ptr+2,s
|
||||
sta BG1StartXMod164Tbl+2
|
||||
bra :out
|
||||
:next_2
|
||||
|
||||
:next_2 cmp #vblCallback
|
||||
bne :next_3
|
||||
|
||||
lda :ptr,s
|
||||
ora :ptr+2,s
|
||||
beq :vbl_restore
|
||||
|
||||
lda :ptr,s
|
||||
stal _VblTaskPatch+1 ; long addressing because we're patching code in the K bank
|
||||
lda :ptr+1,s
|
||||
stal _VblTaskPatch+2
|
||||
bra :out
|
||||
|
||||
:vbl_restore
|
||||
lda #_TaskStub
|
||||
stal _VblTaskPatch+1
|
||||
lda #>_TaskStub
|
||||
stal _VblTaskPatch+2
|
||||
bra :out
|
||||
:next_3
|
||||
:out
|
||||
_TSExit #0;#6
|
||||
|
||||
|
@ -4,7 +4,7 @@ _RenderTile
|
||||
lda TileStore+TS_SPRITE_FLAG,x ; any sprites on this tile?
|
||||
bne _HasSprites
|
||||
|
||||
; Probably best to rework this to just jump to the tile routine directly, event if there
|
||||
; Probably best to rework this to just jump to the tile routine directly, even if there
|
||||
; is some boilerplate code because it is useful to be able to access the data bank before
|
||||
; switching to the code field bank.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user