[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: EPZ directive
John B. Matthews <nospam@nospam.com> wrote:
> In article <44913484$0$877$ba4acef3@news.orange.fr>,
> "Guillaume Tello" <houten.van@wanadoo.fr> wrote:
>
> > hello,
> >
> > i'm trying to learn 6502 asm. here is a part I don't understand:
> >
> > B EPZ $6 ; low part of adr
> > BH EPZ $7 ; high part of adr
> > ...
> > LDA (B,X)
> >
> > looking at the first two lines, I can think that the adr is $706.
> > but the assembly code for LDA (B,X) is A1 06 meaning that only low part of
> > the adress is used, pointing to page zero.
> >
> You have stumbled upon the (little used) indexed indirect address mode.
> In your example, the second byte of the instruction and the value in the
> X register are added to to form a one-byte, zero-page address. The
> contents of that address and the one following become the 16-bit
> effective address from which the accumulator is loaded.
Right so far.
> Given
>
> C EPZ $8
> CH EPZ $9
>
> If X is zero, then LDA (B,X) acts like LDA $706.
> If X is one, then LDA (B,X) acts like LDA $807.
> If X is two, then LDA (B,X) acts like LDA $908.
> etc.
No it doesn't. EPZ doesn't cause anything to be stored in zero page
locations. It just defines a symbol.
If X is zero, then LDA (B,X) acts like the 65C02 instruction LDA ($06).
If X is one, then LDA (B,X) acts like the 65C02 instruction LDA ($07).
If X is two, then LDA (B,X) acts like the 65C02 instruction LDA ($08).
etc.
The actual locations accessed will depend on the values stored in the
zero page locations.
Assuming the following data is stored:
06: 11
07: 22
08: 33
09: 44
then:
If X is zero, then LDA (B,X) acts like LDA $2211
If X is one, then LDA (B,X) acts like LDA $3322
If X is two, then LDA (B,X) acts like LDA $4433
etc.
--
David Empson
dempson@actrix.gen.nz