| |
oziphantom
Registered: Oct 2014 Posts: 490 |
LDA (ZP,x)
Has anybody ever used this opcode and if so what for? |
|
... 33 posts hidden. Click here to view all posts.... |
| |
MagerValp
Registered: Dec 2001 Posts: 1078 |
It's one of those "seemed like a good idea at the time" opcodes. Everyone would have been happier if we got (ZP),x instead. |
| |
Peiselulli
Registered: Oct 2006 Posts: 81 |
(zp) is also missing |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
another opcode would have been more useful, fex sty abs,x stx abs,y. or the mentioned (),x |
| |
Jammer
Registered: Nov 2002 Posts: 1335 |
Or txy/tyx ;) |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
It's useful for channelized implementations like a music player. If you have your voice structures in zp you can address your data pointers using the regular 0,7,14 index for instance. I've used this method in Breakage.
The fact that the 6502 instruction set is so asymmetric is a large part of making it fun to code for IMO. |
| |
cadaver
Registered: Feb 2002 Posts: 1160 |
tlr: That's a cool usage. Though you'll have the downside of having to manipulate the ZP pointer every time you want to access successive bytes (for example note, instrument, duration) from music data, instead of just incrementing Y. |
| |
Slammer
Registered: Feb 2004 Posts: 416 |
I really miss add. (adc without carry) |
| |
lft
Registered: Jul 2007 Posts: 369 |
I use it exactly like that in my latest playroutine.
Another use is when you'd really want to do (zp), but you need the y register for something else, and you have a known constant in x. Then you can do (zp-constant,x).
Finally, cmp (0,x) is a convenient 6-cycle 2-byte nop (although it clobbers the flags). |
| |
Bitbreaker
Registered: Oct 2002 Posts: 508 |
used it a few times as substitute for lda (zp) when x is fix and known lda (<(zp - x_),x) (lda (zp),y is cheaper however to do so)
Now also ponder about lax (zp,x) which could give some x = f(x) results :-D But it could also work as ldx (zp) with the above scenario whenever you can allow to clobber x. |
| |
lft
Registered: Jul 2007 Posts: 369 |
Another thing I've had in mind, but never actually implemented, is this: Suppose you're doing something like kefrens bars with open sideborders. You repeat the last line of a row of characters and modify the font on the fly. But in the borders, you repeat sprite data, let's say one sprite on either side. That means you have a single graphics buffer consisting of 46 bytes, but those bytes are distributed somewhat irregularly in RAM. So make a table in zp consisting of 46 pointers to them. Then use (zp,x) in the drawing operations. You can even access neighbouring cells with (zp-2,x) and (zp+2,x). |
Previous - 1 | 2 | 3 | 4 | 5 - Next |