Exodus 2.0 + Open Source Release
Moderator: Nemesis
-
- Very interested
- Posts: 273
- Joined: Fri Feb 29, 2008 8:12 pm
- Location: United States
Nice! TMSS works great now. All games seem to be running at full speed but I notice the FPS maxes out at around 62 to 63 FPS, any reasoning for this on a 60Hz monitor?
But damn, DEcapAttack still brings my 4770K to its knees!
But damn, DEcapAttack still brings my 4770K to its knees!
Last edited by King Of Chaos on Fri May 01, 2015 1:35 am, edited 1 time in total.
Pretty sure they came from the printed values on top of some crystals mounted on physical systems I own. I didn't hook up a scope or anything like that to confirm though. I expect there's probably large variation between real systems anyway simply due to the lack of perfection in crystal oscillators.Eke wrote:One remark though, in that xml model file:
https://bitbucket.org/exodusemulator/ex ... 201600.xml
Where does these clocks values come from ?
I think all the values I've seen being reported were always 53693175 for NTSC and 53203424 for PAL. Not that it would make much difference but I was curious about it.Code: Select all
<System.SetClockFrequency TargetClockName="MCLK" ClockType="Direct" Value="53634165" /> <System.SetLineState SystemLineName="NTSC" Value="1" /> ... TargetClockName="MCLK" ClockType="Direct" Value="53203400" /> <System.SetLineState SystemLineName="NTSC" Value="0" />
You can actually change the clock rate in realtime in the debugger, so if you want to tweak it to see the result, give it a go!
I know, it sits there taunting me!Oerg866 wrote:Hey nemesis!
Your emulator still SUXX!
...
Overdrive's emulation remains somewhat alright, although you did fix a few things, Exodus doesn't get it quite right yet. The screen above should not have the black interference on the right, the image cuts off a few pixels too early (horizontally I mean), and plainly "YOUR EMULATOR" still "SUXX" because it doesn't emulate that disabling display during horizontal blanking will interfere with sprite fetching.
The credits sequence exposes a few timing flaws (it is very precisely timed to wait the exact amount of time necessary to render the relevant text, any timing inaccuracies will break it)
The irony here is, Exodus is failing those cases because the VDP core is so accurate. The problem is the M68000 doesn't have perfect timing yet. Every bus access attempt effectively occurs at the time the opcode began executing, rather than at the correct cycle offset from the beginning of the opcode execution. This has the effect of VDP access being sent to the VDP slightly earlier than it should, which is what's breaking things here. Any other emulator that displays this right only does so because it's using incorrect delayed timing for the VDP, which cancels out the advanced timing for the M68000 access. Try disabling the display through the tail end of a more complex instruction like MOVEM and see what happens on those emulators, it'll fail horribly.
The VDP core in Exodus is cycle-accurate, as I've painfully verified through many hours checking VDP behaviour with a logic analyzer. The VDP sprite fetching behaviour is also cycle accurate. When the M68000 core is also cycle-accurate, the Overdrive demo will run perfectly. Getting a cycle-accurate M68000 core is the next big goal for Exodus, but it's going to require gathering that information first, because no complete and accurate documentation on the M68000 bus access cycles for each opcode currently exists in the public domain.
I won't be doing anything to "patch" the VDP core to fudge the timing and make it work, it'll remain broken until the M68000 core has perfect timing. Until then, it serves as a great test case to verify the new M68000 core.
Thanks for letting me know, I've fixed it in Exodus 2.0.1.King Of Chaos wrote:Awesome work Nemesis! Noticed something though, I'm getting this in the error log when trying to load a module with TMSS enabled (without lockout);
.....
Thanks, also fixed in Exodus 2.0.1.PaHgoM wrote:Hello, Nemesis. Great job, I was waiting for release, but there is some problem: I can't configure controls. I use arrows near numpad, and when I press them in "Auto Mapping" mode, nothing happens
The black screen you're seeing I believe is because of a lack of cycle-accurate M68000 emulation. There's a few games that use a wait loop on the "F" flag in the VDP status register. Other emulators raise this flag a few cycles before VINT occurs, which is wrong. The real hardware asserts this flag directly with the VINT. Exodus currently processes bus accesses at the start of the opcode, not at the correct delay during the opcode, which means the "F" flag always reads as false. These games won't work until the M68000 core improves. That's my next major goal for emulation accuracy.Black Zero wrote:Neither Rockman World or Mega Man The Wily Wars starts at all, it's just an big black empty screen staring at me and the controls doesn't get saved for some reason.
I open up Exodus and configure the control accordingly, I play some games and then I close and I have to configure it again the next time I start Exodus.
BTW I got my Sega Gensis bios dump that I used in Fusion, how do I use it here?
There were bugs with configuring controls, which are fixed in Exodus 2.0.1. You can configure controls through the "Settings -> Input Mapping" menu option. Note that you need to save the system in order to save changes to input mappings.
You can set the BIOS through "Settings -> Embedded ROM Selection". Note that you also need to save the system to save these changes.
-
- Very interested
- Posts: 273
- Joined: Fri Feb 29, 2008 8:12 pm
- Location: United States
Okay, posting these here as I find them...
X-Men (USA): The transition sound after the Sega logo to the main title sounds correct... however if you let the demo run a few times after which will loop back to the Sega logo and title screen again the sound doesn't sound like the first time. I might have to get my model 1 out of storage and test this one when I get some time.
X-Men 2 - Clone Wars (USA): The random character upon power on, hard reset and soft reset isn't supported (yet).
X-Men (USA): The transition sound after the Sega logo to the main title sounds correct... however if you let the demo run a few times after which will loop back to the Sega logo and title screen again the sound doesn't sound like the first time. I might have to get my model 1 out of storage and test this one when I get some time.
X-Men 2 - Clone Wars (USA): The random character upon power on, hard reset and soft reset isn't supported (yet).
Glad to hear you're getting good performance on your machine, I spent quite a lot of time optimizing the cores and the system itself.King Of Chaos wrote:Nice! TMSS works great now. All games seem to be running at full speed but I notice the FPS maxes out at around 62FPS, any reasoning for this on a 60Hz monitor?
But damn, DEcapAttack still brings my 4770K to its knees!
The FPS isn't based on your monitor, but the output framerate of the VDP core, which isn't a perfect 60FPS in the real world. The framerate won't report as strictly stable though, partially because any timing wait loop is subject to inaccuracy, and partially because I'm using a simple averaging calculation to determine the FPS which is probably inaccurate itself.
And wow, you're not kidding about DecapAttack! I took a look, and it's due to the sound driver crashing from a bug in my Z80 core on a reset. The Z80 gets stuck in a loop hammering the M68000 bus access window every second cycle, which is an expensive operation. I'll release a fix in the next version. For now, you can turn off the Z80 in the debugger and it flies.
You know, I only just noticed the new M68000 register list in the debugger goes D1-D8 and A1-A8 instead of D0-D7 and A0-A7. That's pretty embarrassing mistake to miss, almost want to do another release right now just for that!
EDIT: Just noticed that MegaMan uses serial EEPROM rather than SRAM. Yeah, that's not supported in Exodus currently. Support for this game and others like it can easily be added by creating a device to emulate the EEPROM devices in question, and updating the Mega Drive ROM loader to recognize these games.
You know, I did actually add support for this, and I was banging my head against the wall as to why this wasn't working, and then when I did hardware tests, I found that on the systems I tested on at least, the character also wasn't random on the hardware either. Never diagnosed past that. It'd be worthwhile going back and testing on your system, and if it is random for you, I'll need to know the specs of the unit you're using (region and board/chip revisions).X-Men 2 - Clone Wars (USA): The random character upon power on, hard reset and soft reset isn't supported (yet).
I had another look at this, and it actually looks like it's due to failed SRAM support. Megaman is doing some kind of strange read/write stress test on the SRAM, which is entering an infinite loop. On a quick look I can't see how this loop is ever supposed to pass. I'll have to compare with another emulator to see why they pass it. Fortunately I do own this cartridge, so I can test on the hardware too if I need to.Neither Rockman World or Mega Man The Wily Wars starts at all, it's just an big black empty screen staring at me and the controls doesn't get saved for some reason.
EDIT: Just noticed that MegaMan uses serial EEPROM rather than SRAM. Yeah, that's not supported in Exodus currently. Support for this game and others like it can easily be added by creating a device to emulate the EEPROM devices in question, and updating the Mega Drive ROM loader to recognize these games.
-
- Very interested
- Posts: 273
- Joined: Fri Feb 29, 2008 8:12 pm
- Location: United States
Nice!Nemesis wrote:And wow, you're not kidding about DecapAttack! I took a look, and it's due to the sound driver crashing from a bug in my Z80 core on a reset. The Z80 gets stuck in a loop hammering the M68000 bus access window every second cycle, which is an expensive operation. I'll release a fix in the next version. For now, you can turn off the Z80 in the debugger and it flies.
Go for it, hehe.Nemesis wrote:You know, I only just noticed the new M68000 register list in the debugger goes D1-D8 and A1-A8 instead of D0-D7 and A0-A7. That's pretty embarrassing mistake to miss, almost want to do another release right now just for that!
If I remember correctly, it's always been random for me. I remember back in the day constantly resetting to get Nightcrawler. Then I was using a US Model 2 Genesis - I don't know the board/chip revision off the top of my head. I'll try to get it out of storage this weekend along with the model 1 and test this though I'm fairly certain it'll be random there as well. All my Genesis models are US. Though I think the main difference is power on/hard reset vs soft reset in this case - all other emulators seem to have set characters for power on/hard reset and soft reset. Again, I'll retest this one.Nemesis wrote:You know, I did actually add support for this, and I was banging my head against the wall as to why this wasn't working, and then when I did hardware tests, I found that on the systems I tested on at least, the character also wasn't random on the hardware either. Never diagnosed past that. It'd be worthwhile going back and testing on your system, and if it is random for you, I'll need to know the specs of the unit you're using (region and board/chip revisions).
-
- Very interested
- Posts: 273
- Joined: Fri Feb 29, 2008 8:12 pm
- Location: United States
-
- Interested
- Posts: 13
- Joined: Fri Apr 03, 2015 8:17 am
Damn I really wanted to give this an honest go but if Rockman Mega World and Mega Man the Wily Wars ain't working I have no other choice then to go back to Fusion a little while longer.
Thanks for 2.0.1 though but it seems like the controller settings doesn't get saved no matter what.
I can map the controller over and over but nothing gets saved and once you reset you have to map it again.
One other thing I noticed was that settings like the Show Status Bar under VDP System Settings doesn't get saved.
Thanks for 2.0.1 though but it seems like the controller settings doesn't get saved no matter what.
I can map the controller over and over but nothing gets saved and once you reset you have to map it again.
One other thing I noticed was that settings like the Show Status Bar under VDP System Settings doesn't get saved.
Fixed, thanks!King Of Chaos wrote:Also noticed if you go over 100 FPS the value is cut off on the bottom right (I hate to see what happens if/when we can go over 1,000 FPS!);
The Build directory is for build support files, like custom MSBuild files. Right now the build output goes to two places: Exodus.exe and system.exe go to the root, and all the plugins go to the "Assemblies" subdirectory.mickagame wrote:Nemesis.
I've just build successfully Exodus but all files (exe, dll ...) are build in the root directory of the project instead of the build directory.
Compatibility isn't as high as other emulators out there right now. No real effort has been put into any of the special cartridge hardware like mappers. A lot more time has gone into the platform itself, crazy corner cases of behaviour, and debugging features. Once the M68000 in particular has a cycle-accurate core, I'll probably spend more time worrying about individual game hardware.Black Zero wrote:Damn I really wanted to give this an honest go but if Rockman Mega World and Mega Man the Wily Wars ain't working I have no other choice then to go back to Fusion a little while longer.
This isn't as obvious as it probably should be, but settings like that are associated with the current system. If you want to save those settings, you need to save the system. Select "File -> Save System" to save the modified system to a file. If you create a new system configuration and want to load that by default, go to "Settings -> Platform Settings" and change the startup system.Thanks for 2.0.1 though but it seems like the controller settings doesn't get saved no matter what.
I can map the controller over and over but nothing gets saved and once you reset you have to map it again.
One other thing I noticed was that settings like the Show Status Bar under VDP System Settings doesn't get saved.
If you want an unfiltered output, go to "Settings -> VDP -> System Settings", and change "Enable Line Smoothing" to off.tryphon wrote:Is it possible to set the Image Window resolution to normal (320 x ???), unfiltered ?
-
- Very interested
- Posts: 3131
- Joined: Thu Nov 30, 2006 9:46 pm
- Location: France - Sevres
- Contact:
Awesome release, thanks Nemesis !
I noticed the simple 68000 <--> Z80 communication can make the emulator to slowdown a lot. I just tested my sound driver test rom which almost does nothing with the display and while some drivers are running at 60 FPS on my i5 @ 1.8 Ghz others hardly raise 30 FPS. I wanted to use Exodus to test the problem of DMA bus retention when Z80 access the main 68000 bus, currently i need to test against real hardware for that... I guess Exodus handle that case correctly but still currently even if Exodus is faster than before it remains a bit slow for my system and unfortunately it is very hard to judge about the sample quality in this case :p I guess i will have to upgrade my notebook at some point (among the dying battery, that may another good reason to do it)
Just one note Nemesis, i don't know if you emulated this but i observed this behavior while developing the XGM driver: if you access the VDP ports from the Z80 while a DMA is occurring then the Z80 is stuck as it was accessing the 68000 BUS, i though the Z80 was directly connected to the VDP so i was a bit surprised... I wanted to use the VCounter from Z80 (to detect possible period of DMA) but meet that problem then, that is also the case then when you access the PSG from Z80. I had hard time to figure that while i was testing the XGM driver on real hardware (very difficult to sort the DMA contention issue when Z80 is playing music *and* the samples because of that reason).
I noticed the simple 68000 <--> Z80 communication can make the emulator to slowdown a lot. I just tested my sound driver test rom which almost does nothing with the display and while some drivers are running at 60 FPS on my i5 @ 1.8 Ghz others hardly raise 30 FPS. I wanted to use Exodus to test the problem of DMA bus retention when Z80 access the main 68000 bus, currently i need to test against real hardware for that... I guess Exodus handle that case correctly but still currently even if Exodus is faster than before it remains a bit slow for my system and unfortunately it is very hard to judge about the sample quality in this case :p I guess i will have to upgrade my notebook at some point (among the dying battery, that may another good reason to do it)
Just one note Nemesis, i don't know if you emulated this but i observed this behavior while developing the XGM driver: if you access the VDP ports from the Z80 while a DMA is occurring then the Z80 is stuck as it was accessing the 68000 BUS, i though the Z80 was directly connected to the VDP so i was a bit surprised... I wanted to use the VCounter from Z80 (to detect possible period of DMA) but meet that problem then, that is also the case then when you access the PSG from Z80. I had hard time to figure that while i was testing the XGM driver on real hardware (very difficult to sort the DMA contention issue when Z80 is playing music *and* the samples because of that reason).
Last edited by Stef on Sat May 02, 2015 1:07 pm, edited 1 time in total.
-
- Interested
- Posts: 13
- Joined: Fri Apr 03, 2015 8:17 am
It's an easy fix? Well that sounds really promising!Nemesis wrote: I had another look at this, and it actually looks like it's due to failed SRAM support. Megaman is doing some kind of strange read/write stress test on the SRAM, which is entering an infinite loop. On a quick look I can't see how this loop is ever supposed to pass. I'll have to compare with another emulator to see why they pass it. Fortunately I do own this cartridge, so I can test on the hardware too if I need to.
EDIT: Just noticed that MegaMan uses serial EEPROM rather than SRAM. Yeah, that's not supported in Exodus currently. Support for this game and others like it can easily be added by creating a device to emulate the EEPROM devices in question, and updating the Mega Drive ROM loader to recognize these games.
Maybe in the near future Rockman/Mega Man will be up running in no time.
Either way you're doing a great job. I really hoped to switch Fusion with this one but I can definitely wait till things get better in Exodus, it's an emulator well worth waiting for because it's nice and clean.Nemesis wrote: Compatibility isn't as high as other emulators out there right now. No real effort has been put into any of the special cartridge hardware like mappers. A lot more time has gone into the platform itself, crazy corner cases of behaviour, and debugging features. Once the M68000 in particular has a cycle-accurate core, I'll probably spend more time worrying about individual game hardware.
It's that simple? Well I'll be sure to remember that till next time, thanks!Nemesis wrote: This isn't as obvious as it probably should be, but settings like that are associated with the current system. If you want to save those settings, you need to save the system. Select "File -> Save System" to save the modified system to a file. If you create a new system configuration and want to load that by default, go to "Settings -> Platform Settings" and change the startup system.