Subject: Re: [stella] Re: Help with efficient code From: crackers@xxxxxxxx Date: Tue, 30 Sep 1997 03:01:51 -0400 (EDT) |
In article <199709300042.RAA15688@xxxxxxxxxxxxxxxxxxx>, you wrote: >> beq pointers,x > >This isn't a valid instruction. Conditional branches can only go to one >fixed location +/- 127 bytes away from the branch instruction itself. ~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~ Doh! Doesn't that just figure! ~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~ >If you have a single state in "VARIABLE", as your example did, try: > 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 >@not_in_table: >; continue with rest of program > >jump_table: > dc.w framistat ; your assembler may prefer .word > dc.w dohickey > dc.w whachamacallit > dc.w thingy > dc.w dodad >num_entries equ (*-jump_table)/2 ; some assemblers use $, not * > ; to refer to current address >(or if all else fails:) >num_entries equ 5 ; but it isn't as nice > >It's possible to rearrange the jump table into two halves (low and >high byte of the addresses in separate tables) but doing so only >saves 1 instruction and makes the code harder to change. Give this >method a try. ~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~ I think I understand what's going on here, thanks! Infact I think it might take care of another problem I've been contemplating. Let's say I've got a routine that loads a block of data into memory. The block is always the same size and will always be loaded to the same block of memory but depending on the value of the VARIABLE, the data for the block will be drawn from one of a number of locations. Would I accomplish this like so... ----------------------------------------------------------------------------- BLOCK = $80 TEMP = $88 VARIABLE = $8A lda VARIABLE cmp #$05 ;number of VARIABLE values (+1) bcs continue asl tax lda blocks,x ;I'm still a little fuzzy on what exactly sta TEMP ;this part here is doing and how lda blocks+1,x ;it's doing it, but I guess it'll be in sta TEMP+1 ;my 6502 book. ldx #$09 ;number of bytes in a block (+1) load lda (TEMP),x sta BLOCK,x dex txa bne load continue lda blablabla ;rest of programme " " " " rts blocks .word block0 .word block1 .word block2 .word block3 .word block4 block0 .byte $00,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff block1 .byte $00,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa block2 .byte $00,$bb,$bb,$bb,$bb,$bb,$bb,$bb,$bb etc..etc..etc.. ---------------------------------------------------------------------------- Am I on the right track here or am I making an inaccurate assumption again? CRACKERS (Starting to understand from hell!!) -- Accordionist - Wethifl Musician - Atari 2600 Collector | /\/\ *NEW CrAB URL* http://www.hwcn.org/~ad329/crab.html ***| \^^/ Bira Bira Devotee - FES Member - Samurai Pizza Cats Fan| =\/= -- 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [stella] Re: Help with efficien, Greg Miller | Thread | Re: [stella] Re: Help with efficien, Greg Troutman |
Re: [stella] stick/paddle combos, Galen Tatsuo Komatsu | Date | Re: [stella] stick/paddle combos, Greg Troutman |
Month |