Mercurial > hg > Members > kono > nitros9-code
diff level1/modules/sscpak.asm @ 0:6641a883d6b0
Initial revision
author | boisy |
---|---|
date | Thu, 04 Apr 2002 16:34:12 +0000 |
parents | |
children | 668388823050 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level1/modules/sscpak.asm Thu Apr 04 16:34:12 2002 +0000 @@ -0,0 +1,129 @@ +******************************************************************** +* SSCPAK - Tandy Speech/Sound Pak driver +* +* $Id$ +* +* Ed. Comments Who YY/MM/DD +* ------------------------------------------------------------------ +* 1 Tandy/Microware original version + + nam SSCPAK + ttl Tandy Speech/Sound Pak driver + +* Disassembled 98/08/23 17:33:46 by Disasm v1.6 (C) 1988 by RML + + ifp1 + use defsfile + use scfdefs + endc + +tylg set Drivr+Objct +atrv set ReEnt+rev +rev set $01 +edition set $01 + +BusyBit equ %10000000 SSPak busy status bit (active low) +CRA equ $01 PIA CRA offset +CRB equ $03 PIA CRB offset +MUXBit equ %00001000 COCO sound MUX control/select bit position +SpeakBit equ %01000000 SSPak speech status bit (active low) +PIA0Addr equ PIA.U4 base address of COCO sound MUX select PIA +PIA1Addr equ PIA.U8 base address of COCO sound MUX enable PIA +SSPData equ $FF7E SSPak data register offset +SSPReset equ $FF7D SSPak reset register offset +SSPStat equ $FF7E SSPak status register offset + + mod eom,name,tylg,atrv,start,size + + rmb 29 +size equ . + + fcb READ.+WRITE. mode byte + +name fcs /SSCPAK/ + fcb edition + +start lbra Init + lbra Read + lbra Write + lbra GetStat + lbra SetStat + lbra Term + +Init pshs a + lda #$01 + sta >SSPReset reset SSPak + clra + sta >SSPReset end SSPak reset + puls pc,a + +Read ldb #E$BMode + bra ErrEx + +GetStat +SetStat ldb #E$UnkSvc +ErrEx orcc #Carry +Term rts + +Write ldy #SSPData + ldx #PIA0Addr + ldu #PIA1Addr + cmpa #C$LF linefeed? + beq WritEx ..yep, ignore it + cmpa #C$CR carriage return? + bne NormChar ..no + lda CRA,x get PIA0 CRA + ldb CRB,x get PIA0 CRB + pshs b,a save them + anda #^MUXBit clear PIA0 CA2 control LSBit + orb #MUXBit set PIA0 B@ control LSBit + sta CRA,x * set CoCo sound MUX to cartridge input + stb CRB,x * + lda CRB,u get PIA1 CRB + pshs a save it + ora #MUXBit set PIA1 CB2 control LSBit + sta CRB,u enable COCO sound MUX + lda #C$CR get carriage return + bsr ChkHW wait for SSPak to get ready + sta ,y store it in SSPak + bsr SpchWait wait until speech is active + bsr SSWait wait until speech is inactive + puls a get original PIA1 CRB + sta CRB,u disable COCO sound MUX + puls b,a get original PIA0 CRA/CRB + sta CRA,x restore original PIA0 CRA + stb CRB,x restore original PIA0 CRB + bra WritEx exit +NormChar bsr ChkHW wait for HW + sta ,y write char to HW +WritEx clrb + rts + +* Check SSC hardware, loop until it's ready +ChkHW pshs a +ChkHWLp lda ,y get SSPak status + anda #BusyBit SSPak busy? + beq ChkHWLp yep, go check again + puls pc,a + +* routine to loop until SSPak speech is inactive +SSWait pshs x,a +SSWait2 lda ,y get SSPak status + anda #SpeakBit SSPak speech active yet? + bne SSWaitEx yep, exit + ldx #$0001 sleep remainder of tick + os9 F$Sleep + bra SSWait2 +SSWaitEx puls pc,x,a + +* routine to loop until SSPak speech is active +SpchWait pshs a +SpchLoop lda ,y get SSPak status + anda #SpeakBit SSPak speech active yet? + bne SpchLoop no, go check again + puls pc,a return + + emod +eom equ * + end +