[stella] Re: Help with efficient code

Subject: [stella] Re: Help with efficient code
From: jimn8@xxxxxxxxxx (Jim Nitchals)
Date: Mon, 29 Sep 1997 21:20:45 -0700 (PDT)
I wrote:

>         lda variable
>         cmp #num_entries
>         bcs not_in_table
>         asl
>         tax
>         lda jump_table,x
>         sta temp     ; temp should be 2 bytes somewhere in RAM
>         lda jump_table+1,x
>         sta temp+1
>         jmp (temp)   ; jump indirect through temp

Whoops!  Forgot about jmp (abs,x) which I remembered as a 65816 opcode.
Sorry... and thanks to Amos Bannister for the reminder (btw, the
instruction works differently than his example.)

The revised version should read:

        lda variable
        cmp #num_entries
        bcs not_in_table
        asl
        tax
        jmp (jump_table,x)

jmp_table:
        dc.w framistat
etc.

The only catch being, due to a bug in the 6502 the jump table itself
cannot cross a page boundary.  Align it to an even address if you're
not 100% sure that no entry in the table crosses a 256 byte page
boundary.

Finding bugs in the 6502 and exploiting them was a favorite technique
in disguising copy protection code in Apple II and Atari 400/800 disk
based games.


--
Archives updated once/day at http://www.biglist.com/lists/stella/archives/
Unsubscribing and other info at http://www.biglist.com/lists/stella/stella.html

Current Thread