| |
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 |
lft, ace idea ! :) |
| |
Slammer
Registered: Feb 2004 Posts: 416 |
I think the (zp,x) idea have already been used for kefrensbars. I don't remember which demo but I guess it was one from Booze. |
| |
Skate
Registered: Jul 2003 Posts: 494 |
I just checked my source codes directory. I've used it a few times.
In Snapshot / Glance demo's horizontal raycaster part uses something like;
lax DATAS,y
sta (MAP_POINTER,x)
lda tColor,x
ldx #$00
sta (COLOR_POINTER,x)
So, first one really uses x as an index and second one uses x as a zero, more likely a sta(ZP). Of course this is in a loop and y register should not be affected.
This is from one of my unreleased codes;
lax $c0 ; lda #0 : ldx #0
sta (copyTo,x)
Just put a zero to the address pointed at copyTo. $c0 already had a zero of course.
This one is from my recent sierpinski entry.
lax $02
sec
- ror
dey
bpl -
ora (plotAddress,x)
sta (plotAddress,x)
I think what is does is clear.
And last but not least, this is one of my stable raster routines to wait for 8 cycles at some point.
sre ($ff,x)
|
| |
ready.
Registered: Feb 2003 Posts: 441 |
Useful when you need to use zero page pointers but want to preserve y, for example:
ldy whatever
ldx #0
lda (ZP0),y
sta (ZP1,x)
I use this when moving data from one area to another one. |
| |
soci
Registered: Sep 2003 Posts: 480 |
It's more popular in some forth implementations where the data stack is on zero page and is not split. |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
Quote: Useful when you need to use zero page pointers but want to preserve y, for example:
ldy whatever
ldx #0
lda (ZP0),y
sta (ZP1,x)
I use this when moving data from one area to another one.
god no! why? thats butt ugly and there are numerous ways round that preserve X instead of Y or selfmod.ű
moving data efficiently
ldx #0
ldy #numofpages
-
lda src,x
sta dst,x
dex
bne -
inc srcaddrhi
inc dstaddrhi
dey
bne - |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting lftAnother 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). You can do this, but it wastes a lot of cycles. You'd only do it like this if you're under serious memory constraints... :)
Under normal demo conditions (almost all 64K available) you'd have as many chunks of unrolled optimised code as you have bar X positions. Then you'd execute one of those in each rasterline of the effect. |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: Quoting lftAnother 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). You can do this, but it wastes a lot of cycles. You'd only do it like this if you're under serious memory constraints... :)
Under normal demo conditions (almost all 64K available) you'd have as many chunks of unrolled optimised code as you have bar X positions. Then you'd execute one of those in each rasterline of the effect.
And chain them on the stack? for at least the first 100 lines, and do RTS,RTS,RTS,RTS....? :D |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
jmp ($xcoo*2) ?:) |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: jmp ($xcoo*2) ?:)
Where to jump back? Nah.. chaining.. For every second line, 7-color bars that might just be feasible and perhaps will give you another char in width. |
Previous - 1 | 2 | 3 | 4 | 5 - Next |