[Coco] 6502 to 6809 translation

John Kent jekent at optusnet.com.au
Tue Aug 2 02:22:02 EDT 2011




On 2/08/2011 8:40 AM, William Astle wrote:

>

> You're missing a detail in the original question. Let's make the

> following assumptions, codified as source code:

>

> org $2000

> data_addr fdb $8000

>

> org $2020

> fdb $8272

>

> org $4000

> ldy #$20

> * sequence 1

> lda [data_addr,y]

> * sequence 2

> lda data_addr,y

> * sequence 3

> ldd data_addr

> lda d,y

> * end options

> org $8020

> fcb $42

>

> org $8272

> fcb $32

>

> Sequence 1 will result in A containing $32 because it will read the

> address at $2020 and use that as the address to load A from.

>

> Sequence 2 will result in A containing $82 because it will fetch A

> from $2020.

>

> Sequence 3 will result in A containing $42, which is what the original

> 6502 instruction would do (assuming it were implemented on the 6809).

>

> Essentially, the 6502 is loading a 16 bit base address from the

> address of data_addr and adding the value in Y to that address to form

> the effective address which is used for loading A. Using 6809

> nomenclature, that would be "LDA [data_addr],y", which obviously does

> not exist. Such weird (to us) gyrations are required because the 6502

> has no 16 bit registers and on the 6502, the address of "data_addr"

> would have to be in the direct page.

>

>

For lda b,y according to my VHDL 6809, B is sign extended so you are
right for an offset from 128 to 255 from a 16 bit base address you will
need to use D as the base address rather than B as a replacement for Y
so your sequence 3 I would say is correct. The thing is that D is made
up of A & B so when you load A you destroy the base address in D but I
guess you can reload it again later anyway.

LDA data_addr, y "data_addr" is a constant offset not a variable
address. I think the 6502 used direct page memory for the indirect
indexed addressing although it's a while since I looked at the 6502.

John.

--
http://www.johnkent.com.au
http://members.optusnet.com.au/jekent




More information about the Coco mailing list