From: Joost Y. D. <j....@qa...> - 2001-12-31 15:43:28
|
'Maarten ter Huurne' wrote about '[openMSX-devel] Disk emulation works for me now' - Mon, Dec 31, 2001 at 04:14:36PM CET > Hi, > > The reason disk emulation wouldn't work yet was this: > // TODO, currently this just assumes RAM is in PS:3/SS:3 > // this is of course quite wrong > and NMS8250 has RAM in slot 3-2. After hardcoding 0xAA instead of 0xFF for > the secundary slot select register it works. > A more reasonable guess for the RAM slot to load in is to take the slot > selected at #C000..#FFFF. This allows loading only in the primary mapper, > which is not the way DOS1 does it, but in a single mapper system or under > DOS2 it works just fine. fixed. Please give this a swing ;-) > I also discovered a small bug in MSXDiskRomPatch: > for (int sector = sector_number; num_sectors--; sector++) > { > ... > } > regs.BC.B.h--; > > The decrease of B should be inside the loop ofcourse, after all B contains > the number of sectors not yet loaded. Actually, you could use B as the loop > guard. This code occurs twice, once for read, once for write. fixed. > I have some doubts about the usefulness of this statement: > if (transfer_address + num_sectors*MSXDiskRomPatch::sector_size > 0x10000) > { > // read would overflow memory, adapt: > num_sectors = (0x10000 - transfer_address) / MSXDiskRomPatch::sector_size; > } > A read like that would crash a real MSX as well, no need to protect against > that. A write like that should be allowed. Since writeMem has an address > parameter of type "word", there is no risk openMSX would read or write > out-of-bounds. I'm not sure... perhaps the diskrom does some checking also. I'd like to investigate later how the real diskrom handles it without patching, to have some comparison. > I hope you're not tired of screen shots yet... see attachment. Never :) > Undeadline doesn't work well, though. During fade outs, the game gets very > slow. This happens for example halfway the intro or when you start a new > game. Also, in the game itself the screen split is very wrong making the game > almost unplayable. I think I have to do some serious reviewing on the line > interrupt code. Joost |