mirror of
https://github.com/lscharen/iigs-game-engine.git
synced 2025-02-28 13:29:18 +00:00
Added sprite and background disable control bits
This commit is contained in:
parent
cc36fcc0f8
commit
aeb620fb7b
@ -138,6 +138,12 @@ _GTESetAddress MAC
|
|||||||
_GTEUpdateOverlay MAC
|
_GTEUpdateOverlay MAC
|
||||||
UserTool $2F00+GTEToolNum
|
UserTool $2F00+GTEToolNum
|
||||||
<<<
|
<<<
|
||||||
|
_GTEEnableSprites MAC
|
||||||
|
UserTool $3000+GTEToolNum
|
||||||
|
<<<
|
||||||
|
_GTEEnableBackground MAC
|
||||||
|
UserTool $3100+GTEToolNum
|
||||||
|
<<<
|
||||||
|
|
||||||
; EngineMode definitions
|
; EngineMode definitions
|
||||||
; Script definition
|
; Script definition
|
||||||
|
@ -218,8 +218,9 @@ EngineReset
|
|||||||
stz TileMapHeight
|
stz TileMapHeight
|
||||||
stz TileMapPtr
|
stz TileMapPtr
|
||||||
stz TileMapPtr+2
|
stz TileMapPtr+2
|
||||||
stz FringeMapPtr
|
; stz FringeMapPtr
|
||||||
stz FringeMapPtr+2
|
; stz FringeMapPtr+2
|
||||||
|
stz GTEControlBits
|
||||||
|
|
||||||
stz BG1TileMapWidth
|
stz BG1TileMapWidth
|
||||||
stz BG1TileMapHeight
|
stz BG1TileMapHeight
|
||||||
|
@ -76,7 +76,8 @@ OldBG1TileOriginY equ 68
|
|||||||
TileMapWidth equ 70 ; Pointer to memory holding the tile map for the primary background
|
TileMapWidth equ 70 ; Pointer to memory holding the tile map for the primary background
|
||||||
TileMapHeight equ 72
|
TileMapHeight equ 72
|
||||||
TileMapPtr equ 74
|
TileMapPtr equ 74
|
||||||
FringeMapPtr equ 78
|
; FringeMapPtr equ 78
|
||||||
|
GTEControlBits equ 78 ; Enable / disable things
|
||||||
|
|
||||||
BG1TileMapWidth equ 82
|
BG1TileMapWidth equ 82
|
||||||
BG1TileMapHeight equ 84
|
BG1TileMapHeight equ 84
|
||||||
@ -215,6 +216,10 @@ PAD_BUTTON_B equ $0100
|
|||||||
PAD_BUTTON_A equ $0200
|
PAD_BUTTON_A equ $0200
|
||||||
PAD_KEY_DOWN equ $0400
|
PAD_KEY_DOWN equ $0400
|
||||||
|
|
||||||
|
; GTE Control Bits
|
||||||
|
CTRL_SPRITE_DISABLE equ $0001
|
||||||
|
CTRL_BKGND_DISABLE equ $0002
|
||||||
|
|
||||||
; Tile constants
|
; Tile constants
|
||||||
TILE_DAMAGED_BIT equ $8000 ; Mark a tile as damaged (internal only)
|
TILE_DAMAGED_BIT equ $8000 ; Mark a tile as damaged (internal only)
|
||||||
TILE_PRIORITY_BIT equ $4000 ; Put tile on top of sprite (unimplemented)
|
TILE_PRIORITY_BIT equ $4000 ; Put tile on top of sprite (unimplemented)
|
||||||
|
@ -205,6 +205,10 @@ _RenderNES
|
|||||||
; This is handled by the callback in two phases. We pass pointers to the internal function the callback needs
|
; This is handled by the callback in two phases. We pass pointers to the internal function the callback needs
|
||||||
; access to. If there is no function defined, do nothing
|
; access to. If there is no function defined, do nothing
|
||||||
|
|
||||||
|
lda GTEControlBits
|
||||||
|
bit #CTRL_SPRITE_DISABLE
|
||||||
|
bne :no_render
|
||||||
|
|
||||||
lda ExtSpriteRenderer
|
lda ExtSpriteRenderer
|
||||||
ora ExtSpriteRenderer+2
|
ora ExtSpriteRenderer+2
|
||||||
beq :no_render
|
beq :no_render
|
||||||
|
39
src/Tool.s
39
src/Tool.s
@ -102,6 +102,9 @@ _CallTable
|
|||||||
adrl _TSSetAddress-1
|
adrl _TSSetAddress-1
|
||||||
adrl _TSUpdateOverlay-1
|
adrl _TSUpdateOverlay-1
|
||||||
|
|
||||||
|
adrl _TSEnableSprites-1
|
||||||
|
adrl _TSEnableBackground-1
|
||||||
|
|
||||||
_CTEnd
|
_CTEnd
|
||||||
_GTEAddSprite MAC
|
_GTEAddSprite MAC
|
||||||
UserTool $1000+GTEToolNum
|
UserTool $1000+GTEToolNum
|
||||||
@ -1029,6 +1032,42 @@ _TSCompileSpriteStamp
|
|||||||
|
|
||||||
_TSExit #0;#4
|
_TSExit #0;#4
|
||||||
|
|
||||||
|
; EnableSprites(bool)
|
||||||
|
_TSEnableSprites
|
||||||
|
:enable equ FirstParam
|
||||||
|
_TSEntry
|
||||||
|
|
||||||
|
lda :enable
|
||||||
|
beq :turn_off
|
||||||
|
lda #CTRL_SPRITE_DISABLE
|
||||||
|
trb GTEControlBits
|
||||||
|
bra :done
|
||||||
|
|
||||||
|
:turn_off
|
||||||
|
lda #CTRL_SPRITE_DISABLE
|
||||||
|
tsb GTEControlBits
|
||||||
|
|
||||||
|
:done
|
||||||
|
_TSExit #0;#2
|
||||||
|
|
||||||
|
; EnableBackground(bool)
|
||||||
|
_TSEnableBackground
|
||||||
|
:enable equ FirstParam
|
||||||
|
_TSEntry
|
||||||
|
|
||||||
|
lda :enable,s
|
||||||
|
beq :turn_off
|
||||||
|
lda #CTRL_BKGND_DISABLE
|
||||||
|
trb GTEControlBits
|
||||||
|
bra :done
|
||||||
|
|
||||||
|
:turn_off
|
||||||
|
lda #CTRL_BKGND_DISABLE
|
||||||
|
tsb GTEControlBits
|
||||||
|
|
||||||
|
:done
|
||||||
|
_TSExit #0;#2
|
||||||
|
|
||||||
; Insert the GTE code
|
; Insert the GTE code
|
||||||
|
|
||||||
put Math.s
|
put Math.s
|
||||||
|
@ -18,6 +18,14 @@ _BltRange
|
|||||||
bcc *+3
|
bcc *+3
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
; If the background is disabled, jump to a specialized BG routine
|
||||||
|
|
||||||
|
lda GTEControlBits
|
||||||
|
bit #CTRL_BKGND_DISABLE
|
||||||
|
beq :normal
|
||||||
|
brl DisabledBG
|
||||||
|
:normal
|
||||||
|
|
||||||
phb ; preserve the bank register
|
phb ; preserve the bank register
|
||||||
clc`
|
clc`
|
||||||
|
|
||||||
@ -63,17 +71,8 @@ _BltRange
|
|||||||
bit #ENGINE_MODE_TWO_LAYER
|
bit #ENGINE_MODE_TWO_LAYER
|
||||||
beq :skip_bank
|
beq :skip_bank
|
||||||
|
|
||||||
; TODO: Switch to loading the selected BG1 bank. No special "Alt" bank
|
; Load the BG1 data bank
|
||||||
;
|
|
||||||
; lda RenderFlags
|
|
||||||
; bit #RENDER_ALT_BG1
|
|
||||||
; beq :primary
|
|
||||||
;
|
|
||||||
; lda BG1AltBank
|
|
||||||
; bra :alt
|
|
||||||
;
|
|
||||||
;:primary lda BG1DataBank
|
|
||||||
;:alt
|
|
||||||
lda BG1DataBank
|
lda BG1DataBank
|
||||||
pha
|
pha
|
||||||
plb
|
plb
|
||||||
@ -108,6 +107,76 @@ stk_save lda #0000 ; load the stack
|
|||||||
plb ; restore the bank
|
plb ; restore the bank
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
; Specialize routine that just slams a bunch of PHA instructions when background rendering is disabled
|
||||||
|
DisabledBG
|
||||||
|
stx tmp15
|
||||||
|
tya
|
||||||
|
sec
|
||||||
|
sbc tmp15
|
||||||
|
tay ; Put the count in the y register
|
||||||
|
|
||||||
|
lda ScreenWidth ; Screen width in bytes (0 - 159)
|
||||||
|
lsr ; Convert to number of word
|
||||||
|
eor #$FFFF
|
||||||
|
adc #:blkend ; subtract from the end of the PHA array
|
||||||
|
stal :patch+1
|
||||||
|
|
||||||
|
lda #8 ; Enable interrups at least this many lines
|
||||||
|
sta tmp14
|
||||||
|
|
||||||
|
txa ; multiply starting line by 2 for indexing
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
|
||||||
|
php ; save the current processor flags
|
||||||
|
sei ; disable interrupts
|
||||||
|
tsc ; save the stack pointer
|
||||||
|
sta tmp15
|
||||||
|
_R0W1
|
||||||
|
|
||||||
|
:loop
|
||||||
|
lda RTable,x ; Load the screen right edge
|
||||||
|
tcs
|
||||||
|
lda #0
|
||||||
|
:patch jmp $0000
|
||||||
|
lup 80
|
||||||
|
pha
|
||||||
|
--^
|
||||||
|
:blkend
|
||||||
|
dec tmp14
|
||||||
|
bmi :enable_int
|
||||||
|
|
||||||
|
:next
|
||||||
|
inx
|
||||||
|
inx
|
||||||
|
dey
|
||||||
|
bne :loop
|
||||||
|
|
||||||
|
_R0W0
|
||||||
|
lda tmp15
|
||||||
|
tcs
|
||||||
|
plp
|
||||||
|
rts
|
||||||
|
|
||||||
|
:enable_int
|
||||||
|
lda #8 ; Reset the counter
|
||||||
|
sta tmp14
|
||||||
|
|
||||||
|
lda tmp15 ; restore the stack
|
||||||
|
tcs
|
||||||
|
sep #$30 ; 8-bit mode
|
||||||
|
ldal STATE_REG
|
||||||
|
tax ; Save the value
|
||||||
|
and #$CF ; Read Bank 0 / Write Bank 0
|
||||||
|
stal STATE_REG
|
||||||
|
cli
|
||||||
|
nop ; Give a couple of cycles
|
||||||
|
sei
|
||||||
|
txa ; Restore the state
|
||||||
|
stal STATE_REG
|
||||||
|
rep #$30
|
||||||
|
bra :next
|
||||||
|
|
||||||
; External entry point. Can be called directly from another bank
|
; External entry point. Can be called directly from another bank
|
||||||
BltRange
|
BltRange
|
||||||
phd
|
phd
|
||||||
|
Loading…
x
Reference in New Issue
Block a user