After I had emphasized, that interoperability is quite important to me, Torsten took a step back, and suggested a 160x200 mode instead.
So, here's Part 2: Adding an extra line: 160x200
...
Well, one single line ... but there's quite a difference when you can put more words on a line, think about it, even newsletter columns often feature 35..40 letters. [...]tokra wrote:160x200 would be a nice mode for the VIC though, since a "real" 40-char mode using 4x8 chars and 25 lines would be possible. All the other 40-char-modes either just use 24 lines or 4x7 chars.
The number of lines has to be dividable by 16 because of the double-height-chars. Maybe the lower 1K can be utilized in a sensible way by just using 679-767 and the tape buffer. This would however just provide another 8 lines -
...
Even though, some hours later I had an idea how to realise the mode, and still leave the zeropage "intact":
"Just had another line of thought about that, you'd need to:
- make an interrupt before the 192nd line,
- save the ZP between 240, and 259 (20 bytes in total),
- write characters there to address 864 .. 1023 (i.e. #108 .. #127)
- change to the lower 1K text screen, and char set, and 8x8 characters.
- wait for the 200th line, restore ZP, and VIC registers, and
- exit the interrupt.
But: it's not quite clear to me ATM, what to write into 36867. In theory, it is the 13th text line, since 12 text lines had been displayed beforehand. But it also could be the 25th text line, if the VIC chip takes the info from the raster line. And then, one would not take bytes 240 .. 259 as "text screen", but 480 .. 499 - but they're located amidst in the stack!
Should the latter be the case, it would be better to locate the text screen beginning from $0200 (i.e. 992 .. 1011 for the 25th line). Then still 832 .. 991 would be usable for the bitmap, and one even wouldn't need to save anything.
For now I can't test this on a real VIC-20, and it remains to be seen, whether VICE is able to cope with these wild register changes.
Except we now have a software-assisted "active" graphics mode, this should function. Those 8 lines in the interrupt also wouldn't burn too many cycles. And it would work with NTSC as well.
Greetings,
Michael"