Tile Mode Opacity Toggle and Fine Bitmap Address Start
Posted: Mon Dec 04, 2023 3:23 pm
Here are 2 ideas I had, lumped together because they are both related to rendering.
Tile Mode Opacity Toggle: Uses bit 7 of the layers HSCROLL_H (or some other unused per-layer bit), if set, color 0 is not special-cased for palette index shifting, so if Palette offset is not 0, the first color will in fact be used and not be treated as transparent, allowing a true 4 colors per tile.
A similar effect could be made by changing the logical background color for that tile - in effect, while this tile is being rendered, the background color is overridden with the first, normally unused color of this tile, so if nothing is rendered in front - such that if the current color is transparent, it will use this color instead.
Fine Bitmap Address Start: Currently, bitmapped modes can have their starting address changed in 2k increments, leaving 11 bits unset.
This is very much not enough for VGA-like scrolling by changing the starting address!
This should be easy enough to fix - take an unused register such as MAP_BASE and use it to adjust the next few bytes.
An 8-bit register like MAP_BASE would be enough for 8-byte granularity, while an 12-bit register like V-Scroll would allow per-byte granularity AND leave a bit free for per-pixel scrolling for 16 colors!
Tile Mode Opacity Toggle: Uses bit 7 of the layers HSCROLL_H (or some other unused per-layer bit), if set, color 0 is not special-cased for palette index shifting, so if Palette offset is not 0, the first color will in fact be used and not be treated as transparent, allowing a true 4 colors per tile.
A similar effect could be made by changing the logical background color for that tile - in effect, while this tile is being rendered, the background color is overridden with the first, normally unused color of this tile, so if nothing is rendered in front - such that if the current color is transparent, it will use this color instead.
Fine Bitmap Address Start: Currently, bitmapped modes can have their starting address changed in 2k increments, leaving 11 bits unset.
This is very much not enough for VGA-like scrolling by changing the starting address!
This should be easy enough to fix - take an unused register such as MAP_BASE and use it to adjust the next few bytes.
An 8-bit register like MAP_BASE would be enough for 8-byte granularity, while an 12-bit register like V-Scroll would allow per-byte granularity AND leave a bit free for per-pixel scrolling for 16 colors!