| |
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.... |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
jackie wins.. :) |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting MagerValpIt's one of those "seemed like a good idea at the time" opcodes. Everyone would have been happier if we got (ZP),x instead. Indeed. But let's see what it could be useful for.
Assuming no self-modification is feasible (think of ROM code), i can think of accessing data buckets using this addressing mode.
In zeropage, there'd be an array of pointers. Find some (even) value of X which determines the bucket to use. Then either push something into it (STA (buckets,x):INC buckets,x:BNE *+4:inc buckets+1,x) or pull something from it (analogous, but decrease pointer first). |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting JackAsserAnd chain them on the stack? for at least the first 100 lines, and do RTS,RTS,RTS,RTS....? :D Not quite. Check out my Kefrens bars in Singles Collection Volume 2 :D |
| |
Frantic
Registered: Mar 2003 Posts: 1648 |
I can't count the number of times I've consider this opcode and thought to myself that "hmm.. maybe I could use this one for this or that purpose", but *always* ended up finding some other better solution instead. :) Couldn't even find cases where it was equally good as some other solution, so I could use it just for the sake of using it. The solutions involving this opcode were always worse. :) |
| |
Bob
Registered: Nov 2002 Posts: 71 |
I use (zp,x) for scroll writes in the definer parts.
each row has its own izp addr.. and with variable X I can have the scroll text output starting on different rows.
or even change per frame if I want to.. |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting BobI use (zp,x) for scroll writes in the definer parts.
each row has its own izp addr.. and with variable X I can have the scroll text output starting on different rows.
or even change per frame if I want to.. This pretty much sounds like a practical implementation of my buckets theory i mentioned above :D |
| |
Hypnosis
Registered: Mar 2015 Posts: 36 |
I have only used it to waste cycles I think. The major shortcoming is that it can only access one byte per pointer. lda (zp,x),y could be interesting. |
| |
lft
Registered: Jul 2007 Posts: 369 |
Here's another idea: In a sprite multiplexer, there are some things you need to update in registers that are spaced two bytes apart (x and y coords), and some things that are in consecutive locations (pointers in the vm, colour registers). If we keep the sprite number times two in x, we can access the coordinate registers using ordinary indexed addressing, and then we can have tables of addresses in zero-page for the colour registers, and for the sprite pointers of each vm, and update those values with the (zp,x) addressing mode. |
| |
Rastah Bar Account closed
Registered: Oct 2012 Posts: 336 |
Could the TAS opcode be useful for a multiplexer somehow too? For example, suppose you have a bunch of "objects" and have stored some properties (colors or positions, for instance) on the stack. You could access those by
lax #objectnum
tas $fe00,y
If you let y contain the actual spritenumber to which you want to assign the object with number #objectnum, then the store operation of TAS could be useful.
Sorry that this is not very concrete, but I don't have much experience with multiplexers. |
| |
Fresh
Registered: Jan 2005 Posts: 101 |
Quote:
Here's another idea: In a sprite multiplexer, there are some things you need to update in registers that are spaced two bytes apart (x and y coords), and some things that are in consecutive locations (pointers in the vm, colour registers). If we keep the sprite number times two in x, we can access the coordinate registers using ordinary indexed addressing, and then we can have tables of addresses in zero-page for the colour registers, and for the sprite pointers of each vm, and update those values with the (zp,x) addressing mode.
Smart idea, that's probably the most useable solution. |
Previous - 1 | 2 | 3 | 4 | 5 - Next |