1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2024-07-19 21:29:56 +00:00

Better MockingBoard detection

This commit is contained in:
David Schmenk 2018-02-26 11:31:59 -08:00
parent b96c08fb59
commit 8ebe11621a
2 changed files with 55 additions and 17 deletions

Binary file not shown.

View File

@ -213,6 +213,36 @@ asm psgWrite(pVIA, reg, val)#0
INX
RTS
end
asm viaCheck(pVIA)#2
PHP
SEI
LDA ESTKL,X
STA TMPL
LDA ESTKH,X
STA TMPH
STX ESP
LDX #$80
LDY #$04
- LDA (TMP),Y
BMI +
DEX
BNE -
TXA ; TIMEOUT
BEQ ++
+ TAX
LDA (TMP),Y
++ TAY
TXA
LDX ESP
DEX
STA ESTKL,X
STY ESTKL+1,X
LDA #$00
STA ESTKH,X
STA ESTKH+1,X
PLP
RTS
end
//
// Apple II speaker tone generator routines
//
@ -374,14 +404,21 @@ end
// Search slots for MockingBoard
//
def mbTicklePSG(pVIA)
pVIA->IER = $7F // Mask all interrupts
pVIA->ACR = $00 // Stop T1 countdown
pVIA->DDRB = $FF // Output enable port A and B
pVIA->DDRA = $FF
pVIA->IORA = $00 // Reset MockingBoard
if pVIA->IORA == $00
byte tmrBegin, tmrEnd
word tmrDiff
tmrBegin, tmrEnd = viaCheck(pVIA)
tmrDiff = tmrEnd - tmrBegin
//puts("VIA address: $"); puth(pVIA); puts(" Timer Diff = "); puti(tmrDiff); putln
if tmrDiff == 10
pVIA->IER = $7F // Mask all interrupts
//pVIA->ACR = $00 // Stop T1 countdown
pVIA->DDRB = $FF // Output enable port A and B
pVIA->DDRA = $FF
pVIA->IORA = $00 // Reset MockingBoard
//if pVIA->IORA == $00
pVIA->IORA = $04 // Inactive MockingBoard control lines
if pVIA->IORA == $04
//if pVIA->IORA == $04
//
// At least we know we have some sort of R/W in the ROM
// address space. Most likely a MockingBoard or John Bell
@ -392,7 +429,7 @@ def mbTicklePSG(pVIA)
//if mbReadP(pVIA, 2) == $7E and mbReadP(pVIA, 3) == $0A
return pVIA
//fin
fin
//fin
fin
return 0
end
@ -632,7 +669,7 @@ def mbSequence(yield, func)#0
psgWrite(mbVIA2, BENVAMP, $00)
psgWrite(mbVIA2, CENVAMP, $00)
fin
mbVIA1->ACR = $00 // Stop T1 countdown
//mbVIA1->ACR = $00 // Stop T1 countdown
mbVIA1->IER = $7F // Mask all interrupts
mbVIA1->IFR = $40 // Clear interrupt
setStatusReg(status)
@ -821,14 +858,15 @@ when MACHID & MACHID_MODEL
return -1
break
otherwise
puts("MockingBoard Slot:\n")
puts("ENTER = None\n")
puts("0 = Scan\n")
puts("1-7 = Slot #\n")
instr = gets('>'|$80)
if ^instr
mbSlot = mbSearch(^(instr + 1) - '0')
fin
//puts("MockingBoard Slot:\n")
//puts("ENTER = None\n")
//puts("0 = Scan\n")
//puts("1-7 = Slot #\n")
//instr = gets('>'|$80)
//if ^instr
// mbSlot = mbSearch(^(instr + 1) - '0')
//fin
mbSlot = mbSearch(0)
break
wend
if mbSlot < 0