Dear respected MSXers,
Today I played the "Bestial Warrior" game with a Sony HB-20P emulated with openMSX (last version from git's master). It's the CAS version.
The colors are wrong, so I debugged the game a bit to figure out what is going.
And well, I found that from address 0x9BE9 it starts writing the CT (color table) with the following instructions repeated eight times (on the right, the number of Z80 cycles):
ld a, (hl) --> 7
out (#98), a --> 11
So, it's 18 (or 19 at most) cycles. According to this (very excellent this and the others!) source http://map.grauw.nl/articles/vdp-vram-timing/vdp-timing-2.html, one needs at least about 29 cycles in MSX1.
That explains the corruption, and in fact if we "set too_fast_vram_access ignore", the problem disappears.
The mystery is that I don't remember any of that corruption when I played it in my HB-20P!
Has anyone tried this game in a real MSX1? Could someone do?
Even more weird: the game updates the bitmap with the code in address 0x9BAC.
This code repeats eight times this:
add hl, de --> 11
outi --> 16
(A total of 18 cycles, way less than the required 29).
BUT the bitmap that is shown is not corrupted at all (?!)
Actually, I checked by modifying the code of openMSX than actually you can write to VRAM at any speed without corruption, unless it's over VRAM's 0x2000 (CT). I tested in this particular game only.
Well, if anyone has an explanation, ideas or can test the game in a real MSX1, please share!