[Coco] Re: Technical: PIA Help

Brad Grier bradgrier at cox.net
Tue Dec 6 13:43:36 EST 2005


I took a quick look at the source but got hung up on the $ff03 usage. 
Okay...assuming that's a bug. I don't understand the following:

lda #$ff
sta $ff02         normal, all output
lda $ff00
coma
anda #%011111111  ignore joystick comparator
bne $cf2f         go if key press

What does lda $ff00 return if a key is down? Since we previously stored 
$ff at $ff02, we aren't asking for a specific keyboard column to be 
examined. Does it return any key regardless of column?

Anyway, I'm trying to figure this out between work and other things. 
Maybe tonight I'll get out the CoCo and see what's what.

Thanks,

Brad



Robert Gault wrote:
> You will never determine what is going on without looking at the code in 
> question. Part of what you report comes from
> 
> $cf01 extends to about $cffe
> pshs d,x,y,u
> leas -5,s
> clr $ff02
> lda $ff03
> anda #%11111011   data direction register
> sta $ff03
> lda #$ff
> sta $ff02         normal, all output
> lda $ff00
> coma
> anda #%011111111  ignore joystick comparator
> bne $cf2f         go if key press
> set some data and at $cfde deactivate data direction
> 
> $cf2f
> leau $da23,pcr
> ldx #$601
> clr 2,s
> clr 4,s
> lda #%10000000
> sta $ff02         only MSB is output
> lda $ff00
> bita #%01000000   check for shift keys
> bne $cf48
> inc 4,s
> $cf48 lda #1
> sta $ff02
> 10 nops to wait
> lda $ff00
> coma
> anda #%01111111
> ldb 2,s
> cmpb #7
> beq $cf6b
> cmpb #4
> beq $cf6b
> cmpb #3
> bne $cf6d
> $cf6b anda #%00111111
> $cf6b sta ,s
> eora ,x
> anda ,s
> beq $cfb0
> ldb #1
> $cf77 lsra
> bcs $cf7d
> aslb
> bra $cf77
> $cf7d andb ,s
> stb ,s
> lda #15
> ldb 2,s
> mul
> leau d,u
> lda ,s
> lbsr $cc7c
> ldb #3
> mul
> leau d,u
> lda 4,s
> lda a,u
> etc.
> 
> 
> 
> There does not seem to be any advantage to activate data direction and 
> this is normally only done for $FF02 after a cold start. I think that 
> the entire business is an error and more likely is that bit3 was 
> intended. That would change the MSB of the MUX line which might make 
> some sense.
> 
> Brad Grier wrote:
> 
>> I added a few println calls to Mocha at the memory locations in 
>> question. This is what happens at those addresses during a Tetris 
>> interrupt.
>>
>> I'm guessing some of the peek return values aren't right but I'm 
>> displaying what Mocha thinks the result should be.
>>
>> The big question: What's going on with the peek and pokes at $ff03?
>>
>> fire interrupt
>> poke ff02: ff
>> peek ff00= ff
>> poke ff02: 0
>> peek ff03= b5
>> poke ff03: b1 (ff02 data direction bit=0)
>> poke ff02: ff
>> peek ff00= ff
>> poke ff02: ff
>> peek ff03= 31
>> poke ff03: 35 (ff02 data direction bit=1)
>> poke ff02: ff
>> peek ff02= resets field sync IRQ flag
>> fire interrupt
>> etc, etc, etc, etc
>>
>> Maybe I need to hook up my coco and figure out how to use EDTASM again.
>>
>> Brad
>>

> 




More information about the Coco mailing list