8 years ago[gens-qt4] EmuManager: Update the region code if the auto-detect order is changed... gens-qt4-region-code-v1
David Korth [Mon, 28 Feb 2011 15:50:43 +0000 (10:50 -0500)] 
[gens-qt4] EmuManager: Update the region code if the auto-detect order is changed and current region is auto-detect.

8 years ago[gens-qt4] GeneralConfigWindow.cpp: Save region auto-detection order.
David Korth [Mon, 28 Feb 2011 15:46:45 +0000 (10:46 -0500)] 
[gens-qt4] GeneralConfigWindow.cpp: Save region auto-detection order.

GeneralConfigWindow::regionCodeOrder(): New function to get the current
region auto-detection order from lstRegionDetect.

TODO: Determine if a drag-and-drop occurred in lstRegionDetect, and if
it did, enable Apply and/or apply the change.

8 years ago[gens-qt4] EmuManager::GetLgRegionCode(): Added a parameter for region code order.
David Korth [Mon, 28 Feb 2011 15:40:03 +0000 (10:40 -0500)] 
[gens-qt4] EmuManager::GetLgRegionCode(): Added a parameter for region code order.

The specified region code order is now used instead of a hard-coded 0x4812.

EmuManager::loadRom_int(): Specify the user's region code order.

EmuManager::doRegionCode(): Specify the user's region code order.

8 years ago[gens-qt4] Use LibGens::Rom::RegionCodeStr() and LibGens::Rom::RegionCodeStrMD().
David Korth [Mon, 28 Feb 2011 15:32:45 +0000 (10:32 -0500)] 
[gens-qt4] Use LibGens::Rom::RegionCodeStr() and LibGens::Rom::RegionCodeStrMD().

EmuManager::loadRom_int(): Use LibGens::Rom::RegionCodeStr().

EmuManager::doRegionCode(): Use LibGens::Rom::RegionCodeStr().

GeneralConfigWindow::reload(): Use LibGens::Rom::RegionCodeStrMD().

EmuManager::GetLgRegionStr(): Removed this function. It's been
replaced by LibGens::Rom::RegionCodeStr().

8 years ago[libgens] Rom::RegionCodeStrMD(): Actually, we need support for both SysVersion:...
David Korth [Mon, 28 Feb 2011 15:31:30 +0000 (10:31 -0500)] 
[libgens] Rom::RegionCodeStrMD(): Actually, we need support for both SysVersion::RegionCode_t and MD hex region codes.

8 years ago[libgens] Rom::RegionCodeStr(): region parameter needs to be SysVersion::RegionCode_t...
David Korth [Mon, 28 Feb 2011 15:29:45 +0000 (10:29 -0500)] 
[libgens] Rom::RegionCodeStr(): region parameter needs to be SysVersion::RegionCode_t, not an MD hex region code.

8 years ago[libgens] Rom::regionCode(): TODO: Change to uint8_t?
David Korth [Mon, 28 Feb 2011 15:17:00 +0000 (10:17 -0500)] 
[libgens] Rom::regionCode(): TODO: Change to uint8_t?

8 years ago[libgens] Rom::RegionCodeStr(): New function to get a string identifying a region...
David Korth [Mon, 28 Feb 2011 15:16:37 +0000 (10:16 -0500)] 
[libgens] Rom::RegionCodeStr(): New function to get a string identifying a region code.

This function returns an ASCII string, suitable for translation.

If the region code does not describe a single region or is invalid,
NULL will be returned.

8 years ago[gens-qt4] GeneralConfigWindow::reload(): Load region auto-detection settings.
David Korth [Mon, 28 Feb 2011 04:53:39 +0000 (23:53 -0500)] 
[gens-qt4] GeneralConfigWindow::reload(): Load region auto-detection settings.

Use gqt4_config->regionCodeOrder() to determine which order to add
the auto-detect items to lstRegionDetect.

ui/GeneralConfigWindow.ui: Removed the default items in lstRegionDetect.

lstRegionDetect is now populated in GeneralConfigWindow::reload().

TODO: Save the new ordering in GeneralConfigWindow::save().

8 years ago[gens-qt4] GensConfig.cpp: Added a property regionCodeOrder.
David Korth [Mon, 28 Feb 2011 04:46:05 +0000 (23:46 -0500)] 
[gens-qt4] GensConfig.cpp: Added a property regionCodeOrder.

This property is a 16-bit value that indicates the priority preferences
for region code auto-detection. The most-significant nybble indicates
the highest-priority region, and each lesser-significant nyblle indicates
the region of lower priorities.

There are only 24 possible valid values for this value. Each nybble
must have a single bit set, and each possible value (1, 2, 4, and 8)
must be used exactly once. If setRegionCodeOrder() is called with an
invalid value, it is ignored. If the configuration file has an invalid
value, a default value is used. (currently 0x4812 for US, EU, JP, Asia)

8 years ago[gens-qt4] actions/GensKeyConfig.cpp: Removed an extra #include <stdio.h>.
David Korth [Mon, 28 Feb 2011 04:37:07 +0000 (23:37 -0500)] 
[gens-qt4] actions/GensKeyConfig.cpp: Removed an extra #include <stdio.h>.

This #include was accidentally added in commit 457b6bc7e43283448860060d6745b89f1e6fc708.
([gens-qt4] Added a new menu to the menu bar, "System".)

8 years ago[gens-qt4] GensConfig::emitAll(): Emit the regionCode_changed() signal.
David Korth [Mon, 28 Feb 2011 04:33:29 +0000 (23:33 -0500)] 
[gens-qt4] GensConfig::emitAll(): Emit the regionCode_changed() signal.

This didn't cause a problem before, since the EmuContext isn't
created until after configuration is loaded, but we should emit
the signal here anyway.

8 years ago[gens-qt4] GeneralConfigWindow_slots.cpp: Added a missing cast that broke compilation...
David Korth [Mon, 28 Feb 2011 01:28:28 +0000 (20:28 -0500)] 
[gens-qt4] GeneralConfigWindow_slots.cpp: Added a missing cast that broke compilation on Mac OS X.

This bug was reported by andlabs in #GensGS.

8 years ago[gens-qt4] GeneralConfigWindow.hpp: Removed a leftover "class QModelIndexList;" that...
David Korth [Mon, 28 Feb 2011 01:18:51 +0000 (20:18 -0500)] 
[gens-qt4] GeneralConfigWindow.hpp: Removed a leftover "class QModelIndexList;" that broke compilation on Mac OS X.

This bug was reported by andlabs in #GensGS.

8 years agoTAGS.txt: New tag: gens-qt4-region-code-v0
David Korth [Mon, 28 Feb 2011 00:54:03 +0000 (19:54 -0500)] 
TAGS.txt: New tag: gens-qt4-region-code-v0

8 years ago[gens-qt4] actions/GensActions.cpp: Implemented the region code actions. gens-qt4-region-code-v0
David Korth [Mon, 28 Feb 2011 00:50:36 +0000 (19:50 -0500)] 
[gens-qt4] actions/GensActions.cpp: Implemented the region code actions.

All five menu items work, and code is added for the base menu item
(IDM_SYSTEM_REGION) in case a user maps a shortcut key to it.

TODO: Menu synchronization.

8 years ago[gens-qt4] EmuManager: Print the auto-detected region on ROM load and/or region code...
David Korth [Mon, 28 Feb 2011 00:28:12 +0000 (19:28 -0500)] 
[gens-qt4] EmuManager: Print the auto-detected region on ROM load and/or region code change.

This only applies if the user's region code is set to GensConfig::CONFREGION_AUTODETECT.

8 years ago[libgens] EmuMD::setRegion_int(): Don't reset anything if we're switching between...
David Korth [Mon, 28 Feb 2011 00:17:28 +0000 (19:17 -0500)] 
[libgens] EmuMD::setRegion_int(): Don't reset anything if we're switching between East/West and preserveState is true.

preserveState is only false when the emulation context is being initialized.

This reduces audio jitter when switching between US and Japan or
between Europe and Asia. The jitter's still there when switching
between NTSC and PAL due to the clock frequency changes.

8 years ago[gens-qt4] EmuManager_qEmu.cpp: Added support for changing the region code on the...
David Korth [Mon, 28 Feb 2011 00:12:21 +0000 (19:12 -0500)] 
[gens-qt4] EmuManager_qEmu.cpp: Added support for changing the region code on the fly.

EmuManager.cpp: Connected GensConfig's regionCode_changed() to a new slot,

Region code changing works now, though only through the "General Configuration"
window. I'll add menu support next.

8 years ago[gens-qt4] EmuManager::GetLgRegionCode(): Split region code detection into a separate...
David Korth [Mon, 28 Feb 2011 00:00:31 +0000 (19:00 -0500)] 
[gens-qt4] EmuManager::GetLgRegionCode(): Split region code detection into a separate function.

This function will be used for changing the system region code while
emulation is running.

8 years ago[libgens] MD/EmuMD.cpp: Split the region code functionality into a separate function...
David Korth [Sun, 27 Feb 2011 23:53:08 +0000 (18:53 -0500)] 
[libgens] MD/EmuMD.cpp: Split the region code functionality into a separate function, setRegion() / setRegion_int().

EmuMD::EmuMD(): Call setRegion_int() instead of setting the
region code stuff manually.

EmuContext::setRegion(): New pure virtual function setRegion().

setRegion() will be used to set the system region while emulation
is running via the Emulation Request Queue.

8 years ago[libgens] MD/EmuMD.cpp: Initial region code support.
David Korth [Sun, 27 Feb 2011 23:45:06 +0000 (18:45 -0500)] 
[libgens] MD/EmuMD.cpp: Initial region code support.

Region code is currently only applied on startup, and cannot be
changed while emulation is running.


[gens-qt4] EmuContext.cpp: Specify the currently selected region
when creating the EmuMD object.

- Added basic country code auto-detection that uses a hard-coded
  region order.

TODO: Add support for custom region code orders.

TODO: Add support for changing the region code while emulation is running.

8 years ago[gens-qt4] ui/GeneralConfigWindow.ui: Moved the "System" tab to the right of the...
David Korth [Sun, 27 Feb 2011 23:29:56 +0000 (18:29 -0500)] 
[gens-qt4] ui/GeneralConfigWindow.ui: Moved the "System" tab to the right of the "Graphics" tab.

It makes more sense to have "System" closer to the actual system-specific
tabs than it does for "Graphics", plus the "Graphics" options are probably
going to be used more often.

8 years ago[gens-qt4] GeneralConfigWindow.cpp: Added load/save support for the current region...
David Korth [Sun, 27 Feb 2011 23:27:09 +0000 (18:27 -0500)] 
[gens-qt4] GeneralConfigWindow.cpp: Added load/save support for the current region code.

8 years ago[gens-qt4] Fixed signal connection issues due to InterlacedMode_t and StretchMode_t...
David Korth [Sun, 27 Feb 2011 23:20:25 +0000 (18:20 -0500)] 
[gens-qt4] Fixed signal connection issues due to InterlacedMode_t and StretchMode_t changes.

This is a regression from commit 0eadeb32f9a94a833dbf847c7784886b50aeb1dd.
([gens-qt4] GensConfig.cpp: Added a property for the current region code.)

8 years ago[gens-qt4] GensConfig.cpp: Added a property for the current region code.
David Korth [Sun, 27 Feb 2011 23:19:23 +0000 (18:19 -0500)] 
[gens-qt4] GensConfig.cpp: Added a property for the current region code.

This property uses a new enum, ConfRegionCode_t, that contains an additional
value for "auto-detect".

TODO: Maybe integrate "auto-detect" with LibGens?

Updated all the config enums (and LibGens::SysVersion::RegionCode_t)
to use "_t" suffixes.

8 years ago[gens-qt4] GeneralConfigWindow: Initial "System" tab.
David Korth [Sun, 27 Feb 2011 22:13:54 +0000 (17:13 -0500)] 
[gens-qt4] GeneralConfigWindow: Initial "System" tab.

Currently, the System tab contains configuration for setting the current
region code (also available in the "System" menu in the GensWindow)
and for setting the region auto-detection order.

Note: None of this is functional at the moment.

ui/resources/oxygen/: Added arrow-down.png and arrow-up.png for all
sizes except 64x64.

GeneralConfigWindow.cpp: Added code for the up/down buttons.

TODO: Detect drag-and-drop of items within the QListWidget.

8 years ago[gens-qt4] ui/GeneralConfigWindow.ui: Updated some accelerator keys on the "General...
David Korth [Sun, 27 Feb 2011 21:37:13 +0000 (16:37 -0500)] 
[gens-qt4] ui/GeneralConfigWindow.ui: Updated some accelerator keys on the "General" tab.

8 years ago[gens-qt4] ui/GeneralConfigWindow.ui: Updated tab ordering.
David Korth [Sun, 27 Feb 2011 21:24:30 +0000 (16:24 -0500)] 
[gens-qt4] ui/GeneralConfigWindow.ui: Updated tab ordering.

Forgot to do this in commit e492a9d389836a061839a58320896bad9daad923.
([gens-qt4] ui/GeneralConfigWindow.ui: Redesigned the "General" tab to have a vertical layout.)

8 years ago[gens-qt4] ui/GeneralConfigWindow.ui: Redesigned the "General" tab to have a vertical...
David Korth [Sun, 27 Feb 2011 21:19:52 +0000 (16:19 -0500)] 
[gens-qt4] ui/GeneralConfigWindow.ui: Redesigned the "General" tab to have a vertical layout.

Rewrote most of the items to use a more natural sentence structure.

OSD items now have a checkbox for "Show [item] in" with the color button
for "this color".

8 years ago[gens-qt4] CMakeLists.txt: Qt 4.2 is required for QMainWindow::menuWidget().
David Korth [Sun, 27 Feb 2011 06:28:54 +0000 (01:28 -0500)] 
[gens-qt4] CMakeLists.txt: Qt 4.2 is required for QMainWindow::menuWidget().

GensWindow uses QMainWindow::menuWidget() to determine if the menu bar
is currently visible or not, since QMainWindow::menuBar() implicitly
creates a new menu bar if it's called and there's no menu bar.

8 years ago[gens-qt4] Initial support for hiding the menu bar.
David Korth [Sun, 27 Feb 2011 00:01:59 +0000 (19:01 -0500)] 
[gens-qt4] Initial support for hiding the menu bar.

GensMenuBar no longer inherits from QMenuBar; instead, it inherits from QObject
and owns a QMenu, which can be used as a popup menu. The popup menu can be
obtained via GensMenuBar::popupMenu().

To obtain a QMenuBar, call GensMenuBar::createMenuBar(). This creates a
QMenuBar object, which can then be added to a QMainWindow. Note that a
new QMenuBar is created each time, since QMainWindow::setMenuBar(NULL)
will delete the existing menu bar.

Added a new menu item, "Show Menu Bar", in the Graphics menu.
The default shortcut key is Ctrl+M.

Note: Menu bar hiding is disabled on Mac OS X, since Mac OS X uses a
global menu bar that isn't part of the window.


- Menu synchronization.

- Resize the GensWindow when the menu bar is hidden or shown.

- Store the menu bar visibility setting in GensConfig.

8 years ago[libgens] Rom::detectRegionCodeMD(): MD region code detection.
David Korth [Sat, 26 Feb 2011 21:53:47 +0000 (16:53 -0500)] 
[libgens] Rom::detectRegionCodeMD(): MD region code detection.

Based on g_md.cpp::Detect_Country_Genesis() from Gens/GS.

The region code is detected on ROM startup, and is available via
Rom::regionCode(). It uses the same format as later MD titles,
i.e. a four-bit hexadecimal digit representing the four regions.

TODO: Use the region code for region auto-detection.

8 years ago[gens-qt4] GensKeyConfigPrivate::DefKeySettings[]: Added entries for IDM_SYSTEM_CPURE...
David Korth [Sat, 26 Feb 2011 21:34:19 +0000 (16:34 -0500)] 
[gens-qt4] GensKeyConfigPrivate::DefKeySettings[]: Added entries for IDM_SYSTEM_CPURESET_M68K and IDM_SYSTEM_CPURESET_Z80.

8 years ago[gens-qt4] actions/GensActions.cpp: Emit a signal actionResetCpu() instead of calling...
David Korth [Sat, 26 Feb 2011 21:31:09 +0000 (16:31 -0500)] 
[gens-qt4] actions/GensActions.cpp: Emit a signal actionResetCpu() instead of calling m_parent->resetCpu().

Updated everything to use int for cpu_idx instead of ResetCpuIndex
to prevent issues with enums in Qt signals/slots.

GensWindow.cpp: Removed resetCpu(). It's no longer needed now that
GensActions' actionResetCpu() signal is connected directly to
EmuManager's resetCpu() slot.

8 years ago[gens-qt4] EmuManager: Added CPU reset for M68K and Z80.
David Korth [Sat, 26 Feb 2011 21:25:11 +0000 (16:25 -0500)] 
[gens-qt4] EmuManager: Added CPU reset for M68K and Z80.

This allows the user to reset each CPU individually.

GensWindow: Added CPU reset support.
- TODO: Convert to signal/slot for a direct connection with EmuManager.

actions/GensActions.cpp: Reset the appropriate CPUs when the specified
menu item is selected.

8 years ago[libgens] cpu/Z80.hpp: #include "../mdZ80/mdZ80.h" for gens-qt4 compatibility.
David Korth [Sat, 26 Feb 2011 21:21:13 +0000 (16:21 -0500)] 
[libgens] cpu/Z80.hpp: #include "../mdZ80/mdZ80.h" for gens-qt4 compatibility.

8 years ago[gens-qt4] Added a new menu to the menu bar, "System".
David Korth [Sat, 26 Feb 2011 21:12:25 +0000 (16:12 -0500)] 
[gens-qt4] Added a new menu to the menu bar, "System".

The System menu has Hard Reset, Soft Reset, Pause, region code options,
and CPU reset items.

Currently, only Hard Reset, Soft Reset, and Pause work, and the Pause
state isn't synchronized.

TODO: Menu synchronization.

8 years ago[libgens] VdpRend_Err::T_DrawVDPErrorMessage(): Fixed text alignment.
David Korth [Sat, 26 Feb 2011 20:21:59 +0000 (15:21 -0500)] 
[libgens] VdpRend_Err::T_DrawVDPErrorMessage(): Fixed text alignment.

Updating the text to say "Gens/GS II" instead of "Gens/GS" threw off
all of the text alignment calculations. This commit fixes them.

Note: The second line of text is now aligned on a half-character
boundary. I don't think it's a big deal, so meh.

8 years ago[libgens] MD/VdpIo.hpp: Marked H_Pix, H_Pix_Begin, and H_Cell as private.
David Korth [Sat, 26 Feb 2011 20:16:28 +0000 (15:16 -0500)] 
[libgens] MD/VdpIo.hpp: Marked H_Pix, H_Pix_Begin, and H_Cell as private.

Added an accessor function for H_Cell, GetHCells().

MD/VdpRend_m5.cpp: Use the accessor functions GetHPix(), GetHPixBegin(),
and GetHCells() instead of accessing the variables directly.

The accessor functions are inline, so there's slight overhead in the
debug build, but the release build will have zero overhead compared
to accessing the variables directly.

8 years ago[libgens] MD/VdpRend_Err.cpp: Reimplemented the VDP error message display.
David Korth [Sat, 26 Feb 2011 20:07:36 +0000 (15:07 -0500)] 
[libgens] MD/VdpRend_Err.cpp: Reimplemented the VDP error message display.

VdpRend_Err is used to display an error message if an unsupported
VDP mode is set. Currently, this means anything other than Mode 5.

MD/VGA_charset.c: Minimal ASCII-only VGA character set for VdpRend_Err.

8 years ago[libgens] Rom::loadRomHeader(): Clear the rest of the header buffer if the read heade...
David Korth [Sat, 26 Feb 2011 19:17:46 +0000 (14:17 -0500)] 
[libgens] Rom::loadRomHeader(): Clear the rest of the header buffer if the read header size is smaller than the header buffer size.

Removed the ancient "header_size: %zu" debug printf() that was useful
when writing the Rom class, but is no longer necessary

8 years ago[libgens] DcZip::getFile(): Don't return an error if the decompressed data is smaller...
David Korth [Sat, 26 Feb 2011 19:13:59 +0000 (14:13 -0500)] 
[libgens] DcZip::getFile(): Don't return an error if the decompressed data is smaller than the buffer size.

This fixes loading ROM images smaller than 64 KB.

The Rom class attempts to read the first 64 KB of the ROM to determine
what type of ROM it is. It uses a 64 KB buffer to do this, which resulted
in failure if the ROM was smaller than 64 KB.

8 years ago[libgens] Data/32X/: Imported DevSter's custom 32X firmware.
David Korth [Sat, 26 Feb 2011 16:17:12 +0000 (11:17 -0500)] 
[libgens] Data/32X/: Imported DevSter's custom 32X firmware.

Data/32X/fw_32x.c: C array version of the firmware files.

32X hasn't been reimplemented in Gens/GS II yet, so the 32X firmware
isn't very useful at the moment.

8 years ago[libgens] Effects/CrazyEffect.cpp: Converted from a static class to a regular class.
David Korth [Sat, 26 Feb 2011 15:05:13 +0000 (10:05 -0500)] 
[libgens] Effects/CrazyEffect.cpp: Converted from a static class to a regular class.

CrazyEffect still depends on the MD screen buffer.

This conversion is mostly to make way for the per-effect LFSR, which will
be used to generate pseudo-random numbers instead of rand(), resulting in
less overall CPU usage.

[gens-qt4] IdleThread.cpp: Updated to use the non-static LibGens::CrazyEffect class.

8 years ago[libgens] Effects/CrazyEffect.cpp: Removed the big-endian hack.
David Korth [Sat, 26 Feb 2011 14:46:47 +0000 (09:46 -0500)] 
[libgens] Effects/CrazyEffect.cpp: Removed the big-endian hack.

This hack is no longer needed since commit f23cf0919250baf8ba64636a3f985fd55eb7ab55.
([libgens] VdpPalette::T_recalcFullMD(): Removed the big-endian palette hack.)

See commit 211406fba75d64a9d33c3684da5f4ca5ecc3eef3 for more information.
([libgens] Effects/FastBlur.cpp: Don't use different masks on big-endian systems.)

8 years ago[gens-qt4] VBackend/GLBackend.cpp: Split stretch coordinate calculation into a separa...
David Korth [Thu, 24 Feb 2011 18:36:52 +0000 (13:36 -0500)] 
[gens-qt4] VBackend/GLBackend.cpp: Split stretch coordinate calculation into a separate function, recalcStretchRectF().

There's an overload with no parameter that simply recalculates the stretch
coordinates using the current stretch mode.

GLBackend::setStretchMode(): New slot that calls recalcStretchRectF()
before calling VBackend::setStretchMode();

VBackend::setStretchMode(): Slot is now marked as virtual, since GLBackend
overrides it.

8 years ago[gens-qt4] VBackend::setStretchMode(): Fixed an error in parameter checking.
David Korth [Thu, 24 Feb 2011 18:27:19 +0000 (13:27 -0500)] 
[gens-qt4] VBackend::setStretchMode(): Fixed an error in parameter checking.

We want to validate newStretchMode, not m_stretchMode.

8 years ago[gens-qt4] GLBackend::glb_paintGL(): Store the image stretch coordinates in a QRectF.
David Korth [Thu, 24 Feb 2011 18:11:35 +0000 (13:11 -0500)] 
[gens-qt4] GLBackend::glb_paintGL(): Store the image stretch coordinates in a QRectF.

This will pave the way for a standalone stretch recalculation function,
which will only be run if stretch mode is changed or the MD resolution
is changed.

8 years ago[gens-qt4] actions/GensKeyConfig.cpp: Don't add actions with shortcut key == 0 to...
David Korth [Thu, 24 Feb 2011 18:10:54 +0000 (13:10 -0500)] 
[gens-qt4] actions/GensKeyConfig.cpp: Don't add actions with shortcut key == 0 to d->hashKeyToAction.

KEYV_UNKNOWN shouldn't map to anything.

8 years ago[gens-qt4] KeyHandlerQt::KeyPressEvent(): Don't handle unknown keys.
David Korth [Thu, 24 Feb 2011 18:09:16 +0000 (13:09 -0500)] 
[gens-qt4] KeyHandlerQt::KeyPressEvent(): Don't handle unknown keys.

This fixes an issue where the About window would show up if an unknown
key was pressed, since the About window was the last window registered
with a key shortcut of 0.

TODO: Don't register key shortcuts with key == 0.

8 years ago[gens-qt4] KeyHandlerQt::QKeyEventToKeyVal(): Added KEYV_BACK and KEYV_FORWARD.
David Korth [Thu, 24 Feb 2011 18:08:46 +0000 (13:08 -0500)] 
[gens-qt4] KeyHandlerQt::QKeyEventToKeyVal(): Added KEYV_BACK and KEYV_FORWARD.

I forgot to add these to the Qt key mapping for some reason.

8 years ago[gens-qt4] GLBackend::reallocTexture(): Store the texture size and visible texture...
David Korth [Thu, 24 Feb 2011 18:03:35 +0000 (13:03 -0500)] 
[gens-qt4] GLBackend::reallocTexture(): Store the texture size and visible texture size in QSize objects.

Updated most of GLBackend to use these QSize objects instead of hard-coding
either the visible texture size (320x240) or the actual texture size (512x256).

This will make it easier to add scaling renderers later on.

GLBackend::next_pow2s(): Copied this function from GLTex2D.hpp.
It's used to calculate the power-of-two texture size for m_texSize.

8 years ago[libgens] EmuMD::EmuMD(): Floor the cycles-per-line values instead of rounding them.
David Korth [Mon, 21 Feb 2011 13:38:46 +0000 (08:38 -0500)] 
[libgens] EmuMD::EmuMD(): Floor the cycles-per-line values instead of rounding them.

Using rint() instead of floor() seems to lead to audio buffer overflows
resulting from too many audio cycles per line.

Game_Music_Emu uses floor(), so we should too.

(cherry picked from commit c2b0fa1fa5221eaa78ecc782af23b89d685a3c27)

8 years ago[gens-qt4] Reworked the VBackend subsystem such that VBackend now inherits from QWidget.
David Korth [Thu, 24 Feb 2011 17:37:44 +0000 (12:37 -0500)] 
[gens-qt4] Reworked the VBackend subsystem such that VBackend now inherits from QWidget.

GensQGLWidget inherits from VBackend, but does not inherit from QGLWidget.
Instead, GensQGLWidget contains a GensQGLWidgetPrivate, a private widget
that inherits QGLWidget. The end result is the same, but the code is
much cleaner.

Moved most of the slots from GensQGLWidget to VBackend.

Moved event handling from GensQGLWidget to GensQGLWidgetPrivate.

Clenaed up a ton of code in GLBackend and VBackend, including constification
of various variables.

Moved inline functions declared in class definitions to outside of the
class definition, but still within the header file.

8 years ago[gens-qt4] actions/GensMenuBar_menus.cpp: Renamed "General Configuration" to "Prefere...
David Korth [Thu, 24 Feb 2011 17:36:12 +0000 (12:36 -0500)] 
[gens-qt4] actions/GensMenuBar_menus.cpp: Renamed "General Configuration" to "Preferences" on Mac OS X.

Qt will automatically move this menu item to the Application menu.

8 years ago[gens-qt4] KeyHandlerQt::KeyValMToQtKey(): Minor formatting fix.
David Korth [Thu, 24 Feb 2011 17:25:27 +0000 (12:25 -0500)] 
[gens-qt4] KeyHandlerQt::KeyValMToQtKey(): Minor formatting fix.

8 years ago[gens-qt4] KeyHandlerQt::KeyValMToQtKey(): Don't perform Ctrl/Cmd switching.
David Korth [Thu, 24 Feb 2011 17:22:30 +0000 (12:22 -0500)] 
[gens-qt4] KeyHandlerQt::KeyValMToQtKey(): Don't perform Ctrl/Cmd switching.

Use the Ctrl modifier in the configuration file as if it were Cmd on
Mac OS X. This makes it easier to deal with Qt's automatic Ctrl/Cmd
key swapping.

actions/GensKeyConfig.cpp: Set the default key for "General Configuration"
on Mac OS X to be KEYM_CTRL | KEYV_COMMA, which will be remapped to Cmd+,
by Qt automatically.

8 years ago[libgens] GensInput/GensKey_t.h::GensKey_u: Fixed struct element ordering on big...
David Korth [Thu, 24 Feb 2011 17:19:41 +0000 (12:19 -0500)] 
[libgens] GensInput/GensKey_t.h::GensKey_u: Fixed struct element ordering on big-endian systems.

8 years ago[gens-qt4] widgets/GensKeySequenceWidget.cpp: Removed some debugging includes.
David Korth [Sat, 19 Feb 2011 13:52:53 +0000 (08:52 -0500)] 
[gens-qt4] widgets/GensKeySequenceWidget.cpp: Removed some debugging includes.

(cherry picked from commit 6d7b4d8dc6b778e7d8bef2545f942842e220d0e4)

8 years ago[gens-qt4] Initial support for customizable menu shortcut keys.
David Korth [Tue, 22 Feb 2011 21:09:31 +0000 (16:09 -0500)] 
[gens-qt4] Initial support for customizable menu shortcut keys.

Currently, the shortcut keys are only assignable on startup. I'll need to add
infrastructure for changing the shortcut keys in the QActions at runtime.

KeyHandlerQt: New function KeyValMToQtKey(). This function converts a
GensKey_t (WITH MODIFIERS) to a Qt key.

TODO: Verify numeric keypad modifiers; maybe add joystick support later.

GensKeyConfigPrivate::DefKeySettings[]: Added all menu items except for
test menus. The test menus haven't been added because they'll be removed
once I create the real menus.

GensKeyConfig::actionToKey(): Get the key value for a given action.

GensMenuBar::parseMenu(): Look up key values for actions using

GensMenuBar::MenuItem: Removed key_shortcut, since shortcut keys
are now handled by GensKeyConfig.

actions/GensMenuBar_menus.cpp: Removed key_shortcut fields.

TODO: Add support for multiple keys per action later, e.g. to allow
assignment of gamepad buttons to various actions as well as keypresses.

8 years ago[gens-qt4] actions/GensMenuBar.cpp: Removed Qt standard key sequences.
David Korth [Tue, 22 Feb 2011 19:59:30 +0000 (14:59 -0500)] 
[gens-qt4] actions/GensMenuBar.cpp: Removed Qt standard key sequences.

Support for standard key sequences added a ton of overhead with very
little benefit. We'll just use the same key sequences on all platforms,
with an exception for Cmd+, on Mac OS X for the preferences window.

actions/GensMenuBar_menus.cpp: Removed Qt standard key sequences.

8 years ago[gens-qt4] action/GensKeyConfig.cpp: Use a private class to limit exposure of interna...
David Korth [Tue, 22 Feb 2011 19:53:37 +0000 (14:53 -0500)] 
[gens-qt4] action/GensKeyConfig.cpp: Use a private class to limit exposure of internal variables.

Both Qt and KDE do this, so we should also do this.

8 years ago[gens-qt4] actions/GensKeyConfig.cpp: New functions load() and save().
David Korth [Tue, 22 Feb 2011 19:45:00 +0000 (14:45 -0500)] 
[gens-qt4] actions/GensKeyConfig.cpp: New functions load() and save().

These functions are called from GensConfig to load and save key configuration
information from a QSettings object.

Key configuration is currently stored within the [Shortcut_Keys] group.
Each entry is in the format "menu/item", e.g. "other/hardReset".
The "other" group is used for non-menu items.

GensConfig.cpp: Call m_keyConfig.load() on load and m_keyConfig.save() on save.

8 years ago[libgens] VdpRend_m5::T_Make_Sprite_Struct(): Set max_spr to 80 if sprite limits...
David Korth [Fri, 18 Feb 2011 19:48:24 +0000 (14:48 -0500)] 
[libgens] VdpRend_m5::T_Make_Sprite_Struct(): Set max_spr to 80 if sprite limits are disabled.

TODO: Limit it to 80 sprites, or allow the full 128 sprites?

8 years ago[libgens] VdpRend_m5::T_Render_Line_ScrollA(): Fixed window display for many games.
David Korth [Fri, 18 Feb 2011 17:52:18 +0000 (12:52 -0500)] 
[libgens] VdpRend_m5::T_Render_Line_ScrollA(): Fixed window display for many games.

andlabs noticed that many games weren't showing the window region properly.

Elemental Master: Window was scrolling with Scroll B. (Turns out that
both Scroll B and the Window were set to the same area in VRAM, but
that was only a symptom of the bug.)

Vapor Trail: Window shows garbage.

Grind Stormer: Window is blank.

Fire Shark: Window initially works, but then is overwritten by the
main scroll planes.

Turns out the problem was the X offset wasn't being added for
right-aligned windows, so it was reading the wrong data.

This patch fixes the problem for the aforementioned games.

(My previous test ROM, Gauntlet 4, didn't show any problems because
it only used Scroll B for the main game area, and Scroll A was
basically ignored.  Scroll A and B were set to 0xE000, while Window
was set to 0xD000.)

8 years ago[glew] custom.txt: Added some more extensions.
David Korth [Fri, 18 Feb 2011 12:53:07 +0000 (07:53 -0500)] 
[glew] custom.txt: Added some more extensions.

New extensions:

- GL_ARB_multitexture: Required by shaders, but first used by
  GL_ATI_fragment_shader. (GL_TEXTURE0_ARB constant.)

- GL_ATI_fragment_shader

- GL_ATI_text_fragment_shader

TODO: Indicate use of GL_ARB_multitexture in the About window
under "Debug Info".

8 years ago[libgens] credits.c: Fixed spelling of "CyberKitsune".
David Korth [Wed, 16 Feb 2011 16:06:09 +0000 (11:06 -0500)] 
[libgens] credits.c: Fixed spelling of "CyberKitsune".

This was spotted by MainMemory in #retro.

8 years ago[libgens] PausedEffect::T_DoPausedEffect(): Use the correct grayscale vector in the...
David Korth [Tue, 15 Feb 2011 15:32:01 +0000 (10:32 -0500)] 
[libgens] PausedEffect::T_DoPausedEffect(): Use the correct grayscale vector in the single-buffer version.

The two-buffer version used the correct grayscale vector, but the
single-buffer version was using the older, less-precise vector.

8 years ago[libgens] VdpIo, VdpRend_m5: Removed the HasVisibleLines hack introduced in Gens...
David Korth [Tue, 15 Feb 2011 15:28:26 +0000 (10:28 -0500)] 
[libgens] VdpIo, VdpRend_m5: Removed the HasVisibleLines hack introduced in Gens/GS r7+.

This hack was introduced in Gens/GS r7+ commit 3639c547b869ae78c49ee2edda578a0c926957a7.

It was required because Gens/GS keeps running the VDP rendering code
even if emulation is paused. The Sega CD firmware turned off the VDP
at the end of the frame, which resulted in the entire image disappearing
in Gens/GS if we didn't remember the VDP state. (While paused, the CPU
program couldn't change the VDP register to re-enable the VDP.)

Gens/GS II doesn't run the VDP code while paused, so this hack isn't
needed anymore.

8 years ago[libgens] VdpRend.hpp, VdpRend_m5.cpp: Removed some obsolete TODOs.
David Korth [Tue, 15 Feb 2011 15:25:05 +0000 (10:25 -0500)] 
[libgens] VdpRend.hpp, VdpRend_m5.cpp: Removed some obsolete TODOs.

8 years ago[libgens] MD/VdpIo_static.hpp: #include "VdpIo.hpp"
David Korth [Tue, 15 Feb 2011 15:23:30 +0000 (10:23 -0500)] 
[libgens] MD/VdpIo_static.hpp: #include "VdpIo.hpp"

Without this #include, KDevelop complains about missing declarations.

8 years ago[libgens] VdpPalette::VdpPalette(): Don't calculate the palette immediately.
David Korth [Tue, 15 Feb 2011 15:21:49 +0000 (10:21 -0500)] 
[libgens] VdpPalette::VdpPalette(): Don't calculate the palette immediately.

The palette will be recalculated when the active MD palette is updated,
since the dirty bit will be set.

VdpRend::Init(): Don't call m_palette.recalcFull() for the same reason.

These changes may decrease startup time by a tiny bit.

8 years ago[libgens] MD/VdpRend_m5_static.hpp: #include "VdpRend_m5.hpp"
David Korth [Tue, 15 Feb 2011 15:19:13 +0000 (10:19 -0500)] 
[libgens] MD/VdpRend_m5_static.hpp: #include "VdpRend_m5.hpp"

Without this #include, KDevelop complains about missing declarations.

8 years ago[gens-qt4] EmuManager.cpp: Quick fix to prevent the Intro Effect from being started...
David Korth [Tue, 15 Feb 2011 12:27:52 +0000 (07:27 -0500)] 
[gens-qt4] EmuManager.cpp: Quick fix to prevent the Intro Effect from being started if a new ROM is loaded while a ROM is already running.

stateChanged() will no longer be emitted from closeRom() if this happens.

Also, don't clear the screen if Intro Effect is disabled and we
load a new ROM, since that's a waste of time. (EmuMD does that
when we load a new ROM anyway.)

8 years ago[gens-qt4] IdleThread.cpp: Reimplemented the Intro Effect using threads.
David Korth [Tue, 15 Feb 2011 12:21:30 +0000 (07:21 -0500)] 
[gens-qt4] IdleThread.cpp: Reimplemented the Intro Effect using threads.

It's a bit of a hack job, but it seems to work.

The "Crazy" Effect is now implemented and working.

GensWindow will create an IdleThread to run the intro effect when
emulation is stopped. A bunch of checks were added to prevent the
idle thread from causing issues when emulation is started again
and when the program is closed, but it still might have some problems.

If the intro effect style is set to "None", then the idle thread
won't be used at all.

NOTE: If the intro effect style is not set to "None", then the
MD screen won't be cleared when emulation is stopped. This is done
to simulate how the "Crazy" Effect worked in old Gens, i.e. it
decomposed the last image that was shown onscreen.

TODO: The intro effect appears to be started if a new ROM is opened
while a ROM is already running. This shouldn't happen.

8 years ago[gens-qt4] gqt4_main.cpp::QuitGens(): Don't delete gqt4_config.
David Korth [Tue, 15 Feb 2011 12:09:46 +0000 (07:09 -0500)] 
[gens-qt4] gqt4_main.cpp::QuitGens(): Don't delete gqt4_config.

QuitGens() is called before GensWindow is closed, so we shouldn't delete
gqt4_config; otherwise, we may segfault due to attempts to access gqt4_config
during emulation shutdown. (e.g. checking intro effect style options)

TODO: Make sure nothing is written to gqt4_config after calling QuitGens(),
since those changes won't be saved.

8 years ago[gens-qt4] GensConfig::reload(): Fixed loading the Intro Effect settings.
David Korth [Tue, 15 Feb 2011 11:51:00 +0000 (06:51 -0500)] 
[gens-qt4] GensConfig::reload(): Fixed loading the Intro Effect settings.

The group name was being specified as "IntroEffect" in reload(),
while it was being specified as "Intro_Effect" in save().

Updated reload() to use the "Intro_Effect" group name.

8 years ago[gens-qt4] Declare foreach() loop variables within the foreach() construct.
David Korth [Tue, 15 Feb 2011 11:28:35 +0000 (06:28 -0500)] 
[gens-qt4] Declare foreach() loop variables within the foreach() construct.

Use const references where appropriate.

8 years ago[libgens] Removed M68K_Mem::Gen_Mode.
David Korth [Tue, 15 Feb 2011 07:19:36 +0000 (02:19 -0500)] 
[libgens] Removed M68K_Mem::Gen_Mode.

This was originally going to be used for the MD version register to indicate
the hardware version, but it has been obsoleted by the SysVersion class.

8 years ago[libgens] EmuMD::EmuMD(): Set the version register's Disk property to false.
David Korth [Tue, 15 Feb 2011 07:18:35 +0000 (02:18 -0500)] 
[libgens] EmuMD::EmuMD(): Set the version register's Disk property to false.

The Sega CD isn't connected in EmuMD.

8 years ago[libgens] SysVersion::readData(): Invert the value of m_disk.
David Korth [Tue, 15 Feb 2011 07:17:56 +0000 (02:17 -0500)] 
[libgens] SysVersion::readData(): Invert the value of m_disk.

We're using active-high logic for m_disk (true == MCD connected), but the
actual version register uses active-low (false == MCD connected).

Thus, we need to invert m_disk when creating the version register data.

8 years ago[libgens] cpu/M68K_Mem.cpp: Return ms_SysVersion.readData() instead of building the...
David Korth [Tue, 15 Feb 2011 07:16:02 +0000 (02:16 -0500)] 
[libgens] cpu/M68K_Mem.cpp: Return ms_SysVersion.readData() instead of building the version register data manually.

8 years ago[libgens] Renamed LibGens::SysRegion to LibGens::SysVersion.
David Korth [Tue, 15 Feb 2011 07:13:13 +0000 (02:13 -0500)] 
[libgens] Renamed LibGens::SysRegion to LibGens::SysVersion.

The SysVersion class now supports the entire MD version register,
including region code and /DISK line.

Updated all references to SysRegion to use SysVersion.

Nothing uses the enhanced functionality of SysVersion yet.
That will be implemented in the next commit.

8 years ago[libgens] Save/GensZomg.cpp: Use sizeof(VdpIo::VSRam.u16) for determining VSRam size.
David Korth [Tue, 15 Feb 2011 06:58:51 +0000 (01:58 -0500)] 
[libgens] Save/GensZomg.cpp: Use sizeof(VdpIo::VSRam.u16) for determining VSRam size.

The u16 field is now 80 bytes (40 words) instead of 128 bytes (64 words),
so we can use its size directly via sizeof.

8 years ago[libgens] MD/VdpIo.hpp: Reworked VSRam_t a bit.
David Korth [Tue, 15 Feb 2011 06:58:14 +0000 (01:58 -0500)] 
[libgens] MD/VdpIo.hpp: Reworked VSRam_t a bit.

- Reduced u8 to 80 bytes and u16 to 80 bytes.

- Added a 128-byte "reserved" field. This ensures that the union
  is padded to 128 bytes for compatibility with existing code.

8 years agoRemoved a bunch of obsolete TODOs in GensQt4::GLBackend and LibGens::Rom.
David Korth [Tue, 15 Feb 2011 06:51:40 +0000 (01:51 -0500)] 
Removed a bunch of obsolete TODOs in GensQt4::GLBackend and LibGens::Rom.

8 years ago[gens-qt4] GensZipDirItem::insertChildren(): Marked the `columns` parameter as unused.
David Korth [Tue, 15 Feb 2011 06:44:54 +0000 (01:44 -0500)] 
[gens-qt4] GensZipDirItem::insertChildren(): Marked the `columns` parameter as unused.

8 years ago[gens-qt4] ZipSelectDialog::on_treeView_clicked(): Use the index parameter instead...
David Korth [Tue, 15 Feb 2011 06:43:29 +0000 (01:43 -0500)] 
[gens-qt4] ZipSelectDialog::on_treeView_clicked(): Use the index parameter instead of obtaining the selected indexes list manually.

8 years agoFixed a bunch of simple signed/unsigned warnings in libgens and libzomg.
David Korth [Tue, 15 Feb 2011 06:41:29 +0000 (01:41 -0500)] 
Fixed a bunch of simple signed/unsigned warnings in libgens and libzomg.

log_msg.c: Set the last byte of out_msg to NULL after calling vsnprintf().
It's not needed for the initial snprintf(), since we're checking the
return value of that function call anyway.

8 years ago[libgens] EEPRom::readWord(): Verify that the address matches the SDA_OUT address.
David Korth [Tue, 15 Feb 2011 06:40:00 +0000 (01:40 -0500)] 
[libgens] EEPRom::readWord(): Verify that the address matches the SDA_OUT address.

We have to mask both the specified address and the SDA_OUT address
with ~1, since M68K is word-aligned.

TODO: Do we really need to mask address? M68K is word-aligned,
so it should never be odd...

8 years agomcd_pcm.c: Close f_wav and f_pcm after processing the PCM data.
David Korth [Tue, 15 Feb 2011 06:27:40 +0000 (01:27 -0500)] 
mcd_pcm.c: Close f_wav and f_pcm after processing the PCM data.

This isn't strictly necessary, but it's a good idea to always
close files when we're done using them.

This error was found by cppcheck-1.46.1.

8 years ago[gens-qt4] GLTex2D::GLTex2D(const QImage& img): Don't call GLTex2D() to initialize...
David Korth [Tue, 15 Feb 2011 06:25:03 +0000 (01:25 -0500)] 
[gens-qt4] GLTex2D::GLTex2D(const QImage& img): Don't call GLTex2D() to initialize variables.

This might inadvertently create a new GLTex2D object instead of
calling the GLTex2D() function on the current object.

This error was found by cppcheck-1.46.1.

8 years ago[gens-qt4] EmuThread::EmuThread(): Initialize m_doFastFrame.
David Korth [Tue, 15 Feb 2011 06:24:43 +0000 (01:24 -0500)] 
[gens-qt4] EmuThread::EmuThread(): Initialize m_doFastFrame.

This error was found by cppcheck-1.46.1.

8 years ago[gens-qt4] AboutWindow::initAboutWindowText(): Explicitly set lblIncLibraries' text...
David Korth [Tue, 15 Feb 2011 04:50:10 +0000 (23:50 -0500)] 
[gens-qt4] AboutWindow::initAboutWindowText(): Explicitly set lblIncLibraries' text format to Qt::RichText.

This seems to be needed on Qt 4.5, though it isn't needed on Qt 4.7.

8 years ago[gens-qt4] GLTex2D::setImage(): Correctly detect if we have GL_EXT_packed_pixels.
David Korth [Tue, 15 Feb 2011 04:47:47 +0000 (23:47 -0500)] 
[gens-qt4] GLTex2D::setImage(): Correctly detect if we have GL_EXT_packed_pixels.

Code copied from GLBackend::reallocTexture().

Don't set a class variable in the GLTex2D constructor, since we only
need to check the availability of the extension when the image is
being set via setImage().

8 years ago[gens-qt4] VBackend/GLShaderPaused.cpp: Added a GL_ATI_fragment_shader version of...
David Korth [Tue, 15 Feb 2011 04:40:50 +0000 (23:40 -0500)] 
[gens-qt4] VBackend/GLShaderPaused.cpp: Added a GL_ATI_fragment_shader version of the Paused shader.

Tested and confirmed working on a Power Mac G4 with Radeon 9000
running Ubuntu 9.10.

GLShaderManager::GLExtsInUse(): Added GL_ATI_fragment_shader
to the list of extensions.

GLShader.cpp: Added infrastructure for GL_ATI_fragment_shader.

8 years ago[gens-qt4] GeneralConfigWindow.cpp: QLineEdit::setPlaceholderText() was added in...
David Korth [Tue, 15 Feb 2011 04:36:13 +0000 (23:36 -0500)] 
[gens-qt4] GeneralConfigWindow.cpp: QLineEdit::setPlaceholderText() was added in Qt 4.7.

Only attempt to set the placeholder text if we're using Qt 4.7 or later.

8 years ago[gens-qt4] Replaced all other instances of QScopedPointer with either std::auto_ptr...
David Korth [Tue, 15 Feb 2011 04:34:04 +0000 (23:34 -0500)] 
[gens-qt4] Replaced all other instances of QScopedPointer with either std::auto_ptr or manual memory management.

EmuManager::openRom(): Use manual memory management.

GeneralConfigWindow::mcdUpdateRomFileStatus(): Use std::auto_ptr.

8 years ago[gens-qt4] FindCdromUDisks::queryUDisksDevice(): Use std::auto_ptr instead of QScoped...
David Korth [Tue, 15 Feb 2011 04:29:15 +0000 (23:29 -0500)] 
[gens-qt4] FindCdromUDisks::queryUDisksDevice(): Use std::auto_ptr instead of QScopedPointer.

QScopedPointer was added in Qt 4.6, and my PowerPC test machine
is running Ubuntu 9.10, which has Qt 4.5.