| |
Starfox
Registered: Jul 2014 Posts: 42 |
Weird ghostbyte glitch (8 sprites+borders open)
Hello
I'm fiddling with some border sprites and ghostbyte patterns/colors.
I'm alternating the bit pattern $aa (10101010) and $55 (01010101) on each rasterline, but at two points there's like a glitch where the same pixel is repeated twice.
Ohh and, I have 8 sprites displayed on each rasterline,and the borders are all open (the sprites are blank to show the problem).
Here's a screenshot:
https://www.dropbox.com/scl/fi/g6nt8giewsfp2rdw5g4tl/weird-ghos..
EDIT: It's not a VICE bug. I suspect its because of the timing of the writes or something sinister?
Cheers! |
|
... 22 posts hidden. Click here to view all posts.... |
| |
trident
Registered: May 2002 Posts: 91 |
i agree with hcl, definitely an effect of the scroll register being offset by one pixel.
one way to fix it could be to use the asl instruction to open the border, as it will set the scroll register to $d0, which won't have that pixel offset. but it will also set the multicolor mode, which will affect the ghostbyte too. (maybe lsr will work instead, since it will set the scroll register to $4, which won't affect this particular ghostbyte pattern.) |
| |
Skate
Registered: Jul 2003 Posts: 494 |
just to make sure, you can try to change sty $d016 position by a few cycles back and forth and see if one of the glitch positions also change. |
| |
Starfox
Registered: Jul 2014 Posts: 42 |
Quote: Sure its not just a scaling artefact?
Yeah, if I resize, it's still there.
Ahh it makes sense with the scroll register. Thanks! :) 👍
Like I'm seeing the aftereffects of the dec/sty cycles? |
| |
Starfox
Registered: Jul 2014 Posts: 42 |
Quote: i agree with hcl, definitely an effect of the scroll register being offset by one pixel.
one way to fix it could be to use the asl instruction to open the border, as it will set the scroll register to $d0, which won't have that pixel offset. but it will also set the multicolor mode, which will affect the ghostbyte too. (maybe lsr will work instead, since it will set the scroll register to $4, which won't affect this particular ghostbyte pattern.)
I tried fiddling with asl/lsr, but I guess the timing on the write cycles are different from dec?
Skate: I tried, but it just pushes the glitch further to the right.
HCL: won't this be happening everywhere in effects of this type, but we don't notice it? |
| |
HCL
Registered: Feb 2003 Posts: 727 |
@Starfox Either you have to set $d016 back during the sideborder where the ghost pattern is not visible, or you have to use an instruction that can open the sideborder without affecting the x-fine-scroll value.
I don't have the solution for you, and i also don't want to spoil the fun for you finding the solution yourself! :D |
| |
Flavioweb
Registered: Nov 2011 Posts: 463 |
I'm simply guessing: couldn't it happen that the vic switches from hires to multicolor and vice versa showing a single pixel in multicolor (therefore doubled in width)? |
| |
Starfox
Registered: Jul 2014 Posts: 42 |
Quote: @Starfox Either you have to set $d016 back during the sideborder where the ghost pattern is not visible, or you have to use an instruction that can open the sideborder without affecting the x-fine-scroll value.
I don't have the solution for you, and i also don't want to spoil the fun for you finding the solution yourself! :D
Haha, no spoiling it wouldn't be any fun =P
I can't do it with 8 sprites, but should be possible without/less of course :)
Flavioweb: Interesting. I don't know how to check this other than fiddling with scroll values to see what happens. |
| |
Flavioweb
Registered: Nov 2011 Posts: 463 |
Quoting StarfoxFlavioweb: Interesting. I don't know how to check this other than fiddling with scroll values to see what happens.
If you leave the 4th bit of $D016 always at zero then i'm wrong.
But if you use inc/dec or some other opcodes that change the bit value you can try to avoid it and see what happens. |
| |
Starfox
Registered: Jul 2014 Posts: 42 |
Quote: Quoting StarfoxFlavioweb: Interesting. I don't know how to check this other than fiddling with scroll values to see what happens.
If you leave the 4th bit of $D016 always at zero then i'm wrong.
But if you use inc/dec or some other opcodes that change the bit value you can try to avoid it and see what happens.
I tried fiddling a little bit. Somehow got $d016 set to $c0. whole screen went black, no interrupts, only jmp * was happening 😂 |
| |
Martin Piper
Registered: Nov 2007 Posts: 700 |
Does it behave differently on new and old VIC revisions? |
Previous - 1 | 2 | 3 | 4 - Next |