Releases: doomhack/GBADoom
0.6
More performance improvements in this build.
-Around a 25% framerate improvement since the last build.
-Long level load times are now fixed.
Any lingering out of memory issues should be fixed now. Drawsegs, Openings, Vissprites are all statically allocated now so should be no more memory fragmentation issues. Even Doom2 Map15 on UV.
0.5
Main changes in this build are performance related.
Lots of optimizations and performance improvements.
It's now running at about the same speed as the original GBA Doom1 and 2 ports. There is still a little slowdown in busy or complex areas but it's not too bad.
Still lots of unfinished stuff like the status bar and Save/Load.
Level loading times still suck but I will fix that soon.
0.4
Time for another build.
Quite a few bugs fixed in this version and the memory usage is finally under control.
This build includes the shareware episode and can be played from start to finish. There should be no lock-ups or crashes any more.
It's a bit sluggish in places but perfectly playable.
Controls:
Move: D Pad
Strafe: Triggers
Fire: A
Use: B
Run: L + R Trigger
Change Weapon: B + L or R Trigger.
Map: Select
Menu: Start
0.3
Thought it was time for another build for anyone interested.
The main changes in this version are music and sound support.
The music included in this release is from a project called 'Chiptune Doom' by Bill Koch (AKA Bloodshedder). I got in touch with him and he quickly replied agreeing to me including them in this project. The original PWADS can be found here: https://www.doomworld.com/idgames/music/
There have been some more optimisations to the Column cache. After rubber-ducking this with a colleague at work I decided to try an 8-way associative cache. This worked at treat. The hit-rate is as good as a fully associative cache but the average number or probes is down from 35 to around 3 on the test cases I was running. This change alone gave us a FPS increase from 6.4 to 9.5 in the second room on E1M1.
This build also has some of the status bar restored. There is a few issues with it so I'm bringing it back bit by bit.
We're still over on memory so eventually you'll get a blue screen of death when an alloc fails after a few levels.
A few other bugs fixed including a random lock-up caused by (AFAICT) an optimiser/codegen bug. That took about 2 hours in the No$Gba debugger to track down. Fun.
0.2
Doom on GBA WIP build.
The last few days I have been concentrating on getting the performance up. The entire renderer (Everything from R_RenderBspNode() down) and it's associated data is now compiled to ARM code and running from IWRAM.
We're seeing playable framerates now. E1M1 still has some pretty serious sags, but MAP01 runs about the same as the commercial Doom2 release. Overall, its running about the same as SNES Doom. Not great but tolerable.
I've used the 16Kb of OBJ Tile VRAM as a column cache where we composite and store 1 pixel wide strips of texture. The hit-rate on this cache is now about 90% but it's still a performance hotspot so I should be able to improve it further.
A fast division routine would give a decent performance improvement too. At the minute, I've pulled in 32bit divides and 64bit fixed point divides from Jaguar Doom. These are simple implementations but still out-perform the runtime functions.
Further improvements can be made by leaning on the GBA hardware. There is a Bios divide function, and a DMA controller that are not being used yet.
There have been some performance cutbacks made:
The Z-Depth lighting is gone. The GBA screen is pretty dark so this is not a great loss. It also allows me to copy the colormap to IWRAM because we are drawing whole sectors with the same colormap now. The colormap gets read for every single pixel so this gives a good boost, saving around 4 cycles per pixel.
To get a decent hit rate on the column cache, compositited texture resolution is sampled at half horizontal resolution and there is a rough mipmapping that causes distant wall textures to be sampled at 1/8th or 1/16th resolution. The effect is similar to the commercial Doom2 release but a little less obvious.
Lots of bugs too!
We're still over-budget on memory. More levels will load and run now, but big levels like E1M6 or E2M2 won't load yet. This release has slashed another 60-70kb of memory off, but I need to find the same again to get all levels to load. Finding savings that won't throw the performance off a cliff is becoming tricky.
The statusbar isn't drawn at the min. There is a buffer overrun bug somewhere that was causing crashes so it's commented out until I can trace the issue and fix it. This also disables palette flashes.
There is also a bug with colormap selection on sprites. For some reason, it seems to be selecting the wrong sector colormap. Not sure why this is yet.
No sound and music yet.
0.1
It's Doom on the GBA! And it's totally broken!
I'm still over memory budget on most levels, we're tight on IWRAM so it's probably trashing the stack.
It runs at about 3fps. There's no sound, no music and the controls are just d-pad, shoot, open.
I've not run it on a real GBA yet so there are probably other bugs that only surface on a real device.
This rom has the shareware wad embedded.