I've had similar issues before, more-so with just a couple issues writing to VRAM with background data.. but I'm having a HUGE issue with this in my SMB2 hack.
The original routine stored both PC graphics and the POW/Flask/Orb crystals as one giant section of code instead of separating it. So both graphics were stored essentially at the same time in the same routine with the storage of 07 to 420B.
I broke the original routine off and have it storing the PC graphics top and bottom separately (Which it also did in the original) as it's own routine, then the POW/Flask/Orb graphics as a separate routine.. but for some reason this new routine is causing HUGE screen flickering issues.
Top Storage of PC Sprites
$13/8B57 AE EF 02 LDX $02EF [$11:02EF] A:1801 X:0000 Y:0080 P:envmXdIZC ;Load bank of PC graphic
$13/8B5A 86 04 STX $04 [$00:4304] A:1801 X:002F Y:0080 P:envmXdIzC
$13/8B5C AD F0 02 LDA $02F0 [$11:02F0] A:1801 X:002F Y:0080 P:envmXdIzC ;Load how many bytes to send to VRAM
$13/8B5F 85 05 STA $05 [$00:4305] A:0080 X:002F Y:0080 P:envmXdIzC
$13/8B61 A9 00 60 LDA #$6000 A:0080 X:002F Y:0080 P:envmXdIzC ;Load where to store sprites into VRAM
$13/8B64 8D 16 21 STA $2116 [$11:2116] A:6000 X:002F Y:0080 P:envmXdIzC
$13/8B67 AD ED 02 LDA $02ED [$11:02ED] A:6000 X:002F Y:0080 P:envmXdIzC ;Load pointer to PC sprites
$13/8B6A 85 02 STA $02 [$00:4302] A:A800 X:002F Y:0080 P:eNvmXdIzC
$13/8B6C A0 01 LDY #$01 A:A800 X:002F Y:0080 P:eNvmXdIzC ;Set bit for storage into VRAM
$13/8B6E 8C 0B 42 STY $420B [$11:420B] A:A800 X:002F Y:0001 P:envmXdIzC ;Store to VRAM
Bottom Storage of PC Sprites
$13/8B71 AD F0 02 LDA $02F0 [$11:02F0] A:A800 X:002F Y:0001 P:envmXdIzC ;Load how many bytes to send to VRAM
$13/8B74 85 05 STA $05 [$00:4305] A:0080 X:002F Y:0001 P:envmXdIzC
$13/8B76 A9 00 61 LDA #$6100 A:0080 X:002F Y:0001 P:envmXdIzC ;Load where to store sprites into VRAM
$13/8B79 8D 16 21 STA $2116 [$11:2116] A:6100 X:002F Y:0001 P:envmXdIzC
$13/8B7C AD ED 02 LDA $02ED [$11:02ED] A:6100 X:002F Y:0001 P:envmXdIzC ;Load pointer to PC sprites
$13/8B7F 18 CLC A:A800 X:002F Y:0001 P:eNvmXdIzC
$13/8B80 69 00 02 ADC #$0200 A:A800 X:002F Y:0001 P:eNvmXdIzc ;Add $200 to get bottom piece of sprites
$13/8B83 85 02 STA $02 [$00:4302] A:AA00 X:002F Y:0001 P:eNvmXdIzc
$13/8B85 8C 0B 42 STY $420B [$11:420B] A:AA00 X:002F Y:0001 P:eNvmXdIzc ;Store to VRAM
Is there anything wrong with this routine? I'm really confused on why it's causing screen flickering. It seems to only happen when it STORES to VRAM. So if I remove the 8C 0B 42 on both, obviously nothing gets stored but it ends up not screen flashing anymore which singles it out to be this area. Even if I just use ONE of them to store to VRAM, it causes screen flicker.. I don't understand why.