~korth/gens-gs-ii.git
8 years ago[gens-qt4] GeneralConfigWindow.cpp: Load and save the UnRAR binary filename. gens-qt4-GeneralConfigWindow-v1
David Korth [Wed, 26 Jan 2011 16:18:57 +0000 (11:18 -0500)] 
[gens-qt4] GeneralConfigWindow.cpp: Load and save the UnRAR binary filename.

8 years ago[gens-qt4] GensConfig.cpp: Added a configuration entry for the UnRAR binary.
David Korth [Wed, 26 Jan 2011 16:17:19 +0000 (11:17 -0500)] 
[gens-qt4] GensConfig.cpp: Added a configuration entry for the UnRAR binary.

TODO: On Unix, detect presence of unrar or rar and set the default filename accordingly.

8 years ago[gens-qt4] GeneralConfigWindow.cpp: Initial support for selecting an UnRAR binary.
David Korth [Wed, 26 Jan 2011 16:12:47 +0000 (11:12 -0500)] 
[gens-qt4] GeneralConfigWindow.cpp: Initial support for selecting an UnRAR binary.

This allows a user to select RAR or UnRAR on Unix-based systems,
and UnRAR.dll on Win32.

TODO: Add file detection to verify that the correct file is selected.

TODO: Save the filename in the configuration.

8 years ago[gens-qt4] GeneralConfigWindow.cpp: Apply button fixes.
David Korth [Wed, 26 Jan 2011 15:53:25 +0000 (10:53 -0500)] 
[gens-qt4] GeneralConfigWindow.cpp: Apply button fixes.

- Disable the Apply button initially.
- Enable the Apply button if a textbox is changed.
- Disable the Apply button if OK or Apply is clicked.

TODO: If Apply was clicked, set focus back to the main window elements.
Otherwise, Cancel will receive focus.

8 years ago[gens-qt4] GeneralConfigWindow.cpp: Load the Sega CD Boot ROM filenames on open and...
David Korth [Wed, 26 Jan 2011 15:47:28 +0000 (10:47 -0500)] 
[gens-qt4] GeneralConfigWindow.cpp: Load the Sega CD Boot ROM filenames on open and save them on OK/Apply.

8 years ago[gens-qt4] GensConfig.cpp: Initial Gens configuration class.
David Korth [Wed, 26 Jan 2011 15:46:50 +0000 (10:46 -0500)] 
[gens-qt4] GensConfig.cpp: Initial Gens configuration class.

This class currently has Sega CD Boot ROM filenames.

gqt4_main.cpp: Add an instance of the GensConfig class to the
GensQt4 namespace, and create the instance on startup and delete
it on shutdown.

8 years ago[gens-qt4] GensQApplication.hpp: Updated the copyright date.
David Korth [Wed, 26 Jan 2011 15:19:44 +0000 (10:19 -0500)] 
[gens-qt4] GensQApplication.hpp: Updated the copyright date.

8 years ago[gens-qt4] GensQApplication: Set the Qt application information.
David Korth [Wed, 26 Jan 2011 15:18:18 +0000 (10:18 -0500)] 
[gens-qt4] GensQApplication: Set the Qt application information.

8 years ago[gens-qt4] GeneralConfigWindow.cpp: Updated to use the new region code format in...
David Korth [Wed, 26 Jan 2011 08:16:03 +0000 (03:16 -0500)] 
[gens-qt4] GeneralConfigWindow.cpp: Updated to use the new region code format in mcd_rom_db.c.

8 years ago[libgens] Data/mcd_rom_db.c::lg_mcd_rom_GetRegionCodeString(): Use int for region_cod...
David Korth [Wed, 26 Jan 2011 08:13:48 +0000 (03:13 -0500)] 
[libgens] Data/mcd_rom_db.c::lg_mcd_rom_GetRegionCodeString(): Use int for region_code instead of MCD_RegionCode_t.

This fixes some C++ compatibility issues.

8 years ago[libgens] Data/mcd_rom_db.c::lg_mcd_rom_GetRegionCodeString(): Return a string for...
David Korth [Wed, 26 Jan 2011 08:12:18 +0000 (03:12 -0500)] 
[libgens] Data/mcd_rom_db.c::lg_mcd_rom_GetRegionCodeString(): Return a string for MCD_REGION_JAPAN_NTSC | MCD_REGION_JAPAN_PAL.

The "Japan" Boot ROM can be used for either NTSC or PAL, so we should
have a string for that configuration.

8 years ago[libgens] Data/mcd_rom_db.c: Reworked the region code system.
David Korth [Wed, 26 Jan 2011 08:08:25 +0000 (03:08 -0500)] 
[libgens] Data/mcd_rom_db.c: Reworked the region code system.

Some Sega CD Boot ROMs incorrectly support regions that they
shouldn't support. Mega CD 1.00S (Japan/PAL) supports Japan/PAL,
Japan/NTSC, and Europe, but does not support USA. Additionally,
Mega CD 1.00p (Japan/NTSC) doesn't support Japan/PAL).

The reworked region code system uses the same hexadecimal region
code system as newer MD games.

A second region code has been added to database entries to indicate
the primary region code of the ROM. This will be used to display
to the user what region a given ROM is.

8 years ago[libgens] Data/mcd_rom_db.c: Identify the bad Sega CD (U) v2.00 ROM as "(Bad Dump)".
David Korth [Wed, 26 Jan 2011 05:55:38 +0000 (00:55 -0500)] 
[libgens] Data/mcd_rom_db.c: Identify the bad Sega CD (U) v2.00 ROM as "(Bad Dump)".

This prevents confusion with the good dump of the same ROM.

8 years ago[libgens] Data/mcd_rom_db.c: Added four new Sega CD Boot ROMs from no-intro.
David Korth [Tue, 25 Jan 2011 20:12:25 +0000 (15:12 -0500)] 
[libgens] Data/mcd_rom_db.c: Added four new Sega CD Boot ROMs from no-intro.

New Boot ROMs added:
- Mega CD (J) v1.00l (NTSC)
- Mega CD (J) v1.00S (NTSC)
- Sega CD (U) v1.00
- Sega Wondermega M2 (J) v2.00

8 years ago[libgens] Data/mcd_rom_db.c: Removed nohint CRC32 and md5sums.
David Korth [Tue, 25 Jan 2011 19:40:36 +0000 (14:40 -0500)] 
[libgens] Data/mcd_rom_db.c: Removed nohint CRC32 and md5sums.

These aren't needed if SP and HINT fixups are applied before
obtaining the ROM CRC32 or md5sum.

8 years ago[gens-qt4] GeneralConfigWindow::mcdUpdateRomFileStatus(): Apply SP and HINT fixups...
David Korth [Tue, 25 Jan 2011 19:40:04 +0000 (14:40 -0500)] 
[gens-qt4] GeneralConfigWindow::mcdUpdateRomFileStatus(): Apply SP and HINT fixups before obtaining the ROM CRC32.

8 years ago[libgens] Data/mcd_rom_db.c: Added fixup data for Initial SP and Initial HINT vector.
David Korth [Tue, 25 Jan 2011 19:22:34 +0000 (14:22 -0500)] 
[libgens] Data/mcd_rom_db.c: Added fixup data for Initial SP and Initial HINT vector.

The fixups will be applied to loaded ROMs instead of maintaining
multiple CRC32s and md5sums for the different HINT vectors, since
there's also the possibility that HINT vector or Initial SP could
be something different.

I've noticed that Initial SP is always 0xFFFFFD00 and Initial HINT vector
is always 0xFFFFFD0C in known good dumps, so we should fix up all ROMs to
have these values on load.

8 years ago[gens-qt4] CtrlConfigWindow.cpp: Specify file extensions for the controller icons.
David Korth [Tue, 25 Jan 2011 06:16:24 +0000 (01:16 -0500)] 
[gens-qt4] CtrlConfigWindow.cpp: Specify file extensions for the controller icons.

For some reason, the 32-bit build on my system wasn't showing the
controller icons unless I added the file extension.

The 64-bit version (and the 32-bit version back when I was using
32-bit Linux) worked fine. I haven't checked PowerPC, but I suspect
it may have also worked correctly.

I'm not sure why it didn't work on 32-bit, but adding the file
extensions fixes it, so meh.

8 years ago[gens-qt4] Added *.md and *.smd as valid Sega Genesis ROM and Sega CD Boot ROM file...
David Korth [Tue, 25 Jan 2011 05:55:58 +0000 (00:55 -0500)] 
[gens-qt4] Added *.md and *.smd as valid Sega Genesis ROM and Sega CD Boot ROM file extensions.

andlabs has lots of Genesis ROM images with *.md extensions (no-intro
apparently uses it), and *.smd is used for old copier images from the
Super Magic Drive. (SMD deinterleaving isn't implemented at the moment.)

I don't think SMD format support is really needed for Sega CD Boot ROMs,
but some people may have Sega CD Boot ROMs with a *.smd extension for
whatever reason, so we're better off supporting it.

TODO: Move the filename filters out of GeneralConfigWindow.cpp and into
a common file somewhere.

8 years agoTAGS.txt: New tag: gens-qt4-GeneralConfigWindow-v0
David Korth [Tue, 25 Jan 2011 05:50:43 +0000 (00:50 -0500)] 
TAGS.txt: New tag: gens-qt4-GeneralConfigWindow-v0

8 years ago[libgens] Data/mcd_rom_db.c: "Japan (NTSC)" -> "Japan/NTSC"; "Japan (PAL)" -> "Japan... gens-qt4-GeneralConfigWindow-v0
David Korth [Tue, 25 Jan 2011 05:43:35 +0000 (00:43 -0500)] 
[libgens] Data/mcd_rom_db.c: "Japan (NTSC)" -> "Japan/NTSC"; "Japan (PAL)" -> "Japan/PAL"

8 years ago[gens-qt4] ui/GeneralConfigWindow.ui: Increased the minimum window height from 364px...
David Korth [Tue, 25 Jan 2011 05:42:50 +0000 (00:42 -0500)] 
[gens-qt4] ui/GeneralConfigWindow.ui: Increased the minimum window height from 364px to 384px.

8 years ago[gens-qt4] GeneralConfigWindow::GeneralConfigWindow(): Set the tab order for the...
David Korth [Tue, 25 Jan 2011 05:33:57 +0000 (00:33 -0500)] 
[gens-qt4] GeneralConfigWindow::GeneralConfigWindow(): Set the tab order for the GensLineEdit textboxes.

The GensLineEdit textboxes (used for Sega CD Boot ROM filenames)
aren't available in Qt Designer, so we have to set the tab order
for these widgets manually.

8 years ago[gens-qt4] ui/GeneralConfigWindow.ui: Allow text selection in lblMcdSelectedRom by...
David Korth [Tue, 25 Jan 2011 05:31:15 +0000 (00:31 -0500)] 
[gens-qt4] ui/GeneralConfigWindow.ui: Allow text selection in lblMcdSelectedRom by both mouse and keyboard.

8 years ago[gens-qt4] ui/GeneralConfigWindow.ui: Minor adjustments to the UI.
David Korth [Tue, 25 Jan 2011 05:29:12 +0000 (00:29 -0500)] 
[gens-qt4] ui/GeneralConfigWindow.ui: Minor adjustments to the UI.

- GeneralConfigWindow: Set a minimum window size of 494x364.

- lblMcdSelectedRom:

  - Enable wordwrapping. This prevents long descriptions from
    forcing the window's horizontal size to increase.

  - Remove the vertical spacer below the label and set the
    size policy to Expanding for both Horizontal and Vertical.

8 years ago[gens-qt4] GeneralConfigWindow::mcdUpdateRomFileStatus(); Display the ROM support...
David Korth [Tue, 25 Jan 2011 05:24:07 +0000 (00:24 -0500)] 
[gens-qt4] GeneralConfigWindow::mcdUpdateRomFileStatus(); Display the ROM support status.

ROMs with status RomStatus_Broken will trigger an "(X)" icon,
ROMs with status RomStatus_Unsupported will trigger an "/!\" icon.

Also, print the notes field after the ROM status information.

TODO: Should we make a distinction between RomStatus_Recommended
and RomStatus_Supported?

8 years ago[libgens] Data/mcd_rom_db.c: Fixed spacing in the notes field in all database entries.
David Korth [Tue, 25 Jan 2011 05:23:14 +0000 (00:23 -0500)] 
[libgens] Data/mcd_rom_db.c: Fixed spacing in the notes field in all database entries.

The notes were split into multiple lines in the source code, but I
forgot to add extra spaces to the beginning of the second line,
so the words ended up being joined together.

8 years ago[libgens] mcd_rom_db.c: Added a function lg_mcd_rom_GetNotes().
David Korth [Tue, 25 Jan 2011 05:15:20 +0000 (00:15 -0500)] 
[libgens] mcd_rom_db.c: Added a function lg_mcd_rom_GetNotes().

This function returns the notes field for the specified Boot ROM.

8 years ago[gens-qt4] GeneralConfigWindow::mcdDisplayRomFileStatus(): Don't add an extra newline...
David Korth [Tue, 25 Jan 2011 05:09:45 +0000 (00:09 -0500)] 
[gens-qt4] GeneralConfigWindow::mcdDisplayRomFileStatus(): Don't add an extra newline between "Selected ROM" and the ROM ID.

8 years ago[gens-qt4] GeneralConfigWindow::mcdUpdateRomFileStatus(): Use lg_mcd_rom_GetRegionCod...
David Korth [Tue, 25 Jan 2011 05:09:12 +0000 (00:09 -0500)] 
[gens-qt4] GeneralConfigWindow::mcdUpdateRomFileStatus(): Use lg_mcd_rom_GetRegionCodeString() to get region code strings.

8 years ago[libgens] Data/mcd_rom_db.c: Added a function lg_mcd_rom_GetRegionCodeString().
David Korth [Tue, 25 Jan 2011 05:07:06 +0000 (00:07 -0500)] 
[libgens] Data/mcd_rom_db.c: Added a function lg_mcd_rom_GetRegionCodeString().

This function gets a string that describes a region code,
or NULL if the region code is invalid.

8 years ago[gens-qt4] GeneralConfigWindow.cpp: Check the ROM image in the Sega CD Boot ROM database.
David Korth [Tue, 25 Jan 2011 05:03:39 +0000 (00:03 -0500)] 
[gens-qt4] GeneralConfigWindow.cpp: Check the ROM image in the Sega CD Boot ROM database.

If the ROM isn't found in the database, it's marked as Unknown and
the ROM status icon is set to QStyle::SP_MessageBoxWarning.

If the ROM is found, its region code is then checked. If the region
matches (or is compatible, as is the case with JPN/NTSC and JPN/PAL),
the ROM will be marked as valid. Otherwise, a warning will be printed
indicating that a region code mismatch has occurred.

8 years ago[libgens] Data/mcd_rom_db.c: Added functions to get descriptions, regions, and suppor...
David Korth [Tue, 25 Jan 2011 05:01:56 +0000 (00:01 -0500)] 
[libgens] Data/mcd_rom_db.c: Added functions to get descriptions, regions, and support status of the specified Boot ROM image.

8 years ago[libgens] Data/mcd_rom_db.h: Make sure functions are exported with C linkage.
David Korth [Tue, 25 Jan 2011 04:36:25 +0000 (23:36 -0500)] 
[libgens] Data/mcd_rom_db.h: Make sure functions are exported with C linkage.

8 years ago[gens-qt4] GeneralConfigWindow.cpp: Update the Sega CD Boot ROM status when the filen...
David Korth [Tue, 25 Jan 2011 04:10:03 +0000 (23:10 -0500)] 
[gens-qt4] GeneralConfigWindow.cpp: Update the Sega CD Boot ROM status when the filename textboxes are changed.

8 years ago[gens-qt4] GeneralConfigWindow.cpp: Lots of Sega CD Boot ROM status updates.
David Korth [Tue, 25 Jan 2011 04:01:16 +0000 (23:01 -0500)] 
[gens-qt4] GeneralConfigWindow.cpp: Lots of Sega CD Boot ROM status updates.

The status text updates now, but the ROM isn't checked using the
Sega CD Boot ROM database yet.

8 years ago[libgens] Data/mcd_rom_db.c: Initial Sega CD Boot ROM database.
David Korth [Tue, 25 Jan 2011 03:41:34 +0000 (22:41 -0500)] 
[libgens] Data/mcd_rom_db.c: Initial Sega CD Boot ROM database.

The boot ROM database has CRC32s and md5sums for most of the known
Sega CD Boot ROMs. The CRC32s and md5sums were taken for both raw
dumps (with 0xFFFFFD0C horizontal interrupt vector) and on-system
dumps (with 0xFFFFFFFF horizontal interrupt vector).

Also included are region code, ROM support status, description,
and notes about the ROM specific to libgens and Gens/GS II.

8 years ago[gens-qt4] GeneralConfigWindow.cpp: Display the selected ROM ID in lblMcdSelectedRom.
David Korth [Tue, 25 Jan 2011 03:30:03 +0000 (22:30 -0500)] 
[gens-qt4] GeneralConfigWindow.cpp: Display the selected ROM ID in lblMcdSelectedRom.

mcdUpdateRomFileStatus(): Show an exclamation point icon if the file exists.

GensLineEdit: Added signals for focus-in/focus-out.

lblMcdSelectedRom is updated when a focus-in event is received from
one of the Sega CD Boot ROM textboxes.

8 years ago[gens-qt4] CtrlConfigWindow::CtrlConfigWindow(): Updated to use gqt4_emuContext.
David Korth [Tue, 25 Jan 2011 03:26:54 +0000 (22:26 -0500)] 
[gens-qt4] CtrlConfigWindow::CtrlConfigWindow(): Updated to use gqt4_emuContext.

If gqt4_emuContext is NULL, assume no devices are connected.

This fixes a segmentation fault that occurred if emulation wasn't running.

TODO: Load from the configuration cache instead of the emulation context.

8 years ago[gens-qt4] GensLineEdit.cpp: Fixed icon padding.
David Korth [Tue, 25 Jan 2011 02:59:51 +0000 (21:59 -0500)] 
[gens-qt4] GensLineEdit.cpp: Fixed icon padding.

Setting the padding element in the QLabel stylesheet crops the icon
instead of adding padding. Instead, we should make the QLabel a few
pixels larger than the icon, and manually request a 16x16 icon instead
of using the QLabel's size().

8 years ago[gens-qt4] GensLineEdit.cpp: New QLineEdit subclass with support for a right-aligned...
David Korth [Tue, 25 Jan 2011 02:54:29 +0000 (21:54 -0500)] 
[gens-qt4] GensLineEdit.cpp: New QLineEdit subclass with support for a right-aligned icon.

This allows us to indicate the ROM status with an icon:
- (?): No filename specified, or unable to open file.
- (X): Known broken ROM.
- /!\: Unsupported ROM.
- Checkmark: Supported and/or recommended ROM.

8 years ago[gens-qt4] Initial implementation of the General Configuration Window.
David Korth [Tue, 25 Jan 2011 01:59:26 +0000 (20:59 -0500)] 
[gens-qt4] Initial implementation of the General Configuration Window.

The General Configuration Window currently has configuration for
Sega CD boot ROMs. (Sega CD isn't implemented yet, though.)

The configuration currently does not detect the contents of the
selected ROM. The next step is implementing an internal Sega CD
Boot ROM database to identify the Boot ROMs and indicate any
potential errors.

8 years ago[gens-qt4] EmuManager.cpp: #include <config.h>
David Korth [Tue, 25 Jan 2011 01:50:03 +0000 (20:50 -0500)] 
[gens-qt4] EmuManager.cpp: #include <config.h>

8 years agoTAGS.txt: New tag: mcd_pcm-0.1
David Korth [Mon, 24 Jan 2011 06:35:51 +0000 (01:35 -0500)] 
TAGS.txt: New tag: mcd_pcm-0.1

8 years ago[libgens] Dc7z.cpp: 7-Zip's internal filenames are UTF-16BE on big-endian systems.
David Korth [Mon, 24 Jan 2011 05:30:03 +0000 (00:30 -0500)] 
[libgens] Dc7z.cpp: 7-Zip's internal filenames are UTF-16BE on big-endian systems.

This fixes 7-Zip filename display on PowerPC systems.

8 years ago[gens-qt4] GensMenuBar::parseMenu(): Don't add icons to menus on Mac OS X.
David Korth [Mon, 24 Jan 2011 04:52:40 +0000 (23:52 -0500)] 
[gens-qt4] GensMenuBar::parseMenu(): Don't add icons to menus on Mac OS X.

They look horribly out of place on Mac OS X, and I don't think
any other application uses icons in menus for that reason.

8 years ago[libgens] Util/gens_iconv.c: Accept strings with broken input sequences.
David Korth [Mon, 24 Jan 2011 04:25:02 +0000 (23:25 -0500)] 
[libgens] Util/gens_iconv.c: Accept strings with broken input sequences.

Madou Monogatari I has a broken Shift-JIS sequence at position 9.
We should at least show the first few characters instead of parsing
the text as ASCII.

This bug was reported by andlabs in #techies.

8 years ago[libgens] Rom::initEEPRom(): Don't set the EEPRom filename if the ROM isn't in the...
David Korth [Mon, 24 Jan 2011 04:14:57 +0000 (23:14 -0500)] 
[libgens] Rom::initEEPRom(): Don't set the EEPRom filename if the ROM isn't in the EEPRom ROM database.

8 years ago[libgens] Save/EEPRom_DB.cpp: Split the EEPRom ROM database from EEPRom.cpp into...
David Korth [Mon, 24 Jan 2011 04:08:36 +0000 (23:08 -0500)] 
[libgens] Save/EEPRom_DB.cpp: Split the EEPRom ROM database from EEPRom.cpp into a separate file.

8 years ago[libgens] SRam.hpp, EEPRom.hpp: Work around a bug that causes EEPRom to crash on...
David Korth [Mon, 24 Jan 2011 03:53:18 +0000 (22:53 -0500)] 
[libgens] SRam.hpp, EEPRom.hpp: Work around a bug that causes EEPRom to crash on Mac OS X 10.5.

For some reason, putting m_filename after the "EEPRom file handling functions"
comment results in the emulator crashing later on. This fixes that, but there
still may be memory corruption problems elsewhere.

I also applied the same change to SRam.hpp, though that didn't seem
to be crashing.

8 years ago[libgens] Moved m_SRam and m_EEPRom out of M68K_Mem and into EmuContext.
David Korth [Mon, 24 Jan 2011 03:31:01 +0000 (22:31 -0500)] 
[libgens] Moved m_SRam and m_EEPRom out of M68K_Mem and into EmuContext.

These don't belong in M68K_Mem anyway.

Note: I added some temporary static functions so that M68K_Mem can access
the EmuContext SRam/EEPRom data. This may be a little slower, but it will
be removed once M68K_Mem is fully context-aware.

I did this in an attempt to fix the crash bug on Mac OS X, but it didn't
work. Something's probably wrong within the EEPRom class itself.

8 years ago[gens-qt4] Improved emulation thread synchronization.
David Korth [Mon, 24 Jan 2011 02:14:14 +0000 (21:14 -0500)] 
[gens-qt4] Improved emulation thread synchronization.

EmuManager::emuFrameDone(): Don't do anything if the emulation thread
is NULL, or if the emulation thread has been requested to stop.

EmuThread::isStopRequested(): Returns the value of m_stop. This function
is thread-safe, since it locks m_mutex before checking m_stop.

EmuThread::~EmuThread(): Don't call stop() and wait() here, since that
probably won't work in the thread's own destructor.

8 years agoInitial work on creating a new EmuContext system.
David Korth [Mon, 24 Jan 2011 01:58:26 +0000 (20:58 -0500)] 
Initial work on creating a new EmuContext system.

EmuContext converts EmuMD into a regular class. This will make it
much easier to handle resetting the emulated system state, since
all that's required is deleting the class instance.

Currently, parts of the emulation context (like M68K memory) are
still static, so only one EmuContext can be created at a time.
If a second context is created, the program will assert() and abort().

8 years ago[libgens] Decompressor: Mark the destructor as virtual.
David Korth [Mon, 24 Jan 2011 01:10:18 +0000 (20:10 -0500)] 
[libgens] Decompressor: Mark the destructor as virtual.

Classes with virtual functions should have virtual destructors.

8 years ago[libzomg] ZomgSave.cpp::Zomg::savePsgReg(): Use int for the loop counter instead...
David Korth [Mon, 24 Jan 2011 01:05:42 +0000 (20:05 -0500)] 
[libzomg] ZomgSave.cpp::Zomg::savePsgReg(): Use int for the loop counter instead of unsigned int.

8 years ago[libzomg] ZomgSave.cpp::Zomg::savePsgReg(): Fixed a typo that broke compilation on...
David Korth [Mon, 24 Jan 2011 01:04:48 +0000 (20:04 -0500)] 
[libzomg] ZomgSave.cpp::Zomg::savePsgReg(): Fixed a typo that broke compilation on big-endian systems.

8 years ago[tools] mcd_pcm.c: New Sega CD PCM conversion tool. mcd_pcm-0.1
David Korth [Fri, 21 Jan 2011 07:11:27 +0000 (02:11 -0500)] 
[tools] mcd_pcm.c: New Sega CD PCM conversion tool.

mcd_pcm is a tool to convert Sega CD sign/magnitude PCM to standard
unsigned 8-bit PCM in WAV format.

Version 0.1 supports converting a Sega CD PCM file to WAV with
configurable starting position, maximum length, and WAV sample rate.

GNU getopt is used for command line parsing.

8 years agoAdded extra parentheses to the __swab32(x) macros in the byteswap headers.
David Korth [Fri, 21 Jan 2011 06:28:49 +0000 (01:28 -0500)] 
Added extra parentheses to the __swab32(x) macros in the byteswap headers.

This affects libgens/Util/byteswap.h and libzomg/zomg_byteswap.h.

I noticed some warnings regarding missing parentheses when writing the
mcd_pcm utility, which uses the same byteswapping macros as both libgens
and libzomg. Adding these parentheses fixes these warnings.

8 years ago[gens-qt4] VBackend/GensQGLWidget.cpp: Removed TODOs about display lists for OSD...
David Korth [Thu, 20 Jan 2011 04:06:25 +0000 (23:06 -0500)] 
[gens-qt4] VBackend/GensQGLWidget.cpp: Removed TODOs about display lists for OSD messages.

OSD messages have used display lists since commit e1381f1ede4ea1ff75f1a0c4b3dfe06a51077cd7.

8 years ago[gens-qt4] VBackend/GensQGLWidget.cpp: Map Unicode characters to cp437 control charac...
David Korth [Thu, 20 Jan 2011 04:05:52 +0000 (23:05 -0500)] 
[gens-qt4] VBackend/GensQGLWidget.cpp: Map Unicode characters to cp437 control characters.

This is currently done using a switch/case block, which might not be the most
efficient way to do it. I'll figure out some way to optimize this later.

8 years ago[gens-qt4] ui/resources/gens/vga-charset.png: Added cp437 control characters.
David Korth [Thu, 20 Jan 2011 04:04:50 +0000 (23:04 -0500)] 
[gens-qt4] ui/resources/gens/vga-charset.png: Added cp437 control characters.

The paragraph and section symbols are also present in cp1252, so I may
replace then with other symbols later.

8 years ago[gens-qt4] GensQGLWidget::resizeGL(): Simplified aspect ratio constraint code a bit.
David Korth [Thu, 20 Jan 2011 03:22:13 +0000 (22:22 -0500)] 
[gens-qt4] GensQGLWidget::resizeGL(): Simplified aspect ratio constraint code a bit.

Compute the ratio once and assign it to a const double instead of
computing it multiple times within glOrtho().

g++ probably optimized this out anyway, but doing this makes it
easier to maintain, since we only have the ratio calculation once
in the original source code instead of twice for each branch.

8 years ago[gens-qt4] AboutWindow.cpp: Updated to use the new credits format. gens-credits-v1
David Korth [Sun, 16 Jan 2011 01:59:04 +0000 (20:59 -0500)] 
[gens-qt4] AboutWindow.cpp: Updated to use the new credits format.

8 years ago[libgens] credits.c: New credits format.
David Korth [Sun, 16 Jan 2011 01:58:30 +0000 (20:58 -0500)] 
[libgens] credits.c: New credits format.

The new credits format splits titles and names, which will make it
easier to provide information to Sik's Credits ROM.

8 years ago[libgens] cpu/M68K_Mem.cpp::M68K_Read_Byte_VDP(): Minor comment update.
David Korth [Sat, 15 Jan 2011 13:05:47 +0000 (08:05 -0500)] 
[libgens] cpu/M68K_Mem.cpp::M68K_Read_Byte_VDP(): Minor comment update.

8 years ago[WTF] [libgens] cpu/M68K_Mem.cpp::M68K_Read_Byte_VDP(): Fixed incorrect swapping...
David Korth [Sat, 15 Jan 2011 13:00:51 +0000 (08:00 -0500)] 
[WTF] [libgens] cpu/M68K_Mem.cpp::M68K_Read_Byte_VDP(): Fixed incorrect swapping of $C00004/$C00005.

Sik's Credits ROM for Gens/GS II uses byte-wide access to the VDP
status register for vertical sync (instead of interrupts).

Unfortunately, Gens/GS II's M68K byte-wide VDP status register read code
was broken, resulting in the Credits ROM running much faster than it
should have been running.

This commit correctly orders $C00004/$C00005, which fixes the Credits ROM.

I don't think any commercial games used polling for VBlank, so this
bug shouldn't have affected anything else...

8 years ago[libgens] IoBase::zomgSaveMD(): Fixed the function comment.
David Korth [Wed, 12 Jan 2011 22:05:46 +0000 (17:05 -0500)] 
[libgens] IoBase::zomgSaveMD(): Fixed the function comment.

This function uses Zomg_MD_IoSave_int_t, not Zomg_PsgSave_t.

8 years ago[libgens] M68K::ZomgRestoreReg(): "Save the stack pointers." -> "Load the stack point...
David Korth [Wed, 12 Jan 2011 16:17:43 +0000 (11:17 -0500)] 
[libgens] M68K::ZomgRestoreReg(): "Save the stack pointers." -> "Load the stack pointers."

This function loads savestate data. It doesn't save savestate data.

8 years ago[libgens] Save/GensZomg.cpp::ZomgLoad(): Return -1 if the specified filename isn...
David Korth [Wed, 12 Jan 2011 07:54:43 +0000 (02:54 -0500)] 
[libgens] Save/GensZomg.cpp::ZomgLoad(): Return -1 if the specified filename isn't found.

-2 indicates the file isn't ZOMG format.
-3 indicates the file couldn't be opened.

TODO: Standardize the error codes.

8 years ago[libgens] cpu/M68K.cpp: Updated for the libzomg Zomg_M68KRegSave_t struct changes.
David Korth [Wed, 12 Jan 2011 06:20:54 +0000 (01:20 -0500)] 
[libgens] cpu/M68K.cpp: Updated for the libzomg Zomg_M68KRegSave_t struct changes.

Starscream uses the areg[7]/asp format, so we have to convert to/from
explicit ssp/usp to areg[7]/asp in M68K.cpp. This is dependent on the
status register value; however, it's better to put the logic for this
in M68K.cpp instead of in the save file itself.

With areg[7]/asp, toggling the supervisor bit in sr in the savestate
would result in the stack pointers being switched if they aren't
swapped manually. With ssp/usp, toggling the supervisor bit will
automatically swap areg[7]/asp on load.

8 years ago[libzomg] zomg_m68k.h: Updated Zomg_M68KRegSave_t for the ZOMG.txt changes in commit...
David Korth [Wed, 12 Jan 2011 06:18:36 +0000 (01:18 -0500)] 
[libzomg] zomg_m68k.h: Updated Zomg_M68KRegSave_t for the ZOMG.txt changes in commit c43510fe.

The old version is now Zomg_M68KRegSave_Old_t, and will probably
be removed once ZOMG 0.8 is finalized.

Zomg::saveM68KReg(): Save using the new Zomg_M68KRegSave_t.

Zomg::loadM68KReg(): Support loading both the new Zomg_M68KRegSave_t and
the old Zomg_M68KRegSave_Old_t. Version detection is done by filesize.
(The old version is 74 bytes, and the new version is 80 bytes.)

8 years agodoc/ZOMG.txt: Minor fixes to ZOMG_M68K_reg_t.
David Korth [Wed, 12 Jan 2011 05:47:57 +0000 (00:47 -0500)] 
doc/ZOMG.txt: Minor fixes to ZOMG_M68K_reg_t.

- Added some clarifications to areg[], ssp, and usp.

- Renamed the two "reserved" fields to "reserved1" and "reserved2".

8 years agodoc/ZOMG.txt: Reordered the ZOMG_M68K_reg_t struct.
David Korth [Wed, 12 Jan 2011 05:41:25 +0000 (00:41 -0500)] 
doc/ZOMG.txt: Reordered the ZOMG_M68K_reg_t struct.

The reordering makes the register struct more closely match the
MC68000 internal structure, and it explicitly separates the two
stack pointers.

Note that this breaks compatibility with older savestates; however,
by checking the size of the data read from the savestate, it's
possible to support both versions. This should only be done for
development purposes, since the ZOMG specification hasn't been
released yet.

8 years ago[libgens] Save/GensZomg.cpp::ZomgLoad(): Make sure the savestate is a ZOMG file befor...
David Korth [Thu, 6 Jan 2011 15:17:28 +0000 (10:17 -0500)] 
[libgens] Save/GensZomg.cpp::ZomgLoad(): Make sure the savestate is a ZOMG file before attempting to load it.

8 years ago[libzomg] Zomg::DetectFormat(): Implemented DetectFormat() for ZOMG savestates.
David Korth [Thu, 6 Jan 2011 15:16:50 +0000 (10:16 -0500)] 
[libzomg] Zomg::DetectFormat(): Implemented DetectFormat() for ZOMG savestates.

TODO: This only checks if the file is a ZIP file.
Check FORMAT.INI once it's implemented.

8 years ago[libzomg] ZomgBase.hpp: New ZOMG base class.
David Korth [Thu, 6 Jan 2011 15:11:03 +0000 (10:11 -0500)] 
[libzomg] ZomgBase.hpp: New ZOMG base class.

The base class will be used to add Genecyst savestate (GST) support.

GST won't be supported in Gens/GS II, but will be supported in a new
"Savestate Viewer" program I'm going to write. The savestate viewer
will display VDP information, including scroll planes. (This will
later be converted to an MDP plugin, i.e. the VDP Debugger plugin.)

Zomg.cpp: Updated the Zomg class to inherit from ZomgBase.

8 years ago[gens-qt4] GensQGLWidget::sizeHint(): Return QSize(320, 240).
David Korth [Mon, 27 Dec 2010 01:59:58 +0000 (20:59 -0500)] 
[gens-qt4] GensQGLWidget::sizeHint(): Return QSize(320, 240).

TODO: Return a different size depending on renderer?

8 years ago[gens-qt4] Removed all references to libgens/macros/git.h in C++ files.
David Korth [Sat, 25 Dec 2010 19:04:57 +0000 (14:04 -0500)] 
[gens-qt4] Removed all references to libgens/macros/git.h in C++ files.

Use LibGens::version, LibGens::version_desc, and LibGens::version_vcs instead.

This reduces the number of files that need to be recompiled after every
git commit.

ui/gens-qt4.rc still needs to #include "libgens/macros/git.h", since resource
files can't exactly reference a C/C++ symbol at runtime.

8 years ago[libgens] lg_main.cpp: Added external variables to indicate the libgens version.
David Korth [Sat, 25 Dec 2010 19:03:56 +0000 (14:03 -0500)] 
[libgens] lg_main.cpp: Added external variables to indicate the libgens version.

This includes the VCS version, which will be used instead of GENS_GIT_VERSION
in order to reduce the number of files that need to be recompiled after every
git commit.

8 years ago[libgens] macros/log_msg.h: Removed unnecessary includes for config.h and stdio.h.
David Korth [Sat, 25 Dec 2010 18:50:24 +0000 (13:50 -0500)] 
[libgens] macros/log_msg.h: Removed unnecessary includes for config.h and stdio.h.

8 years ago[libgens] GensZomg.cpp::ZomgLoad(): Handle short reads in Zomg::loadMD_TimeReg().
David Korth [Sat, 25 Dec 2010 16:58:49 +0000 (11:58 -0500)] 
[libgens] GensZomg.cpp::ZomgLoad(): Handle short reads in Zomg::loadMD_TimeReg().

If <= 0xF1 bytes are read, a default value will be written to the SRam control
register. The specific value depends on the size of the ROM:

-  < 2 MB: SRAM on, write-enabled.
- >= 2 MB: SRAM off, write-protected.

8 years ago[libzomg] Zomg::loadMD_Z80Ctrl(): Clean up fallbacks for short or non-existent MD...
David Korth [Sat, 25 Dec 2010 16:56:27 +0000 (11:56 -0500)] 
[libzomg] Zomg::loadMD_Z80Ctrl(): Clean up fallbacks for short or non-existent MD/TIME_reg.bin.

- memset() the state to 0xFF at the beginning of the function instead of branching.

- If the data read is <= 0xF1 bytes, set the SRAM control register to 2
  (SRAM off, write-protected).

8 years ago[gens-qt4] EmuManager::closeRom(): Disconnect gqt4_emuThread's signals before deletin...
David Korth [Sat, 25 Dec 2010 15:28:49 +0000 (10:28 -0500)] 
[gens-qt4] EmuManager::closeRom(): Disconnect gqt4_emuThread's signals before deleting it.

This was suggested by andlabs as a way to fix the video corruption issues,
but it doesn't seem to help that much. I'll leave it in anyway, along with
the delay hack.

8 years ago[gens-qt4] EmuManager.cpp, EmuThread.cpp: Added a hack to "fix" the savestate loading...
David Korth [Fri, 24 Dec 2010 20:09:22 +0000 (15:09 -0500)] 
[gens-qt4] EmuManager.cpp, EmuThread.cpp: Added a hack to "fix" the savestate loading issue.

If a ROM is open when another ROM is opened, we need to wait around 100 ms
after closing the first ROM before loading the new ROM. Otherwise, the
emulation thread signals get screwed up.

TODO: Figure out a proper fix.

8 years ago[gens-qt4] GensWindow::menuTriggered(): Print the new color depth setting when the...
David Korth [Thu, 23 Dec 2010 15:36:19 +0000 (10:36 -0500)] 
[gens-qt4] GensWindow::menuTriggered(): Print the new color depth setting when the color depth is changed.

TODO: Color depth changes should be pushed to the emulation queue.
If the color depth is changed while the emulation thread is running,
shenanigans can happen. (Part of the framebuffer will be written
with the old color depth, and part of the framebuffer will be written
with the new color depth. It'll be drawn to the screen using the new
color depth.)

8 years ago[libgens] Save/GensZomg.cpp::ZomgLoad(): Set the VRam and CRam flags to force updates...
David Korth [Mon, 20 Dec 2010 16:39:42 +0000 (11:39 -0500)] 
[libgens] Save/GensZomg.cpp::ZomgLoad(): Set the VRam and CRam flags to force updates on savestate load.

8 years ago[libzomg] Zomg::loadMD_TimeReg(): Fill the remainder of the state with 0xFF in cases...
David Korth [Sun, 19 Dec 2010 18:50:05 +0000 (13:50 -0500)] 
[libzomg] Zomg::loadMD_TimeReg(): Fill the remainder of the state with 0xFF in cases of short read or file not found.

This is needed in order to ensure that the SSF2 bankswitching data is
initialized to 0xFF if either the MD/TIME_reg.bin file is too short or
the MD/TIME_reg.bin file isn't found.

0xFF indicates the default bankswitching state, i.e. physical banks 0-7
correspond with virtual banks 0-7.

8 years ago[libgens] Save/restore the SSF2 banking registers in MD/TIME_reg.bin.
David Korth [Sun, 19 Dec 2010 18:40:29 +0000 (13:40 -0500)] 
[libgens] Save/restore the SSF2 banking registers in MD/TIME_reg.bin.

SSF2 savestates now work correctly when banks are remapped.

cpu/M68K_Mem.cpp: Implemented ZomgSaveSSF2BankState(), which saves
the state to a Zomg_MD_TimeReg_t struct, and ZomgRestoreSSF2BankState(),
which restores the state from an Zomg_MD_TimeReg_t struct and remaps
the M68K read byte/word tables.

Save/GensZomg.cpp:

8 years ago[libgens] Rom::loadRomHeader(): Use %zu for printing size_t instead of %d.
David Korth [Sun, 19 Dec 2010 18:40:03 +0000 (13:40 -0500)] 
[libgens] Rom::loadRomHeader(): Use %zu for printing size_t instead of %d.

8 years ago[libgens] DcGzip::getFileInfo(): Removed an old printf() used for debugging.
David Korth [Sun, 19 Dec 2010 18:12:32 +0000 (13:12 -0500)] 
[libgens] DcGzip::getFileInfo(): Removed an old printf() used for debugging.

8 years ago[libgens] star_m68k.c::releaseCycles(): Take the number of cycles to release from...
David Korth [Sat, 18 Dec 2010 17:51:13 +0000 (12:51 -0500)] 
[libgens] star_m68k.c::releaseCycles(): Take the number of cycles to release from the stack.

The old x86 asm VDP code passed the number of cycles to release (DMAT_Length)
through the %eax register. This obviously won't work with the C++ port, so we
need to specify the number of cycles using standard calling conventions.

cpu/star_68k.h: Updated the SN##releaseCycles() function prototype for this change.

cpu/M68K.hpp: Updated M68K::ReleaseCycles() for this change.

8 years agoTAGS.txt: New tag: gens-no-emulation-build
David Korth [Sat, 18 Dec 2010 17:35:16 +0000 (12:35 -0500)] 
TAGS.txt: New tag: gens-no-emulation-build

8 years ago[gens-qt4] Indicate if this is a No-Emulation build. gens-no-emulation-build
David Korth [Sat, 18 Dec 2010 14:44:44 +0000 (09:44 -0500)] 
[gens-qt4] Indicate if this is a No-Emulation build.

GensWindow.cpp: Display "NO-EMU" in the title bar.

AboutWindow.cpp: Display "NO-EMULATION BUILD" in the program title section.

8 years ago[libgens] lg_main.cpp: Print a message if this is a No-Emulation build.
David Korth [Sat, 18 Dec 2010 14:35:15 +0000 (09:35 -0500)] 
[libgens] lg_main.cpp: Print a message if this is a No-Emulation build.

8 years ago[libgens] M68K::Interrupt(): Return the return value from main68k_interrupt().
David Korth [Sat, 18 Dec 2010 14:34:57 +0000 (09:34 -0500)] 
[libgens] M68K::Interrupt(): Return the return value from main68k_interrupt().

8 years agoFixed 32-bit i386 builds:
David Korth [Sat, 18 Dec 2010 14:31:21 +0000 (09:31 -0500)] 
Fixed 32-bit i386 builds:

- CMake/CheckSystemX8632.cmake: Added a missing parenthesis. This caused
  compilation to fail regardless of architecture, resulting in CPU emulation
  being disabled regardless.

- [libgens] CMakeLists.txt: Fixed the TARGET_LINK_LIBRARIES() invocation
  for starscream and mdZ80. (The project name wasn't specified, so CMake
  assumed the project was gens, which is wrong.)

8 years agoCMake/CheckSystemX8632.cmake: Forgot to add this in commit 1a8b524d901c9934d2fa572cc2...
David Korth [Sat, 18 Dec 2010 14:28:14 +0000 (09:28 -0500)] 
CMake/CheckSystemX8632.cmake: Forgot to add this in commit 1a8b524d901c9934d2fa572cc29fc93adc2a112d.

8 years ago[libgens] M68K::ZomgSaveReg(), M68K::ZomgRestoreReg(): Use int instead of unsigned...
David Korth [Sat, 18 Dec 2010 14:05:31 +0000 (09:05 -0500)] 
[libgens] M68K::ZomgSaveReg(), M68K::ZomgRestoreReg(): Use int instead of unsigned int for the counter.

8 years agoInitial support for no-emulation builds on non-x86_32 platforms.
David Korth [Sat, 18 Dec 2010 14:03:50 +0000 (09:03 -0500)] 
Initial support for no-emulation builds on non-x86_32 platforms.

The no-emulation builds disable M68K and Z80 emulation, but everything
else is enabled and (should) work properly.

I've noticed some odd audio glitches when loading savestate with the
non-emulation build, and I think these same glitches occur with the
regular x86_32 build as well. I'll have to figure out what it is later.
(I think it's related to DAC not being shut off when it's not needed.)

8 years ago[gens-qt4] EmuManager::openRom(): Initialize timing information.
David Korth [Wed, 15 Dec 2010 15:48:27 +0000 (10:48 -0500)] 
[gens-qt4] EmuManager::openRom(): Initialize timing information.

This fixes a bug where the FPS counter slowly increases from 0 fps
to 60 fps when a ROM is opened for the second time in an application
session. (The FPS counter acts normally for the first ROM opened.)

Also, initialize m_lastTime_fps in the EmuManager constructor.