Well, I finally managed to force myself and finish my flash cart based on Fifa '96 cartridge. I removed 42 pin mask rom, soldered nice raster socket and... here's where my problem starts. It works nicely with 40 pin mask rom with Super Hang On but it gives me trouble with my flash chip (Am29F800BB + DIL42 adapter = 27C800 replacement). For example: to be able to run the same Super Hang On rom which is 4MBit I had to copy it into 8MBit image. Did the same thing with Flicky - 8x1Mbit to make it works. So I wonder why it goes that way? Also I understand that roms that come in .bin format must be byte swapped: SEGA MEGA DRIVE -> ESAGM GE ARDVI E before flashed? edit: corrected sizes
Maybe a confusion between 68K being a 16bit CPU so you forgot to link lower address bit to the good pin of your flash or there is a shift?
You must copy a game over and over to fill a ROM because ROMs are typically "partially decoded" which means only SOME address lines are used to decode the game. The MD has a 32Mbit space which is used to decode ROMs so when you insert a 1M game, it will be duplicated 32 times since the ROM is selected but the ROM ignores the higher address lines (since they aren't there). If you just burned a 1M game to an 8M ROM, you'd have to NOT connect the >1M address lines and tie them low or duplicate them. If you didn't duplicate them, the game could check memory above the first 1M of the game as a form of copy protection. On some consoles not mirroring/shadowing memory correctly will break games because the CPU vectors will not be in the right place. Probably the reason .bin format ROMs must be byteswapped is because they are stored big-endian and your burning software/hex editor are assuming little-endian. This means with a 16-bit ROM, the first byte is taken from D0-7 and the second byte is taken from D8-15. Your burning software should have an endianness option though.
Thanks! I'm starting to understand it slowly however I still don't get few things. During trial and error tests I realized that for my 8M flash chip Flicky must be mirrored only at 0x80000 to be working. So I thought A19 is the reason. But then again this chip doesn't have A19 - pin 42 is NC. So I connected it to A18 since it wasn't supposed to be used and game started like it should w/out mirroring. Then I flashed some 8M image but it doesn't work at all. I think I'll check all the connections on the cart as soon as I get new solder pistol and multimeter. Old ones died both suddenly as only I got into this. :> And I thought it'll be as easy as replacing chips, heh...
Because MD ROMs are 16-bit the least significant CPU address bit isn't used (since the lowest two bytes are always accessed simultaneously), so a 16-bit ROM's A0 should be connected to A1 of the CPU because they are functionally the same. In other words 16-bit ROM are always word addressed so A0 selects the least significant word instead of byte like a CPU. BTW on dual 8/16-bit ROMs you'll see that the least significant address bit is A-1, which is actually A0 in 8-bit mode.
As supposed... I've somehow damaged A18 trace while desoldering mask rom. It was hardly noticeable. :/ When I fixed it everything started to work as I expected. No mirroring, etc. Nice!