Here are some technical details about things that need to be fixed or added to Genesis Plus. Missing features: - Support for 6-button controllers - SRAM management - Game Genie / PAR patch codes The VDP code could use a lot of cleaning up. The rendering code is missing a few bits: - Sprite collision - Window bug I think the "C" 68000 emulator either has some bugs or I'm not using it correctly. Older DOS-only versions used Turbo68K, which had ran games much better, especially with regards to interrupt handling. Things that need to be fixed: - Raster garbage on third road in Thunder Blade. - Added country codes for Dragon Slayer, but game locks up after passing country check. - No inputs in Samurai Shodown. (This game doesn't initialize the port direction registers, at least not directly. Emulation bug or problem with the game?) - Palette and raster problems in Mortal Kombat. - Bad raster effects and VRAM corruption in Super Skidmarks. (Needs PAL timing) - Palette problems in Sonic 2 title screen. - Masked half of Sonic sprite visible on Sonic title screen. - Sprite masking doesn't work in Micro Machines subscreen. - Music has slow tempo in Batman & Robin. (doesn't seem to be a problem with the YM2612 timers - Wonderboy 3 is normal) - Music has jerky playback in Sonic 2, 3, 3D Blast. If you run the Z80 emulation for one scanline after requesting an interrupt, it runs fine. - DAC and PSG output are too loud, both are divided by two for now (though the PSG should be a bit quieter and the DAC a bit louder) - Undead Line locks after selecting a stage, also the Z80 sound halts after the first note is played. This game single steps the Z80 with the following code: MOVEM.L D0,-(A7) ; 009C7C 48 E7 80 00 ORI #$0200,SR ; 009C80 00 7C 02 00 ; Get control of the Z-bus MOVE.W #$0100,$00A11100 ; 009C84 33 FC 01 00 00 A1 11 00 BTST #$00,$00A11100 ; 009C8C 08 39 00 00 00 A1 11 00 BNE.S *-$08 [00009C8C] ; 009C94 66 F6 ; Check driver status byte. If zero, release bus and exit. TST.B $00A00008 ; 009C96 4A 39 00 A0 00 08 BEQ *+$0016 [00009CB2] ; 009C9C 67 00 00 14 ; Release bus and wait for Z80 to resume control. Then restart the loop ; and immediately get the bus back again, assuming the Z80 ran at least ; one instruction in the meantime. CLR.W $00A11100 ; 009CA0 42 79 00 A1 11 00 BTST #$00,$00A11100 ; 009CA6 08 39 00 00 00 A1 11 00 BEQ.S *-$08 [00009CA6] ; 009CAE 67 F6 BRA.S *-$2C [00009C84] ; 009CB0 60 D2 ; Release bus and exit. CLR.W $00A11100 ; 009CB2 42 79 00 A1 11 00 ANDI #$FDFF,SR ; 009CB8 02 7C FD FF MOVEM.L (A7)+,D0 ; 009CBC 4C DF 00 01 RTS ; 009CC0 4E 75