
 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

