|
Subject: Re: [stella] Euchre: a tight fit From: Thomas Jentzsch <tjentzsch@xxxxxx> Date: Tue, 4 Sep 2001 00:19:58 +0200 |
At 03.09.2001, 23:01, Erik J. Eid wrote:
> What I need from readers of the list is some advice as to what I can trim
> from my code. I'm looking for a general strategy, though advice about
> specific segments of code is certainly welcome.
After having a quick look at your code, I can't show
you a general strategy, but i think there is plenty of
room for many little optimizations which should result
in saving the bytes you'll need.
Some general hints:
- check your code for unoptimized parts again and again
- use bxx instead of jmp where possible
- avoid all subroutines that are only called once.
(yes, the result will be spaghetti code, but you're
always wasting 4 bytes here, and sometimes you will
discover unoptimized code easier)
- use X as an index for (zeropage) RAM tables and Y as
an index for ROM tables, because ZP,X is one byte
shorter than ZP,Y
- try to use a smaller random generator (i.E. River
Raid)
- try to avoid extra tables for the letter pointers,
you should be able so calculate them quite simply
- if you need pointer tables, try put all the data into
one page, so that the high byte is constant and store
only the low byte.
- with pointer tables, you can reduce the size of the
data they are pointing at, by overlapping the data
there
Some examples to should you, what I mean.
1st example (29 bytes):
lda T1
and #DispSuitMask
lsr
lsr
lsr
tax
ldy T3
jsr GetSuitImage
GetSuitImage
txa
asl
tax
lda SuitImageTable,x
sta $00,y
lda SuitImageTable+1,x
sta $01,y
rts
Change to (17 bytes):
lda T1
and #DispSuitMask
lsr
lsr
tay
ldx T3
lda SuitImageTable,y
sta $00,x
lda #>SuitImageHeart ;assuming SuitImageXXX are on the same page
sta $01,x
This saves 12 of 29 bytes.
2nd example:
DB3a
txa
cmp #$09 ; Do we have nine points?
bne DB3b ; No, move on...
tya
cmp #$08 ; Does the other team have eight or more points?
bpl DB3b ; Yes, go to next check
cmp #$06 ; Does the other team have six or seven points?
bmi DB3b ; No, go to next check
lda #ChoiceCall ; With score 9-6 or 9-7, it's better to risk a euchre
Here you should use cpx and cpy instead of txa/tya,
cmp. Another two bytes saved here.
3rd example:
DecideBid
lda Stage
cmp #StageBidding1 ; Is this the first round of bidding?
bne DB0a ; No
lda Dealer
eor Turn ; Bit 0 will be set if the upcard goes to an opponent
and #$01 ; Does upcard belong to opponent?
beq DB0a ; No...
lda #$01 ; Yes!
jmp DB0b
DB0a
lda #$00 ;
DB0b
Change to:
DecideBid
lda Stage
cmp #StageBidding1 ; Is this the first round of bidding?
bne DB0a ; No
lda Dealer
eor Turn ; Bit 0 will be set if the upcard goes to an opponent
and #$01 ; Does upcard belong to opponent?
bne DB0b ; Yes!
DB0a
lda #$00 ; this is only needed because
the branch above
DB0b
5 more bytes saved.
Have a look at the archives for the development of Qb
and you will see, that we found a lot of space, even
after Andrew was quite sure, it wasn't possible.
Have fun!
Thomas
_______________________________________________________
Thomas Jentzsch | *** Every bit is sacred ! ***
tjentzsch at web dot de |
-
Archives (includes files) at http://www.biglist.com/lists/stella/archives/
Unsub & more at http://www.biglist.com/lists/stella/
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [stella] Euchre: a tight fit, Clay Halliwell | Thread | Re: [stella] EPROMs, B. Watson |
| Fwd: [stella] Euchre: a tight fit, Glenn Saunders | Date | Re: [stella] EPROMs, B. Watson |
| Month |