annotate level2/modules/sspak.asm @ 162:3310d08dd353

Analysis of format. They are different due to differences in hardware
author roug
date Tue, 09 Jul 2002 21:05:30 +0000
parents 6641a883d6b0
children b3bfa479f8d0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1 ********************************************************************
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2 * SSPak - Speech-Sound Pak Text-To-Speech Driver
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
3 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
4 * $Id$
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
5 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
6 * by Bruce Isted (CIS 76625,2273)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
7 * released to the Public Domain 87/05/03
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
8 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
9 * This driver supports only the Speech-Sound Pak's text-to-speech mode.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
10 * Bit 7 is cleared and control codes are filtered to ensure that only carriage
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
11 * returns and characters in the range of $20-$7F (inclusive) are passed. A
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
12 * character count and automatic buffer flush is used, which should prevent
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
13 * buffer overflow in the Speech-Sound Pak.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
14 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
15 * Due to way the COCO's sound select circuitry is tied in with other sound
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
16 * sources and the joysticks, only one will function at a time. This means
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
17 * that while the Speech-Sound Pak is active other sound sources and/or the
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
18 * joysticks cannot be used. Speech output is enabled only when a carriage
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
19 * return is received, or when the buffer is flushed. Speech output is
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
20 * disabled as soon as the Speech-Sound Pak is finished speaking the string
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
21 * received before the carriage return or buffer flush.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
22 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
23 * Ed. Comments Who YY/MM/DD
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
24 * ------------------------------------------------------------------
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
25 * 1 Created BRI 87/05/03
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
26
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
27 nam SSPak
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
28 ttl Speech-Sound Pak Text-To-Speech Driver
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
29
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
30 ifp1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
31 use defsfile
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
32 use scfdefs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
33 endc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
34
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
35 BuffCnt equ 200 character count before flushing buffer (0-255)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
36 BusyBit equ %10000000 SSPak busy status bit (active low)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
37 CharMask equ %01111111 printable ASCII character mask
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
38 CRA equ $01 PIA CRA offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
39 CRB equ $03 PIA CRB offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
40 MUXBit equ %00001000 COCO sound MUX control/select bit position
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
41 SpeakBit equ %01000000 SSPak speech status bit (active low)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
42 SSPData equ $01 SSPak data register offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
43 SSPReset equ $00 SSPak reset register offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
44 SSPStat equ $01 SSPak status register offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
45
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
46 rev equ $01
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
47 edition set 1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
48
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
49 mod SEnd,SNam,Drivr+Objct,ReEnt+rev,SEntry,SMem
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
50
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
51 org V.SCF SCF manager data area
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
52 Count rmb 1 character counter
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
53 SMem equ .
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
54
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
55 fcb SHARE.+PWRIT.+WRITE. device capabilities
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
56
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
57 SNam fcs "SSPak"
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
58 fcb edition
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
59
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
60 SEntry lbra SInit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
61 lbra SRead
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
62 lbra SWrite
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
63 lbra SGetStat
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
64 lbra SSetStat
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
65 lbra STerm
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
66
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
67 SInit equ *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
68 STerm equ *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
69 ldx V.PORT,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
70 ldb #$01
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
71 stb SSPReset,x reset SSPak
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
72 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
73 stb SSPReset,x end SSPak reset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
74 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
75
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
76 SRead comb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
77 ldb #E$BMode
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
78 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
79
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
80 SWrite anda #CharMask strip MSBit of character
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
81 cmpa #C$CR carriage return?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
82 beq SpkOut yes, go enable SSPak speech output
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
83 inc Count,u increment character counter
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
84 cmpa #C$SPAC higher than space?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
85 bhi WritChar yes, go write character to SSPak
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
86 lda #C$SPAC only space allowed through here
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
87 ldb Count,u get current character count
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
88 cmpb #BuffCnt time to flush buffer?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
89 blo WritChar no, go write space to SSPak
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
90 SpkOut clr Count,u reset character count
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
91 ldy #PIA0Base
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
92 lda CRA,y get PIA0 CRA
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
93 ldb CRB,y get PIA0 CRB
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
94 pshs d save them
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
95 anda #^MUXBit clear PIA0 CA2 control LSBit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
96 orb #MUXBit set PIA0 CB2 control LSBit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
97 sta CRA,y * set COCO sound MUX to cartridge input
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
98 stb CRB,y *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
99 ldy #PIA1Base
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
100 ldb CRB,y get PIA1 CRB
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
101 pshs b save it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
102 orb #MUXBit set PIA1 CB2 control LSBit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
103 stb CRB,y enable COCO sound MUX
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
104 lda #C$CR load execute speech character
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
105 bsr WritChar go write command character to SSPak
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
106 bsr SSWait go wait until SSPak has finished
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
107 puls b recover original PIA1 CRB
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
108 stb CRB,y disable COCO sound MUX
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
109 puls d recover original PIA0 CRA & CRB
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
110 ldy #PIA0Base
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
111 sta CRA,y *restore COCO sound MUX to previous setting
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
112 stb CRB,y *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
113 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
114 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
115 WritChar bsr BusyWait go check if SSPak is busy
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
116 sta SSPData,x write character to SSPak
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
117 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
118 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
119
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
120 SGetStat equ *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
121 SSetStat equ *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
122 comb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
123 ldb #E$UnkSvc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
124 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
125
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
126 BusyWait ldx V.PORT,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
127 ldb SSPStat,x get SSPak status
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
128 andb #BusyBit SSPak busy?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
129 beq BusyWait yes, go check again
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
130 ldb SSPStat,x *allow for slow busy bit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
131 andb #BusyBit *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
132 beq BusyWait *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
133 ldb SSPStat,x *allow for very slow busy bit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
134 andb #BusyBit *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
135 beq BusyWait *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
136 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
137
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
138 SSWait ldx V.PORT,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
139 ldb SSPStat,x get SSPak status
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
140 andb #SpeakBit SSPak speech active yet?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
141 bne SSWait no, go check again
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
142 SSWait0 ldx #$0001 sleep remainder of tick
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
143 os9 F$Sleep
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
144 ldx V.PORT,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
145 ldb SSPStat,x get SSPak status
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
146 andb #SpeakBit SSPak speech still active?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
147 beq SSWait0 yes, go sleep some more
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
148 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
149
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
150 emod
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
151 SEnd equ *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
152 end
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
153