A couple of new releases
I’ve made two new releases to the ZodTTD Cydia repo since my last status update. Available now are:
psx4all – via Cydia Store
psx4all is the continuation of psx4iphone. It now supports all devices, including the iPad. Note that it isn’t iPad native resolution yet, but playing in portrait mode with 2x seems to work very well at the moment. It now supports the WiiMote, WiiMote Classic Controller extension, and has built-in download support. This emulator has come a long way, and on 3rd gen and 4th gen hardware it runs many games amazingly well. There’s still some compatibility tweaks to be made but overall you should be able to find a compatible game and have it perform well on a 3gs or iPad, for instance, with ease. On 2nd gen hardware the number of well performing games decreases, of course. An update is coming shortly to improve compatibility and fix slowdown issues reported when the device is offline.
OpenStreamer – via Cydia and RockApp
OpenStreamer is a fast media player. With the same capabilities, it replaces vlc4iphone and adds new features. OpenStreamer plays back local media as well as internet streams of all sorts of formats. It does so on the iPhone, iPod Touch, and the iPad (non-native currently). It’s a lot faster than previous versions of OpenStreamer and vlc4iphone, and has better options for playback in terms of performance and quality. Aspect ratio is now maintained during playback as well.
Check these releases out.
Thanks,
ZodTTD
psx4iphone updated. Supports 3.1.x!
This has been a long time coming, but my schedule is just now starting to free up. I have updated psx4iphone to also support the 3.1.x series of firmwares. Included in psx4iphone v1.1.0 is a fix for a bug causing the non-scaled landscape screen to display properly.
Don’t expect too much difference in performance. This emulator will still require an iPhone 3gs or iPod Touch 3rd Gen to really shine. I will be working more on this emulator as I get more free time.
You can download psx4iphone from the ZodTTD Repo which is built-in to Cydia via the included community sources package. This means it is also available via RockApp, Icy, etc. Brief installation instructions are provided within the package info.
If you run into any issues with psx4iphone v1.1.0 feel free to ask for support via the comments. Just remember, don’t ask for ROMs/ISOs or where to get the BIOS.
Thanks,
ZodTTD
Giving thanks…framebuffer style.
For those in the Unites States, you may be eating up turkey with the family…But me, well I’m giving my thanks in a different way. I couldn’t stop playing with this framebuffer code for the iPhone I mentioned earlier. I now know of the two framebuffer addresses and how to retrieve them individually.
Why is this important? Well it’s all about my emulator’s performance in our case!
But are you willing to give up transparent overlays in landscape mode for this performance boost? Remember for this to work it will draw on top of every area I write to. So if you are in landscape mode, for performance reasons I can’t draw an opaque overlay on top of each frame I draw. And blending a semi-transparent overlay is out of question. What we are left with is possibly to center the emulator screen in the center, and have controls on the sides. Leaving the controls outside of the emulation screen could let things work.
Some quick benchmarks I ran show the average blit to a CoreSurface buffer to draw to the screen takes between 5 and 13ms per blit. It spikes constantly from that 5ms. If I simply have it write to a different buffer that is malloc’d, the blit takes less than 1ms. While this isn’t scientific, it indicates to me that the traditional way of writing to the screen via CoreSurface, while better than OpenGL ES (for this type of blit) and CoreGraphics, is still very slow. This is where getting a lower level access to the screen’s pixel data comes into play, and hence the framebuffers.
I noticed writing to the first framebuffer with CoreSurface ID 1 (more on this in a sec) is about the same speed as writing to a CoreSurface you can create on your own. The magic happens when you write to the second CoreSurface ID 2. The above test of 5ms – 13ms goes down to 2ms! Much better, considering you only have 16ms to deal with when running at 60 FPS.
So how do you access these framebuffers? Leaving behind the complex code mentioned earlier, here’s how. First add the CoreSurface framework to your project. Then:
extern void* CoreSurfaceBufferGetBaseAddress(CoreSurfaceBufferRef surface);
extern void* CoreSurfaceBufferLookup(long lookup);
...
void* framebufferID1 = CoreSurfaceBufferGetBaseAddress(CoreSurfaceBufferLookup(1));
void* framebufferID2 = CoreSurfaceBufferGetBaseAddress(CoreSurfaceBufferLookup(2));
...
Simple as that! You now have a pointer to each framebuffer. Simply write your ARGB pixel data straight to it!
Maybe psx4iphone could use this technique for an added performance increase?
Thanks,
ZodTTD
psx4iphone and gpSPhone status
Quick status report for psx4iphone and gpSPhone coming right at cha!
psx4iphone v1.0.0 currently does not work on any device with firmware greater than 3.0. I have a build that now works with newer firmwares and will be releasing it shortly. Hopefully tomorrow, but don’t hold me to it.
gpSPhone currently works with all 2.x and 3.x firmwares on all devices. But there’s a catch. DevTeam messed up a kernel patch in the latest 3.1.x jailbreaks (confirmed by saurik) that affects only the iPhone 3g. If you have an iPhone 3g and use 3.1.x jailbroken with pwnagetool, there’s a fix for gpSPhone (as well as the upcoming psx4iphone). Simply run blackra1n on your current iPhone 3g firmware. It won’t erase anything or do any harm. It will however fix the issue at hand, and allow gpSPhone and the next psx4iphone to run.
Thanks,
ZodTTD