Fiskbit wrote: ↑Tue Jan 05, 2021 11:56 pm
If I'm understanding the wiki page properly, $40AE.0 high enables modem WRAM, and $40C0.0 high enables cartridge RAM. As far as I'm aware, though, software will set both $40AE and $40C0.0 to the same value (0 or 1), which means both are either enabled or disabled at the same time, which doesn't sound right to me. Are you sure you didn't invert the meaning of $40AE.0?
I just did a test code specifically to check this for you. This code does toggle built-in RAM /CE:
Code: Select all
testRamEnable:
lda #$01
sta $40AE
ldx $6000
jmp testRamEnable
And this code does not (always high):
Code: Select all
testRamEnable:
lda #$00
sta $40AE
ldx $6000
jmp testRamEnable
The RAM +CE signal does go to the card connector but JRA-PAT does not use RAM +CE. So I think that is what is preventing a conflict. I have also run Super Mario Club on my JRA-PAT card with no problems, so I am thinking it does not use RAM +CE in the card either.
I did some additional testing tonight with my address catcher and found the sequences of register reads/writes that Super Mario Club uses when connecting and disconnecting. Not sure it matters for this but when it asked me for a number, I filled it will all 1's for this example.
When opening the connection:
Code: Select all
Reads $40D3 continuously. Normally has value $E0.
When $40D3 value changes to $60, proceed.
Write $00 to $40D0
Write $13 to $40D1
Write $00 to $40D2
Write $BF to $40D3
Read $40D3 -> value is $60.
Read $40D3 -> value is $60.
Read $40D3 -> value is $E0.
Write $42 to $40D0
Write $31 to $40D1
Write $20 to $40D2
Write $3F to $40D3
Read $40D3 -> value is $E0.
Read $40D3 -> value is $E0.
Read $40D3 -> value is $E0.
Read $40D3 -> value is $60.
Write $36 to $40D0
Write $33 to $40D1
Write $57 to $40D2
Write $BF to $40D3
Read $40D3 -> value is $60.
Read $40D3 -> value is $60.
Read $40D3 -> value is $60.
Read $40D3 -> value is $60.
Read $40D3 -> value is $E0.
Write $30 to $40D0
Write $36 to $40D1
Write $30 to $40D2
Write $3F to $40D3
Read $40D3 -> value is $E0.
Read $40D3 -> value is $E0.
Read $40D3 -> value is $E0.
Read $40D3 -> value is $E0.
Read $40D3 -> value is $60.
Write $37 to $40D0
Write $38 to $40D1
Write $31 to $40D2
Write $BF to $40D3
Read $40D3 -> value is $60.
Read $40D3 -> value is $60.
Read $40D3 -> value is $60.
Read $40D3 -> value is $60.
Read $40D3 -> value is $E0.
Write $34 to $40D0
Write $34 to $40D1
Write $31 to $40D2
Write $3F to $40D3
Read $40D3 -> value is $E0.
Read $40D3 -> value is $E0.
Read $40D3 -> value is $E0.
Read $40D3 -> value is $60.
Write $33 to $40D0
Write $25 to $40D1
Write $67 to $40D2
Write $BF to $40D3
Read $40D3 -> value is $60.
Read $40D3 -> value is $60.
Read $40D3 -> value is $60.
Read $40D3 -> value is $E0.
Write $25 to $40D0
Write $A2 to $40D1
Write $01 to $40D2
Write $3F to $40D3
Read $40D3 -> value is $E0.
Read $40D3 -> value is $E0.
Read $40D3 -> value is $E0.
Read $40D3 -> value is $E0.
Read $40D3 -> value is $60.
Write $FF to $40D3
Read $40D3 -> value is $60.
Read $40D3 -> value is $E0.
Write $FF to $40D3
When closing the connection:
Code: Select all
Read $40C0 -> value is $CC.
Read $40AC -> value is $40.
Read $40D3 -> value is $20.
Write $7F to $40D3
Read $40D3 -> value is $20
Read $40D3 -> value is $20
Read $40D3 -> value is $20
Read $40D3 -> value is $A0
Read $40D0 -> value is $80
Read $40D1 -> value is $01
Read $40D2 -> value is $00
Write $FF to $40D3
Read $40D3 -> value is $A0
Read $40D3 -> value is $A0
Read $40D3 -> value is $A0
Read $40D3 -> value is $20
Read $40A2 -> value is $21
Write $05 to $40C0
Read $40D0 -> value is $01
Write $7F to $40D3
Read $40D3 -> value is $E0
Write $FF to $40D3
I also found that there is no register write coinciding with the green LED turning on. (The Green LED is controlled by the 5A18 chip, which uses $4xDx address space.)