Is the timing right below correct (I used Nintendulator to trace it).
The sprite 0 horizontal pos is set to $b0 and I wait a bit to be at the end of the NTSC scanline. However, that couldn't be needed because the right border of the screen is blank, so no gliches would appear.
Code:
81AE 2C 02 20 BIT $2002 = FF A:00 X:00 Y:10 P:27 SP:FD CYC:163 SL:95
81B1 50 FB BVC $81AE A:00 X:00 Y:10 P:27 SP:FD CYC:175 SL:95
81AE 2C 02 20 BIT $2002 = FF A:00 X:00 Y:10 P:27 SP:FD CYC:184 SL:95
81B1 50 FB BVC $81AE A:00 X:00 Y:10 P:67 SP:FD CYC:196 SL:95
81B3 A0 04 LDY #$04 A:00 X:00 Y:10 P:67 SP:FD CYC:202 SL:95
81B5 88 DEY A:00 X:00 Y:04 P:65 SP:FD CYC:208 SL:95
81B6 D0 FD BNE $81B5 A:00 X:00 Y:03 P:65 SP:FD CYC:214 SL:95
81B5 88 DEY A:00 X:00 Y:03 P:65 SP:FD CYC:223 SL:95
81B6 D0 FD BNE $81B5 A:00 X:00 Y:02 P:65 SP:FD CYC:229 SL:95
81B5 88 DEY A:00 X:00 Y:02 P:65 SP:FD CYC:238 SL:95
81B6 D0 FD BNE $81B5 A:00 X:00 Y:01 P:65 SP:FD CYC:244 SL:95
81B5 88 DEY A:00 X:00 Y:01 P:65 SP:FD CYC:253 SL:95
81B6 D0 FD BNE $81B5 A:00 X:00 Y:00 P:67 SP:FD CYC:259 SL:95
81B8 A5 16 LDA $16 = 01 A:00 X:00 Y:00 P:67 SP:FD CYC:265 SL:95
81BA 09 60 ORA #$60 A:01 X:00 Y:00 P:65 SP:FD CYC:274 SL:95
81BC A6 15 LDX $15 = 00 A:61 X:00 Y:00 P:65 SP:FD CYC:280 SL:95
81BE 8C 06 20 STY $2006 = FF A:61 X:00 Y:00 P:67 SP:FD CYC:289 SL:95
81C1 8D 05 20 STA $2005 = FF A:61 X:00 Y:00 P:67 SP:FD CYC:301 SL:95
81C4 8E 05 20 STX $2005 = FF A:61 X:00 Y:00 P:67 SP:FD CYC:313 SL:95
81C7 A5 13 LDA $13 = 0E A:61 X:00 Y:00 P:67 SP:FD CYC:325 SL:95
81C9 09 80 ORA #$80 A:0E X:00 Y:00 P:65 SP:FD CYC:334 SL:95
81CB 8D 06 20 STA $2006 = FF A:8E X:00 Y:00 P:E5 SP:FD CYC:340 SL:95
81B1 50 FB BVC $81AE A:00 X:00 Y:10 P:27 SP:FD CYC:175 SL:95
81AE 2C 02 20 BIT $2002 = FF A:00 X:00 Y:10 P:27 SP:FD CYC:184 SL:95
81B1 50 FB BVC $81AE A:00 X:00 Y:10 P:67 SP:FD CYC:196 SL:95
81B3 A0 04 LDY #$04 A:00 X:00 Y:10 P:67 SP:FD CYC:202 SL:95
81B5 88 DEY A:00 X:00 Y:04 P:65 SP:FD CYC:208 SL:95
81B6 D0 FD BNE $81B5 A:00 X:00 Y:03 P:65 SP:FD CYC:214 SL:95
81B5 88 DEY A:00 X:00 Y:03 P:65 SP:FD CYC:223 SL:95
81B6 D0 FD BNE $81B5 A:00 X:00 Y:02 P:65 SP:FD CYC:229 SL:95
81B5 88 DEY A:00 X:00 Y:02 P:65 SP:FD CYC:238 SL:95
81B6 D0 FD BNE $81B5 A:00 X:00 Y:01 P:65 SP:FD CYC:244 SL:95
81B5 88 DEY A:00 X:00 Y:01 P:65 SP:FD CYC:253 SL:95
81B6 D0 FD BNE $81B5 A:00 X:00 Y:00 P:67 SP:FD CYC:259 SL:95
81B8 A5 16 LDA $16 = 01 A:00 X:00 Y:00 P:67 SP:FD CYC:265 SL:95
81BA 09 60 ORA #$60 A:01 X:00 Y:00 P:65 SP:FD CYC:274 SL:95
81BC A6 15 LDX $15 = 00 A:61 X:00 Y:00 P:65 SP:FD CYC:280 SL:95
81BE 8C 06 20 STY $2006 = FF A:61 X:00 Y:00 P:67 SP:FD CYC:289 SL:95
81C1 8D 05 20 STA $2005 = FF A:61 X:00 Y:00 P:67 SP:FD CYC:301 SL:95
81C4 8E 05 20 STX $2005 = FF A:61 X:00 Y:00 P:67 SP:FD CYC:313 SL:95
81C7 A5 13 LDA $13 = 0E A:61 X:00 Y:00 P:67 SP:FD CYC:325 SL:95
81C9 09 80 ORA #$80 A:0E X:00 Y:00 P:65 SP:FD CYC:334 SL:95
81CB 8D 06 20 STA $2006 = FF A:8E X:00 Y:00 P:E5 SP:FD CYC:340 SL:95
The sprite 0 horizontal pos is set to $b0 and I wait a bit to be at the end of the NTSC scanline. However, that couldn't be needed because the right border of the screen is blank, so no gliches would appear.