Saga20101217

From Retrosoftware

Jump to: navigation, search

17/12/2010: More additions and code reduction

This covers the past few days where I've being doing dribs and drabs when I have had time. First off, some new stuff. I added a pseudo-random number generator as just grabbing a value from &FE44 didn't turn out to be random (interestingly enough Brian Howarth's code just gets the low byte of the system clock for this). I also added the print counter routine, one vital step on getting SCORE working properly.

The other area of work was code reduction, which I saved some notes on byte reductions. The first step was turning JSR xyz:RTS into JMP xyz; this saved about 5 bytes. Next I added a couple of functions to perform 16-bit addition to the most commonly used pointers. Some moving pointers around so I could could use common code also saved some bytes. Finally I found a whole chunk of code that I had duplicated, so this went.

The final savings were around 56 bytes, with details shown below:

Byte reduction
Code Size Method
C7FStart
C6CAdding addtobufptr
C63Moving some foundptr references to bufptr
C5FRemove copying of noun to roomptr
C5aAdding addtofoundptr
C51Adding copybptofp (copying bufptr to foundptr)
C44Removing duplicate code

Because I'm using two pointers (bufptr and foundptr) I have a duplication of code which I should probably try and remove:

.skipstringbp
{
               ldy #0
               lda (bufptr),y
               jmp addtobufptr
}

; simple routine to add A to bufptr and save a few bytes
.addtobufptr
{
               clc
               adc bufptr
               sta bufptr
               bcc nooverflow
               inc bufptr+1
.nooverflow    rts
}

This could save another 17 bytes; I need to think it out better though...

Edit: As I posted this, I realised that I can remove the jmp statement as the code will fall through anyway. So another 6 bytes down - size at the moment is &C3E; with about &200 of this being the system engine messages.

Comments