April 10, 2006

Hardware filters.

I found that Ryan Nunn had ported the 2xSAI Algorithm along with Scale2x to HLSL so most likely I’ll be using both with my emulator, since I can’t spare any cpu cycle. PPU Rendering hogs the CPU a lot and until I can find a way to reduce this I’m screwed… Say, 10% of my processor time is dedicated to CPU Emulation alongside every thing that implies including HDMA and readying the data for the GPU (except the actual rendering of the PPU) vs 60% on average just calling the draw function… If anyone knows how to reduce this please let know since this is really bugging me…

Anyways, the shaders still have to be tested and (probably) modified a little bit to work on my emulator, I’ll let you know when they are working.

Until the next time (Which I believe will take some time)…

Alberto Simón

Posted by albet under Uncategorized | Comments (0)

April 9, 2006

And what’s new?

Well, I’ve made some progress in the last days… I finally started on SPC-700 Emulation and have written some opcode helper functions. Managed DirectX finally works the way it should so I created a dll that abstracts the emulator from the drawing API. Now it works like a semi plugin, I have several features planned, but for now this is as good as it gets. Next in line is to finish SPC-700 Emulation and get basic controller emulation to start running commercial games and start to debug the core. Features planned for the plugin include hardware filters using the programmable pipeline (filters like 2xSAI, Scale2x and the likes) as well as some postprocessing effects like grayscale and invert among others.

I was thinking about making a hardware renderer using shaders, but I’m still thinking about how to emulate features like HDMA and the likes…

That’s about it for now, new changes are in the SVN Repository…


Alberto Simón

Posted by albet under Emulators | Comments (0)

April 5, 2006

Speed, isn’t that what we all want?

Well, SDL.NET got the boot (partially) since I’ve determined that it’s graphics constructs are too ‘High Level’ for my tastes (Look who’s talking… anyways). The thing is that, in the managed world, if you want interaction with the unmanaged world you have to keep it as low as possible. SDL.NET relies heavily on Tao.SDL and it’s P/Invoke constructs, and since I can’t change that, I’ll resort to other means… And how’s that? well I’m also working in my own ‘Low Level’ 2D Graphics Library in C# (What a contradiction I might add), well not really low level, but at least lower than Sdl.NET and pretty low for C# standards. The difference is that I only use Tao.Sdl to get access to the framebuffer, the rest of the work is done on the managed side, that means my blitter is implemented in c# along with the rest of the things. And it appears that this way of doing things is faster than running unmanaged code directly.

In brief, Tao.Sdl is my new API and on top of that I’m creating a Graphics Library to do all the work I need, and do it as fast as possible with as little interaction with the unmanaged world as possible. A working copy is distributed alongside IPSEmu, it’s no use to release as another project since I’m also relying on SdlDotNet for the message loop and a lot of other stuff that I haven’t implemented and probably WILL take a long time to implement. The idea behind the library (under Bigwave.Graphx namespace) is to push pixels as fast as possible onto the screen and that’s the only thing it does (for now…).

Anyways the working copy of svn has the changes. Any feedback would be appreciated.

Until the next time.

Alberto Simón

Posted by albet under Emulators | Comments (0)

April 4, 2006

So what is this IPSEmu thing?

IPSEmu is a Super Nintendo Entertainment System emulator. Why do I want to write another one with so many out there you ask? Well, it’s maily my hobby. Besides I want to see how far can I get on a managed environment. If all goes well, It should run on PC’s and XBox360 (thanks to the future XNA Framework), as well as powerful PDA’s. Anyways, it is not intended to replace any existent emulator, since I doubt it will ever be as fast. But I do hope that it gets to be equally compatible.

IPSEmu means Infinity Project - Snes Emulator. The name came from the fact that I see this project as a neverending one, hence Infinity, and the abbreviation comes from the fact that it would otherwise be an extremely long name (I like explicit names, but for the sake of simplicity…).

 The current status is:

  • Main CPU is almost completely emulated, a few opcodes need revising for timming purposes.
  • DMA’s are emulated.
  • HDMA’s are partially emulated.
  • Mode[0-2] are partially emulated.
  • Scrolling is emulated.
  • Color Windows, Clip Windows, Layers, Mosaic, etc… are not emulated features.
  • Lorom only and only roms with headers (smc). I have to spend some time to create an algorithm to detect rom types.
  • FastROM emulated.
  • As far as it goes, emulator timings are far from perfect but pretty accurate for this early stages.

Everything else is not emulated, but I’m obviosly working on it. Commecial games do not run since there is no SPC700 emulation, besides the fact that there is no input either so it wouldn’t make sense to run them. It will take some time to get this into the emulator since I’m currently working out speed related issues, more specificly rendering speed. Both SdlDotNet and MDX are giving me a hardtime (I’m looking on how to get these to work the way I want as fast as GDI+ at least), so currently GDI+ is what I’m using (interestingly it’s the fastest method for unscaled rendering).

I’ll keep you posted on anything else. You can get the source through svn, since cvs is down until past tomorrow. Anyways, when cvs is up again I’ll upload the project, till then svn is the way to go (I’ll still use svn since I like it more). 

Until the next time.

Alberto Simón

Posted by albet under Emulators | Comments (0)