Difference between revisions of "Gens/GS"

From Sega Retro

old>GerbilSoft
(→‎VDP Layer Options: Plugin is included in r7.)
old>GerbilSoft
(→‎Releases: Added r7_pre2; removed m1-m6.)
Line 2: Line 2:
 
'''Gens/GS''' is a version of Gens maintained by [[GerbilSoft]]. The main goal of Gens/GS is to clean up the source code and combine features from various forks of Gens.
 
'''Gens/GS''' is a version of Gens maintained by [[GerbilSoft]]. The main goal of Gens/GS is to clean up the source code and combine features from various forks of Gens.
  
==Releases==
+
==Release 7, Preview 2==
  
===Milestone 6===
+
Release 7 introduces the following new features:
  
Milestone 6 introduces the following new features:
+
* Mega Drive Plugins v1.0.0. This major update to the plugins system adds support for external plugins (.dll on Windows, .so on Linux), as well as support for more than just rendering plugins.
 +
* doc/mdp/ contains the MDP Interface Specifiction Version 1.0.0. This document is licensed under the GNU Free Documentation License v1.3.
 +
* A new manual for Gens/GS has been created. It is available in doc/manual/.
 +
* The Game Genie functionality has been moved to an MDP plugin. It now supports 8-bit, 16-bit, and 32-bit patch codes, and uses a new patch code file format. Old patch code files are supported for loading; however, they will be written in the new format when saved. Later versions will add support for patching CPU address spaces other than the main MC68000.
 +
* New MDP Plugin: VDP Layer Options. This lets you adjust the visible layers on screen, so e.g. you can hide sprites, swap scroll priorities, and lock the palette to prevent color changes.
 +
* New MDP Plugin: Sonic Gens. This lets you view various information in memory in several Sonic games. Sonic Gens was originally written by LOst as a standalone version of Gens.
 +
* New renderers:
 +
** EPX (ported from Gens Rerecording)
 +
** EPX Plus (ported from Gens Rerecording)
 +
** Super 2xSaI (ported from Gens Plus)
 +
** Super Eagle (ported from Gens Plus)
 +
** Blargg's NTSC filter for MD
 +
* [Win32] Ported the GDI video backend from Gens Plus. It still has a few bugs, but it mostly works.
 +
* Extended controller configuration format. The new configuration format allows for up to 128 axes, 256 buttons, and 64 POV hats, whereas the old configuration format only allowed for 6 axes [5 axes on Win32], 112 buttons, and 4 POV hats. This mainly affects the Linux version, since Linux usually reports all axes as axes instead of mapping some axes to POV hats, and some newer controllers (e.g. the Xbox 360 controller) have more than 6 axes. Older configurations are automatically updated to use the new controller configuration format.
 +
* The reverse-engineered 32X firmware, written by DevSter, is now included in Gens/GS. If you do not have the original Sega 32X firmware files, the reverse-engineered ones are used instead.
 +
* Added SH2 DMA support for PWM audio. Thanks to Joseph Fenton for submitting a patch.
 +
* [Win32] Joysticks connected after loading Gens/GS will now be detected in the Controller Configuration dialog.
 +
* WAV dumping has been reimplemented.
 +
* ROM History now caches the ROM type (MD/MCD/32X), so it doesn't have to check the ROM type every time the ROM History menu is rebuilt. This improves performance significantly if some ROM images were loaded from network shares.
 +
* ROM History now keeps track of compressed files inside of multi-file archives. For example, if you have a 7z archive containing several different versions of a game, selecting version 1 will result in a ROM History entry for that specific version, and selecting version 2 will result in another ROM History entry.
 +
* Added initial support for the "Palette Select" bit in VDP register 0. If the "Palette Select" bit is cleared, only the LSBs of each color component in CRAM is used to determine the colors to display, resulting in a maximum of 8 colors onscreen. This isn't very useful, but is more accurate.
 +
* SRAM can now be disabled in the Options menu. This fixes Puggsy, which checks for the existance of SRAM and prevents the user from advancing past a certain point if it exists. (Puggsy uses a password system, not SRAM.)
 +
* Improved PWM scaling algorithm, provided by Chilly Willy on the Sonic Retro forums.
 +
* A new command line option, "--boot-cd", can be specified to tell Gens/GS to boot from an actual SegaCD CD-ROM on startup.
 +
* [Unix] Improved VSync support with the OpenGL backend. Both the MESA and SGI swap control methods are now supported.
 +
* The video subsystem now supports fallbacks. For example, on the Linux version, if SDL+OpenGL is selected but OpenGL isn't available, it will simply revert back to SDL instead of crashing. As an added bonus, this allows for Gens/GS to start up properly on Windows NT 4.0, since the default backend on Win32 is DirectDraw 4, but NT4 doesn't support it. Instead of crashing, it will fall back to the GDI backend.
 +
* Gens/GS no longer changes non-alphanumeric characters in SegaCD game names to spaces. This may cause some games to have different names, which will prevent their BRAM files from being loaded properly. If you have any of these games, you will need to rename the BRAM files in order to get them to load correctly.
 +
* [Unix] If a game has a Shift-JIS encoded title in the Japanese title field and the country code is set to Japan, the title will be converted to the system's native locale, e.g. UTF-8. (Win32 support for this feature will be added once Gens/GS fully supports Windows' Unicode implementation.)
  
* Mega Drive Plugins v0.1.0. The initial version of the plugin system only supports render plugins and only if they're built into the main executable. A later version will add support for external plugins (.dll on Windows, .so on Linux), as well as more types of plugins, such as netplay, debugging, and movie recording.
+
Release 7 fixes the following bugs:
* doc/MDP.txt contains the MDP Interface Specifiction Version 0.1.0. This document is licensed under the GNU Free Documentation License v1.3.
 
* All renderers now support 32-bit color.
 
* [Win32] hq2x has been fixed.
 
* Scale2x now has optimized C and x86 mmx implementations.
 
* New renderers: Scale3x, Scale4x, hq3x, hq4x.
 
* Added a 32-bit color asm version of the Fast Blur effect, with mmx optimizations if available.
 
  
Milestone 6 fixes the following bugs:
+
* Dragging and dropping a ROM image onto the Gens/GS window will now synchronize the menus. This bug was reported by Tets on the Sonic Retro forums.
 +
* Loading a GSX savestate file that is not in GSX format will now show an error instead of crashing. Apparently, Gens Plus GZips its savestate files when saving by default. This bug was reported by SoNick in #retro.
 +
* [GTK+] Copied g_uri_unescape_string() (and dependent functions) from GLib 2.18.4 into Gens/GS. This function was introduced in GLib 2.16, but Gens/GS should be compatible with versions of GLib 2.4 and later.
 +
* Two VDP DMA bugs have been fixed:
 +
** Zero-length DMA operations are now handled as 65,536-word operations. This may break some poorly-written hacks.
 +
** DMA operations now wrap on a 128k boundary. This bug was reported by TmEE.
 +
* The VDP H_Int register is now initialized to 0xFF. This fixes Sik's test ROM that produced "rain" on Gens, but not on Regen or the actual hardware.
  
* [SDL] Ctrl+Q did not work in fullscreen mode.
+
Release 7 has the following low-level code changes:
  
Milestone 6 has the following low-level code changes:
+
* The video, audio, and input subsystems have been ported back to C. The C++ system was too awkward and had too much overhead.
 +
* Similarly, the decompression subsystem has been ported back to C. In addition, the LZMA SDK is now built into Gens/GS, so 7z archives can be read without an external 7z binary.
 +
* Initial port of the Z80 emulator to C. The Z80 emulator has been moved out of the src/gens directory and into its own directory, src/mdZ80. Currently, the only functions that have been ported to C are the helper functions. The actual emulation code is currently being worked on in the mdZ80 branch in the Gens/GS git repository.
 +
* Many assembly-language files have been converted from Intel-style (nasm) assembly to AT&T-style (GNU `as`) assembly.
 +
* Many assembler functions have been ported to C/C++, including the UPDATE_PALETTE macros and Reset_VDP() (now VDP_Reset()).
 +
* Multitap support has been ported from x86 assembler to C. In the process, both Sega Teamplayer and 4-Way Play support have been improved. Notably, Teamplayer now works on "NBA Jam" and "NBA Jam TE", and 4-Way Play now works (sometimes) on "Triple Play '96". A complete list of tested multitap games can be found in doc/teamplayer.txt .
 +
* yasm is now supported as an alternative to nasm. To use yasm, add the option <tt>--with-nasm=yasm</tt> when using the <tt>./configure</tt> script.
 +
* Precompiled binaries are now compiled for i686 or higher. If you want to run Gens/GS on an original Intel Pentium or older, you will have to compile your own Gens/GS binary.
  
* Many x86 assembler files have been cleaned up. In particular, many of them no longer depend on the "nasmhead.inc" macro file. This macro file provided alignment macros (which nasm has built-in) and "DECL" macros, which provide both underscored and non-underscored symbol declarations. Only one of these is needed per symbol, and it depends on the executable format. Removing "DECL" and manually redefining symbols reduced the total symbol count.
+
For information about previous releases, see the ChangeLog.txt file included with Gens/GS r7_pre2.
* Adjusted alignment values for many x86 asm functions.
 
* Added alpha transparency support to ImageUtil::writePNG().
 
* Major overhaul for the ImageUtil::writeBMP() code. Changes include using a templated function for different color depths, using pointer arithmetic instead of recalculating array indexes for every iteration, and fixing a bug that caused bitmaps to be 54 bytes larger than they should have been.
 
* The "Render Fullscreen" and "Render Windowed" values in the gens.cfg file now contain the renderer tag instead of an ID number. For example, instead of saying "1" for the Normal renderer, the value would be "Normal".
 
 
 
===Milestone 5.3===
 
 
 
Milestone 5.3 fixes the following bugs:
 
 
 
* PIC compilation was broken due to the new CPU Flags code.
 
* nasm's -O3 optimization doesn't work properly on the Gens code with older versions of nasm. Gens now uses the -O1 optimization instead.
 
 
 
Milestone 5.3 has the following miscellaneous changes:
 
 
 
* [GTK+] Removed some unnecessary GDK includes.
 
 
 
===Milestone 5.2===
 
 
 
Milestone 5.2 introduces the following new features:
 
 
 
* Updates to the most-used renderers:
 
** The C++ 1x, 2x, and 2x scanline renderers are now much faster.
 
** The asm and mmx 1x and 2x renderers have been updated to support 32-bit color.
 
** The scanline and interpolated scanline asm renderers now correctly black out empty lines, which fixes a "leftover garbage" problem caused by the new text drawing function.
 
* [Linux] The OpenGL renderer now supports border color emulation.
 
* The "Stretch" option now allows you to set Horizontal Stretch and Vertical Stretch independently.
 
* New "General Options" window layout. The new layout takes up a lot less space than the old layout, and allows for more options.
 
* The "General Options" window now allows you to enable or disable border color emulation and the pause tint.
 
* [GTK+] The design of the "Controller Configuration" window has been improved.
 
* The "Auto Pause" feature has been reimplemented.
 
 
 
Milestone 5.2 has the following miscellaneous changes:
 
 
 
* The "BIOS/Misc Files" entries for "GCOffline" and "Gens Manual" have been removed. There are no functions in Gens/GS that make use of these, and both documents haven't been updated in several years.
 
* The 16 kHz, 32 kHz, and 48 kHz sound rates have been removed. They never worked properly and ended up causing lag.
 
* The built-in debugger now sleeps for 100 ms between frames. Previously, it would attempt to redraw frames as fast as possible, which led to high CPU usage if VSync wasn't turned on.
 
* [Win32] hq2x is broken, so it has been disabled for now.
 
 
 
Milestone 5.2 fixes the following bugs:
 
 
 
* Fixed compilation with --disable-cdrom.
 
* Fixed some PWM regressions introduced in m5.1.
 
* [Win32] Savestates were sometimes not saved to the correct directory.
 
 
 
Milestone 5.2 has the following low-level code changes:
 
 
 
* VDraw_DDraw: CORRECT_256_ASPECT_RATIO and ALT_X_RATIO_RES have been removed. These were originally used in Gens Rerecording to specify if the horizontal resolution should always be stretched, but is no longer necessary due to the improved "Stretch" mode options.
 
* nasm now generates debugging symbols for all asm code.
 
* Many functions and variables that don't need global visibility have been marked as static.
 
* New CPU flag system to determine all available instruction sets instead of just MMX. This will allow for more optimizations later on.
 
* Fixed an issue where a segment override prefix was specified in Starscream, which broke Valgrind. (Valgrind is still broken for SegaCD and 32X emulation, unfortunately.)
 
 
 
===Milestone 5.1===
 
 
 
Milestone 5.1 introduces the following new features:
 
 
 
* RAR archives can now be used via an external RAR binary. You must have RAR installed in order to use this feature. (Windows users can install [http://www.rarlab.com WinRAR], which includes the command-line rar.exe.)
 
* You can now drag a ROM file onto the Gens window to open it.
 
* [GTK+] Many of the bundled icons have been updated with KDE 4 Oxygen icons. See [http://www.oxygen-icons.org/ http://www.oxygen-icons.org/] for more information.
 
 
 
Milestone 5.1 has the following miscellaneous changes:
 
* "PSG Improved" has been renamed to "PSG (Sine Wave)", which more accurately describes its functionality.
 
 
 
Milestone 5.1 fixes the following bugs:
 
 
 
* [Win32] The lag issue seen on some computers should be fixed.
 
* [Win32] Fixed joystick POV support.
 
* [32X] PWM audio no longer "clicks" when it isn't in use.
 
* [Debugger] The VDP debugger now scrolls all the way to the last VRAM line, 0xFE00-0xFFFF. Previously, it would only scroll to line 0xFC00-0xFDFF. This bug was reported by [[djohe]] in #retro.
 
* [Regression from m5] Gens no longer creates blank SRAM files for games that don't use SRAM. This bug was reported by [[Delta]] on the [[Sonic Retro| Sonic Retro forums]].
 
* Fixed compilation with --disable-cdrom.
 
 
 
Milestone 5.1 has the following low-level code changes:
 
 
 
* The menu system has been rewritten such that both the Win32 and GTK+ versions now share the same menu data. Not only does this reduce the amount of duplicated code, it makes it easier to add menu items and it reduces the amount of code needed to build and synchronize the menus.
 
* The PWM audio emulator has been rewritten in C. This rewrite was based on pwm.c from Gens Rerecording.
 
* The build system has been updated so that it automatically detects MacOS X and Cygwin, and adjusts compilation settings for those two platforms as necessary. Thanks to [[Sonicblur]] on the Sonic Retro forums for the MacOS X compatibility fixes.
 
* The About window has been converted to a C++ class. Eventually, all of the windows will be converted to C++ classes.
 
* The configure script will now check what hash table implementations are available at compile time. Previously, Gens/GS only used the relatively new TR1 unordered_map, which is only available in gcc-4.x and later. Not only did this cause problems for gcc-3.x users, it caused problems for gcc-4.0 users, since unordered_map was broken in gcc-4.0. The configure script will now check to make sure unordered_map is working, and if it isn't, it will fall back to either __gnu_cxx::hash_map or std::map. If it falls back to std::map, it will print a warning, since std::map is not a hash table and is thus considerably slower than both unordered_map and hash_map.
 
* The configure script will now check if the linker supports --as-needed. Previously, the configure script always added --as-needed to LDFLAGS, which caused a problem on systems that didn't support it.
 
 
 
===Milestone 5===
 
 
 
Milestone 5 introduces the following new features:
 
 
 
* The Windows UI and DirectX code has been integrated into the codebase. The Gens/GS codebase can now be used to compile both the Linux versions and the Windows versions.
 
* [Linux] The frame counter code has been updated to work a lot better. In particular, it no longer uses the x86 instruction "rdtsc", so it should be more accurate on multiprocessor and multicore systems.
 
* 7z: A warning dialog is now shown if the 7z binary cannot be run. This usually occurs if 7-Zip isn't installed.
 
* [GTK+] The "General Options" dialog now has regular buttons instead of radio buttons for selecting colors. It seems that most GTK+ themes don't properly support changing the colors of radio buttons, so changing them to regular buttons enables proper color support.
 
 
 
Milestone 5 fixes the following bugs:
 
 
 
* [32X] PWM audio volume has been increased by a factor of 4, making it audible.
 
* [SegaCD] The 8th PCM audio channel now works.
 
* [Linux] If Gens is started in a terminal window, Ctrl-C now correctly shuts down the program. Earlier versions ignored Ctrl-C. Apparently, SDL catches the Ctrl-C (SIGINT) and adds it to the SDL event queue as an SDL_QUIT message.
 
* The "Save Config" and "Load Config As" functions incorrectly passed a NULL value to the GensUI class when a C++ string was expected, resulting in a crash.
 
* Clicking "OK" in the "Archive File Selection" dialog with no file selected resulted in a crash.
 
* [32X] Some 32X ROMs were misdetected as Genesis ROMs. In particular, drx's "[[Sonic the Hedgehog 32X|Sonic 32X]]" does not say "SEGA 32X" in the header. However, the ROM does have "MARS" at 0x040E. The detection function has been updated to take this into account, so "[[Sonic the Hedgehog 32X|Sonic 32X]]" is now properly detected as a 32X ROM.
 
* [GTK+] Fixed GTK+ 2.4 compatibility issues.
 
* [GTK+] Added accelerators for the "Cancel" button in the Game Genie window.
 
* Color Adjust: If both Contrast and Brightness are set to 0, then no color adjustment calculations will take place. This prevents inaccuracies due to rounding errors.
 
 
 
Milestone 5 has the following low-level code changes:
 
 
 
* -Wl,--as-needed has been added to LDFLAGS. This eliminates unnecessary library dependencies.
 
* Internal copies of zlib and libpng have been added. These internal copies are not used by default on the Linux build, since most Linux systems have zlib and libpng already installed, but are used by default on the Windows build. Use of these internal copies can be configured using the ./configure script.
 
* MP3 playback support can now be disabled in the ./configure script.
 
* rom.cpp, save.cpp, and imageutil.cpp (formerly scrshot.c) have been converted to static C++ classes.
 
* The INI parser now supports hexadecimal and octal numbers. These numbers are identified by prefixes. (Hexadecimal: "0x" or "0X"; Octal: "0".)
 
* Controller mappings are now saved as hexadecimal numbers in gens.cfg.
 
 
 
Milestone 5 has the following known issues:
 
 
 
* [Win32] MP3 support is currently disabled due to problems with the MP3 library. ASPI support is available though, so you can use an ASPI library with a CD-ROM emulator, such as Daemon Tools.
 
* [Win32] Stretched rendering may not work properly in fullscreen mode.
 
* [Linux] Monaural sound is broken.
 
 
 
===Milestone 4.2===
 
 
 
Milestone 4.2 fixes the following bugs:
 
 
 
* Joystick input was still completely broken due to an accidental swapping of "which" (device number) and "axis" (axis number). This bug was reported by Techokami in #retro.
 
 
 
===Milestone 4.1===
 
 
 
Milestone 4.1 introduces the following new features:
 
 
 
* The Fast Forward feature has been re-enabled. It is mapped to F1. Note that Fast Forward doesn't work if VSync is enabled.
 
 
 
Milestone 4.1 fixes the following bugs:
 
 
 
* SDL's joystick handler wasn't being initialized properly. Joysticks were properly detected in the Controller Configuration window, but didn't work in-game. This bug was reported by [[Techokami]] in #retro.
 
* A missing #include <stdlib.h> line has been added to g_main_linux.hpp. Lack of this line led to compilation failures on some machines. This bug was reported by [[SOTI]] in #retro.
 
* zlib support can now be conditionally compiled. This only affects the GZip and Zip functionality; PNG support implies zlib, but enabling PNG support will not implicitly enable zlib support.
 
 
 
===Milestone 4===
 
 
 
Milestone 4 introduces the following new features:
 
 
 
* The SegaCD GFX debugger now shows all 16 virtual palette lines. The virtual palette lines include highlight and shadow. Previously, these lines were selectable, and the patterns did reflect the palettes, but the color lines didn't actually show up.
 
* MAME CHD and CCnet support have been removed. They weren't used for anything and simply took up extra space.
 
* The scanline renderer is now available in 32-bit color. Note that the x86 asm scanline renderers don't erase the scanlines on every frame, so garbage is left behind by the new text drawing function.
 
* OpenGL linear filtering can now be enabled/disabled via a menu item.
 
* New generic input and audio layers, which are located in src/gens/input/ and src/gens/audio/. Like VDraw, which was implemented in Milestone 3, this will make it easier to add support for DirectInput and DirectSound, respectively. src/gens/sdllayer/ is now completely gone.
 
* New onscreen text drawing function. The new function draws text to the display framebuffer rather than to the emulated framebuffer. Among other things, this means that messages and the FPS counter no longer show up in screenshots. The font currently used is the Commodore 64 font, but more fonts may be added later on.
 
* 32-bit color support in the VDP debugger.
 
* Improved OpenGL renderer. The improved renderer takes some fixes from Gens/Linux 2.15.4, as well as improving the VSync functionality. VSync uses the GLX_SGI_swap_control extension, so it may not work on all systems. Support for other VSync extensions will be added later on.
 
* The GTK+ window border is now set to 0. This allows a window manager to remove the window border for pseudo-full-screen.
 
 
 
Milestone 4 fixes the following bugs:
 
 
 
* Shadow/Highlight colors were incorrect in 16-bit color.
 
* If the country code was set to US, Gens/GS would incorrectly attempt to load the EU MegaCD BIOS if a SegaCD game was loaded, resulting in a region code error. This has been fixed.
 
* Physical CD-ROM support via ASPI works again. I accidentally broke it when CD-ROM support was made conditional.
 
 
 
Milestone 4 has the following low-level code changes:
 
 
 
* C99 mode is now used by default for C-language code.
 
* The new INI handler has been converted to a C++ class.
 
* Deprecated GTK+ functions have been disabled via the -DGTK_DISABLE_DEPRECATED CFLAG.
 
* New GensUI C++ class, which replaces the old ui-common.c and ui-common_gtk.c files.
 
* Minizip has been upgraded to the latest version (v1.01e) and is now in a separate subdirectory in src/.
 
 
 
===Milestone 3===
 
 
 
Milestone 3 introduces the following new features:
 
 
 
* Completely rewritten video rendering subsystem. The new video rendering subsystem abstracts the differences between plain SDL and SDL+OpenGL and presents a standard interface to the rest of Gens. This will make it easier to add in DirectDraw support later on.
 
* The configuration file handler has been rewritten such that it no longer fails to read or write certain configuration entries. Additionally, section names and key names are now case-insensitive.
 
* The OpenGL renderer now supports 15-bit and 32-bit color modes.
 
* Improved Fast Blur function, written in C, that supports 15, 16, and 32-bit color modes. The old Fast Blur function is still used for 15 and 16-bit color if x86 asm is enabled via --enable-x86-asm in the ./configure script.
 
* 7z archives can now be used via an external 7z binary. You must have p7zip installed in order to use this feature.
 
* SegaCD LED code has been updated to work correctly in all color modes.
 
 
 
Milestone 3 fixes the following bugs:
 
 
 
* The built-in debugger now properly updates the screen in 32-bit color.
 
* Horizontal positioning for 256x224 video modes in 32-bit color was off by 32 pixels.
 
 
 
Milestone 3 has the following low-level code changes:
 
 
 
* Standard controller I/O functionality has been ported to C. Additionally, controller button presses are now stored in bitfields rather than reserving an entire 32-bit int per button. Unfortunately, I could not figure out how to port over the TeamPlayer code correctly, so that remains in x86 asm for now, with compatibility wrappers with regards to the button format.
 
* Compression handlers have been rewritten using C++ classes.
 
* C++ code has been introduced into the Gens/GS codebase. With this change, all header files have been updated to include "#ifdef __cplusplus" barriers, so older C-only code will link correctly.
 
 
 
===Milestone 2.2===
 
 
 
Milestone 2.2 fixes the following bugs:
 
 
 
* Fixed several bugs with savestate support, including matching struct alignment with Gens/Rerecording (Win32) and incorrectly reading x86 memory pointers for the emulated Z80 CPU. Please note that savestates from previous versions of Gens/GS will not work correctly on m2.2; however, you can load the savestates in another emulator, such as the original Gens, and resave it in the older format. The older format savestate will then work on Gens/GS.
 
* CD-ROM drive support is now conditional via the ./configure script.
 
* 32-bit color now works for 32X games.
 
 
 
===Milestone 2.1===
 
 
 
Milestone 2.1 fixes the following bugs:
 
 
 
* 32X VDP rendering was accidentally broken completely in m2. It's fixed now, at least for 15-bit and 16-bit color. 32-bit color mode still needs to be fixed.
 
* The window title for 32X games was always set to "32X (PAL)", even if the game is NTSC. This is fixed.
 
 
 
===Milestone 2===
 
 
 
Milestone 2 introduces the following new features:
 
 
 
* PNG screenshot support via libpng. This was apparently a wishlist item for Gens for the past several years, but no one bothered to add it.
 
* Screenshots now save the unfiltered image at the correct resolution. For example, Sonic CD special stages now save as a 256x224 image.
 
* Rewrite of the way compressed files are handled. Compressed files are now handled using a generic COMPRESS_Handler interface. Currently, only GZip and Zip files are supported (the same as before), but it's now much easier and simpler to add new formats.
 
* The new compression handler detects compressed files by checking the file's header instead of relying on the file's extension. This may help in cases where a file is misnamed.
 
* Multi-file Zip support. If a Zip file containing multiple files is  selected, Gens will prompt you to select which file to open. The UI for selecting a file is currently not polished, but it will be improved later on.
 
* Rewrite of the way renderers are handled. The new rendering system uses the same rendering code, but has a much simpler calling interface.
 
* Initial 32-bit color support, ported from Gens Rerecording. Most of the 32-bit color renderers haven't been ported from Gens Rerecording yet, so only three are available in 32-bit: Normal, Double, and Scale2x. 15-bit or 16-bit color is necessary for the others. To change color modes, select Graphics, Bits Per Pixel, and the appropriate color mode.
 
* Conditional compilation support for OpenGL, PNG, and x86 asm renderers. If PNG support is not enabled, screenshots will be taken in BMP format.
 
* Border color emulation. The border color is set to color 0 of palette 0 from the MD's VDP.
 
 
 
Milestone 2 fixes the following bugs:
 
 
 
* Fixed a bug where the 32X VDP overlay disappeared when Gens was paused via the Escape key. The overlay reappeared when Gens was unpaused, though.
 
 
 
Known bugs in Milestone 2:
 
 
 
* 32X does not work properly in 32-bit color. The MD VDP shows up correctly, but the 32X VDP's colors are all wrong. For now, switch to 15-bit or 16-bit color by selecting Graphics, Bits Per Pixel, and either 15 or 16.
 
 
 
===Milestone 1===
 
 
 
Milestone 1 introduces the following new features:
 
 
 
* Massive code cleanup throughout the entire Gens codebase. Many functions with duplicated code have been consolidated so that the duplicated code is now shared between the functions. Also, several large files have been split into smaller files. For instance, gens.c has been split into gens.c, g_md.c, g_mcd.c, g_32x.c, and g_palette.c.
 
* Introduction of OS-independent functions, which will allow for the integration of the Win32 version of Gens later on, so that one codebase can be used to build a Gens executable for either operating system.
 
* Gens v7 savestate format, ported from Gens Rerecording. This adds, among other things, proper Sega CD savestate support.
 
* Fixed the built-in debugger, which was broken due to changes in the way text was written to the emulated screen.
 
* Added enhanced Sega CD GFX debugging from Gens Rerecording.
 
* VDP/GFX debugging now outlines the selected palette.
 
* Initial attempt to consoldidate global variables into structs. This will make it easier to figure out where everything is located.
 
* Complete rewrite of the GTK+ UI. Among other things, the new UI has much improved synchronization, so when a menu item is checked, it actually means that item is enabled.
 
* Rewrite of the byteswapping functions so that they describe what is being swapped (e.g. be16_to_cpu_array()).
 
* Extra spaces in game names in ROM headers are removed when the game name is displayed on Gens' title bar.
 
* Fixed tons of compiler warnings.
 
  
 
==VDP Layer Options==
 
==VDP Layer Options==

Revision as of 12:24, 29 July 2009

GensGS.png

Gens/GS is a version of Gens maintained by GerbilSoft. The main goal of Gens/GS is to clean up the source code and combine features from various forks of Gens.

Release 7, Preview 2

Release 7 introduces the following new features:

  • Mega Drive Plugins v1.0.0. This major update to the plugins system adds support for external plugins (.dll on Windows, .so on Linux), as well as support for more than just rendering plugins.
  • doc/mdp/ contains the MDP Interface Specifiction Version 1.0.0. This document is licensed under the GNU Free Documentation License v1.3.
  • A new manual for Gens/GS has been created. It is available in doc/manual/.
  • The Game Genie functionality has been moved to an MDP plugin. It now supports 8-bit, 16-bit, and 32-bit patch codes, and uses a new patch code file format. Old patch code files are supported for loading; however, they will be written in the new format when saved. Later versions will add support for patching CPU address spaces other than the main MC68000.
  • New MDP Plugin: VDP Layer Options. This lets you adjust the visible layers on screen, so e.g. you can hide sprites, swap scroll priorities, and lock the palette to prevent color changes.
  • New MDP Plugin: Sonic Gens. This lets you view various information in memory in several Sonic games. Sonic Gens was originally written by LOst as a standalone version of Gens.
  • New renderers:
    • EPX (ported from Gens Rerecording)
    • EPX Plus (ported from Gens Rerecording)
    • Super 2xSaI (ported from Gens Plus)
    • Super Eagle (ported from Gens Plus)
    • Blargg's NTSC filter for MD
  • [Win32] Ported the GDI video backend from Gens Plus. It still has a few bugs, but it mostly works.
  • Extended controller configuration format. The new configuration format allows for up to 128 axes, 256 buttons, and 64 POV hats, whereas the old configuration format only allowed for 6 axes [5 axes on Win32], 112 buttons, and 4 POV hats. This mainly affects the Linux version, since Linux usually reports all axes as axes instead of mapping some axes to POV hats, and some newer controllers (e.g. the Xbox 360 controller) have more than 6 axes. Older configurations are automatically updated to use the new controller configuration format.
  • The reverse-engineered 32X firmware, written by DevSter, is now included in Gens/GS. If you do not have the original Sega 32X firmware files, the reverse-engineered ones are used instead.
  • Added SH2 DMA support for PWM audio. Thanks to Joseph Fenton for submitting a patch.
  • [Win32] Joysticks connected after loading Gens/GS will now be detected in the Controller Configuration dialog.
  • WAV dumping has been reimplemented.
  • ROM History now caches the ROM type (MD/MCD/32X), so it doesn't have to check the ROM type every time the ROM History menu is rebuilt. This improves performance significantly if some ROM images were loaded from network shares.
  • ROM History now keeps track of compressed files inside of multi-file archives. For example, if you have a 7z archive containing several different versions of a game, selecting version 1 will result in a ROM History entry for that specific version, and selecting version 2 will result in another ROM History entry.
  • Added initial support for the "Palette Select" bit in VDP register 0. If the "Palette Select" bit is cleared, only the LSBs of each color component in CRAM is used to determine the colors to display, resulting in a maximum of 8 colors onscreen. This isn't very useful, but is more accurate.
  • SRAM can now be disabled in the Options menu. This fixes Puggsy, which checks for the existance of SRAM and prevents the user from advancing past a certain point if it exists. (Puggsy uses a password system, not SRAM.)
  • Improved PWM scaling algorithm, provided by Chilly Willy on the Sonic Retro forums.
  • A new command line option, "--boot-cd", can be specified to tell Gens/GS to boot from an actual SegaCD CD-ROM on startup.
  • [Unix] Improved VSync support with the OpenGL backend. Both the MESA and SGI swap control methods are now supported.
  • The video subsystem now supports fallbacks. For example, on the Linux version, if SDL+OpenGL is selected but OpenGL isn't available, it will simply revert back to SDL instead of crashing. As an added bonus, this allows for Gens/GS to start up properly on Windows NT 4.0, since the default backend on Win32 is DirectDraw 4, but NT4 doesn't support it. Instead of crashing, it will fall back to the GDI backend.
  • Gens/GS no longer changes non-alphanumeric characters in SegaCD game names to spaces. This may cause some games to have different names, which will prevent their BRAM files from being loaded properly. If you have any of these games, you will need to rename the BRAM files in order to get them to load correctly.
  • [Unix] If a game has a Shift-JIS encoded title in the Japanese title field and the country code is set to Japan, the title will be converted to the system's native locale, e.g. UTF-8. (Win32 support for this feature will be added once Gens/GS fully supports Windows' Unicode implementation.)

Release 7 fixes the following bugs:

  • Dragging and dropping a ROM image onto the Gens/GS window will now synchronize the menus. This bug was reported by Tets on the Sonic Retro forums.
  • Loading a GSX savestate file that is not in GSX format will now show an error instead of crashing. Apparently, Gens Plus GZips its savestate files when saving by default. This bug was reported by SoNick in #retro.
  • [GTK+] Copied g_uri_unescape_string() (and dependent functions) from GLib 2.18.4 into Gens/GS. This function was introduced in GLib 2.16, but Gens/GS should be compatible with versions of GLib 2.4 and later.
  • Two VDP DMA bugs have been fixed:
    • Zero-length DMA operations are now handled as 65,536-word operations. This may break some poorly-written hacks.
    • DMA operations now wrap on a 128k boundary. This bug was reported by TmEE.
  • The VDP H_Int register is now initialized to 0xFF. This fixes Sik's test ROM that produced "rain" on Gens, but not on Regen or the actual hardware.

Release 7 has the following low-level code changes:

  • The video, audio, and input subsystems have been ported back to C. The C++ system was too awkward and had too much overhead.
  • Similarly, the decompression subsystem has been ported back to C. In addition, the LZMA SDK is now built into Gens/GS, so 7z archives can be read without an external 7z binary.
  • Initial port of the Z80 emulator to C. The Z80 emulator has been moved out of the src/gens directory and into its own directory, src/mdZ80. Currently, the only functions that have been ported to C are the helper functions. The actual emulation code is currently being worked on in the mdZ80 branch in the Gens/GS git repository.
  • Many assembly-language files have been converted from Intel-style (nasm) assembly to AT&T-style (GNU `as`) assembly.
  • Many assembler functions have been ported to C/C++, including the UPDATE_PALETTE macros and Reset_VDP() (now VDP_Reset()).
  • Multitap support has been ported from x86 assembler to C. In the process, both Sega Teamplayer and 4-Way Play support have been improved. Notably, Teamplayer now works on "NBA Jam" and "NBA Jam TE", and 4-Way Play now works (sometimes) on "Triple Play '96". A complete list of tested multitap games can be found in doc/teamplayer.txt .
  • yasm is now supported as an alternative to nasm. To use yasm, add the option --with-nasm=yasm when using the ./configure script.
  • Precompiled binaries are now compiled for i686 or higher. If you want to run Gens/GS on an original Intel Pentium or older, you will have to compile your own Gens/GS binary.

For information about previous releases, see the ChangeLog.txt file included with Gens/GS r7_pre2.

VDP Layer Options

Milestone 6 adds a new feature that allows modifying VDP layer options; however, there is currently no GUI for this feature. (A GUI will be included as a plugin in r7.) If you're using Linux and have gdb installed, you can modify the VDP layer options manually. (This requires a non-stripped Gens/GS build; you may have to compile Gens/GS from source.)

To start Gens/GS in gdb, open a terminal and run the following command:

gdb gens

gdb will load. To start the program, type "run" and press enter. Gens/GS will start.

To change the layer settings, go back to the terminal and press Ctrl-C. gdb will show the following:

Program received signal SIGINT. Interrupt.
0x[numbers] in [function] ()
(gdb)

Ignore the [numbers] and [function] part. Type the following command:

print /x VDP_Layers

gdb should output 0xdb, which is the default VDP layers value.

This value is a bitfield. To set a new value, you will need to add flag values from the table below. Make sure to add the values for the flags that you want enabled, and ignore the values for the flags that you want disabled.

VDP_LAYER_SCROLLA_LOW        = 0x00000001
VDP_LAYER_SCROLLA_HIGH       = 0x00000002
VDP_LAYER_SCROLLA_SWAP       = 0x00000004
VDP_LAYER_SCROLLB_LOW        = 0x00000008
VDP_LAYER_SCROLLB_HIGH       = 0x00000010
VDP_LAYER_SCROLLB_SWAP       = 0x00000020
VDP_LAYER_SPRITE_LOW         = 0x00000040
VDP_LAYER_SPRITE_HIGH        = 0x00000080
VDP_LAYER_SPRITE_SWAP        = 0x00000100
VDP_LAYER_SPRITE_ALWAYSONTOP = 0x00000200
VDP_LAYER_PALETTE_LOCK       = 0x00000400

The default value, 0xdb, corresponds to ScrollA Low, ScrollA High, ScrollB Low, ScrollB High, Sprite Low, and Sprite High.

Once you've come up with your new value, type the following commands into gdb:

set VDP_Layers=0xdb
continue

Replace 0xdb with your new VDP layer options value.

Download

Download.svg

Download Gens/GS
Multiple downloads available

Gens/GS Milestone 6 (Source Code) ("Gens-2.15.5-gs-m6.tar.gz" does not exist) (info)
Gens/GS Milestone 6 (Ubuntu 8.04+, 32-bit) ("Gens_2.15.5-gs-m6-1_i386.deb" does not exist) (info)
Gens/GS Milestone 6 (Win32) ("Gens-2.15.5-gs-m6-win32.zip" does not exist) (info)

Git Repository

The Gens/GS git repository is available at http://gs_server.gerbilsoft.ddns.info/cgi-bin/gitweb.cgi?p=gens.git;a=summary .

Prior Versions

Other Information

Forum Threads