Subject: [stella] Lord of the Rings optimizations From: Thomas Jentzsch <tjentzsch@xxxxxx> Date: Mon, 17 Dec 2001 19:11:11 +0100 |
Hi, now, this is something for the hard core coders! (like me :-) While disassembling LOTR I found an interesting way of coding. Whenever the programmer wanted to check, if a game has run through a special code point, he placed a BRK there followed by an id-byte. Example: (checks, if the code has to set bit 2 of $e3) lda $e3 and #$04 bne Lb568 brk .byte $0e ; id-byte lda $e3 ; <- here we will continue ora #$04 sta $e3 Lb568: Now something very interesting is happening. The break-vector (indirectly) points to this routine: plp ; remove flags from stack (not needed) tsx ; load x with stackpointer inx ; x++ dec $00,x ; adjust return address lda ($00,x) ; read break-id... tay ; ...and store in y Subroutine: ldx #$00 ; find variable with lower value lda $ef cmp $f0 bcc Lbed3 inx Lbed3: tya cmp $ef,x ; compare break-id with the lower value of $ef/$f0 bcc .exit ; if smaller beq .exit ; or equal then exit sty $ef,x ; overwrite old id with larger new id lda Lb36e,y ; load some tables values into some registers sta $f1,x lda Lb37e,y sta $f3,x .exit: rts ; the code returns two bytes behind the breakpoint First I thought, this was debugging code, but then I found the registers filled in that routine are used for... SOUND! (Each sound has it's own priority and only the highest two are played.) So this is another (rather complicated) way for something like: ldy #value jsr Subroutine But it saves 3 bytes with each call! And the overhead is only 8 bytes, so after only 3 subroutine calls (LOTR has about 20) you are winning ROM space! Cool, isn't it? 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] Poker Solitaire/Square, Thomas Jentzsch | Thread | Re: [stella] Lord of the Rings opti, B. Watson |
Re: [stella] Re: 2600 availability, Yvo Zoer | Date | Re: [stella] Lord of the Rings opti, B. Watson |
Month |