CAESAR Logo

Catalogue of Arcade Emulation Software - the Absolute Reference

Valid XHTML 1.0! Valid CSS!

X-Arcade

X-Arcade

Large CAESAR Logo

megaplay.c

0.100u2 [David Haywood]


TODO:

- Cleanup, fix so that everything works properly

- Rewrite genesis emulation (so that it works perfectly with every genesis game)

- Missing game: Gunstar Heroes


NOTES:

- Megaplay games are specially designed Genesis games, produced for arcade use. The code of these games has significant modifications when compared to the Genesis releases and in many cases the games are cut-down versions of the games released for the home system. For example, Sonic has less zones, and no special stages, thus making it impossible to get all the chaos emeralds. Zones also have a strict timer. Coins buy you credits on Megaplay games, meaning if you lose all your lives the game is over, like a regular Arcade game. Like the Megatech the Megaplay boards have an additional Z80 and SMS VDP chip when compared to the standard Genesis hardware. In this case the additional hardware creates a layer which is displayed as an overlay to the game screen. This layer contains basic text such as Insert Coin, and the Megaplay Logo / Instructions during the attract loop. Communication between the various CPUs seems to be fairly complex and it is not fully understood what is shared, where, and how. One of the BIOS sets doesn't work, maybe for this reason. Only a handful of games were released for this system.

- The Sega Mega Play Cartridges are cart-based games for use with Sega Mega Play hardware. There are 2 known types of carts. Both carts are very simple, almost exactly the same as Mega Tech carts. They contain just 2 or 3 ROMs. PCB 171-6215A has locations for 2 ROMs and is dated 1991 and PCB 171-5834 has locations for 3 ROMs and is dated 1989.


Bugs:

- megaplay.c games: They cause OS crash / blue screen / reboot in Win98. From Aaron: A lot of the BIOS-only sets will crash due to reads/writes through NULL pointers. If you're running a fragile OS, don't run those until they are fixed. megaplay0106u5red cpukett / Twisty


WIP:

- 0.113: Ruben added DIP locations to the megaplay driver.

- 9th August 2006: David Haywood - Castlevania Bloodlines is one of the few (maybe the only) game to abuse one of the more unusal features of the Genesis VDP. The VDP has access to general purpose VRAM, in VRAM is stored tiles, tilemaps, spritelists, horizontal scroll data etc. All pointed at via a set of base registers in the VDP. However, the VDP also keeps a cache of the spritelist in its internal RAM, this is done presumably to speed up processing of the spritelist data. If a write is made to the region specified as the spritelist by the Sprite Base Address register then the same data is also cached in the Internal RAM of the VDP. The VDP then uses the Yposition, Height and Link values from the cached RAM when drawing the sprites, taking the X position, colour attributes etc. from the normal VRAM. The catch is when the Sprite Base Address changes the cached RAM is NOT invalidated. This means that the Sprite Base Address can be pointed at RAM where there is no valid Y co-ordinate, height, or link data and the VDP will continue to use the data previously written which has been cached by the chip. By filling in only the missing values at the address now pointed at by the Sprite Base Address Register a complete scene can be built. Thanks to Charles Macdonald for explaining how it works, this feature is now emulated, and the upside down effect on level 6-3 works as expected. It can be strange how you sometimes grow to like a game once you spend some time emulating it, for many years I wrote this game off as a waste of time, it seemed far too basic, not very good looking, and not much fun, however, once you actually pass the first level it gets much better. Lots of eyecandy, very atmospheric music and some very well thought out level ideas & bosses. It still lacks the fluid movement of some other platformers, and is incredibly linear, but it does still make for an enjoyable game. Seems to work from start to finish, although there is one level (4-8) where I seem to get hit by something I can't see. Might have to investigate that one a bit more to see if it's a real problem. Spent a while testing out the driver again. I've noticed a couple of additional glitches which I'll have to address, one or two probably caused by my kludged DMA timing, the others maybe by my guesswork display timing, and the rest who knows. Anyway, I made a bunch of screenshots while testing.

- 8th August 2006: David Haywood - Made some fixes to the raster effect emulation (now if the 68k writes to the VDP registers to disable an interrupt after one has already been scheduled but not yet taken the line will be cleared, likewise if an interrupt was requested, but interrupts were disabled it will now be taken once they're enabled again). Hopefully this is better behavior, it fixes up a couple of games at least, although I still have single scanline errors on a few titles (Road Rash for example). Warlock is still causing me problems by DMAing over the entire VRAM, I may have to forget about trying to fix that one for now and look at it again later. Note, the Japanese release of Outrunners has a nice little effect on the Sega logo at the start, shame about the game tho.

- 7th August 2006: David Haywood - With the Championship football season just kicked off this seems appropriate. Dino Dini's Soccer, a game I can only guess is a prototype because every tackle means a Red Card until you only have 4 players left, has problems with graphic corruption in Kega, but is fine in Gens. My MAME driver also exhibited the same problems as Kega. While seaching for a fix for Warlock (which I might add is being a right pain in the backside, doing a DMA transfer that erases all of VRAM with garbage) I may have stumbled across a fix for the graphic corruption in Dino Dini's Soccer instead. Basically it needs the Genesis DMA length registers updating after the fill is complete, by setting them to 0, which I assume is what they would be set to upon completion of a successful Vram Fill, the glitches on the title screen go away.. Now I just have to cross my fingers and hope that doesn't break anything else.

- 6th August 2006: David Haywood - Figured out why the Turrican Z80 was crashing and stopped it from doing so... Also had a play with Timekillers (it's another one with a buggy sound program, and is also rather sensitive to timing) Marvel Land is also rather fussy, the background flickers badly at the moment. I've hooked up some preliminary raster effects. It's a bit buggy for now, and I still need to figure out what it is I need to do to get lemmings and everything else working with the same code. At the moment Lemmings needs an extra IRQ on scanline 0, but doing this breaks almost everything else.

- 5th August 2006: David Haywood - I was testing a bunch of games, and I noticed that the Japanese version of James Pond 2 actually has a real title screen instead of just text. Charles also pointed out that the Star Wars scroller text in Monster World 4 is missing in both Gens and Kega. For some reason it shows up in MAME. I'm not really optimistic that it won't break once I try and improve the raster support so it works with more games, but its interesting to see neverless.

- 2nd August 2006: David Haywood - Another day of testing and bug fixing. I've fixed a bug that was preventing a couple of games booting (Double Dragon, Shadow of the Beast etc.) and fixed a slight problem with my banking code so that Gametec Funny World / Balloon Boy now has sound. Came up with a preliminary implementation of Sonic 2's 2 Player mode (I'm undecided on how to handle it, doing full hi-res would be easy, but AFAIK a true Interlace display would alternate between the odd/even scanliens each frame instead). I haven't really looked much at the rasters today, but it's on my todo list for tomorrow. For now here are some more random screenshots. Note, Hardball 95 doesn't appear to run in Gens or Kega because they don't emulate the backup RAM it requires to boot by default.. (unless I'm missing an option somewhere). If anybody knows of problematic cases for me to test then feel free to post. Split Screen: Tried a different approach to implementing the interlace / split screen mode used by 2 (maybe 3) Genesis games: Sonic 2 and Fun Car. Other than that I'm being rather frustrated by Mazin Wars, Double Dragon 2, and Fatal Rewind, all of which seem very sensitive to timing, especially when the vblank flag is set, and the interrupts.

- 1st August 2006: David Haywood - I've spent today doing some compatibility testing and attempting to add support for Raster Effects. Thus far the rasters have been giving me some trouble (as I'm still not sure of the exact timing of various events and Charles' documents are inaccurate in this area). Anyway, I've managed to fix a couple of bugs today and made some screenshots from the testing. Apart from games using raster effects 99% of the tested titles appeared to work fine. If I can fix the raster effects up I think the compatibility will be very good. Again, nothing that doesn't run fine on other emulators.. but then again there aren't many games that don't.

- 31st July 2006: David Haywood - It's getting to the point where I'm satisfied with the rendering in the Genesis rewrite. Compatibility on the non-raster interrupt games is good and I feel the framework I have is flexible enough to implement the raster effects given enough tweaking. Here are a selection of screenshots from some of the more enjoyable games that currently run. Nothing that doesn't run fine in the current batch of Genesis emulators, but just a demonstration of the current status of the rewrite.

- 30th July 2006: David Haywood - Genesis Realtek Banking hardware: I've emulated the banking hardware for the 'Realtek mapper', used by some pretty awful unlicensed games. I've tested this with The Earth Defend, Whac-a-Critter and Funny World/Balloon Boy. It appears to work although Funny World / Balloon Boy has no sound (and actually crashes MAME) it appears (I could be wrong) to be trying to do something evil like run code through the Z80's Window to the 68K, and MAME doesn't let you run code on Read Handlers. Mapper details were found athttp://gens.consolemul.com/cgi-bin/ikonboard/ikonboard.cgi?s=3ef8687b0f0cb86cc04799de4bba3e2a;act=ST;f=6;t=237;st=15. Thanks to Spinel for letting me know.

- 29th July 2006: David Haywood - The Genesis relies on a series of mirrored ports to access the Video RAM, due to this a bug in the current 68k core was found which causes Jim Power to have the background columns swapped. The reason the columns get swapped is because the Genesis writes data to the VDP 16 bits at a time. Due to the port mirroring it is also possible to write 32-bits of data at a time. The bug was, to quote Charles Macdonald who provided the fix "the predecrement addressing mode for a 32-bit write needs to write the words in the opposite order". In other words, for a certain group of opcodes MAME writes the 2 16-bit halves of the 32-bit word in the wrong order (the end result of such an operation on normal memory is however the same, the words aren't swapped, just the order they're written in). In 99% of cases this doesn't matter, but due to the mirrored ports on the Genesis hardware writing the 2 16-bit values in the wrong order causes data to be put in VRAM in the wrong order, and thus the columns to be swapped. As Charles provided a fix for the bug, so Jim Power now looks correct. Apparently this may not be the case with the 68020, so some further tests will be needed to make sure this change doesn't break any 68020 games. The Genesis game Gargoyles also relies on some strange 68k behavior, under certain circumstances the TAS opcode's writeback can fail, always on a standard Genesis, and I'm told sometimes (but not always) on an Amiga. I'm not sure how best to handle this in MAME yet, just disabling the opcode breaks other games which rely on it working (Battle Bakraid for example), and if its functionality really is conditional on the Amiga that presents a whole new challenge. There aren't many games on the Genesis which make use of the hardware sprite collision, in fact I only actually know of one, the rather awful (to say the least) Strider II / Strider Returns. I've implemented hardware collision detection in the updated driver, so you can now kill and be killed in this wasted opportunity to make a good sequel. If anybody knows of another game which uses the Hardware collision detection please tell me so I can test against it. The implementation in MAME is immune to the effects of frameskipping as the entire video is processed and rendered every frame and the VIDEO_UPDATE function is simply used to copy a bitmap to the screen. I'm still trying to figure out how to get Dino Dini's Soccer working properly. It works in Gens Plus, but not in Kega Fusion (bad tiles on the screen). I'm getting the same bad tiles in MAME, caused by a rouge DMA operation which is called every frame erasing the good ones. Again, if anybody knows exactly why it works in Gens Plus, but not in Kega then please let me know, it could help. Other news, I got the unlicensed 'Rockman X3' to boot, although the sprites flicker quite badly (maybe because its a bad game, maybe because of emulation bugs) I also looked at 'Lion King 3' but was unable to figure out the values it wants to boot.



- 0.100u3: More Genesis-based games cleanup [Aaron Giles]. Fixed crashes introduced in last version and centralized interrupt generation for all Genesis-based games. Changed palettesize to 96 colors.

- 0.100u2: David Haywood separated the Sega C2 driver into several other pieces. Aaron Giles fixed column scroll with a line scroll of 8, cleaned up input ports and filled out memory map according to cgfm's documentation.