| |
cadaver
Registered: Feb 2002 Posts: 1153 |
Bitmap display when enabling bitmap mode after an illegal screen mode
In the case of a game which would have the screen top as the scrolling playfield, and the stationary bottom as a hires bitmap, one could do the blanking required between them by using an illegal screenmode such as $77 written to $d011.
However, I found that when the bitmap is enabled after blanking, and when because of unexpected delays (e.g. sprite DMA) it happens on the visible part of rasterline, the VIC-II displays something else for a few bytes before settling to displaying the expected bitmap row.
What is it exactly displaying, and what is the reason behind this? I know it is from somewhere in the same videobank, as I can get rid of the artifacts by clearing the videobank beforehand. |
|
| |
chatGPZ
Registered: Dec 2001 Posts: 11116 |
Are you sure its not an artefact of the order you are writing the registers? ie $7x to d011, then set up d018,dd00,d016, then $3x to d011, so all the wrong combinations happen while its still invalid mode. Always worked for me that way at least :) |
| |
cadaver
Registered: Feb 2002 Posts: 1153 |
I'm writing $d011 to visible value last, so it shouldn't be that. Due to current physical space constraints I've actually not tested on a real C64 yet, but VICE and Ultimate64 both seem to do this artifact. |
| |
tlr
Registered: Sep 2003 Posts: 1714 |
In the vice the fetch address is masked with $39ff when the ECM bit is enabled. Can’t remember how we determined that but I assume it’s seen in one of the test programs.
Assuming this is true, then there will be a few cycles delay before a fetch using the non-ECM mode will be displayed, whereas the actual switch to non-illegal display mode should be almost instant. The first few bytes will be using data fetched before the switch. |
| |
cadaver
Registered: Feb 2002 Posts: 1153 |
Thanks! This makes sense. |
| |
Digger
Registered: Mar 2005 Posts: 421 |
While we’re at illegal ECM/bitmap modes; is there even a slightest possibility of stopping VIC-II from doing that (blanking the screen and drawing black pixels)? Similarly to opening/closing side-borders by manipulating $d016 at the right cycle. Or is it absolutely impossible by design? |