mirror of
https://github.com/lscharen/iigs-game-engine.git
synced 2025-02-05 14:31:13 +00:00
Start working to bring sprites rendering back into the pipeline
This commit is contained in:
parent
d27b10b6fd
commit
9da3616c1d
@ -4,38 +4,53 @@
|
||||
GTEToolNum equ $A0
|
||||
|
||||
_GTEBootInit MAC
|
||||
UserTool $100+GTEToolNum
|
||||
UserTool $0100+GTEToolNum
|
||||
<<<
|
||||
_GTEStartUp MAC
|
||||
UserTool $200+GTEToolNum
|
||||
UserTool $0200+GTEToolNum
|
||||
<<<
|
||||
_GTEShutDown MAC
|
||||
UserTool $300+GTEToolNum
|
||||
UserTool $0300+GTEToolNum
|
||||
<<<
|
||||
_GTEVersion MAC
|
||||
UserTool $400+GTEToolNum
|
||||
UserTool $0400+GTEToolNum
|
||||
<<<
|
||||
_GTEReset MAC
|
||||
UserTool $500+GTEToolNum
|
||||
UserTool $0500+GTEToolNum
|
||||
<<<
|
||||
_GTEStatus MAC
|
||||
UserTool $600+GTEToolNum
|
||||
UserTool $0600+GTEToolNum
|
||||
<<<
|
||||
_GTEReadControl MAC
|
||||
UserTool $900+GTEToolNum
|
||||
UserTool $0900+GTEToolNum
|
||||
<<<
|
||||
_GTESetScreenMode MAC
|
||||
UserTool $A00+GTEToolNum
|
||||
UserTool $0A00+GTEToolNum
|
||||
<<<
|
||||
_GTESetTile MAC
|
||||
UserTool $B00+GTEToolNum
|
||||
UserTool $0B00+GTEToolNum
|
||||
<<<
|
||||
_GTESetBG0Origin MAC
|
||||
UserTool $C00+GTEToolNum
|
||||
UserTool $0C00+GTEToolNum
|
||||
<<<
|
||||
_GTERender MAC
|
||||
UserTool $D00+GTEToolNum
|
||||
UserTool $0D00+GTEToolNum
|
||||
<<<
|
||||
_GTELoadTileSet MAC
|
||||
UserTool $E00+GTEToolNum
|
||||
UserTool $0E00+GTEToolNum
|
||||
<<<
|
||||
_GTECreateSpriteStamp MAC
|
||||
UserTool $0F00+GTEToolNum
|
||||
<<<
|
||||
_GTEAddSprite MAC
|
||||
UserTool $1000+GTEToolNum
|
||||
<<<
|
||||
_GTEMoveSprite MAC
|
||||
UserTool $1100+GTEToolNum
|
||||
<<<
|
||||
_GTEUpdateSprite MAC
|
||||
UserTool $1200+GTEToolNum
|
||||
<<<
|
||||
_GTERemoveSprite MAC
|
||||
UserTool $1300+GTEToolNum
|
||||
<<<
|
@ -238,3 +238,5 @@ Timers EXT
|
||||
DefaultPalette EXT
|
||||
ScreenModeWidth EXT
|
||||
ScreenModeHeight EXT
|
||||
_SpriteBits EXT
|
||||
_SpriteBitsNot EXT
|
||||
|
@ -97,6 +97,7 @@ InitMemory lda EngineMode
|
||||
sta BTableHigh+]step+{208*2},x ; 16 lines per bank
|
||||
]step equ ]step+2
|
||||
--^
|
||||
|
||||
lda BlitBuff,y
|
||||
sta BTableLow,x
|
||||
sta BTableLow+{208*2},x
|
||||
@ -110,10 +111,12 @@ InitMemory lda EngineMode
|
||||
--^
|
||||
|
||||
txa
|
||||
clc
|
||||
adc #16*2 ; move to the next chunk of BTableHigh and BTableLow
|
||||
tax
|
||||
|
||||
tya
|
||||
clc
|
||||
adc #4 ; move to the next bank address
|
||||
tay
|
||||
cmp #4*13
|
||||
@ -153,9 +156,6 @@ InitMemory lda EngineMode
|
||||
:exit
|
||||
rts
|
||||
|
||||
;Buff00 ds 4
|
||||
;Buff01 ds 4
|
||||
|
||||
; Bank allocator (for one full, fixed bank of memory. Can be immediately deferenced)
|
||||
|
||||
AllocOneBank PushLong #0
|
||||
|
@ -74,7 +74,7 @@ _Render
|
||||
; ldy ScreenHeight
|
||||
; jsr _BltSCB
|
||||
|
||||
lda StartY ; Restore the fields back to their original state
|
||||
lda StartYMod208 ; Restore the fields back to their original state
|
||||
ldx ScreenHeight
|
||||
jsr _RestoreBG0Opcodes
|
||||
|
||||
|
@ -117,7 +117,6 @@ _AddSprite
|
||||
sta _Sprites+SPRITE_X,x ; X coordinate
|
||||
|
||||
jsr _PrecalcAllSpriteInfo ; Cache sprite property values (simple stuff)
|
||||
; jsr _DrawSpriteSheet ; Render the sprite into internal space
|
||||
|
||||
; Mark the dirty bit to indicate that the active sprite list needs to be rebuilt in the next
|
||||
; render call
|
||||
@ -535,7 +534,7 @@ _DoPhase2
|
||||
; can be drawn to the screen. This routine is also responsible for setting the specific
|
||||
; VBUFF address for each sprite's tile sheet position
|
||||
|
||||
jmp _MarkDirtySprite
|
||||
; jmp _MarkDirtySprite
|
||||
:out
|
||||
rts
|
||||
|
||||
@ -867,7 +866,7 @@ _RemoveSprite
|
||||
; Update the sprite's flags. We do not allow the size of a sprite to be changed. That requires
|
||||
; the sprite to be removed and re-added.
|
||||
;
|
||||
; A = Sprite ID
|
||||
; A = Sprite slot
|
||||
; X = New Sprite Flags
|
||||
; Y = New Sprite Stamp Address
|
||||
_UpdateSprite
|
||||
|
59
src/Tool.s
59
src/Tool.s
@ -51,6 +51,7 @@ _CallTable
|
||||
adrl _TSSetBG0Origin-1
|
||||
adrl _TSRender-1
|
||||
adrl _TSLoadTileSet-1
|
||||
adrl _TSCreateSpriteStamp-1
|
||||
_CTEnd
|
||||
|
||||
; Helper function to set the data back to the toolset default
|
||||
@ -222,6 +223,8 @@ xPos equ FirstParam+2
|
||||
lda xPos,s
|
||||
jsr _SetBG0XPos
|
||||
lda yPos,s
|
||||
bpl *+5
|
||||
lda #0
|
||||
jsr _SetBG0YPos
|
||||
|
||||
_TSExit #0;#4
|
||||
@ -245,6 +248,60 @@ TSPtr equ FirstParam
|
||||
|
||||
_TSExit #0;#4
|
||||
|
||||
; CreateSpriteStamp(spriteId: Word, vbuffAddr: Word)
|
||||
_TSCreateSpriteStamp
|
||||
:vbuff equ FirstParam
|
||||
:spriteId equ FirstParam+2
|
||||
|
||||
_TSEntry
|
||||
|
||||
lda :vbuff,s
|
||||
tay
|
||||
lda :spriteId,s
|
||||
jsr _CreateSpriteStamp
|
||||
|
||||
_TSExit #0;#4
|
||||
|
||||
_TSAddSprite
|
||||
:spriteSlot equ FirstParam+0
|
||||
:spriteY equ FirstParam+2
|
||||
:spriteX equ FirstParam+4
|
||||
:spriteId equ FirstParam+6
|
||||
|
||||
_TSEntry
|
||||
|
||||
lda :spriteY,s
|
||||
and #$00FF
|
||||
xba
|
||||
sta :spriteY,s
|
||||
lda :spriteX,s
|
||||
and #$00FF
|
||||
ora :spriteY,s
|
||||
tay
|
||||
|
||||
lda :spriteSlot,s
|
||||
tax
|
||||
|
||||
lda :spriteId,s
|
||||
jsr _AddSprite
|
||||
|
||||
_TSExit #0;#8
|
||||
|
||||
_TSUpdateSprite
|
||||
:vbuff equ FirstParam+0
|
||||
:spriteFlags equ FirstParam+2
|
||||
:spriteSlot equ FirstParam+4
|
||||
_TSEntry
|
||||
|
||||
lda :spriteFlags,s
|
||||
tax
|
||||
lda :vbuff,s
|
||||
tay
|
||||
lda :spriteSlot,s
|
||||
jsr _UpdateSprite
|
||||
|
||||
_TSExit #0;#6
|
||||
|
||||
; Insert the GTE code
|
||||
|
||||
put Math.s
|
||||
@ -253,6 +310,8 @@ TSPtr equ FirstParam
|
||||
put Timer.s
|
||||
put Graphics.s
|
||||
put Tiles.s
|
||||
put Sprite.s
|
||||
put SpriteRender.s
|
||||
put Render.s
|
||||
put tiles/DirtyTileQueue.s
|
||||
put tiles/FastRenderer.s
|
||||
|
@ -51,6 +51,11 @@ _BltRange
|
||||
lda #FULL_RETURN ; this is the offset of the return code
|
||||
sta [:exit_ptr],y ; patch out the low byte of the JMP/JML
|
||||
|
||||
; lda StartYMod208
|
||||
; cmp #63
|
||||
; bne *+4
|
||||
; brk $40
|
||||
|
||||
; Now we need to set up the Bank, Stack Pointer and Direct Page registers for calling into
|
||||
; the code field
|
||||
|
||||
|
@ -28,10 +28,10 @@ _BltSCB
|
||||
|
||||
lda SCBArrayPtr+2
|
||||
bpl :bind_to_bg0
|
||||
lda BG1StartY
|
||||
lda BG1StartYMod208
|
||||
bra :bind_to_bg1
|
||||
:bind_to_bg0
|
||||
lda StartY
|
||||
lda StartYMod208
|
||||
:bind_to_bg1
|
||||
clc
|
||||
adc SCBArrayPtr
|
||||
|
@ -91,8 +91,9 @@ _ApplyBG0YPos
|
||||
sta :lines_left
|
||||
|
||||
jne :loop
|
||||
|
||||
plb
|
||||
|
||||
:out
|
||||
rts
|
||||
|
||||
; Unrolled copy routine to move RTable intries into STK_ADDR position.
|
||||
@ -145,7 +146,7 @@ CopyRTableToStkAddr
|
||||
:x14 ldal RTable+26,x
|
||||
sta STK_ADDR+$D000,y
|
||||
:x13 ldal RTable+24,x
|
||||
sta: STK_ADDR+$C000,y
|
||||
sta STK_ADDR+$C000,y
|
||||
:x12 ldal RTable+22,x
|
||||
sta STK_ADDR+$B000,y
|
||||
:x11 ldal RTable+20,x
|
||||
@ -153,7 +154,7 @@ CopyRTableToStkAddr
|
||||
:x10 ldal RTable+18,x
|
||||
sta STK_ADDR+$9000,y
|
||||
:x09 ldal RTable+16,x
|
||||
sta: STK_ADDR+$8000,y
|
||||
sta STK_ADDR+$8000,y
|
||||
:x08 ldal RTable+14,x
|
||||
sta STK_ADDR+$7000,y
|
||||
:x07 ldal RTable+12,x
|
||||
@ -161,7 +162,7 @@ CopyRTableToStkAddr
|
||||
:x06 ldal RTable+10,x
|
||||
sta STK_ADDR+$5000,y
|
||||
:x05 ldal RTable+08,x
|
||||
sta: STK_ADDR+$4000,y
|
||||
sta STK_ADDR+$4000,y
|
||||
:x04 ldal RTable+06,x
|
||||
sta STK_ADDR+$3000,y
|
||||
:x03 ldal RTable+04,x
|
||||
|
@ -308,7 +308,6 @@ RTable ENT
|
||||
|
||||
; Array of addresses for the banks that hold the blitter.
|
||||
BlitBuff ENT
|
||||
dw $5a5a
|
||||
ds 4*13
|
||||
|
||||
; The blitter table (BTable) is a double-length table that holds the full 4-byte address of each
|
||||
@ -374,5 +373,11 @@ ScreenModeWidth ENT
|
||||
ScreenModeHeight ENT
|
||||
dw 200,192,200,176,160,160,160,128,144,192,102,1
|
||||
|
||||
; Convert sprite index to a bit position
|
||||
_SpriteBits ENT
|
||||
dw $0001,$0002,$0004,$0008,$0010,$0020,$0040,$0080,$0100,$0200,$0400,$0800,$1000,$2000,$4000,$8000
|
||||
_SpriteBitsNot ENT
|
||||
dw $FFFE,$FFFD,$FFFB,$FFF7,$FFEF,$FFDF,$FFBF,$FF7F,$FEFF,$FDFF,$FBFF,$F7FF,$EFFF,$DFFF,$BFFF,$7FFF
|
||||
|
||||
blt_return
|
||||
stk_save
|
Loading…
x
Reference in New Issue
Block a user