|
Subject: Re: [stella] Euchre: squeezing in more From: Thomas Jentzsch <tjentzsch@xxxxxx> Date: Thu, 8 Aug 2002 22:31:11 +0200 |
Erik Eid wrote:
> I am still not finished with the game. As I mentioned, there's a few rough
> edges to clean up; the remaining 78 bytes will help make that happen. If I
> have enough space afterward, I can look into implementing the suggestions
> given by the list readers. I also still have to create a PAL version. (Then
> there's also a manual to consider...)
You should check some of your JMP statements if you can replace them with
Bxx.
And change you StageJumpTable code from JSR, RTS into a real table
containing the high and low addresses of the subroutines. Then you can
simply jump directly there from StageJump.
ldy Stage
lda StageJumpTableLow,y
sta T2
lda StageJumpTableHigh,y
sta T2+1 ; = T3
jsr StageJump
jmp EndCase
StageJump:
jmp (T2)
StageJumpTableLow:
.byte <PerformNewGame, <PerformNewHand, ...
StageJumpTableHigh:
.byte >PerformNewGame, >PerformNewHand, ...
The RTS from the subroutines will return you directly to jmp Endcase. :-)
You can save a few more bytes whenever you call a subroutine more than
once with the same parameter.
Eg.
ldx #0
jsr PositionPlayer
Change your code into:
jsr PositionPlayer0
...
PositionPlayer0:
ldx #0
PositionPlayer:
If you need more than one parameter more than once, use this little
trick:
PositionPlayer1:
ldx #1
.byte $2c ; opcode for bit abs
PositionPlayer0:
ldx #0
PositionPlayer:
And I noticed that you very often still use this sequence:
ldx #0
jsr PositionPlayer
ldx #1
jsr PositionPlayer
You should always use inx here (or you could add that inx into the
subroutine).
And finally (for now):
You are very often setting both players to fixed positions. If you use
tables for the fixed positions, you could do something like this:
ldy #id+1 ; offset into position table offsets
jsr PosPlayers
...
PosPlayers:
ldx #1
.loopPlayer:
lda PosTable,y
jsr PositionPlayer
dey
dex
bpl .loopPlayer
rts
PosTable:
.byte LeftScorePos, RightScorePos
.byte LeftTrickPos, RightTrickPos
.byte ...
To avoid saving/restoring y here, you should use SBC instead of DEY
inside PositionPlayer:
PositionPlayer:
sta WSYNC
ror T1 ; waste 5 cycles
sta HMP0,x
and #$0f
sec
P0
sbc #1
bpl P0
sta RESP0,x
rts
All together that should give you plenty enough bytes for many
suggestions. ;-)
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: squeezing in m, ps_inkling | Thread | [stella] Showgfx and Editgfx vanish, Rodrigo |
| Re: [stella] Euchre: squeezing in m, ps_inkling | Date | Re: [stella] Star Fire 2600: Breakt, Thomas Jentzsch |
| Month |