I should really work on this new engine thing. I've been putting this off just because initialization routines are boring, especially when you're setting up registers in VBLANK that you don't need until much later.
I made a table of where I'll put all the shadow sPPU registers in WRAM.
Code:
define joypad1($0000)
define joypad1hi($0001)
define joypad2($0002)
define joypad2hi($0003)
define trigger1($0004)
define trigger2($0006)
define frame_done($0008)
define screen_brightness($0a)
define object_settings($0b)
define BG_mode($0c)
define mosaic($0d)
define BG1_tilemap($0e)
define BG2_tilemap($0f)
define BG3_tilemap($10)
define BG4_tilemap($11)
define BG1&2_char($12)
define BG3&4_char($13)
define BG1xlo($14)
define BG1xhi($15)
define BG1ylo($16)
define BG1yhi($17)
define BG2xlo($18)
define BG2xhi($19)
define BG2ylo($1a)
define BG2yhi($1b)
define BG3xlo($1c)
define BG3xhi($1d)
define BG3ylo($1e)
define BG3yhi($1f)
define BG4xlo($20)
define BG4xhi($21)
define BG4ylo($22)
define BG4yhi($23)
define Mode_7_settings($24)
define par_A_lo($25)
define par_A_hi($26)
define par_B_lo($27)
define par_B_hi($28)
define par_C_lo($25)
define par_C_hi($26)
define par_D_lo($27)
define par_D_hi($28)
define par_X_lo($25)
define par_X_hi($26)
define par_Y_lo($27)
define par_Y_hi($28)
define window_set_1&2($29)
define window_set_3&4($2a)
define window_set_OBJ($2b)
define window_pos_0($2c)
define window_pos_1($2d)
define window_pos_2($2e)
define window_pos_3($2f)
define window_logic_BG($30)
define window_logic_OBJ($31)
define main_screen($32)
define sub_screen($33)
define window_main($34)
define window_sub($35)
define color_math_settings($36)
define color_math_enable($37)
define window_color_red($38)
define window_color_green($39)
define window_color_blue($3a)
define screen_mode($3b)
These work with this code:
Code:
sPPU_register_write:
php
rep #$30
lda {screen_brightness}
sta $2100
sei
tsx
lda #$210c
tas
pei ({BG1&2_char})
pei ({BG3_tilemap})
pei ({BG1_tilemap})
pei ({BG_mode})
lda #$2132
tas
lda {color_math_enable}
ora #$2000
pha
pei ({window_sub})
pei ({sub_screen})
pei ({window_logic_OBJ})
pei ({window_pos_3})
pei ({window_pos_1})
pei ({window_set_OBJ})
pei ({window_set_1&2})
txs
cli
sep #$30
lda {window_color_green}
ora #$40
sta $2132
rep #$20
lda {window_color_blue}
ora #$0080
sta $2132
ldx {BG1xlo}
stx $210d
lda {BG1xhi}
sta $210d
lda {BG1yhi}
sta $210e
lda {BG2xhi}
sta $210f
lda {BG2yhi}
sta $2110
lda {BG3xhi}
sta $2111
lda {BG3yhi}
sta $2112
lda {BG4xhi}
sta $2113
ldx {BG4yhi}
stx $2114
lda {Mode_7_settings}
sta $211a
lda {par_A_hi}
sta $211b
lda {par_B_hi}
sta $211c
lda {par_C_hi}
sta $211d
lda {par_D_hi}
sta $211e
lda {par_X_hi}
sta $211f
ldx {par_Y_hi}
stx $2120
plp
rts