-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvt100.beep.S
More file actions
199 lines (155 loc) · 2.29 KB
/
Copy pathvt100.beep.S
File metadata and controls
199 lines (155 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
lst off
cas se
rel
xc
xc
use apple2gs.equ
mx %11
*
*
* keypress @ 44.1 - 28 samples of $40, 29 samples of $b0
*
* beep - repeat keypress 53 times
*
* by adjusting rate, only need 1 sample each.
*
* w/ 2 oscillators, scan rate = 223.7 kHz ~5x 44.1
* 28 samples * 5 = 142
* res = 7. (1 << 16) / 142 = ~ 461
* freq = 461, res = 7, wave size = 256 --> n * 461 >> 16
*
*
*
* vt52
* keypress - ~730 samples, $40, curve to 0 or $b0, curve to 0
* beep 14 keypresses
*
*
bic mac
if #=]1
and ]1!$ffff
else
err 1 ; immediate only.
fin
<<<
docwait mac
if MX<2
err 1 ; 8-bit m only
fin
wait lda SGCONTROL
bmi wait
<<<
docmode mac
docwait
bic #%01000000 ; DOC mode
ora #%00100000 ; auto-incr
ora #%0000_1111 ; max volume.
sta SGCONTROL
<<<
rammode mac
docwait
ora #%01100000 ; RAM mode, auto-incr
sta SGCONTROL
<<<
init_audio ent
docmode
* 4 oscillators. -- (2 for key, 2 for beep -- stereo!)
lda #$e1
sta SGADDRL
lda #4*2
sta SGDATA
* control registers
* just set them off. channels will be set when they fire.
lda #$a0
sta SGADDRL
lda #%0000_0_01_1 ; ch 0, interrupts off, 1-shot, halted.
sta SGDATA
sta SGDATA
sta SGDATA
sta SGDATA
* freq low
lda #$00
sta SGADDRL
lda #<650
sta SGDATA
sta SGDATA
sta SGDATA
sta SGDATA
* freq high
lda #$20
sta SGADDRL
lda #>650
sta SGDATA
sta SGDATA
sta SGDATA
sta SGDATA
* volume
lda #$40
sta SGADDRL
lda #$ff
sta SGDATA
sta SGDATA
sta SGDATA
sta SGDATA
* wave table
lda #$80
sta SGADDRL
lda #0 ; page 0
sta SGDATA
sta SGDATA
inc ; page 1
sta SGDATA
sta SGDATA
* wave table size
lda #$c0
sta SGADDRL
lda #%00_000_111 ; 256 bytes, 16-bit shift
sta SGDATA
sta SGDATA
sta SGDATA
sta SGDATA
; now copy the data....
rammode
stz SGADDRL
stz SGADDRH
ldy #key_size
ldx #0
]loop lda key_data,x
sta SGDATA
inx
dey
bpl ]loop
stz SGADDRL
lda #1
sta SGADDRH
ldy #beep_size
ldx #0
]loop lda beep_data,x
sta SGDATA
inx
dey
bpl ]loop
rts
beep ent
; fire osc 2 + 3
docmode
lda #$a0+2
sta SGADDRL
lda #%0000_0_01_0 ; ch 0, interrupts off, 1-shot, running.
ldx #%0001_0_01_0 ; ch 1, interrupts off, 1-shot, running.
sta SGDATA
stx SGDATA
rts
key_data
db $01
db $ff
db $00
key_size equ *-key_data
beep_data
lup 53
db $01
db $ff
--^
db $0
beep_size equ *-beep_data
sav vt100.beep.L