Boo!Mike wrote:There is an if-clause which checks for char_set being at $1E00.
Well, the block can never exceed 15, so it should be doable in another, simpler way. I'll have a look too and wait for any VICE team responses.Code: Select all
Block VIC address CPU address contents 16..19 16384..20479 32768..36863 ROM char set (mirror copy)
It doesn't surprise me that there are other glitches. It was not until version 1.7 of VICE that had a semi-decent emulation, and unless I'm mistaken, no major improvements have happened since it was rewritten and verified among the contemporary demos.
Your colour RAM experiment program fails terribly on a real VIC:
POKE 36869,244 (screen at $1E00, chars at $9000) or POKE 36869,4 (screen at $9000, chars at $8000) makes funny things happen with the other register values. One may be able to POKE the display back, but it has to be in a certain order. The memory at $9000 corresponds to the VIC-I registers + the two VIA registers, among other things.
POKE 36869,245 (screen at $1E00, chars at $9400) yields garbage, but the screen behaves correctly. This equals colour memory.
POKE 36869,246 (chars at $9800) also yields garbage, being unused I/O block 2.
POKE 36869,247 (chars at $9C00) is identical to the one before, but pointing into I/O block 3 instead.
Here's another mildly interesting mode:
POKE 648,28:POKE 36866,22:POKE 36869,255
It sets both video matrix and chars to 7168 ($1C00), meaning that each character definition depends on what is on screen at that position. Dunno if it useable, but it works as expected in the emulator.