[Coco] tetris question

Arthur Flexser flexser at fiu.edu
Tue Jan 19 15:25:44 EST 2010


I get it now.  Thanks much for the clear elaboration!

Art
On Mon, Jan 18, 2010 at 3:39 PM, Darren A <mechacoco at gmail.com> wrote:

> On 1/18/10, Arthur Flexser wrote:
> > Care to explain in more detail why the reset vector (on a read CoCo)
> would
> > affect it?  I understand that the value the palette register returns for
> > bits 6 and 7 depends on some register contents at the time it is read,
> but
> > beyond that I'm a bit vague....
> >
>
> ---
>
> Whenever you read from an un-mapped hardware address or from an
> address where some of the bits are undefined (like the GIME's palette
> and MMU registers), the value obtained for those undefined bits is
> predictable on the CoCo.
>
> There are two possibilites which depend on the addressing mode you use
> to read from such an address.  If you use the "no-offset" indexed mode
> (as in LDA ,X) the undefined bits will come from the first byte of the
> next instruction.  For any other addressing mode, the undefined bits
> will come from the byte at $FFFF (LSB of the Reset vector).
>
> When you use BASIC's PEEK command to read from an un-mapped address
> (such as $FF70), you get a value of 126.  This is because PEEK reads
> the address with a LDA ,X instruction, so the value returned is the
> opcode of the next instruction (JMP Extended = $7E = 126).  If you
> patch the PEEK command to use a 5-bit offset (LDA 0,X), the value
> returned for an un-mapped address will instead come from $FFFF (27 on
> a CoCo 3 or 39 on a CoCo 1/2).
>
> The reason for this behavior is that the 6809 normally does a VMA
> cycle just before reading the instruction's effective address. The
> exception is the "no-offset" indexed mode in which case the next
> instruction byte is read just prior to the effective address.  During
> a VMA cycle the address bus goes to Hi Impedance and the R/W line is
> HI.  This has the effect of loading the value from $FFFF onto the data
> bus.  This stale data from the previous cycle supplies the value for
> the undefined bits.
>
> Here is a small routine which will demonstrate this behavior:
>
>   ldx   #$FF70
>   lda   ,x
>   ldb   $FF70
>   std   $400
>   rts
>
> On a CoCo 3, you should end up with the value $F61B at $400-401.  On a
> CoCo 1/2 you should get $F627 instead.
>
> Darren
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> http://five.pairlist.net/mailman/listinfo/coco
>



More information about the Coco mailing list