Joined: 3/2/2010
Posts: 2174
Location: A little to the left of nowhere (Sweden)
Progress happens as I have time to write code for it.
Haven't had time in the last 2 weeks however, may have some time during next week. If you want a more detailed progress, feel free to poke me on IRC with specific questions.
You can make your own builds using Visual Studio 2013 Community Edition, but currently there are no guarantees that anything is stable.
Joined: 3/2/2010
Posts: 2174
Location: A little to the left of nowhere (Sweden)
Give the latest master a try (not 1.10.0, the head commit of the Git repo). I know zeromus recently fixed some loading issues related to "out of range" values.
Joined: 3/2/2010
Posts: 2174
Location: A little to the left of nowhere (Sweden)
I never tried to do this on a PSX game, so I can only give you a few general steps and hope that it sets you down the right path.
You will need general knowledge of what files on a PSX disc contains code, and how they are related to each other.
You will need a disassembler / debugger capable of handling the MIPS R3051 CPU. This is the CPU inside the PSX.
You may need to modify the emulator to be able to get the internal program counter and stack at a given point. (This is not entirely necessary, but will help you when you're digging around the assembly code)
You will need a MIPS R3051 CPU developers manual / assembly reference.
A lot of free time to read up on this stuff and experiment with it.
Joined: 3/2/2010
Posts: 2174
Location: A little to the left of nowhere (Sweden)
Some Windows games have the funny quirk that they depend on mouse, even if they never use it. No idea if the game is one of those. If it's not, it could be failing for another 100 to 10000 or so reasons, knowing why the game fails just by someone saying "for now i cant run it..." is impossible at best.
The best "guide" for Hourglass right now is:
1. Install XP on a computer / in a VM.
2. Cross your fingers it's gonna work after trying all setting combinations in Hourglass that you can think of.
Joined: 3/2/2010
Posts: 2174
Location: A little to the left of nowhere (Sweden)
What should be attempted first is to implement thread-syncing properly. I've had some ideas on how to do this, and DirectSound is a great testing-platform for this issue as this thread runs wild when it's not blocked from threading. (desyncs occur in movies due to this)
keylie, please drop by on irc #hourglass (on freenode)
Joined: 3/2/2010
Posts: 2174
Location: A little to the left of nowhere (Sweden)
To me, what hurt PSX emulation was that it started to be developed using the same ideas as N64, plugins. Now, plugins work fine, if you get it right in time, which never seem to happen with these things, and then people get upset over their favorite plugin not working. So the plugin API was too limited to work correctly, and then the "correct" people doesn't start looking into doing everything right, resulting in hack solutions. PCSX2 is still full of CRC hacks for games, there's a really big amount there, and they try to focus on accuracy. I think we would still be stuck with the accuracy of ePSXe and the likes if it wasn't for Xebra and MESS, also pSX might have had a hand in it.
PSP had the advantage that people started to drop the plugin design again after what Dolphin achieved after dropping it.
In the above, when I mean "correct" people, I mean those that try their hardest to actually mimic the hardware.
Anyhow, this is derailing enough, maybe a new thread is appropriate if the discussion shall continue.
Joined: 3/2/2010
Posts: 2174
Location: A little to the left of nowhere (Sweden)
moozooh wrote:
Pokota wrote:
Not sure about nowadays, but with the Wii and earlier it was because Nintendo wasn't using TEH CUTTIGN EGDE TECHNOGLOGY that was purported to be found in Sony and Microsoft products.
Pretty much this and the platform popularity. There are, of course, exceptions: for instance, Gamecube emulation was the first to arrive at an acceptable state, despite the platform being less popular and more powerful than its contemporary, PS2.
Isn't this more due to the lower popularity for the Sony consoles in the emulator development circles?
Joined: 3/2/2010
Posts: 2174
Location: A little to the left of nowhere (Sweden)
I don't see a problem with watching the cutscene. It's not like you have to sit through it for every attempt like with an RTA. You pass it once, and save-state past it.
Joined: 3/2/2010
Posts: 2174
Location: A little to the left of nowhere (Sweden)
TASvideos ALWAYS time from power on / game start, until the last required input.
Glitchless runs are highly unlikely to happen, it all boils down to "What is a glitch, and what is not?", and that's always a round-trip discussion with no end.
And good luck with Flash-based. The support for that is terrible, and currently not a priority.
Joined: 3/2/2010
Posts: 2174
Location: A little to the left of nowhere (Sweden)
What you want to examine first is: Is the distance between the addresses always the same, or if they have a common denominator.
You could be dealing with an array of structures, if that's the case, you should also (hopefully), find the enemy position near its health value. They can be used to place the health value near the enemy using LUA (after a little position-translation).
If the above is not the case, then you are probably dealing with a real dynamic memory allocation, and depending on implementation, these can be quite tricky to find.
The first step is to look for a value that is equal to the address which contains the memory value. Note, that you may still be looking at a structure, so try to do a "fuzzy" search (meaning, look for values also slightly smaller than the address you have).
When you believe you found something, watch that address and see if changes the way you expect it to.
If that fails, you might be dealing with what I call offset-pointers, it's where the game has a hard-coded base value, and adds an offset to it to produce the pointer.
For this, I usually dump the entire RAM state to a file using LUA, for a selection of the possible locations, then look for a value that changes with the same "distance" as the address moves using a hex editor. There might be other ways to do this though.
I hope this was useful. Good luck!
Joined: 3/2/2010
Posts: 2174
Location: A little to the left of nowhere (Sweden)
You kinda missed my point with that we shall make LUA easier to use. The whole idea of that point was to device an auto-gen for LUA scripts that are merely RAM Watches.
If we find the data we're looking for, we just need a way to display it. And even Visual Studio fails to display anything nicely when you have such a common combined data structure as a linked list of structures, so doing it with a GUI like the current RAM Watch window, is going to be really hard once you go beyond a simple structure like a plain structure of 4-5 variables, of which none are pointers.
But if you have a good way to display such things, then by all means provide a design proposal.
I am not a big fan of LUA either. If you can come up with a better scripting language that's good for these kinds of things, I'd like to hear it. JavaScript isn't one of them. And Python is freaking huge to package, over 20 megabytes, I also don't know if there's any good Python into C/C++/C# integration.
In my opinion, in order to display something more complex data structures (or those larger than a few variables), some kind of draw-rendering should be done instead.
Because, really, a plain structure of just a few variables was starting to get obsolete already on the NES.
I know Tompa disagrees with the next part, and probably some others as well, but with the amount of data you need to track today, in my opinion one really wants it attached to the stuff it belongs to, and then you're writing a LUA script already anyway.
Joined: 3/2/2010
Posts: 2174
Location: A little to the left of nowhere (Sweden)
Do you want to implement that, I was thinking of writing something like that for Hourglass and gave up pretty quickly when it came to finding a way to display everything in a decent manner, not even Visual Studio can display this in a decent manner.
RAM Watch itself is a bit obsolete anyhow, what should be done instead is to make LUA easier to use, and maybe allow a LUA console variant instead of only overlays like today.