- The savestate isn't working properly. When I load a state, there's a gray screen. For Arkanoid, the gray screen disappears, but not for some other games.
- Does NES-CNROM have WRAM at 6000-7FFF? What does it read from 4020-5FFF, if any?
Normally there is not anything mapped between $4020 to $7FFF. It should be open bus.
MottZilla wrote:
Normally there is not anything mapped between $4020 to $7FFF. It should be open bus.
And what does an open bus state return? The high byte of address, FFh or 00h?
Fx3 wrote:
MottZilla wrote:
Normally there is not anything mapped between $4020 to $7FFF. It should be open bus.
And what does an open bus state return? The high byte of address, FFh or 00h?
When reading, the high byte of the address. Because it was the last thing on the bus.
Fx3 wrote:
- Does NES-CNROM have WRAM at 6000-7FFF? What does it read from 4020-5FFF, if any?
CNROM doesn't, but iNES mapper 3 should mantain provisions for RAM (at least for iNES 1.0 headers).
A direct read (something like lda $6000,X) returns the higher bytes of the adress, $60 in that case.
A indexed read (like lda $5FFF,X) with X = 1 should still retrun $5F.
An indirect read like lda [$20],Y or lda [$20,X] should return $20 no matter the adress read (if no devices takes over the bus of course).
It might be simpler to say it's the final byte in the opcode string. As it would have been read last from the bus the cartridge is on. I believe that basically says the same thing everyone else has said in a most simple way. Also, I don't really think any licensed game would rely on open bus returning a specific value.
MottZilla wrote:
Also, I don't really think any licensed game would rely on open bus returning a specific value.
low G man did but used a different mapper.
Does it now? What does Log G Man do wrong when open bus isn't emulated? My emu doesn't yet do any emulation of open bus so... and Low G Man seemed to run just fine.
IIRC, it tries to write something and read it back. If the write succeeds, I think it just stops. If that's really the case, as long as the value your emulator gives it doesn't match what the game wrote it should run correctly. I guess you could say "it relies on the lack of WRAM" instead of "it relies on an open bus"...
I didn't check any of this though, this is just what I remember reading around.
Has anybody looked into why/how it does that, exactly? Is it a deliberate crash? It sounds like some form of copy protection...
When does it do this? It isn't at the start of the game atleast, how far in is it? My emulator gives all MMC3 games WRAM by default.
I believe it happens when you encounter a boss. I haven't actually played the game for some time...
Well I played through something like 3 stages to I guess get to the first real boss. It crashed pretty quickly. So to make the game work it needs to not have WRAM mapped and needs to properly emulate open-bus behavior? I'm gonna see about doing this to see if it then works properly in my emulator.