Sonic and Sega Retro Message Board: Gens/GS Milestone 6 - Sonic and Sega Retro Message Board

Jump to content

Hey there, Guest!  (Log In · Register) Help
Loading News Feed...
 

Gens/GS Milestone 6 2.15.5/GS-m6

#1 User is offline GerbilSoft 

  Posted 24 August 2008 - 12:13 AM

  • RickRotate'd.
  • Posts: 1995
  • Joined: 11-January 03
  • Gender:Male
  • Location:USA
  • Project:Gens/GS
  • Wiki edits:158
I've been working on a fork of Gens for the past few months. The main improvements are massive source code overhauls and cleanups, as well as some feature additions.

The current release of Gens/GS is Milestone 6, and is available here: Gens/GS

New features coming soon in Release 7:
  • Versioning scheme changed from "Milestone" to "Release" due to several Microsoft fanboys who insist that only Microsoft has the "one true versioning system", and spread lies that Gens/GS was pre-alpha since it used the "Milestone" designation.
  • External plugin support (*.dll/*.so), based on the MDP v1.0.0 specification.
  • Improved Game Genie plugin.
  • "Sonic Gens" plugin, based on a hack of Gens by LOst.
  • "VDP Layer Options" plugin, which lets you disable layers and swap layer priorities.
  • New renderers: EPX, EPX Plus, Super Eagle, Super 2xSaI.
  • Built-in copy of the reverse-engineered 32X firmware by DevSter.
  • Improved joystick support. (The Linux/SDL version now supports up to 128 axes, 256 buttons, and 64 POV hats. The Windows version supports the maximum number that DirectInput allows, which I can't recall offhand.)
  • Redesigned Controller Configuration dialog. It now shows the current configuration for controllers, and it lets you configure one button at a time.
  • Improved Teamplayer/4-Way Play support. (It still doesn't work on all games that support it, but it's better than before.)
  • WAV dumping support has been reimplemented. (It was dropped in the original Gens/Linux due to reliance on Win32-specific APIs.)
  • Two VDP bugs fixed: Zero-length DMA is now correctly handled as 65,536 bytes, and VDP DMA now wraps on 128K boundaries. (The 128K wrap fix isn't perfect, but it's much better than it was before.)
  • ROM History now saves the name of ROM files selected from within multi-file archives.
  • Initial support for the "Palette Select" bit in VDP register 0. If it's cleared, only the LSB for each color component in CRAM is used. Not very useful, but more accurately simulates the actual hardware.
  • SRAM can now be disabled in the Options menu. This fixes Puggsy.
Planned for Release 8 or later:
  • libcdio integration for improved, cross-platform physical CD-ROM support and BIN/CUE support.
  • mdZ80 port to C.
  • ZOMG savestate format.
  • Complete separation of UI from emulation code, resulting in libgens.so, gens-gtk2, gens-win32.exe, gens-qt4, etc.
EDIT: Added stuff planned for Release 8 or later.
This post has been edited by GerbilSoft: 26 April 2009 - 07:31 PM

#2 User is offline Sik 

Posted 24 August 2008 - 01:03 AM

  • Sik is pronounced as "seek", not as "sick".
  • Posts: 6719
  • Joined: 17-March 06
  • Gender:Male
  • Project:being an asshole =P
  • Wiki edits:11

View PostGerbilSoft, on Aug 24 2008, 03:13 AM, said:

- Sprite priority bug

Just checked and Gens emulates this bug. Are you sure it isn't emulated or it got removed at some time I don't know? Or there's another sprite priority bug I'm not aware of?

#3 User is offline GerbilSoft 

Posted 24 August 2008 - 01:18 AM

  • RickRotate'd.
  • Posts: 1995
  • Joined: 11-January 03
  • Gender:Male
  • Location:USA
  • Project:Gens/GS
  • Wiki edits:158
You actually mentioned it in #retro:

<+Sik> See, there's a priority flag for each tile in the plans and each sprite
<+Sik> However, it only works between planes. Sprites are ordered by the chain list.
<+Sik> So a sprite with low priority flag can still appear over one with a high priority flag.
<+Sik> Guess what happens when you have that situation and it's mixed with a high priority in the scroll planes.
<+Sik> Hint: put a green block in Sonic 1 in the overground areas. Put it into the lava so it floats on it. Wait until it collisions with a platform...


So that bug *is* emulated correctly in Gens?

#4 User is offline Sik 

Posted 24 August 2008 - 03:33 AM

  • Sik is pronounced as "seek", not as "sick".
  • Posts: 6719
  • Joined: 17-March 06
  • Gender:Male
  • Project:being an asshole =P
  • Wiki edits:11
Yep, I checked it as soon as I saw the post and it was emulated.

EDIT: quick way to check if it's emulated, try this:
http://www.fileden.c...3510/vdpbug.PNG
Use debug mode to place the green block, push it onto the lava and see what happens =P

EDIT 2: yes, I know that screenshot is from Fusion, I just wanted to show how it looks with the bug. It does the same thing on Gens, but I wasn't going to make another screenshot just to change the titlebar =P
This post has been edited by Sik: 24 August 2008 - 03:36 AM

#5 User is offline GerbilSoft 

Posted 24 August 2008 - 04:37 AM

  • RickRotate'd.
  • Posts: 1995
  • Joined: 11-January 03
  • Gender:Male
  • Location:USA
  • Project:Gens/GS
  • Wiki edits:158
Yeah, I just tested it on my Gens codebase and the bug is, in fact, emulated correctly.

I crossed it off the list.

#6 User is offline Flygon 

Posted 24 August 2008 - 05:00 AM

  • Totally me irl
  • Posts: 2294
  • Joined: 10-February 06
  • Gender:Not Telling
  • Location:Victoria, Australia
  • Project:Cleavage
  • Wiki edits:10
Okay, I'm definitely going to download this Gens edition if it has overclocking, Megasis's desynchronizing is getting moronic.

#7 User is offline Sith 

Posted 24 August 2008 - 03:52 PM

  • The molotov bitch
  • Posts: 1859
  • Joined: 24-July 06
  • Gender:Male
  • Location:Belgium

View PostGerbilSoft, on Aug 24 2008, 07:13 AM, said:

Emulator TODO list:
- VRAM overwrite bug: Sonic 2 Delta works in Gens, but has VRAM corruption in Kega and the real console.

Glad that I could bring this to your attention. Lots of Gensmade hacks suffer from this.

#8 User is offline Sik 

Posted 24 August 2008 - 03:56 PM

  • Sik is pronounced as "seek", not as "sick".
  • Posts: 6719
  • Joined: 17-March 06
  • Gender:Male
  • Project:being an asshole =P
  • Wiki edits:11
Stupid question: what's the cause of that bug? What do those hacks do wrong? =/

#9 User is offline Uberham 

Posted 24 August 2008 - 05:30 PM

  • King Of Oblivion
  • Posts: 996
  • Joined: 23-February 08
  • Gender:Male
  • Location:Sheffield England
Could you also Hack in support for ROMS over 4 MB?

It's just I want to play that Ultimate Mortal Kombat Trilogy hack with a current (ish) version of GENS.

#10 User is offline Sith 

Posted 24 August 2008 - 05:56 PM

  • The molotov bitch
  • Posts: 1859
  • Joined: 24-July 06
  • Gender:Male
  • Location:Belgium

View PostSik, on Aug 24 2008, 10:56 PM, said:

Stupid question: what's the cause of that bug? What do those hacks do wrong? =/

Gens doesn't handle vram overwriting properly and does things that are not allowed on hardware.
Therefore Gensmade hacks don't follow the correct hardware standards and give garbled object gfx on Kega or hardware.
This post has been edited by Sith: 24 August 2008 - 06:11 PM

#11 User is offline Sik 

Posted 24 August 2008 - 06:27 PM

  • Sik is pronounced as "seek", not as "sick".
  • Posts: 6719
  • Joined: 17-March 06
  • Gender:Male
  • Project:being an asshole =P
  • Wiki edits:11
D'oh, I was asking for the exact technical reason of the overwrite, not why there's a bug in the hacks =P

#12 User is offline GerbilSoft 

Posted 24 August 2008 - 08:13 PM

  • RickRotate'd.
  • Posts: 1995
  • Joined: 11-January 03
  • Gender:Male
  • Location:USA
  • Project:Gens/GS
  • Wiki edits:158

View PostUberham, on Aug 24 2008, 06:30 PM, said:

Could you also Hack in support for ROMS over 4 MB?

It's just I want to play that Ultimate Mortal Kombat Trilogy hack with a current (ish) version of GENS.

UMK Trilogy uses stuff not found on the actual hardware, so I won't be implementing it.

Specifically, it uses a non-bankswitched ~10MB ROM, which is impossible on the actual hardware. There is the official Sega bankswitching system though, which I think Gens already supports. The official bankswitching system supports up to 32MB ROM, but requires the program to be specifically coded to use it. The only game I can think of that uses this bankswitching method is Super Street Fighter II, which has a 40Mb (5MB) ROM.
This post has been edited by GerbilSoft: 24 August 2008 - 08:14 PM

#13 User is offline Sik 

Posted 24 August 2008 - 08:40 PM

  • Sik is pronounced as "seek", not as "sick".
  • Posts: 6719
  • Joined: 17-March 06
  • Gender:Male
  • Project:being an asshole =P
  • Wiki edits:11
Phantasy Star 4 uses it to access SRAM too, because the ROM is 4MB and there isn't any space for the SRAM address.

EDIT: fix Z80 bug =P For some reason, if I access the joypads, the Z80 starts running even if I don't send the command (I don't do so because I'm not using it). This leads to another issue that in the end causes the program to crash. This doesn't happen on real hardware.
This post has been edited by Sik: 25 August 2008 - 12:29 AM

#14 User is offline shobiz 

Posted 25 August 2008 - 01:33 AM

  • Posts: 863
  • Joined: 27-March 05
  • Gender:Male
  • Location:Karachi, Pakistan
  • Wiki edits:4,411

View PostSik, on Aug 25 2008, 05:27 AM, said:

D'oh, I was asking for the exact technical reason of the overwrite, not why there's a bug in the hacks =P

The bug in S2 Delta, S2 Long Version etc. is caused by a DMA of length 0, which apparently does nothing on Gens but screws stuff up on Kega and real hardware. I'm quoting a post of Jman's below which explains the problem and gives its solution:

View Postjman2050, on Jan 17 2006, 11:07 PM, said:

EDIT - Oh, and btw, I fixed the VRAM bug LocalH was talking about. Turns out it wasn't a VRAM issue at all; it was a DMA issue. More specifically, a bug in the game itself. Basically, in order to load level art into VRAM, it does it backwards. It uses the ending address of the decompressed data in RAM and derives the length in words of the first DMA transfer. It does this by using the lower 12 bits (if the ending address were $6C00, it uses $C00, and right shifts it to get the DMA length). Then after the initial transfer it loads the rest of the art backwards by $1000 byte chunks until it reaches $0000.

The problem with this code is that it assumes it's going to find a length. If the decompressed art ends at an address divisible by $1000 (as it does in my case), what happens is that the game uses a length of 0 for the first DMA transfer. Gens apparantly ignores DMA transfers of zero length, but the Genesis (and Kega) don't, and it screws everything up as a result. It's an easy fix too: Right before the call to the subroutine $144E around offset 4F1A, just test d3 for zero, and skip the call to $144E if that's the case. Bug fixed, problem solved.


#15 User is offline Sik 

Posted 25 August 2008 - 01:59 AM

  • Sik is pronounced as "seek", not as "sick".
  • Posts: 6719
  • Joined: 17-March 06
  • Gender:Male
  • Project:being an asshole =P
  • Wiki edits:11
Oh, that bug =P

Fix: check the DMA length after moving each word, not before doing so =] But I'm assuming it emulates the DMA the proper way. If everything is loaded directly, bad luck there D=

  • 15 Pages +
  • 1
  • 2
  • 3
  • Last ►
    Locked
    Locked Forum

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users