346 lines
15 KiB
Plaintext
346 lines
15 KiB
Plaintext
![]() |
!!! Make sure all legal notices and licenses for DLLs are included in the Win32 binary distribution !!!
|
||
|
|
||
|
Document the major changes in Mednafen 0.9.0 over Mednafen 0.8.x somewhere(NEWS?). A list to get started:
|
||
|
Sega Genesis/Mega Drive emulation, from Genesis Plus, Genesis Plus GX(EEPROM emulator, general information), Yabause(68K emulator), Gens(YM2612 emulator), and
|
||
|
of course the Z80 emulator core from FUSE already used in SMS and NGP emulation.
|
||
|
|
||
|
Virtual Boy emulation(using the V810 emulator forked(and optimized and otherwise improved!) from Reality Boy ages ago for use in PC-FX emulation, along
|
||
|
with original code for everything else).
|
||
|
|
||
|
Multi-threaded CD-ROM reading code.
|
||
|
|
||
|
Significantly more accurate(though not entirely perfect, and slower) PCE emulation.
|
||
|
|
||
|
The "pce_fast" emulation module, which is a fork of 0.8.x optimized for speed, at the expense of *generally*-unimportant accuracy.
|
||
|
|
||
|
Various accuracy improvements to PC-FX emulation, including ADPCM IRQ generation(fixes Sparkling Feather),
|
||
|
correcting the ADPCM decoding algorithm, a new slightly more accurate V810 emulation mode to fix glitches in
|
||
|
Chip Chan Kick and Kishin Douji Zenki FX, greatly improved accuracy of KING->RAINBOW block transfers, and an
|
||
|
interrupt controller fix that allows for the BIOS PhotoCD player to work. The 2 switches on gamepads are also emulated
|
||
|
now.
|
||
|
|
||
|
A new experimental/unstable video driver, "overlay".
|
||
|
|
||
|
"Slow forwarding" feature. Mednafen is too good for "slow-mo". ;b
|
||
|
|
||
|
Support for WSR(WonderSwan sound rip format) playback.
|
||
|
|
||
|
Support for RTC in GBA games(requires a "type" file).
|
||
|
|
||
|
!!! Initialize statically-allocated Blip_Buffer objects(via clear() method) and reset any corresponding last-value variables
|
||
|
on game load for each emulated system.
|
||
|
|
||
|
Rewrite MDFNFILE in file.cpp to separate classes, ArchiveReader(takes a directory or archive filename) and ArchiveMemberReader(reads a file in a directory or a file
|
||
|
in an archive).
|
||
|
|
||
|
Fix C68K generator to work correctly when cross-compiling to a platform whose binaries can't run(through automatic emulation)
|
||
|
on the build platform.
|
||
|
|
||
|
In drivers/video.cpp, see if replacing "SDL_FillRect(screen, NULL, 0);" in ClearBackBuffer() with custom software-only
|
||
|
code to clear it fixes framerate degradation problems on Windows when env var SDL_VIDEODRIVER=directx and setting vdriver=sdl
|
||
|
Additionally, optimize ClearBackBuffer() to not clear parts of the screen that will be overwritten by normal non-OSD
|
||
|
blitting, and do testing for the vdriver=overlay case.
|
||
|
|
||
|
In drivers/video.cpp, allocate video scaler pixel buffers separately from the SDL_Surface itself, and realloc() to larger
|
||
|
sizes when necessary(but never realloc() to smaller sizes), and free() only on video deinitialization.
|
||
|
|
||
|
Add a setting to disallow joystick(or keyboard even) input when focus is lost.
|
||
|
|
||
|
Switch hotkey/command key processing over to be event-based rather than instantaneous-state based. Consider implications for ckdelay, hotkey
|
||
|
logical AND mode.
|
||
|
|
||
|
Systems with RTC emulation: Fix code to NOT use localtime(), which has consistency issues due to relying on external state(IE time zones), at
|
||
|
any time other than virtual power toggle/init.
|
||
|
|
||
|
YM2612:
|
||
|
Timer fixes?
|
||
|
|
||
|
Internationalization issues:
|
||
|
Radix(decimal point) character:
|
||
|
Remove world_strtod().
|
||
|
Use trio functions solely for string<->floating-point conversion(in settings code), and ensure that trio is using the current locale.
|
||
|
|
||
|
Alter similar translatable strings in various emulation modules to be the same strings.
|
||
|
|
||
|
Ensure all important translatable strings are marked as such.
|
||
|
|
||
|
Update Russian and German translations.
|
||
|
|
||
|
Filesystem character coding vs UTF8 internal encoding vs locale.
|
||
|
|
||
|
Replace string/ConvertUTF.cpp with iconv() usage.
|
||
|
|
||
|
Wrap iconv() in C++ classes.
|
||
|
|
||
|
Documentation:
|
||
|
Document systems with a debugger available.
|
||
|
|
||
|
Netplay:
|
||
|
Simplify name resolution and eventually remove hackish-sort-preference for IPv4 addresses over IPv6(in 2014 maybe?), split functionality
|
||
|
into different components:
|
||
|
NetServer (maybe, to support *potentially* lower-latency P2P-style netplay)
|
||
|
NetClient (keep, and rework, select() type functionality in this class)
|
||
|
|-NetAddress
|
||
|
|-NetConnection
|
||
|
|
||
|
Consider handling a recv() return value of 0 differently.
|
||
|
|
||
|
|
||
|
Settings:
|
||
|
Quote(and escape) string-type settings in the configuration file.
|
||
|
|
||
|
Protect settings structures and objects with mutexes(for thread safety when using MDFNI_SetSetting() while the emulator is running)
|
||
|
|
||
|
Optional manually-created per-game setting override files(or one big database file per system?).
|
||
|
|
||
|
Save some emulation-related settings in save states, and temporarily(until another save state load, or a virtual power toggle via F11) make
|
||
|
them active. Consider implications for netplay, state rewinding, and PSX memory card emulation(slots can be disabled via settings).
|
||
|
Would require revamping large amounts of code.
|
||
|
|
||
|
|
||
|
Video:
|
||
|
Refactor hq2x, scale2x, 2xsai, etc. filtering code into classes based off an abstract base class.
|
||
|
|
||
|
Add a "tblur.handle_gamma" setting that, when enabled, will cause gamma-correct temporal blurring.
|
||
|
|
||
|
Sound:
|
||
|
Handle sound being disabled.
|
||
|
|
||
|
Open sound device in the game thread, and close it in the game thread, since the game thread is what writes to it.
|
||
|
|
||
|
Backup memory:
|
||
|
SRAM delta log and/or backing up of previous save game files.
|
||
|
|
||
|
PCE_FAST:
|
||
|
MWR latching!
|
||
|
|
||
|
|
||
|
PCE:
|
||
|
<AamirM> <Ki_> one thing about timer inside the HuC6280
|
||
|
<AamirM> <Ki_> the 7-bit timer is decremented when MSB of the prescaler changes from 1 to 0.
|
||
|
<AamirM> <Ki_> (assuming the prescaler is an up counter)
|
||
|
<AamirM> <Ki_> the prescaler seems to be a 10-bit counter
|
||
|
<AamirM> <Ki_> which is reset to zero when zero is written to the control bit ($0c01.bit0)
|
||
|
<AamirM> <Ki_> if the control bit is written to zero when the prescaler is greater than 512 (i.e. the MSB is 1),
|
||
|
<AamirM> <Ki_> prescaler is reset and the MSB changes from 1 --> 0
|
||
|
<AamirM> <AamirM> ah..so the timer decrements
|
||
|
<AamirM> <Ki_> exactly
|
||
|
<AamirM> <Ki_> and if the timer value was zero at that point, /TIRQ will be asserted
|
||
|
|
||
|
Fix HuC6280 op TMA with multiple bits set.
|
||
|
|
||
|
Determine startup state of various chips(including PSG).
|
||
|
|
||
|
Fix sprite 0 IRQ timing.
|
||
|
|
||
|
Ensure all state is being saved to save states.
|
||
|
|
||
|
Fix VRAM->VRAM DMA, SAT DMA timing, and CPU-halting handling with new information from tests on a real system.
|
||
|
|
||
|
Fix broken SuperGrafx window emulation.
|
||
|
|
||
|
If power/reset is triggered in the debugger, force a return from MDFNI_Emulate(); either that or clear
|
||
|
the audio buffer on power/reset. To fix a potential sound buffer overflow issue. (Actually, that won't happen
|
||
|
as-is, but
|
||
|
|
||
|
Emulate disabled button/output when CLR is active on gamepad reads(might need to adjust the multitap code
|
||
|
to buffer data in this case?).
|
||
|
|
||
|
Double-check timer IRQ semantics vs real system(what reads and writes acknowledge IRQs, cli-then-ack behavior,
|
||
|
mask register write effective delay, etc.).
|
||
|
|
||
|
GBA:
|
||
|
GSF multiboot support, and make sure it works(and GSF loading in general) on big-endian platforms.
|
||
|
|
||
|
SMS:
|
||
|
Rewrite VDP execution loop so events happen on the correct cycles more or less, and to remove the ugly IRQ-versus-
|
||
|
IRQ-bit-status-poll hacks. Use "z80_tstates" to do this.
|
||
|
|
||
|
Simplify and improve(including TH latching of VDP H-counter) IO emulation, and use Genesis controller/gamepad
|
||
|
code(abstract it out of the Genesis code, into hw_input/sega_db9/* or something similar)
|
||
|
|
||
|
Galactic Protector input when FM sound is enabled.
|
||
|
|
||
|
Actually save/restore YM2413 data in save states.
|
||
|
|
||
|
NGP:
|
||
|
Implement low-level BIOS and auxillary hardware emulation, with information provided by Judge.
|
||
|
|
||
|
VB:
|
||
|
Check if Red Alarm's sound effects are supposed to be totally wonky when various sound effects "overlap".
|
||
|
|
||
|
Look into getting VIP SCANRDY status bit emulated correctly.
|
||
|
|
||
|
Genesis:
|
||
|
Fix VDP H-counter read value(write test program if necessary).
|
||
|
|
||
|
Add Z80 IRQ ack hack which can be controlled by a setting.
|
||
|
|
||
|
Event system in C68K, fix possible problems with excessively long 68K instructions and the Z80 IRQ
|
||
|
not being handled.
|
||
|
|
||
|
Mouse emulation is borked, fix it.
|
||
|
|
||
|
Implement "Virtua Racing" SVP emulation via code supplied by notaz.
|
||
|
|
||
|
PC-FX:
|
||
|
cdrom/scsicd.cpp
|
||
|
Allow commands that require medium access to complete successfully if there's no disc present and
|
||
|
the "alloc size" field is 0.
|
||
|
|
||
|
Generate SCSI errors when reserved fields are set to something other than 0(especially cdb[1] and the final cdb
|
||
|
entry).
|
||
|
|
||
|
Complete mode page emulation: especially the CD audio control page, tests need to be done on the real
|
||
|
system to see if the volume fields have any effect, and if it's possible to have both L and R channels active
|
||
|
(0x3) on a single output port, or if only one is allowed per output port.
|
||
|
|
||
|
Determine what data command 0xDE, mode 0x03, match 0xB0 is returning(the PhotoCD player uses it, it may
|
||
|
contain information encoding the LBA of the filesystem).
|
||
|
Doing this will require obtaining various CD-i, CD-i Ready, and PhotoCD discs for examination.
|
||
|
|
||
|
Command 0x42(READ SUB-CHANNEL):
|
||
|
Add proper MCN and ISRC support.
|
||
|
|
||
|
Figure out the weirdness when the ISRC is requested for a data track.
|
||
|
|
||
|
Implement Q subchannel interpolation(perhaps globally).
|
||
|
|
||
|
Only return Q subchannel data for audio operations?
|
||
|
|
||
|
Emulate audio completion(or lack thereof) status correctly(if completed successfully,
|
||
|
0x13, and from then on 0x15, I believe).
|
||
|
|
||
|
Investigate audio status code when scanning.
|
||
|
|
||
|
mempeekhw
|
||
|
|
||
|
movbsu, cache load/store breakpoints
|
||
|
|
||
|
Figure out 1M/4M DRAM mode differences on KING [low priority]
|
||
|
|
||
|
Set pcfx.rainbow.chromaip default to 0 if the glitch in Deep Blue Fleet when viewing a ship from the side doesn't occur on a real PC-FX.
|
||
|
|
||
|
Determine correct relative volume levels between ADPCM, CD-DA, and PSG.
|
||
|
|
||
|
Investigate reported discrepancy between real PC-FX and Mednafen when uploading waveform to PSG by rewriting
|
||
|
the channel number/index before each sample write(on a real PC-FX, it doesn't work; IE, likely either the sample
|
||
|
writes are being ignored, or the waveform memory index is being reset on channel number/index write).
|
||
|
|
||
|
V810 MUL or MULU overflow flag logic is likely wrong(can't remember which off hand ATM; confirm, and fix).
|
||
|
|
||
|
NES:
|
||
|
Add some kind of protection against FDS corruption when exiting the emulator in the middle of a disk write.
|
||
|
|
||
|
Fix apparent sound skew(lost cycles?) messing up blargg's DMC tests.
|
||
|
|
||
|
Fix weird graphical glitches in Quattro Sports: BMX Simulator
|
||
|
|
||
|
nes/boards/vrc7.cpp (slot save state saving)
|
||
|
|
||
|
Safety fopen() replacement for preventing overwriting of files.
|
||
|
|
||
|
smem_seek() offset signedness fix
|
||
|
|
||
|
Reexamine the code for choosing which emulation module to use. Highest priority to file extension(as long as the extension is unique to a system,
|
||
|
"bin" is no unique for example), and special magic test functions if that fails.
|
||
|
|
||
|
Investigate reports of undefined symbols(in V810 FPU emulation code, and the WonderSwan x86 disassembler, and possibly other places). There ARE references to
|
||
|
undefined symbols, but the symbols that reference them are never referenced themselves. We should probably fix this.
|
||
|
|
||
|
Add dummy copy constructors to lots of our new classes.
|
||
|
|
||
|
TODO: Add a "SaveStateMD5" member to the MDFNGI struct, to allow the sharing of battery-backed save files between PCE and PCE_FAST
|
||
|
without allowing save states to be shared.
|
||
|
|
||
|
TODO: Clean up multithreaded CD-ROM reading code. Add fixes for drives that don't support raw subchannel reading and/or raw reading. Add fixes
|
||
|
for drives that return borked(from the wrong sectors) subchannel data. Add fixes for drives that refuse to read garbage mode 1 sectors(or fix readahead to not read
|
||
|
the pregap between audio and data tracks).
|
||
|
|
||
|
TODO: Do locking in drivers/remote.cpp
|
||
|
|
||
|
TODO: Consider locking in MDFNI_printf() due to the indentation global variable.
|
||
|
|
||
|
Alter MD5 hash of games based on the module's name for save states etc.?
|
||
|
|
||
|
Emulation "module" namespace encapsulation.
|
||
|
|
||
|
Save state timestamp-related variables consistency checks to avoid the possibility of buffer overruns and, less importantly, locking up the emulator
|
||
|
by use of malicious save states.
|
||
|
|
||
|
Investigate excessively long pause time after buffer underrun with ALSA and Intel HDA.
|
||
|
|
||
|
Rewrite the cheat interface, and add support for multiple patches per named cheat.
|
||
|
|
||
|
Movie recording non-overwriting.
|
||
|
|
||
|
Clean up intialization/deinitialization code so that more than one game can be loaded per Mednafen run. Including cleaning up the
|
||
|
sound file player interface to not trash a system's MDFNGI struct.
|
||
|
(This is a lot harder than it sounds! :b)
|
||
|
|
||
|
Debugger(general):
|
||
|
Disassembly address forcible resynchronization has inconsistent results across different emulated systems; make
|
||
|
them consistent.
|
||
|
|
||
|
assert() in cdrom/scsicd.cpp on line 2629 is being triggered; "loading a save state while
|
||
|
stopped in the debugger brings up the message"
|
||
|
|
||
|
Breakpoint logger mode(instead of breaking, output the instruction address that caused the breakpoint,
|
||
|
and which breakpoint was triggered(assuming that address+breakpoint pair wasn't outputted to the text file already).
|
||
|
|
||
|
Add opcode breakpoints to PC-FX and NES debuggers.
|
||
|
|
||
|
Debugger memory usage map and per-address-space breakpoints.
|
||
|
|
||
|
Support for multi-line entries in the log viewer.
|
||
|
|
||
|
fix various debugger problems(first, register updates when in stepping mode, or when new values are inputted in the register editor)
|
||
|
|
||
|
Up-to-date register updates(for things like timer counter registers) during debugger while in step mode.
|
||
|
|
||
|
Sprite viewer
|
||
|
|
||
|
BG map viewer
|
||
|
|
||
|
Full undefined behavior logging
|
||
|
|
||
|
Input macro recording.
|
||
|
|
||
|
Return -1 on game load error in main(), -2(maybe!) for unknown format.
|
||
|
|
||
|
|
||
|
|
||
|
************
|
||
|
**Old TODO**:
|
||
|
************
|
||
|
|
||
|
The following games are broken to some extent:
|
||
|
|
||
|
Crystalis: Mostly working, but the screen jumps around during
|
||
|
dialogue. It apparently resets the MMC3 IRQ counter
|
||
|
mid-scanline. It'll require low-level PPU and MMC3
|
||
|
IRQ counter emulation to function properly.
|
||
|
|
||
|
Kickmaster: IRQ occurs a few CPU cycles too late, interferes with NMI routine,
|
||
|
and causes the game to lock up after the second boss. Luckily, there
|
||
|
are passwords, at least.
|
||
|
*"FIXED" BY HACK*
|
||
|
|
||
|
Star Wars(PAL Beam Software version):
|
||
|
MMC3 IRQ occurs when it shouldn't, similar to the problem in
|
||
|
Kickmaster.
|
||
|
*"FIXED" BY HACK*
|
||
|
|
||
|
*** General Features:
|
||
|
|
||
|
Fix possible UNIF crashes(if no PRGx or CHRx chunks exist, it may crash,
|
||
|
due to changes made in 0.92).
|
||
|
|
||
|
*** Emulation:
|
||
|
|
||
|
Figure out what mapper 113 really is.
|
||
|
|
||
|
Sound frame count stuff on PAL games(is it correct?).
|
||
|
|
||
|
Fix Zapper emulation(one version of Chiller still doesn't always work correctly).
|