Re: Plus/4 6551 receive routine error?

From: Gerrit Heitsch <gerrit_at_laosinh.s.bawue.de>
Date: Sun, 14 Nov 2021 17:45:53 +0100
Message-ID: <c8f0ce76-29bb-320f-a1b8-109fee271b89_at_laosinh.s.bawue.de>
On 11/14/21 4:51 PM, Jim Brain wrote:
>  From USENET last night/this morning:
> 
> 
> I was going over some of my old CBM files from back in the day, and ran
> across an error I had found in the Plus 4 kernel rom.  I don't think I ever
> found a way to report it to anyone, so I thought I would see if anything
> has changed.
> 
> The error is in the 6551 ACIA servicing routine where a byte is read in
> from the ACIA:
> 
> LDA $FD00
> BEQ EAC2
> STA $07D5
> 
> Incoming bytes are first stored at $0FD5, and later moved from there into
> the input buffer.  But as the rom is written, any null byte (00) received
> would be later stored as whatever the most recent non-null byte was.  And
> it's impossible to receive a null byte.  The solution is to reverse the
> second and third instructions:
> 
> LDA $FD00
> STA $07D5
> BEQ EAC2
> 
> Or you could duplicate the beginning of the IRQ servicing up to this point
> in your code, with the correction, then jump back into the rom.

Hm... The way I read the datasheet of the 6551, you need to check the 
status register whether a byte is waiting (Bit 3 set) and if yes, grab 
the byte and store it into the buffer. That BEQ doesn't really make 
sense in this context.

  Gerrit
Received on 2021-11-14 18:00:08

Archive generated by hypermail 2.3.0.