[Coco] Re: Technical: PIA Help
Brad Grier
bradgrier at cox.net
Thu Dec 1 21:09:34 EST 2005
Hi Robert,
I reached my conclusions by stepping through Mocha in debug mode. I also
used the debugger in Jeff Vavasour's emulator (the game doesn't work
quite right there either - it does work in David Keil's emulator). I'm
surprised it doesn't work in MESS.
The strobing appears to be in the interrupt routine (both the write to
$ff02 and the read of $ff00). The routine starts at $c4fe - you don't
have to go far to see the *first* write/read of $ff02 and $ff00.
By the way, what is RTSI?
Brad
Robert Gault wrote:
> You correct in your understand of the keyboard strobing. As to the game,
> my first question would be how do you know what the game is doing? Have
> you disassembled the code or are you monitoring the emulated registers
> with a built-in debugging routine.
>
> There is a Tetris ROM image on RTSI which is 16K and works with a Coco3
> in high res graphics and a Coco1/2 in low res graphics. A very very
> quick scan through the code did not find the $FF02 strobing. Does the
> store $FF02 with $FF occur during the interrupt, or is $FF00 read during
> the interrupt, or both?
>
> By the way, this image does not run correctly in MESS. Key presses are
> detected but the game responds as though several wrong keys were
> pressed. I'm not sure how or if I can test it on a real Coco without a
> ROM pack.
>
> Brad Grier wrote:
>
>> Hello all,
>>
>> I'm trying to get Tetris to work in Mocha but I'm having trouble
>> getting the emulator to recognize key presses in the game. This is the
>> only program I've found that exhibits this behavior.
>>
>> My understanding of the CoCo PIA keyboard routine is as follows: Write
>> a zero to the bit that corresponds to the keyboard column you're
>> interested in (with the rest of the bits set to 1) and poke it into
>> 0xff02. Next read 0xff00 and if a key is pressed you'll get a zero in
>> the bit corresponding to the keyboard row.
>>
>> Tetris seems to do all of it's keyboard polling from a field sync
>> interrupt routine. It's constantly poking 0xff into 0xff02 - normally
>> Mocha would ignore the subsequent read at 0xff00 because no bits are
>> zero. I've found that if I treat 0xff as a request to see if *any* key
>> is down regardless of column, I can at least get some keys to kind of
>> work. Maybe it all boils down to what does a 0xff into 0xff02 really
>> do? I'm sure I'm overlooking something obvious...
>>
>> Anyway, I've been making a lot of changes to Mocha recently and this
>> one is last on the list for the time being. That, and I like Tetris.
>>
>> Thanks,
>>
>> Brad
>> http://members.cox.net/javacoco/
>>
>>
>
More information about the Coco
mailing list