mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-11-12 22:05:06 +01:00
80 lines
3.1 KiB
Plaintext
80 lines
3.1 KiB
Plaintext
|
||
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
|
||
|