Monday, March 22, 2004

Sprites are now implemented. Support is included for all sizes, including those that are undocumented, as well as features like sprite priority rotation. Check out the new screenshots.




Also fixed a bug in VRAM reading, which caused graphical corruption in a few ROMs.

Tuesday, March 16, 2004

Added support for screen fading, one of the easier bits of the PPU to emulate! In the CPU core, I fixed a bug with the TCS / TSC opcode; the 16-bit accumulator needed to be transferred to/from the stack pointer ignoring the status of the memory flag. I already knew this, but implemented it incorrectly. Oops. Now Ghosts N Ghouls runs further, before hitting an unimplemented opcode. Lots of commercial ROMs now start, but really need sprites implemented to play!

Sprites will be the next aspect of the PPU I emulate. Then, a few titles should be playable. A number of people have contacted me to ask when I'll release JSnes. I think there will be a release in a couple of months, once I've stabilised the emulator somewhat. This might be sooner, but no promises.

Monday, March 15, 2004

Well, a short time without an update, but I've been hacking away. I researched offet-per-tile mode, which can be used in Modes 2, 4 and 6 by the Snes. Implementing this proved tricky, as no documentation exists on it, and quite a few emulators don't support it. Further to this, the game doctor I ordered didn't work and is being sent back for repair, so I couldn't run any tests on hardware. Bah!

The main problem I ran into with offset-per-tile is that my current line-by-line engine wasn't good enough to support it properly. If I'd realised this functionality existed when I'd started coding, I could have done things differently from the outset. As it was, most of my graphics rendering code needed a rewrite.

Anyway, offset-per-tile now seems to be working correctly in all but one demo I've tried. I'm sure there's more bugs to find.

I also improved the sound skipping code, which means the Infinity demo now runs. I also fixed directPageIndirect addressing, which fixed problems in the Super Mario Allstars + World double pack and a PD demo.

Tuesday, March 02, 2004

Added HDMA support. Managed to get the basics working pretty quickly, but spent a while trying to get the repeat flag working properly. Also had some trouble with conflicting documentation. A lot of nice effects work in PD demos now!



Next, I'm going to work on bug fixing existing code to ensure everything is working as it should. Currently a few simple demos that should work don't, and I want to establish the reasons for this before implementing anything new.

Wednesday, February 25, 2004

As promised, I've implemented correct (as opposed to hacky) subscreen support. This includes fixed colour and subscreen addition and subtraction. One obvious benefit of this is that the sky in Super Mario World is now correct (compare these new screenshots with the previous ones). Also, have a look at the transparent clouds in the Dwarf demo.



Nearly all the docs I found regarding subscreens were absolutely terrible and generally wrong. I have to thank Grog for his doc, which was both clear and correct. I've fixed a bunch of other graphic bugs, and will probably work on either HDMA or sprite support next.

Monday, February 23, 2004

Implemented H-Blanking support, which was causing Super Mario World to hang. In fact, SMW now runs into the game... and I'm sure it would be playable, if I had sprites implemented! There are some graphical glitches, related to me not supporting subscreens correctly yet. I'll optimise the BG layer code next, and simultaneously correct this.

Found a small bug related to NMI interrupts, although I don't think was affecting anything. SMW also showed up a bug with the LSR absolute opcode. I also corrected a bug related to scrolling tilemaps vertically, which only manifested itself on certain titles.

Currently, 80% of all opcodes are implemented. SMW, Super Off-Road, Super Mario All-Stars, Gradius III and Super R-Type are among a handful of titles that seem to run into the game (minus sprites). A few other titles do stuff, but require more of the PPU to be emulated correctly before progressing further.

Tuesday, February 17, 2004

I've worked on fixing more graphics related bugs (one of which was very silly and prevented 64x64 tilemaps working). I'm sure they'll be more to uncover yet. I've implemented horizontal and vertical tile flipping.



Super Mario World now partially works. Obviously, there are no sprites yet, and graphics emulation is incomplete. It doesn't run any further than the second screen at the moment, due to some kind of CPU/Interrupt bug which affects a bunch of ROMs. I'll try to solve this soon.

Thursday, February 12, 2004

No screenshots today, because I don't have anything interesting enough to post. However, I've worked on improving graphics emulation. I've started to clean a few bits of code, and most importantly, have implemented 16x16 tiles.

Some further opcodes and bugfixes in the core mean that a whole bunch of new PD demos run, or at least do something.

I've also ordered myself a Game Doctor SF7, which will enable me to test lots of interesting stuff on SNES hardware if I find the time.

Monday, February 09, 2004

Here's an update of my progress:

  • 150 CPU Opcodes are now emulated. I've bug fixed quite a few existing ones, and corrected various errors.
  • 64x32 tilemaps now display correctly
  • Tilemap scrolling implemented
  • Automatic joypad reading implemented
  • SPU skipper implemented (Fakes the sound processor for now)

The result of all this is that a handful of new PD demos are working, and the following commericial ROMs are displaying some graphics:




Currently, these do not run any further due to unimplemented opcodes. Still, I'm on the right track...

Tuesday, January 13, 2004

As promised some screenshots from some partially working new demos:



Monday, January 12, 2004

Over the weekend, I added more opcodes to the processor emulation; roughly 90 out of 250 are now emulated. I fixed a daft bug with regard to the negative flag in certain instructions (actually cause by a typo). I also corrected the JML absolute long instruction. I did a little bug fixing on the video emulation, and now tiles with higher colour depths are decoded correctly. Following that, I implemented controller emulation.

The result of this work is that a bunch of new demos are working, or partially working. I'll post some screenshots later.

Thursday, January 08, 2004

Well, a very long time without an update, but I've been busy programming games at work and drinking too much over Christmas. Still, some progress has been made. I've added a load of CPU opcodes, fixed the usual range of silly bugs that come with starting an emulator from scratch and implemented interrupts (see the Hello World demo below). As a result, a handful of simple demos now work.