Thursday, August 3, 2017

After a couple month hiatus, I'm working on the last few optimizations that were written during the retro challenge contest but didn't make it into the code.  That includes a fast multiply that uses the MUL instruction in place of the usual looped add and shift code, and storing the pointer to the next line to speed up line parsing a bit among other things.

I don't think I said much if anything about the fast multiply during the contest because I didn't know if I had enough time or ROM space for it.  In other words, don't promise what you can't deliver.  I really wanted it to be in the contest release because that's where the most obvious speed improvement was going to come from.  Sadly, there wasn't enough time to finish it.  It still needs work, but initial tests show Ahl's Benchmark finishing in about 1 minute 7 seconds.  That's 52 seconds less than the Microsoft ROM, and over 30 seconds faster than the 1MHz 6502 machines.

The code that saves the address of the next line probably works, I just need to make sure the stack frame is correct.  This would have been in earlier, but I wanted to get the math optimizations right first.  Too many changes were introduced in a short time at the end of the contest and I had to back everything out and debug what I had time for.  I'm not sure it will fit anymore though.

There have been some other optimizations that may work their way into a release eventually.
I experimented with 16 bit memory moves.  Just one of those cut a full second off the startup time of a game.  It had a bug though, so it's on hold.  
The fast SQR function is way too big.  It will require a larger ROM, but it would make a noticeable difference on Ahl's benchmark and anything else that uses SQR.  Maybe if I create a 16K ROM.
A more intelligent ^ (power) function might offer a speedup as well, but I haven't looked at that yet..

If I just had another 1K-2K to work with.

No comments:

Post a Comment