bang
[williams-soundroms.git] / VSNDRM3.SRC
1         NAM     ROBOTRON SOUNDS VERSION 1.0  3-8-82 
2 *COPYRIGHT WILLIAMS ELECTRONICS INC. 2084
3 *PROGRAMMERS: EUGENE P. JARVIS, SAM DICKER,RANDY PFEIFFER,JOHN KOTLARIK
4 *               PAUL G. DUSSAULT,CARY W. KOLKER,TIM  MURPHY
5 *                       AND A CAST OF THOUSANDS......
6 *
7         NOGEN
8 *
9 *SYSTEM CONSTANTS
10 *
11 ROM     EQU     $F000
12 SOUND   EQU     $400
13 CKORG   EQU     $EF00   CHECKSUM PROG ORG
14 ENDRAM  EQU     $7F
15 VECTOR  EQU     $FFF8   RESET,INT VECTORS
16 WVELEN  EQU     72
17 BG1MAX  EQU     29      MAX BACKGROUND INCREMENT
18 HBLEN   EQU     72
19 BG2MAX  EQU     29      
20 SP1SND  EQU     $0E     SPINNER SOUND #1 CODE
21 B2SND   EQU     $12     BONUS SOUND #2 CODE
22 SP1MAX  EQU     32
23 NIN     EQU     5
24 FIF     EQU     6
25 TAF     EQU     34715!>1        NOTE TIMES
26 TA      EQU     36780!>1
27 TBF     EQU     38967!>1
28 TB      EQU     41284!>1
29 TC      EQU     43739!>1
30 TCS     EQU     46340!>1
31 TD      EQU     49096!>1
32 TEF     EQU     52015!>1
33 TE      EQU     55108!>1
34 TF      EQU     58385!>1
35 TFS     EQU     61857!>1
36 TG      EQU     65535!>1
37 *
38 *
39 * SCREAM EQUATES
40 *
41 ECHOS   EQU     4
42 FREQ    EQU     0               
43 TIMER   EQU     1
44 *
45 *GLOBALS
46 *
47         ORG     0
48 BG1FLG  RMB     1       BACKGROUND SOUND 1
49 BG2FLG  RMB     1       BACKGROUND SOUND 2
50 SP1FLG  RMB     1       SPINNER FLAG
51 B2FLG   RMB     1       BONUS #2 FLAG
52 ORGFLG  RMB     1       ORGAN FLAG
53 HI      RMB     1       RANDOM SEED
54 LO      RMB     1       RANDOM SEED
55 XDECAY  RMB     2
56 AMP0    RMB     1
57 *
58 *
59 *TEMPORARIES
60 *
61 TMPRAM  EQU     *       TEMPORARY RAM
62 TEMPX   RMB     2       X TEMPS
63 XPLAY   RMB     2
64 XPTR    RMB     2
65 TEMPA   RMB     1       ACCA TEMP
66 TEMPB   RMB     1
67 LOCRAM  EQU     *
68 *
69 *GWAVE PARAMETERS
70 *
71         ORG     LOCRAM
72 GECHO   RMB     1       ECHO FLAG
73 GCCNT   RMB     1       CYCLE COUNT
74 GECDEC  RMB     1       # OF DECAYS PER ECHO
75 GDFINC  RMB     1       DELTA FREQ INC
76 GDCNT   RMB     1       DELTA FREQ COUNT
77 GWFRM   RMB     2       WAVEFORM ADDRESS
78 *TEMPORARY OR COMPUTED PARAMETERS
79 PRDECA  RMB     1       PRE-DECAY FACTOR
80 GWFRQ   RMB     2       FREQ TABLE ADDR
81 FRQEND  RMB     2       END ADDR FREQ TABLE
82 WVEND   RMB     2       WAVE END ADDR
83 GPER    RMB     1       PERIOD
84 GECNT   RMB     1       # OF ECHOES COUNTER
85 FOFSET  RMB     1       FREQUENCY OFFSET
86 *
87 *GWAVE TABLES
88 *
89 GWTAB   RMB     WVELEN  WAVE TABLE
90 *
91 *VARIWAVE PARAMETERS
92 *
93         ORG     LOCRAM
94 LOPER   RMB     1       LO PERIOD
95 HIPER   RMB     1       HIPERIOD
96 LODT    RMB     1       PERIOD DELTAS
97 HIDT    RMB     1
98 HIEN    RMB     1       END PERIOD
99 SWPDT   RMB     2       SWEEP PERIOD
100 LOMOD   RMB     1       BASE FREQ MOD
101 VAMP    RMB     1       AMPLITUDE
102 LOCNT   RMB     1       PERIOD COUNTERS
103 HICNT   RMB     1
104 * SIREN AND BOMB RAM
105         ORG     LOCRAM
106 TOP     RMB     2
107 SWEEP   RMB     2
108 SLOPE   RMB     1
109 END2    RMB     2
110 TIME    RMB     1
111 TABLE   RMB     2
112 FREQZ   RMB     1
113 *
114 * KNOCKER RAM
115 *
116         ORG     LOCRAM
117 PERIOD  RMB     1
118 AMP     RMB     1
119 SNDTMP  RMB     2       INDEX TMEP
120 *
121 * FLASH LOCAL RAM
122         ORG     LOCRAM
123 FREQ1   RMB     1       FREQUENCY CONSTANT 1
124 FREQ2   RMB     1       FREQUENCY CONSTANT 2
125 FREQ3   RMB     1       FREQUENCY CONSTANT 3
126 FREQ4   RMB     1       FREQUENCY CONSTANT 4
127 DELTA1  RMB     1       DELTA AMPLITUDE 1
128 DELTA2  RMB     1       DELTA AMPLITUDE 2
129 DELTA3  RMB     1       DELTA AMPLITUDE 3
130 DELTA4  RMB     1       DELTA AMPLITUDE 4
131 FREQ1$  RMB     1       FREQUENCY COUNTER 1
132 FREQ2$  RMB     1       FREQUENCY COUNTER 2
133 FREQ3$  RMB     1       FREQUENCY COUNTER 3
134 FREQ4$  RMB     1       FREQUENCY COUNTER 4
135 CYCLE1  RMB     1       CYCLE CONSTANT 1
136 CYCLE2  RMB     1       CYCLE CONSTANT 2
137 CYCLE3  RMB     1       CYCLE CONSTANT 3
138 CYCLE4  RMB     1       CYCLE CONSTANT 4
139 DFREQ1  RMB     1       DELTA FREQUENCY 1
140 DFREQ2  RMB     1       DELTA FREQUENCY 2
141 DFREQ3  RMB     1       DELTA FREQUENCY 3
142 DFREQ4  RMB     1       DELTA FREQUENCY 4
143 EFREQ1  RMB     1       END FREQUENCY 1
144 EFREQ2  RMB     1       END FREQUENCY 2
145 EFREQ3  RMB     1       END FREQUENCY 3
146 EFREQ4  RMB     1       END FREQUENCY 4
147 CYCL1$  RMB     1       CYCLE COUNTER 1
148 CYCL2$  RMB     1       CYCLE COUNTER 2
149 CYCL3$  RMB     1       CYCLE COUNTER 3
150 CYCL4$  RMB     1       CYCLE COUNTER 4
151 SNDX1   RMB     1
152
153 RANDOM  EQU     LO      SINGLE BYTE RANDOM
154         ORG     LOCRAM+1
155 FREQ$   RMB     1       START FREQUENCY
156 C$FRQ   RMB     1       CYCLES AT FREQUENCY
157 D$FRQ   RMB     1       DELTA FREQUENCY
158 E$FRQ   RMB     1       END FREQUENCY
159 C$AMP   RMB     1       CYCLES AT AMPLITUDE
160 D$AMP   RMB     1       DELTA AMPLITUDE
161 C$AMP$  RMB     1       CYCLE COUNTER
162 C$FRQ$  RMB     1       CYCLE COUNTER
163 *
164 *NOISE/CROWD ROAR ROUTINE PARAMETERS
165 *
166         ORG     LOCRAM
167 DECAY   RMB     1
168 NAMP    RMB     1
169 CYCNT   RMB     1
170 NFRQ1   RMB     2
171 NFFLG   RMB     1
172 LFREQ   RMB     1
173 DFREQ   RMB     1
174 GALPAM  EQU     *
175 CYCNT2  RMB     1
176 NAMP2   RMB     1
177 DECAY2  RMB     1
178 NFFLG2  RMB     1
179 NFR2    RMB     1
180 GALCNT  RMB     1
181 WHIS    RMB     1       CROWD ROAR AMP
182 WFRQ    RMB     1       CROWD WHISTLE FREQ
183 WCNT    RMB     1       WHISTLE PASSCOUNTER
184 PTRHI   RMB     2       WHIS ADR PTR
185 WFRQ2   RMB     1
186 WCNT2   RMB     1
187 CURVAL  RMB     1       WHISTLING NOISE OUTPUT
188 ATP     RMB     1       INTERM NOISE VAL
189 MINWIS  RMB     1       MIN WHISTLE FREQ
190 CY2     RMB     1       NOISE CYCLE COUNTER
191 DFRQ    RMB     1       WHISTLE FREQ CHANGE
192 DFRQ2   RMB     1       INIT WHISTLE FREQ CHANGE
193 NNOIS   RMB     1       NEXT NOISE VALUE
194 NFRQ    RMB     1       NOISE FREQ
195 NFRQ2   RMB     1       INIT NOISE FREQ
196 RCNT2   RMB     1
197 *
198 *FILTERED NOISE ROUTINE PARAMETERS
199 *
200         ORG     LOCRAM
201 FMAX    RMB     1       MAXIMUM_FREQUENCY
202 FHI     RMB     1       FREQUENCY
203 FLO     RMB     1 
204 LOFRQ   RMB     1
205 SAMPC   RMB     2       SAMPLE COUNT
206 FDFLG   RMB     1       FREQUENCY DECREMENT FLAG
207 DSFLG   RMB     1       DISTORTION FLAG
208 *
209 *SCREAM TABLES
210 *
211         ORG     LOCRAM
212 STABLE  RMB     2*ECHOS SCREAM TABLE
213 SRMEND  EQU     *
214 *
215 *ORGAN PARAMETERS
216 *
217         ORG     LOCRAM
218 DUR     RMB     2       NOTE DURATION
219 OSCIL   RMB     1       OSCILLATORS
220 RDELAY  RMB     60      RAM DELAY LOAD
221 *
222 * CHECKSUM CALCULATOR & RELOCATOR
223 *
224         ORG     CKORG
225 CKSUM   LDX     #$FFFF  INDEX TO END OF ROM
226         CLRB            ZERO CHECKSUM
227 CKSUM1  ADCB    0,X     ADD IN PROGRAM BYTE
228         DEX             TO NEXT BYTE
229         CPX     #$F000  DONE YET?
230         BNE     CKSUM1  NOPE...
231         STAB    0,X     SAVE CHECKSUM AT BEGINNING
232         WAI             TURN OFF LEDS
233 FROM    RMB     2       FOR POINTER
234 TO      RMB     2       FOR POINTER
235 *
236 * MAIN PROGRAM
237 *
238         ORG     ROM
239         FCB     $76     CHECKSUM BYTE
240 *
241         FCC     "(C)1982 WILLIAMS ELECTRONICS"
242 *
243 SETUP   SEI             SET INTERRUPT MASK
244         LDS     #ENDRAM INITIALIZE STACK POINTER
245         LDX     #SOUND  INDEX TO PIA
246         CLR     1,X     ACCESS DDRA
247         CLR     3,X     ACCESS DDRB
248         LDAA    #$FF    PA0-PA7
249         STAA    0,X     SET SIDE A AS OUTPUTS
250         CLR     2,X     SET B SIDE AS INPUTS
251         LDAA    #$37    CB2 LOW, IRQ ALLOWED
252         STAA    3,X     PROGRAM B CONTROL REG
253         LDAA    #$3C    CA2 SET INIT HIGH, NO IRQS
254         STAA    1,X     PROGRAM A SIDE
255         STAA    HI      START RANDOM GENERATOR
256         CLRA
257         STAA    B2FLG
258         STAA    BG1FLG
259         STAA    BG2FLG
260         STAA    SP1FLG
261         STAA    ORGFLG
262         CLI             CLEAR INTERRUPTS
263         BRA     *       WAIT FOR INTERRUPT
264 *
265 *
266 * THREE OSCILLATOR SOUND GENERATOR
267 *
268 PLAY    STX     XPLAY   SAVE CURRENT INDEX
269         LDX     #DECAYZ SET TO MAXIMUM AMPLITUDE
270         STX     XDECAY  AND SAVE
271         LDAA    #$80    LOAD ZERO AMPLITUDE
272 PLAY1   LDAB    FREQ4   CHECK WHITE NOISE COUNTER
273         BPL     PLAY3   NOT IN WHITE MODE
274         LDAB    RANDOM  GET RANDOM NUMBER
275         LSRB            REDUCE IT
276         LSRB
277         LSRB
278         INCB            NOW NON-ZERO
279 PLAY2   DECB            TIME OUT COUNT
280         BNE     PLAY2
281 PLAY3   DEC     FREQ1$  COUNT DOWN OSC. 1
282         BEQ     PLAY7   DO AN UPDATE
283         DEC     FREQ2$  COUNT DOWN OSC. 2
284         BEQ     PLAY8   DO AN UPDATE
285         DEC     FREQ3$  COUNT DOWN OSC. 3
286         BEQ     PLAY9   DO AN UPDATE
287         DEC     FREQ4$  COUNT DOWN WHITE NOISE
288         BNE     PLAY1   DO THEM AGAIN
289         LDAB    FREQ4   CHECK WHITE NOISE CONSTANT
290         BEQ     PLAY1   FORGET IT
291         ANDB    #$7F    STRIP FLAG BIT
292         STAB    FREQ4$  SAVE WHITE NOISE COUNT
293         LDAB    RANDOM  GET CURRENT RANDOM
294         ASLB            DOUBLE
295         ADDB    RANDOM  TRIPLE
296         ADDB    #$0B    ADD IN 11
297         STAB    RANDOM  VOILA...NEW RANDOM NUMBER
298         DEC     CYCL4$  COUNT DOWN DECAY
299         BNE     PLAY6   DON'T DECAY
300         LDAB    CYCLE4  RELOAD COUNT
301         STAB    CYCL4$  AND SAVE
302         LDX     XDECAY  GET DECAY JUMP POINTER
303         DEX             MOVE TO LESS AMPLITUDE
304         CPX     #RDECAY+1  DONE?
305         BEQ     PLAY12  YUP...BYE BYE
306         STX     XDECAY  SAVE NEW POINTER
307 PLAY6   LDAB    RANDOM  GET RANDOM AMPLITUDE
308         BMI     PLAY6A  SKIP IF NEGATIVE
309         ANDB    DELTA4  REDUCE AMPLITUDE
310         ANDB    #$7F    STRIP SIGN BIT
311         BRA     PLAY6B
312 PLAY6A  ANDB    DELTA4  REDUCE AMPLITUDE
313         ANDB    #$7F    REMOVE SIGN BIT
314         NEGB    NEGATE
315 PLAY6B  PSHA
316         ABA             ADD WHITE NOISE
317         TAB
318         PULA
319         LDX     XDECAY  GET DECAY POINTER
320         JSR     0,X     OUTPUT NOISE
321         BRA     PLAY1   DO SOME MORE
322 PLAY7   LDX     #FREQ1  INDEX TO SET 1
323         BRA     PLAY10
324 PLAY8   LDX     #FREQ2  INDEX TO SET 2
325         BRA     PLAY10
326 PLAY9   LDX     #FREQ3  INDEX TO SET 3
327 PLAY10  TST     24,X    CHECK CYCLES AT FREQUENCY
328         BEQ     PLAY11  ZERO, DON'T CHANGE
329         DEC     24,X    COUNT DOWN 
330         BNE     PLAY11  NOT TIME TO CHANGE...
331         LDAB    12,X    LOAD CYCLES AT FREQUENCY
332         STAB    24,X    SAVE IN COUNTER
333         LDAB    00,X    GET CURRENT FRQUENCY
334         ADDB    16,X    ADD DELTA
335         CMPB    20,X    COMPARE TO END
336         BEQ     PLAY12  DONE...
337         STAB    00,X    SAVE NEW CURRENT FREQUENCY
338 PLAY11  LDAB    0,X     GET CURRENT FREQUENCY
339         STAB    8,X     SAVE IN FREQUENCY COUNTER
340         ADDA    4,X     ADD IN AMPLITUDE
341         NEG     4,X     NEGATE AMPLITUDE
342         TAB             SAVE DATA
343         LDX     XDECAY  INDEX TO DECAY
344         JSR     0,X     OUTPUT SOUND
345         JMP     PLAY1   REPEAT
346 PLAY12  LDX     XPLAY   RESTORE INDEX
347         RTS
348 *
349 * ECHO AND DECAY ROUTINE
350 *
351 RDECAY  LSRB
352         LSRB
353         LSRB
354         LSRB
355         LSRB
356         LSRB
357         LSRB
358         LSRB
359 DECAYZ  STAB    SOUND
360         RTS
361 *
362 * 3 OSCILLATOR CALLING ROUTINES
363 *
364 THNDR   LDX     #VEC01  THUNDER SOUND
365 THNDR1  LDAB    #28     NEED TO TRANSFER
366         JSR     TRANS   28 BYTES FOR PLAY
367         JSR     PLAY    NOW PLAY IT
368         RTS
369 SND2    LDX     #VEC02  SOUND 2
370         BRA     THNDR1
371 SND3    LDX     #VEC03  SOUND 3
372         BRA     THNDR1
373 SND4    LDX     #VEC04  SOUND 4
374         BRA     THNDR1
375 SND5    LDX     #VEC05  SOUND 5
376         BRA     THNDR1
377 SND16   LDX     #VEC016
378         BRA     THNDR1
379 SND17   LDX     #VEC017
380         BRA     THNDR1
381 *
382 *
383 * PROGRESSIVE PITCH BONUS COUNTDOWN
384 *
385 BONUS$  LDX     #$0060  PROGRESSIVE SINGLE FREQUENCY
386         LDAA    0,X     GET CURRENT FREQUENCY
387         SUBA    #$02    NOW HIGHER
388         STAA    0,X     SAVE NEW FREQUENCY
389         JSR     MOVE    SET UP FOR SING
390         JMP     SING    PLAY IT
391 *
392 * DIVING PLANE SOUND
393 *
394 PLANE   LDX     #$0001  SET FOR SHORT HALF CYCLE
395         STX     FREQ1   SAVE VALUE
396         LDX     #$0380  SET FOR LONG HALF CYCLE
397         STX     FREQ3   SAVE VALUE
398 PLANE1  CLR     SOUND   SEND OUT ZEROES
399         LDX     FREQ1   GET LOW HALF CYCLE DATA
400         INX             INCREASE HALF CYCLE
401         STX     FREQ1   SAVE NEW VALUE
402 PLANE2  DEX             COUNT DOWN
403         BNE     PLANE2
404         COM     SOUND   SEND OUT ONES
405         LDX     FREQ3   GET HIGH HALF CYCLE DATA
406 PLANE3  DEX             COUNT DOWN
407         BNE     PLANE3
408         BRA     PLANE1
409 *
410 *       SIREN   AIR RAID
411 *
412 ZIREN   LDAA    #$FF
413         STAA    TOP
414         LDX     #$FEC0
415         STX     SWEEP
416         LDAA    #$20
417         LDX     #$FFE0
418         BSR     ZIREN0
419         LDAA    #$1
420         LDX     #$44
421 ZIREN0  STAA    SLOPE
422         STX     END2
423 ZIREN1  LDX     #$10
424 ZIREN2  BSR     ZIRLOP
425         LDAA    TOP+1
426         ADDA    SWEEP+1
427         STAA    TOP+1
428         LDAA    TOP
429         ADCA    SWEEP
430         STAA    TOP
431         DEX
432         BNE     ZIREN2
433         LDAA    SWEEP+1
434         ADDA    SLOPE
435         STAA    SWEEP+1
436         BCC     ZIREN5
437         INC     SWEEP
438 ZIREN5  LDX     SWEEP
439         CPX     END2
440         BNE     ZIREN1
441         RTS
442 *FLAT TRIANGLE LOOP
443 ZIRLOP  CLRA
444 ZIRLP1  STAA    SOUND
445         ADDA    #$20
446         BCC     ZIRLP1
447         BSR     ZIRT
448         LDAA    #$E0
449 ZIRLP4  STAA    SOUND
450         SUBA    #$20
451         BCC     ZIRLP4
452 ZIRT    LDAB    TOP
453 ZIRLP2  LDAA    #$2
454 ZIRLP3  DECA
455         BNE     ZIRLP3
456         DECB
457         BNE     ZIRLP2
458         RTS
459 *
460 * THE BOMB OOOOOH NOOOOO!
461 WHIST   LDAA    #$80
462         STAA    FREQZ
463         LDAA    #SINTBL/$100
464         STAA    TABLE
465 WHIST0  LDAA    #$80
466         STAA    TEMPA
467 WHIST1  LDAA    #18
468 WHIST2  DECA
469         BNE     WHIST2
470         LDAA    TIME
471         ADDA    FREQZ
472         STAA    TIME
473         LSRA
474         LSRA
475         LSRA
476         ADDA    #SINTBL!.$FF
477         STAA    TABLE+1
478         LDX     TABLE
479         LDAA    ,X
480         STAA    SOUND
481         DEC     TEMPA
482         BNE     WHIST1
483         DEC     FREQZ
484         LDAA    FREQZ
485         CMPA    #$20
486         BNE     WHIST0
487         RTS
488 *     SINE TABLE
489 SINTBL  FCB     $80,$8C,$98,$A5,$B0,$BC,$C6,$D0
490         FCB     $DA,$E2,$EA,$F0,$F5,$FA,$FD,$FE
491         FCB     $FF,$FE,$FD,$FA,$F5,$F0,$EA,$E2
492         FCB     $DA,$D0,$C6,$BC,$B0,$A5,$98,$8C
493         FCB     $80,$73,$67,$5A,$4F,$43,$39,$2F
494         FCB     $25,$1D,$15,$0F,$0A,$05,$02,$01
495         FCB     $00,$01,$02,$05,$0A,$0F,$15,$1D
496         FCB     $25,$2F,$39,$43,$4F,$5A,$67,$73
497 *
498 * KNOCKER ROUTINE
499 *
500 KNOCK   CLR     SOUND+2 FULL BLAST
501         LDX     #KNKTAB
502         STX     SNDTMP
503 SQLP    LDX     SNDTMP  RESTORE X REG
504         LDAA    ,X      GET PERIOD
505         BEQ     END     END ON ZERO
506         LDAB    1,X     GET AMP
507         ANDB    #$F0
508         STAB    AMP
509         LDAB    1,X
510         INX
511         INX
512         STX     SNDTMP  SAVE X
513         STAA    PERIOD
514         ANDB    #$F
515 LP0     LDAA    AMP
516         STAA    SOUND
517         LDAA    PERIOD
518 LP1     LDX     #5      DELAY
519 LP11    DEX
520         BNE     LP11
521         DECA
522         BNE     LP1
523         CLR     SOUND
524         LDAA    PERIOD
525 LP2     LDX     #5      DELAY
526 LP22    DEX
527         BNE     LP22
528         DECA
529         BNE     LP2
530         DECB
531         BNE     LP0
532         BRA     SQLP
533 END     LDAA    #$80    OVERRIDE OFF
534         STAA    SOUND+2
535         RTS
536 *
537 *
538 * KNOCKER PATTERN
539 *
540 KNKTAB  FDB     $01FC,$02FC,$03F8,$04F8,$06F8,$08F4,$0CF4
541         FDB     $10F4,$20F2,$40F1,$60F1,$80F1,$A0F1,$C0F1,0
542 *
543 *
544 * FUNNY "ELECTRIC SOUND"
545 * SUPPOSED TO GENERATE A PHASED OUTPUT AT
546 * A CHANGING FREQUENCY. IT DOESN'T, AND
547 * I'M NOT SURE EXACTLY WHAT IT DOES DO.
548 * BEST LEAVE THIS ALONE.
549 *
550 BONUS   DEC     SNDX1
551         BRA     SND1$
552 SND1    LDAB    #$A0
553         STAB    SNDX1
554 SND1$   LDAA    #$04
555         STAA    FREQ2
556 SND1$$  LDAA    #$9F
557         LDAB    SNDX1
558 SND1A   LDX     #$01C0
559 SND1B   DEX
560         BEQ     SND1E
561         FCB     $F7     "STAB"
562         FDB     FREQ1
563         STAA    SOUND
564 SND1C   DEX
565         BEQ     SND1E
566         DEC     FREQ1
567         BNE     SND1C
568         DEX
569         BEQ     SND1E
570         STAB    FREQ1
571         COM     SOUND
572 SND1D   DEX
573         BEQ     SND1E
574         DEC     FREQ1
575         BNE     SND1D
576         BRA     SND1B
577 SND1E   SUBB    FREQ2
578         CMPB    #$10
579         BHI     SND1A
580         RTS
581 START   LDAB    #$11
582         STAB    SNDX1
583         LDAA    #$FE
584         STAA    FREQ2
585         BRA     SND1$$
586 *
587 * SINGLE OSCILLATOR SOUND CALLS
588 *
589 PERK    LDX     #VEC01X
590         BRA     PERK$1
591 PERK1   JSR     MOVE
592         JSR     SING
593         RTS
594 ATARI   LDX     #VEC02X
595         BRA     PERK1
596 SIREN   LDAB    #$FF
597         STAB    AMP0
598 SIREN1  LDX     #VEC03X
599         BSR     PERK1
600         LDX     #VEC04X
601         BSR     PERK1
602         DECB
603         BNE     SIREN1
604         RTS
605 ORRRR   LDX     #VEC05X
606         BRA     PERK1
607 PERK$   LDX     #VEC07X
608 PERK$1  BSR     PERK1
609         BSR     ECHO
610         BRA     PERK$1
611 HSTD    LDAA    #$FF
612         STAA    AMP0
613         LDX     #VEC08X
614         BRA     PERK$1
615 PERK$$  LDAA    #$FF
616         STAA    AMP0
617         LDX     #VEC06X
618         BRA     PERK$1
619 *
620 *       RANDOM SQUIRTS
621 *
622 SQRT    LDAB    #$30
623 SQRT1   LDX     #VEC09X
624         BSR     MOVE
625 SQRT2   LDAA    RANDOM
626         ASLA
627         ADDA    RANDOM
628         ADDA    #$0B
629         STAA    RANDOM
630         LSRA
631         LSRA
632         ADDA    #$0C
633         STAA    FREQ$
634         BSR     SING
635         DECB
636         BNE     SQRT2
637         RTS
638 *
639 *       ECHO FUNCTION
640 *
641 ECHO    LDAA    AMP0
642         SUBA    #$08
643         BPL     ECHO1
644         STAA    AMP0
645         RTS
646 ECHO1   PULA
647         PULA
648         RTS
649 *
650 *       MOVE PARAMETERS
651 *
652 MOVE    LDAA    0,X
653         STAA    FREQ$
654         LDAA    1,X
655         STAA    C$FRQ
656         LDAA    2,X
657         STAA    D$FRQ
658         LDAA    3,X
659         STAA    E$FRQ
660         LDAA    4,X
661         STAA    C$AMP
662         LDAA    5,X
663         STAA    D$AMP
664         RTS
665 *
666 *       DELTA F, DELTA A ROUTINE
667 *
668 SING    LDAA    AMP0    GET STARTING AMPLITUDE
669 SING$   PSHB            SAVE B
670         LDAB    C$AMP   GET CYCLES AT AMPLITUDE
671         STAB    C$AMP$  SAVE AS COUNTER
672         LDAB    C$FRQ   GET CYCLES AT FREQUENCY
673         STAB    C$FRQ$  SAVE AS COUNTER
674 SING1   COMA            INVERT AMPLITUDE
675         LDAB    FREQ$   GET FREQUENCY COUNTER
676         STAA    SOUND   OUTPUT TO D/A
677 SING2   DECB
678         BNE     SING2
679         COMA            INVERT AMPLITUDE
680         LDAB    FREQ$   GET FREQUENCY COUNTER
681         BRA     *+2     -I
682         INX             -I
683         DEX             -I--- SYNC, 20 CYCLES
684         INX             -I
685         DEX             -I
686         STAA    SOUND   OUTPUT TO D/A
687 SING3   DECB
688         BNE     SING3
689         DEC     C$FRQ$  CHECK CYCLES AT FREQUENCY
690         BEQ     SING4   GO CHANGE FREQUENCY
691         DEC     C$AMP$  CHECK CYCLES AT AMPLITUDE
692         BNE     SING1   ALL OK, GO OUTPUT
693         COMA            INVERT AMPLITUDE
694         LDAB    C$AMP   GET CYCLES AT AMPLITUDE
695         STAA    SOUND   OUTPUT TO D/A
696         STAB    C$AMP$  SAVE AS COUNTER
697         LDAB    FREQ$   GET FREQUENCY COUNT
698         ADDA    D$AMP   ADD AMPLITUDE DELTA
699         BMI     SING6   RETURN FROM SUBROUTINE
700         NOP             SYNC, 2 CYCLES
701         BRA     SING5
702 SING4   INX             -I
703         DEX             -I--- SYNC, 10 CYCLES
704         NOP             -I
705         COMA            INVERT AMPLITUDE
706         LDAB    C$FRQ   GET CYCLES AT FREQUENCY
707         STAA    SOUND   OUTPUT TO D/A
708         STAB    C$FRQ$  SAVE AS COUNTER
709         LDAB    FREQ$   GET FREQUENCY COUNT
710         SUBB    D$FRQ   SUBTRACT FREQUENCY DELTA
711         CMPB    E$FRQ   COMPARE TO END FREQUENCY
712         CMPB    E$FRQ   SYNC, 3 CYCLES
713         BEQ     SING6   RETURN FROM SUBROUTINE
714 SING5   STAB    FREQ$   SAVE FREQUENCY COUNT
715         SUBB    #$05    SYNC TO FREQUENCY COUNTDOWN
716         BRA     SING2   JUMP INTO COUNTDOWN LOOP
717 SING6   PULB            RESTORE B
718         RTS
719 *
720 *
721 SNDTBL  FCB     $DA,$FF,$DA,$80,$26,$01,$26,$80
722         FCB     $07,$0A,$07,$00,$F9,$F6,$F9,$00
723 NOTTBL  FCB     $3A,$3E,$50,$46,$33,$2C,$27,$20
724         FCB     $25,$1C,$1A,$17,$14,$11,$10,$33
725 WAVFRM  FCB     $08,$03,$02,$01,$02,$03,$04,$05
726         FCB     $06,$0A,$1E,$32,$70,$00
727 VEC01   FDB     $FFFF,$FF90,$FFFF,$FFFF,$FFFF
728         FDB     $FF90,$FFFF,$FFFF,$FFFF,$FFFF
729         FDB     $0000,$0000,$0000,$0000
730 VEC02   FDB     $4801,$0000,$3F3F,$0000,$4801
731         FDB     $0000,$0108,$0000,$8101,$0000
732         FDB     $01FF,$0000,$0108,$0000
733 VEC03   FDB     $0110,$0000,$3F3F,$0000,$0110
734         FDB     $0000,$0505,$0000,$0101,$0000
735         FDB     $31FF,$0000,$0505,$0000
736 VEC04   FDB     $3000,$0000,$7F00,$0000,$3000
737         FDB     $0000,$0100,$0000,$7F00,$0000
738         FDB     $0200,$0000,$0100,$0000
739 VEC05   FDB     $0400,$0004,$7F00,$007F,$0400
740         FDB     $0004,$FF00,$00A0,$0000,$0000
741         FDB     $0000,$0000,$FF00,$00A0
742 VEC06   FDB     $0C68,$6800,$071F,$0F00,$0C80
743         FDB     $8000,$FFFF,$FF00,$0000,$0000
744         FDB     $0000,$0000,$FFFF,$FF00
745 VEC016  FDB     $0104,$0000,$3F7F,$0000,$0104
746         FDB     $0000,$05FF,$0000,$0100,$0000
747         FDB     $4800,$0000,$05FF,$0000
748 VEC017  FDB     $0280,$0030,$0A7F,$007F,$0280
749         FDB     $0030,$C080,$0020,$0110,$0015
750         FDB     $C010,$0000,$C080,$0000
751 VEC01X  FDB     $FF01,$02C3,$FF00
752 VEC02X  FDB     $0103,$FF80,$FF00
753 VEC03X  FDB     $2003,$FF50,$FF00
754 VEC04X  FDB     $5003,$0120,$FF00
755 VEC05X  FDB     $FE04,$0204,$FF00
756 VEC06X  FDB     $4803,$010C,$FF00
757 VEC07X  FDB     $4802,$010C,$FF00
758 VEC08X  FDB     $E001,$0210,$FF00
759 VEC09X  FDB     $50FF,$0000,$6080
760 VEC10X  FDB     $FF02,$0106,$FF00
761 *
762 *VARI LOADER
763 *
764 VARILD  TAB
765         ASLA            X2
766         ASLA            X4
767         ASLA            X8
768         ABA             X9
769         LDX     #LOCRAM
770         STX     XPTR    SET XSFER
771         LDX     #VVECT
772         JSR     ADDX
773         LDAB    #9      GET COUNT
774 VTRAN   JMP     TRANS
775 *
776 *VARIABLE DUTY CYCLE SQUARE WAVE ROUTINE
777 *
778 VARI    LDAA    VAMP
779         STAA    SOUND
780 VAR0    LDAA    LOPER
781         STAA    LOCNT
782         LDAA    HIPER
783         STAA    HICNT
784 V0      LDX     SWPDT
785 V0LP    LDAA    LOCNT   LO CYCLE
786         COM     SOUND
787 V1      DEX
788         BEQ     VSWEEP
789         DECA
790         BNE     V1
791         COM     SOUND
792         LDAA    HICNT   HI CYCLE
793 V2      DEX
794         BEQ     VSWEEP
795         DECA
796         BNE     V2
797         BRA     V0LP    LOOP BACK
798 VSWEEP  LDAA    SOUND
799         BMI     VS1
800         COMA
801 VS1     ADDA    #0
802         STAA    SOUND   OUTPUT
803         LDAA    LOCNT
804         ADDA    LODT
805         STAA    LOCNT
806         LDAA    HICNT
807         ADDA    HIDT
808         STAA    HICNT
809         CMPA    HIEN
810         BNE     V0
811         LDAA    LOMOD
812         BEQ     VARX
813         ADDA    LOPER
814         STAA    LOPER
815         BNE     VAR0
816 VARX    RTS
817 *
818 *LAUNCH
819 *
820 LAUNCH  LDAA    #$FF
821         STAA    DFREQ
822         LDAA    #$60
823         LDAB    #$FF
824         BRA     LITEN
825 *
826 *LIGHTNING
827 *
828 LITE    LDAA    #1
829         STAA    DFREQ
830         LDAB    #3
831         BRA     LITEN
832 *
833 *APPEAR
834 *
835 APPEAR  LDAA    #$FE
836         STAA    DFREQ
837         LDAA    #$C0
838         LDAB    #$10
839         BRA     LITEN
840 *
841 *LIGHTNING+APPEAR NOISE ROUTINE
842 *
843 LITEN   STAA    LFREQ
844         LDAA    #$FF    HIGHEST AMP
845         STAA    SOUND
846         STAB    CYCNT
847 LITE0   LDAB    CYCNT
848 LITE1   LDAA    LO      GET RANDOM
849         LSRA
850         LSRA
851         LSRA
852         EORA    LO
853         LSRA
854         ROR     HI
855         ROR     LO
856         BCC     LITE2
857         COM     SOUND
858 LITE2   LDAA    LFREQ   COUNT FREQ
859 LITE3   DECA
860         BNE     LITE3
861         DECB            COUNT CYCLES
862         BNE     LITE1
863         LDAA    LFREQ
864         ADDA    DFREQ
865         STAA    LFREQ
866         BNE     LITE0
867         RTS
868 *
869 *TURBO
870 *
871 TURBO   LDAA    #$20
872         STAA    CYCNT
873         STAA    NFFLG
874         LDAA    #$1
875         LDX     #1
876         LDAB    #$FF
877         BRA     MOISE
878 *
879 *WHITE NOISE ROUTINE
880 *X=INIT PERIOD, ACCB=INIT AMP, ACCA DECAY RATE
881 *CYCNT=CYCLE COUNT, NFFLG= FREQ DECAY FLAG
882 *
883 MOISE   STAA    DECAY
884 MOISE0  STX     NFRQ1
885 MOIS00  STAB    NAMP
886         LDAB    CYCNT
887 MOISE1  LDAA    LO      GET RANDOM BIT
888         LSRA
889         LSRA
890         LSRA
891         EORA    LO
892         LSRA
893         ROR     HI
894         ROR     LO
895         LDAA    #$0
896         BCC     MOISE2
897         LDAA    NAMP
898 MOISE2  STAA    SOUND
899         LDX     NFRQ1   INCREASING DELAY
900 MOISE3  DEX
901         BNE     MOISE3
902         DECB            FINISH CYCLE COUNT?
903         BNE     MOISE1  NO
904         LDAB    NAMP    DECAY AMP
905         SUBB    DECAY
906         BEQ     MSEND
907         LDX     NFRQ1   INC FREQ
908         INX
909         LDAA    NFFLG   DECAY FREQ?
910         BEQ     MOIS00  NO
911         BRA     MOISE0
912 MSEND   RTS     
913 *
914 *
915 *CROWD ROAR
916 CDR     LDX     #WS1    1ST WHISTLE PARAMS
917         STX     PTRHI
918         JSR     WISLD
919         LDX     #$A500  SEED
920         STX     HI
921         LDX     #CR1    1ST CROWD ROAR NOISE PARAMS
922         JSR     NOISLD
923         JSR     NINIT
924         LDX     #CR2
925         JSR     NOISLD
926         JMP     NINIT2
927 *WHISTLE PARAMS
928 WS1     FCB     $90,$10,2,$14,$40
929         FCB     $B4,$40,$FF,$14,$30
930         FCB     $D0,$32,$2,$10,$60
931         FCB     $EE,$20,2,8,$54
932         FCB     $E9,$54,$FF,$20,$28
933         FCB     $C0,$30,2,$14,$58
934         FCB     $AC,$20,$2,$8,$58
935         FCB     $A6,$58,$FF,$18,$22
936         FCB     0
937 CR1     FCB     $30,$10,$FC,0,1
938 CR2     FCB     $30,$FC,1,0,1
939 *
940 *
941 *WHITE NOISE ROUTINE
942 *NFRQ=INIT PERIOD, NAMP=INIT AMP, DECAY AMPLITUDE RATE
943 *CYCNT=CYCLE COUNT, NFFLG= FREQ DECAY FLAG
944 *NFFLG=0 NO FREQ CHANGE;=POS DECAY;=MINUS INC FREQ
945 *NOISE LOAD PROG-ENTER WITH XREG POINTING TO DATA
946 *
947 NOISLD  LDAA    X
948         STAA    CY2
949         LDAA    1,X
950         STAA    NAMP
951         LDAA    2,X
952         STAA    DECAY
953         LDAA    3,X
954         STAA    NFFLG
955         LDAA    4,X
956         STAA    NFRQ2
957 NEND    RTS
958 *
959 *LOAD NOISE AND GO
960 *
961 NOISLG  BSR     NOISLD
962 *
963 *NOISE INIT
964 *
965 NOIN    BSR     NSUB    CY2&NFRQ2 TO CYCNT&NFRQ
966 *
967 *NOISE LOOP
968 *
969 NO1     BSR     RNT     FREQ CHECK
970         LDAA    NFRQ    FREQ REINITED?
971         CMPA    NFRQ2
972         BNE     NO1     IF NOT KEEEP DELAYING
973         ROLB            RESTORE MAX AMPLITUDE TO NOISE
974         STAB    SOUND   OUTPUT TO DAC
975         BSR     NOISE1  PREPARE NEXT RAND NO
976         BSR     NOISE2
977         BSR     RNA     AMPLITUDE &CYCL3 COUNT CECK
978         TST     NAMP    SEE IF DONE
979         BEQ     NEND    RTS IF FINISHED
980         TST     CYCNT   SEE IF NEXT FREQ
981         BNE     NO1     IF NOT GO FREQ DELAY LOOP
982         TST     NFFLG   SEE IF SWEEP MODE
983         BEQ     NO1     IF NO SWEEP GO DELAY
984         BMI     NO3     SWEEP DOWN
985         INC     NFRQ2
986         BRA     NO1
987 NO3     DEC     NFRQ2
988         DEC     NFRQ
989         BRA     NO1
990 NSUB    CLR     CYCNT
991         LDAA    NFRQ2
992         STAA    NFRQ    NOISE FREQ
993         CLR     NNOIS
994         RTS
995 * 23 CYCLES FOR EACH SUBROUTINE PLUS CALLING OVERHEAD
996 *
997 *
998 NOISE1  LDAA            LO GET RANDOM BIT
999         LSRA
1000         LSRA
1001         LSRA
1002         EORA    LO
1003         STAA    ATP     INTERMED RAND NO
1004         INX
1005         ANDA    #$7     FOR 3 BIT RANDOM NO
1006 *
1007         RTS
1008 *
1009 NOISE2  LDAA    ATP
1010         LSRA
1011         ROR     HI
1012         ROR     LO
1013         LDAA    #$0
1014         BCC     NOISE3
1015         LDAA    NAMP
1016 NOISE3  STAA    NNOIS   NEXT NOISE VALUE
1017 *
1018         RTS
1019 *
1020 RNT     LDAA    NFRQ2   NOISE FREQ
1021         DEC     NFRQ
1022         BEQ     NW0
1023         INX
1024         DEX     TEQ
1025         BRA     NNW1
1026 NW0     STAA    NFRQ    REINIT FREQ
1027         LDAB    NNOIS   SAVE NEXT NOISE VAL IN B REG
1028         LSRB            HALF AMPLITUDE
1029         INC     CYCNT   NOISE CYCLE COUNT AT NAMP
1030 *
1031 NNW1    RTS
1032 *
1033 RNA     LDAA    CY2     NOISE AMPL CHANGE
1034         CMPA    CYCNT
1035         BEQ     NW2
1036         INX
1037         DEX
1038         BRA     NW3     TEQ
1039 NW2     CLR     CYCNT
1040         LDAA    NAMP
1041         SUBA    DECAY
1042         STAA    NAMP
1043 *
1044 NW3     RTS
1045 *
1046 * NOISE WITH WHISTLE MAIN LOOP
1047 NINIT   CLR     WFRQ
1048         CLR     DFRQ
1049         LDAA    #$E     CYCLE OFFSET FOR WHISTLE
1050         STAA    WCNT
1051         CLR     CURVAL  CLR WHISTLE VALUES
1052 NINIT2  BSR     NSUB    CLR CYCNT AND INIT FREQ
1053 WIN     BSR     NOISE1
1054         JSR     TRIDR
1055         BSR     NOISE2
1056         JSR     TRIDR
1057         BSR     RNT
1058         BSR     TRIDR
1059         BSR     RNA
1060         BSR     TRIDR
1061         BSR     TRICNT
1062         BSR     TRIDR
1063         BSR     TRIFRQ
1064         BSR     TRIDR
1065         BSR     NNW
1066         BRA     WIN
1067 *
1068 TRICNT  LDAA    WCNT2   #CYCLES AT WHISTLE FREQ
1069         DEC     WCNT
1070         BEQ     NW4
1071         FCB     $B6     LDAA EXTENDED
1072         FDB     NAMP
1073         BNE     NW5     TEQ
1074         BRA     NSEND   END NOISE
1075 NW4     STAA    WCNT
1076         LDAA    WFRQ
1077         ADDA    DFRQ
1078         STAA    WFRQ
1079 *
1080 NW5     RTS
1081 *
1082 TRIFRQ  LDAA    WFRQ    WHISTLE END TEST
1083         CMPA    MINWIS
1084         BEQ     NW6
1085         INX     TEQ
1086         LDAA    NAMP    END TEST
1087         BNE     NW7     TEQ
1088         BRA     PEND    END NOISE
1089 NW6     CLR     WFRQ    TURN OFF WHISTLE
1090         CLR     DFRQ
1091         CLR     CURVAL
1092         LDX     PTRHI   SET UP FOR NEXT WHISTLE
1093 WISLD   LDAA    X
1094         STAA    WHIS
1095         BEQ     NW7
1096         LDAA    1,X
1097         STAA    WFRQ2
1098         LDAA    2,X
1099         STAA    DFRQ2
1100         LDAA    3,X
1101         STAA    WCNT2
1102         LDAA    4,X
1103         STAA    MINWIS
1104         LDAA    #5
1105         JSR     ADDX
1106         STX     PTRHI
1107 *
1108 NW7     RTS
1109 PEND    PULA
1110         PULA            STACK ADJ
1111         RTS
1112 *
1113 NNW     LDAA    WHIS    WHISTLE INIT
1114         BEQ     NW8     ALREADY INITED
1115         CMPA    NAMP
1116         BNE     NW9
1117         BRA     WINIT   GO INIT WHISTLE
1118 NW8     INX
1119         DEX     TEQ
1120 NW9     RTS
1121 WINIT   CLR     WHIS
1122         LDAA    WFRQ2
1123         STAA    WFRQ
1124         LDAA    DFRQ2
1125         STAA    DFRQ
1126         RTS
1127 ******************
1128 TRIDR   LDAA    CURVAL
1129         ADDA    WFRQ
1130         STAA    CURVAL
1131         BPL     GO
1132         COMA
1133 GO      ABA
1134         STAA    SOUND
1135 NSEND   RTS
1136 *
1137 *
1138 *BACKGROUND 1 ROUTINE
1139 *
1140 BG1     LDAB    #1
1141         STAB    BG1FLG  
1142         LDX     #BG1TB
1143         BRA     FNLOAD
1144 *
1145 *THRUST
1146 *
1147 THRUST  LDX     #THTB
1148         BRA     FNLOAD  
1149 *
1150 *CANNON
1151 *
1152 CANNON  LDX     #CANTB
1153         BRA     FNLOAD 
1154 *
1155 FNTAB   EQU     *
1156 BG1TB   FCB     0,0,0,$01,0,00
1157 THTB    FCB     0,0,0,3,00,00
1158 CANTB   FCB     1,0,1,$FF,3,$E8         DEFENDER SND #$17
1159 HBMBTB  FCB     1,1,1,$40,$10,00
1160 RAIN    FCB     1,$80,1,$40,$FF
1161 *
1162 HBOMB   LDX     #HBMBTB
1163 *
1164 *LOADER
1165 *
1166 FNLOAD  LDAA    ,X
1167         STAA    DSFLG   DISTORTION FLAG
1168         LDAA    1,X
1169         STAA    LOFRQ
1170         LDAA    2,X     FREQ DECAY FLAG
1171         LDAB    3,X     INIT MAX FREQ
1172         LDX     4,X     SAMPLE COUNT
1173 *
1174 *FILTERED NOISE ROUTINE
1175 *X=SAMPLE COUNT, ACCB=INITIAL MAX FREQ
1176 *ACCA=FREQ DECAY FLAG ,DSFLG=DISTORTION FLAG
1177 *
1178 FNOISE  STAA    FDFLG
1179         STAB    FMAX
1180         STX     SAMPC
1181         CLR     FLO
1182 FNOIS0  LDX     SAMPC
1183         LDAA    SOUND
1184 FNOIS1  TAB             NEXT RANDOM NUMBER
1185         LSRB
1186         LSRB
1187         LSRB
1188         EORB    LO
1189         LSRB
1190         ROR     HI
1191         ROR     LO
1192         LDAB    FMAX    SET FREQ
1193         TST     DSFLG
1194         BEQ     FNOIS2
1195         ANDB            HI DISTORT FREQUENCY
1196         ADDB    LOFRQ   LO FREQ MIN
1197 FNOIS2  STAB    FHI
1198         LDAB    FLO
1199         CMPA    LO
1200         BHI     FNOIS4
1201 FNOIS3  DEX             SLOPE UP
1202         BEQ     FNOIS6
1203         STAA    SOUND
1204         ADDB    FLO
1205         ADCA    FHI
1206         BCS     FNOIS5
1207         CMPA    LO
1208         BLS     FNOIS3
1209         BRA     FNOIS5
1210 FNOIS4  DEX             SLOPE DOWN
1211         BEQ     FNOIS6
1212         STAA    SOUND
1213         SUBB    FLO
1214         SBCA    FHI
1215         BCS     FNOIS5
1216         CMPA    LO
1217         BHI     FNOIS4
1218 FNOIS5  LDAA    LO
1219         STAA    SOUND
1220         BRA     FNOIS1
1221 FNOIS6  LDAB    FDFLG
1222         BEQ     FNOIS1
1223         LDAA    FMAX    DECAY MAX FREQ
1224         LDAB    FLO
1225         LSRA
1226         RORB
1227         LSRA
1228         RORB
1229         LSRA
1230         RORB
1231         COMA
1232         NEGB
1233         SBCA    #-1
1234         ADDB    FLO
1235         ADCA    FMAX
1236         STAB    FLO
1237         STAA    FMAX
1238         BNE     FNOIS0
1239         CMPB    #7
1240         BNE     FNOIS0
1241         RTS
1242 *
1243 *RADIO
1244 *
1245 RADIO   LDAA    #RADSND/$100 SOUND TABLE
1246         STAA    XPTR
1247         LDX     #100    STARTING FREQ
1248         STX     TEMPX
1249 RADIO1  ADDB    TEMPX+1 ADD FREQ TO TIMER
1250         LDAA    TEMPA
1251         ADCA    TEMPX
1252         STAA    TEMPA
1253         LDX     TEMPX
1254         BCS     RADIO2  
1255         BRA     *+2     EQUALIZE TIME
1256         BRA     RADIO3
1257 RADIO2  INX             CARRY?, RAISE FREQ
1258         BEQ     RADIO4  DONE?
1259 RADIO3  STX     TEMPX
1260         ANDA    #$F     SET POINTER
1261         ADDA    #RADSND!.$FF
1262         STAA    XPTR+1
1263         LDX     XPTR
1264         LDAA    ,X
1265         STAA    SOUND   PLAY SOUND
1266         BRA     RADIO1
1267 RADIO4  RTS     
1268 *
1269 *HYPER
1270 *
1271 HYPER   CLRA
1272         STAA    SOUND   
1273         STAA    TEMPA   ZERO PHASE
1274 HYPER1  CLRA            ZERO TIME COUNTER
1275 HYPER2  CMPA    TEMPA   
1276         BNE     HYPER3
1277         COM     SOUND   PHASE EDGE?, COMPLEMENT SOUND
1278 HYPER3  LDAB    #18     DELAY
1279 HYPER4  DECB
1280         BNE     HYPER4
1281         INCA            ADVANCE TIME COUNTER
1282         BPL     HYPER2  
1283         COM     SOUND   CYCLE DONE?, CYCLE EDGE
1284         INC     TEMPA   NEXT PHASE
1285         BPL     HYPER1  DONE?
1286         RTS
1287 *
1288 *SCREAM
1289 *
1290 SCREAM  LDX     #STABLE ZERO FREQS AND TIMES
1291 SCREM1  CLR     ,X
1292         INX
1293         CPX     #SRMEND
1294         BNE     SCREM1
1295         LDAA    #$40    START FIRST ECHO
1296         STAA    STABLE+FREQ
1297 SCREM2  LDX     #STABLE INITIALIZE COUNTER
1298         LDAA    #$80    INITIALIZE AMPLITUDE
1299         STAA    TEMPA
1300         CLRB            ZERO OUTPUT BUFFER
1301 SCREM3  LDAA    TIMER,X ADD FREQ TO TIMER
1302         ADDA    FREQ,X
1303         STAA    TIMER,X
1304         BPL     SCREM4  ADD AMPLITUDE IF MINUS
1305         ADDB    TEMPA
1306 SCREM4  LSR     TEMPA   DECAY AMPLITUDE
1307         INX             NEXT ECHO
1308         INX
1309         CPX     #SRMEND LAST ECHO?
1310         BNE     SCREM3  
1311         STAB    SOUND   OUTPUT SOUND
1312         INC     TEMPB   ADVANCE TIMER
1313         BNE     SCREM2  
1314         LDX     #STABLE LOWER NON-ZERO FREQUENCIES
1315         CLRB            ALL ZERO NOT FLAG
1316 SCREM5  LDAA    FREQ,X  
1317         BEQ     SCREM7  
1318         CMPA    #$37    
1319         BNE     SCREM6
1320         LDAB    #$41    START NEXT ECHO
1321         STAB    FREQ+2,X
1322 SCREM6  DEC     FREQ,X
1323         INCB            SET FLAG
1324 SCREM7  INX 
1325         INX
1326         CPX     #SRMEND
1327         BNE     SCREM5
1328         TSTB            DONE?
1329         BNE     SCREM2
1330         RTS
1331 *
1332 *ORGAN TUNE
1333 *
1334 ORGANT  DEC     ORGFLG  MINUS ORGAN FLAG
1335         RTS             
1336 ORGNT1  BSR     ORGASM
1337         JMP     IRQ3
1338 ORGASM  CLR     ORGFLG
1339         STAA    TEMPA   TUNE NUMBER
1340         LDX     #ORGTAB 
1341 ORGNT2  LDAA    ,X      TUNE TABLE LENGTH
1342         BEQ     ORGNT5  INVALID TUNE
1343         DEC     TEMPA
1344         BEQ     ORGNT3  
1345         INCA
1346         JSR     ADDX
1347         BRA     ORGNT2
1348 ORGNT3  INX
1349         STX     XPTR    NOTE POINTER
1350         JSR     ADDX
1351         STX     XPLAY   TUNE END
1352         LDX     XPTR    
1353 ORGNT4  LDAA    ,X      TUNE LOOP 
1354         STAA    OSCIL
1355         LDAA    1,X
1356         LDX     2,X
1357         STX     DUR     
1358         BSR     ORGANL
1359         LDX     XPTR
1360         INX
1361         INX     
1362         INX
1363         INX
1364         STX     XPTR
1365         CPX     XPLAY
1366         BNE     ORGNT4  
1367 ORGNT5  RTS             
1368 *
1369 *ORGAN NOTE
1370 *4 BYTES(MODE,OSCILLATOR MASK HI+1,LO+1,NOTE#)
1371 ORGANN  RTS                                     
1372 *
1373 *ORGAN LOADER
1374 *OSCIL=OSCILLATOR MASK, ACCA=DELAY, DUR=DURATION
1375 *
1376 ORGANL  LDX     #RDELAY
1377         SUBA    #2
1378 LDLP    BLS     LD1
1379         CMPA    #3
1380         BEQ     LD2
1381         LDAB    #1      NOP
1382         STAB    ,X
1383         INX
1384         SUBA    #2
1385         BRA     LDLP
1386 LD2     LDAB    #$91    CMPA 0
1387         STAB    ,X
1388         CLR     1,X
1389         INX
1390         INX
1391 LD1     LDAB    #$7E    JMP START2
1392         STAB    ,X
1393         LDAB    #ORGAN1!>8 MSB
1394         STAB    1,X
1395         LDAB    #ORGAN1!.$FF LSB
1396         STAB    2,X
1397 *
1398 *ORGAN ROUTINE
1399 *DUR=DURATION, OSCILLATOR MASK
1400 *
1401 ORGAN   LDX     DUR
1402 ORGAN1  CLRA            
1403         FCB     $F6     LOAD B EXTND TEMPB
1404         FDB     TEMPB   
1405         INCB            
1406         STAB    TEMPB   
1407         ANDB    OSCIL   MASK OSCILLATORS
1408         LSRB
1409         ADCA    #0
1410         LSRB
1411         ADCA    #0
1412         LSRB
1413         ADCA    #0
1414         LSRB
1415         ADCA    #0
1416         LSRB
1417         ADCA    #0      
1418         LSRB
1419         ADCA    #0
1420         LSRB
1421         ADCA    #0      
1422         ABA             
1423         ASLA
1424         ASLA
1425         ASLA
1426         ASLA            
1427         ASLA
1428         STAA    SOUND   
1429         DEX             
1430         BEQ     ORGAN2  NOTE OVER?
1431         JMP     RDELAY  
1432 ORGAN2  RTS
1433 *
1434 *PARAMETER TRANSFER
1435 *
1436 TRANS   PSHA
1437 TRANS1  LDAA    0,X
1438         STX     XPLAY
1439         LDX     XPTR
1440         STAA    0,X
1441         INX
1442         STX     XPTR
1443         LDX     XPLAY
1444         INX
1445         DECB
1446         BNE     TRANS1
1447         PULA
1448         RTS
1449 *
1450 *BACKGROUND END ROUTINE
1451 *
1452 BGEND   CLRA 
1453         STAA    BG1FLG  
1454         STAA    BG2FLG  
1455         RTS
1456 *
1457 *BACKGROUND SOUND #2 INCREMENT
1458 *
1459 BG2INC  CLR     BG1FLG  KILL BG1
1460         LDAA    BG2FLG  ACTIVATE BG2
1461         ANDA    #$7F    REMOVE OVERRIDE
1462         CMPA    #BG2MAX
1463         BNE     BG2I0
1464         CLRA
1465 BG2I0   INCA
1466         STAA    BG2FLG
1467         RTS
1468 *
1469 *BACKGROUND 2 ROUTINE
1470 *
1471 BG2     LDAA    #(TRBV-SVTAB)/7 GET SOUND#
1472         JSR     GWLD
1473         LDAA    BG2FLG
1474         ASLA
1475         ASLA
1476         COMA
1477         JSR     GEND60
1478 BG2LP   INC     GDCNT
1479         JSR     GEND61
1480         BRA     BG2LP
1481 *
1482 *
1483 *
1484 *
1485 *SPINNER #1 SOUND
1486 *
1487 SP1     LDAA    #(CABSHK-VVECT)/9
1488         JSR     VARILD
1489         LDAB    SP1FLG
1490         CMPB    #SP1MAX-1
1491         BNE     SP1A
1492         CLRB
1493 SP1A    INCB
1494         STAB    SP1FLG
1495         LDAA    #SP1MAX
1496         SBA
1497         CLRB
1498 SP11    CMPA    #20
1499         BLS     SP12
1500         ADDB    #14
1501         DECA
1502         BRA     SP11
1503 SP12    ADDB    #5
1504         DECA
1505         BNE     SP12
1506         STAB    LOPER
1507 SP1LP   JSR     VARI    DO IT
1508         BRA     SP1LP
1509 *
1510 *LASER BALL BONUS #2
1511 *
1512 BON2    LDAA    B2FLG
1513         BNE     BON21
1514         INC     B2FLG
1515         LDAA    #(BONV-SVTAB)/7
1516         BSR     GWLD
1517         BRA     GWAVE
1518 BON21   JMP     GEND50
1519 *
1520 *GWAVE LOADER
1521 *
1522 GWLD    TAB             MULKT BY 7
1523         ASLB
1524         ABA
1525         ABA
1526         ABA
1527         LDX     #SVTAB  SOUND VECTOR TABLE
1528         JSR     ADDX
1529         LDAA    ,X
1530         TAB
1531         ANDA    #$F
1532         STAA    GCCNT   GET CYCLE COUNT
1533         LSRB
1534         LSRB
1535         LSRB
1536         LSRB
1537         STAB    GECHO   GET #ECHOS
1538         LDAA    1,X
1539         TAB
1540         LSRB
1541         LSRB
1542         LSRB
1543         LSRB
1544         STAB    GECDEC
1545         ANDA    #$F     WAVE #
1546         STAA    TEMPA   SAVE
1547         STX     TEMPX   SAVE INDEX
1548         LDX     #GWVTAB CALC WAVEFORM ADDR
1549 GWLD2   DEC     TEMPA   WAVE FORM #
1550         BMI     GWLD3   FINIS
1551         LDAA    ,X
1552         INCA
1553         JSR     ADDX
1554         BRA     GWLD2
1555 GWLD3   STX     GWFRM
1556         JSR     WVTRAN  XSFER WAVE TO RAM
1557         LDX     TEMPX   RESTORE INDEX
1558         LDAA    2,X     GET PREDECAY
1559         STAA    PRDECA
1560         JSR     WVDECA  DECAY IT
1561         LDX     TEMPX
1562         LDAA    3,X     GET FREQ INC
1563         STAA    GDFINC
1564         LDAA    4,X     GET DELTA FREQ COUNT
1565         STAA    GDCNT
1566         LDAA    5,X     GET PATTERN COUNT
1567         TAB             SAVE
1568         LDAA    6,X     PATTERN OFFSET
1569         LDX     #GFRTAB
1570         JSR     ADDX
1571         TBA             GET PATTERN LENGTH
1572         STX     GWFRQ   FREQ TABLE ADDR
1573         CLR     FOFSET
1574         JSR     ADDX
1575         STX     FRQEND
1576         RTS
1577 *
1578 *GWAVE ROUTINE
1579 *ACCA= FREQ PATTERN LENGTH, X= FREQ PAT ADDR
1580 *
1581 GWAVE   LDAA    GECHO
1582         STAA    GECNT
1583 GWT4    LDX     GWFRQ
1584         STX     XPLAY
1585 GPLAY   LDX     XPLAY   GET NEW PERIOD
1586         LDAA    ,X
1587         ADDA    FOFSET
1588         STAA    GPER
1589         CPX     FRQEND
1590         BEQ     GEND    FINISH ON ZERO
1591         LDAB    GCCNT   CYCLE COUNT
1592         INX
1593         STX     XPLAY
1594 GOUT    LDX     #GWTAB  SETUP WAVEFORM POINTER
1595 GOUTLP  LDAA    GPER
1596 GPRLP   DECA            WAIT FOR PERIOD
1597         BNE     GPRLP
1598         LDAA    ,X      OUTPUT SOUND
1599         STAA    SOUND
1600 GPR1    INX
1601         CPX     WVEND   END OF WAVE?
1602         BNE     GOUTLP
1603         DECB
1604         BEQ     GPLAY
1605         INX
1606         DEX
1607         INX
1608         DEX
1609         INX
1610         DEX
1611         INX
1612         DEX
1613         NOP
1614         NOP
1615         BRA     GOUT    SYNC 36
1616 GEND    LDAA    GECDEC
1617         BSR     WVDECA
1618 GEND40  DEC     GECNT   ECHO ON?
1619         BNE     GWT4    YES
1620         LDAA    B2FLG   STOP BONUS
1621         BNE     GEND1
1622 GEND50  LDAA    GDFINC  CONTINUE FOR FREQ MOD SOUNDS
1623         BEQ     GEND1   NO
1624         DEC     GDCNT   DELTA FREQ OVER?
1625         BEQ     GEND1   YES...
1626         ADDA    FOFSET  UPDATE FREQ OFFSET
1627 GEND60  STAA    FOFSET
1628 GEND61  LDX     GWFRQ   GET INDEX
1629         CLRB            START FOUND FLAG INIT CLEAR
1630 GW0     LDAA    FOFSET  INC OR DEC?
1631         TST     GDFINC
1632         BMI     GW1     DEC
1633         ADDA    ,X      INC
1634         BCS     GW2     CARRY=OVERFLOW
1635         BRA     GW2A
1636 GW1     ADDA    ,X      DEC
1637         BEQ     GW2     OVERFLOW ON EQ
1638         BCS     GW2A    OVERFLOW IF CARRY CLEAR
1639 GW2     TSTB            FOUND START YET?
1640         BEQ     GW2B    NO
1641         BRA     GW3     YES, THIS IS THE END
1642 GW2A    TSTB
1643         BNE     GW2B    ALREADY FOUND START
1644         STX     GWFRQ   FOUND START
1645         INCB
1646 GW2B    INX
1647         CPX     FRQEND
1648         BNE     GW0     NOT OVER YET
1649         TSTB            FOUND START?
1650         BNE     GW3     YES
1651         RTS             ALL OVER
1652 GW3     STX     FRQEND
1653         LDAA    GECDEC  RE:XSFER WAVE?
1654         BEQ     GEND0   NO
1655         BSR     WVTRAN  XSFER WAVE
1656         LDAA    PRDECA
1657         BSR     WVDECA
1658 GEND0   JMP     GWAVE
1659 GEND1   RTS             TERMINATE
1660 *
1661 *WAVE TRANSFER ROUTINE
1662 *
1663 WVTRAN  LDX     #GWTAB
1664         STX     XPTR
1665         LDX     GWFRM
1666         LDAB    ,X      GET WAVE LENGTH
1667         INX
1668         JSR     TRANS
1669         LDX     XPTR
1670         STX     WVEND   GET END ADDR
1671         RTS
1672 *
1673 *WAVE DECAY ROUTINE/ DECAY AMOUNT IN ACCA(1/16 PER DECAY)
1674 *
1675 WVDECA  TSTA
1676         BEQ     WVDCX   NO DECAY
1677         LDX     GWFRM   ROM WAVE INDEX
1678         STX     XPLAY
1679         LDX     #GWTAB
1680         STAA    TEMPB   DECAY FACTOR
1681 WVDLP   STX     XPTR
1682         LDX     XPLAY
1683         LDAB    TEMPB
1684         STAB    TEMPA   DECAY FACTOR TEMP
1685         LDAB    1,X     OFFSET FOR WAVE LENGTH
1686         LSRB
1687         LSRB
1688         LSRB
1689         LSRB            CALC 1/16TH
1690         INX
1691         STX     XPLAY
1692         LDX     XPTR
1693         LDAA    ,X
1694 WVDLP1  SBA             DECAY
1695         DEC     TEMPA
1696         BNE     WVDLP1
1697         STAA    ,X
1698         INX
1699         CPX     WVEND   END OF WAVE?
1700         BNE     WVDLP   NO
1701 WVDCX   RTS
1702 *
1703 * INTERRUPT PROCESSING
1704 *
1705 IRQ     LDS     #ENDRAM RE-INITIALIZE STACK
1706         LDAA    SOUND+2 GET INPUT TRIGGER
1707         LDX     #DECAYZ RANDY'S BRAIN DAMAGE
1708         STX     XDECAY
1709         LDX     #FREQ1
1710         STX     XPTR
1711         LDAB    #$AF
1712         STAB    AMP0
1713         CLI             NOW ALLOW IRQS
1714         COMA            INVERT INPUT
1715         ANDA    #$3F    MASK GARB
1716         LDAB    ORGFLG
1717         BEQ     IRQ00
1718         JSR     ORGNT1  ORGAN TUNE
1719 IRQ00   CLRB
1720         CMPA    #SP1SND
1721         BEQ     IRQ00A
1722         STAB    SP1FLG
1723 IRQ00A  CMPA    #B2SND  
1724         BEQ     IRQ000
1725         STAB    B2FLG
1726 IRQ000  TSTA
1727         BEQ     IRQ3    INVALID INPUT
1728         DECA            REMOVE OFFSET
1729         CMPA    #$1F
1730         BLT     IRQ001
1731         CMPA    #$3D
1732         BGT     IRQ00C
1733         CMPA    #$2A
1734         BHI     IRQ00B
1735         SUBA    #$10
1736         BRA     IRQ002
1737 IRQ00C  SUBA    #$39
1738         BRA     IRQ21
1739 IRQ00B  SUBA    #$1C
1740         BRA     IRQ2
1741 IRQ001  CMPA    #$0C
1742         BHI     IRQ10
1743 IRQ002  JSR     GWLD    GWAVE SOUNDS
1744         JSR     GWAVE
1745         BRA     IRQ3
1746 IRQ10   CMPA    #$1B    SPECIAL SOUND?
1747         BHI     IRQ20   VARI SOUND
1748         SUBA    #$D     SUB OFFSET
1749 IRQ2    ASLA            DOUBLE FOR ADDRESSING
1750         LDX     #JMPTBL INDEX TO JUMP TABLE
1751         BSR     ADDX    GET CORRECT INDEX
1752         LDX     0,X     GET ADDRESS TO INDEX
1753         JSR     0,X     PERFORM IT
1754         BRA     IRQ3
1755 IRQ20   SUBA    #$1C
1756 IRQ21   JSR     VARILD
1757         JSR     VARI
1758 IRQ3    LDAA    BG1FLG  BGROUND ACTIVE?
1759         ORAA    BG2FLG  
1760         BEQ     *       NOPE
1761         CLRA
1762         STAA    B2FLG   KILL BONUSES
1763         LDAA    BG1FLG
1764         BEQ     IRQXX
1765         JMP     BG1
1766 IRQXX   JMP     BG2
1767 *
1768 * ADD A TO INDEX REGISTER
1769 *
1770 ADDX    STX     XPLAY
1771         ADDA    XPLAY+1
1772         STAA    XPLAY+1
1773         BCC     ADDX1
1774         INC     XPLAY   
1775 ADDX1   LDX     XPLAY
1776         RTS
1777 *
1778 * DIAGNOSTIC PROCESSING HERE
1779 *
1780 NMI     SEI
1781         LDS     #ENDRAM RESET THE STACK
1782         LDX     #$FFFF
1783         CLRB
1784 NMI1    ADCB    0,X
1785         DEX
1786         CPX     #$F000
1787         BNE     NMI1
1788         CMPB    0,X
1789         BEQ     NMI2
1790         WAI
1791 NMI2    JSR     HBOMB
1792         LDAA    #2
1793         JSR     ORGASM
1794         LDAA    #1
1795         JSR     ORGASM
1796         BRA     NMI     KEEP LOOPING
1797 *
1798 *SPECIAL ROUTINE JUMP TABLE
1799 *
1800 JMPTBL  FDB     SP1,BG1,BG2INC,LITE
1801         FDB     BON2,BGEND,TURBO,APPEAR
1802         FDB     THRUST,CANNON,RADIO,HYPER
1803         FDB     SCREAM,ORGANT,ORGANN
1804 *
1805 JMPTB1  FDB     SND2,SND5,THNDR,HSTD,ATARI
1806         FDB     SIREN,ORRRR,PERK$$,SQRT,START
1807         FDB     PLANE,SND16,SND17,LAUNCH,CDR
1808         FDB     KNOCK,ZIREN,WHIST,HBOMB
1809 *
1810 *VARI VECTORS
1811 *
1812 VVECT   EQU     *
1813 SAW     FCB     $40,$01,$00,$10,$E1,$00,$80,$FF,$FF
1814 FOSHIT  FCB     $28,$01,$00,$08,$81,$02,$00,$FF,$FF
1815 QUASAR  FCB     $28,$81,$00,$FC,$01,$02,$00,$FC,$FF
1816 CABSHK  FCB     $FF,$01,$00,$18,$41,$04,$80,$00,$FF
1817 CSCALE  FCB     $00,$FF,$08,$FF,$68,$04,$80,$00,$FF
1818 MOSQTO  FCB     $28,$81,$00,$FC,$01,$02,$00,$FC,$FF
1819 VARBG1  FCB     $60,$01,$57,$08,$E1,$02,$00,$FE,$80
1820 *
1821 *RADIO SOUND WAVEFORM
1822 *
1823 RADSND  FCB     $8C,$5B,$B6,$40,$BF,$49,$A4,$73
1824         FCB     $73,$A4,$49,$BF,$40,$B6,$5B,$8C
1825 *
1826 * NOTE DEFINITIONS AND ALL THAT JAZZ
1827 *
1828 AF1     EQU     $F847
1829 A1      EQU     $F83F
1830 BF1     EQU     $F837
1831 B1      EQU     $F830
1832 C1      EQU     $F829
1833 CS1     EQU     $F823
1834 D1      EQU     $F81D
1835 EF1     EQU     $F817
1836 E1      EQU     $F812
1837 F1      EQU     $F80D
1838 FS1     EQU     $F808
1839 G2      EQU     $F804
1840 AF2     EQU     $7C47
1841 A2      EQU     $7C3F
1842 BF2     EQU     $7C37
1843 B2      EQU     $7C30
1844 C2      EQU     $7C29
1845 CS2     EQU     $7C23
1846 D2      EQU     $7C1D
1847 EF2     EQU     $7C17
1848 E2      EQU     $7C12
1849 F2      EQU     $7C0D
1850 FS2     EQU     $7C08
1851 G3      EQU     $7C04
1852 AF3     EQU     $3E47
1853 A3      EQU     $3E3F
1854 BF3     EQU     $3E37
1855 B3      EQU     $3E30
1856 C3      EQU     $3E29
1857 CS3     EQU     $3E23
1858 D3      EQU     $3E1D
1859 EF3     EQU     $3E17
1860 E3      EQU     $3E12
1861 F3      EQU     $3E0D
1862 FS3     EQU     $3E08
1863 G4      EQU     $3E04
1864 AF4     EQU     $1F47
1865 A4      EQU     $1F3F
1866 BF4     EQU     $1F37
1867 B4      EQU     $1F30
1868 C4      EQU     $1F29
1869 CS4     EQU     $1F23
1870 D4      EQU     $1F1D
1871 EF4     EQU     $1F17
1872 E4      EQU     $1F12
1873 F4      EQU     $1F0D
1874 FS4     EQU     $1F08
1875 RS      EQU     $0004
1876 TR      EQU     TG
1877 *
1878 *ORGAN TUNE TABLE
1879 *OSCILLATOR MASK(1),DELAY(1),DURATION(2)
1880 *
1881 ORGTAB  EQU     *
1882         FCB     NINTH-FIFTH-1
1883 FIFTH   EQU     *
1884         FDB     G2,TG/FIF/4
1885         FDB     RS,TR/FIF/4
1886         FDB     G2,TG/FIF/4
1887         FDB     RS,TR/FIF/4
1888         FDB     G2,TG/FIF/4
1889         FDB     RS,TR/FIF/4
1890         FDB     EF1,TEF/FIF/2*7
1891         FCB     TUNEND-NINTH
1892 NINTH   EQU     *
1893         FDB     D4,TD/NIN/4
1894         FDB     RS,TR/NIN/4
1895         FDB     D3,TD/NIN/4
1896         FDB     RS,TR/NIN/4*5
1897         FDB     A3,TA/NIN/4
1898         FDB     RS,TR/NIN/4
1899         FDB     A2,TA/NIN/4
1900         FDB     RS,TR/NIN/4*5
1901         FDB     D2,TD/NIN/4
1902         FDB     RS,TR/NIN/4
1903         FDB     D1,TD/NIN/4
1904         FDB     RS,TR/NIN/4
1905         FDB     A2,TA/NIN/4
1906         FDB     RS,TR/NIN/4
1907         FDB     A1,TA/NIN/4
1908         FDB     RS,TR/NIN/4*7
1909         FDB     A2,TA/NIN/4
1910         FDB     D2,TD/NIN/4
1911         FDB     E2,TE/NIN/4
1912         FDB     F2,TF/NIN/4
1913         FDB     E2,TE/NIN/4
1914         FDB     F2,TF/NIN/4
1915         FDB     G3,TG/NIN/4
1916         FDB     F2,TF/NIN/4
1917         FDB     E2,TE/NIN/4
1918         FDB     D2,TD/NIN/4
1919         FDB     BF3,TBF/NIN/4
1920         FDB     A3,TA/NIN/4
1921         FDB     G3,TG/NIN/4
1922         FDB     F2,TF/NIN/4
1923         FDB     E2,TE/NIN/4
1924         FDB     D2,TD/NIN/4
1925         FDB     CS2,TCS/NIN/4
1926         FDB     D2,TD/NIN/4
1927         FDB     E2,TE/NIN/4
1928         FDB     D3,TD/NIN/4
1929         FDB     RS,TR/NIN/4
1930         FDB     D2,TD/NIN/4
1931         FDB     RS,TR/NIN/4
1932         FDB     A3,TA/NIN/4
1933         FDB     RS,TR/NIN/4
1934         FDB     A2,TA/NIN/4
1935         FDB     RS,TR/NIN/4*5
1936         FDB     D1,TD/NIN/2*5
1937 TUNEND  FCB     0       LAST TUNE
1938 *
1939 *ORGAN NOTE TABLE
1940 *SCALE          AF      A       BF      B       C       CS
1941 NOTTAB  FCB     $47,$3F,$37,$30,$29,$23
1942 *               D       EF      E       F       FS      G
1943         FCB     $1D,$17,$12,$0D,$08,$04 
1944 *
1945 *WAVE TABLE
1946 *1ST BYTE= WAVELENGTH
1947 *
1948 GWVTAB  EQU     *
1949 GS2     FCB     8,127,217,255,217,127,36,0,36
1950 GSSQ2   FCB     8,0,64,128,0,255,0,128,64
1951 GS1     FCB     16,127,176,217,245,255,245,217,176
1952         FCB     127,78,36,9,0,9,36,78
1953 GS12    FCB     16,127,197,236,231,191,141,109,106
1954         FCB     127,148,146,113,64,23,18,57
1955 GSQ22   FCB     16,$FF,$FF,$FF,$FF,0,0,0,0
1956         FCB     $FF,$FF,$FF,$FF,0,0,0,0
1957 GS72    FCB     72,138,149,160,171,181,191,200,209
1958         FCB     218,225,232,238,243,247,251,253,254,255
1959         FCB     254,253,251,247,243,238,232,225,218
1960         FCB     209,200,191,181,171,160,149,138,127
1961         FCB     117,106,95,84,74,64,55,46,37,30,23,17,12
1962         FCB     8,4,2,1,0
1963         FCB     1,2,4,8,12,17,23,30,37,46,55,64,74,84
1964         FCB     95,106,117,127
1965 GS1.7   FCB     16,89,123,152,172,179,172,152,123
1966         FCB     89,55,25,6,0,6,25,55
1967 *****************************************************
1968 GSQ2    FCB     8,$FF,$FF,$FF,$FF,$00,$00,$00,$00
1969 GS1234  FCB     16,118,255,184,208,157,230,106,130
1970         FCB     118,234,129,134,78,156,50,99
1971 MW1     FCB     16,0,$F4,0,$E8,0,$DC,0,$E2
1972         FCB     0,$DC,0,$E8,0,$F4,0,0
1973 HBPAT2  FCB     72,69,75,80,86,91,96,100,105
1974         FCB     109,113,116,119,122,124,126,127,127,128
1975         FCB     127,127,126,124,122,119,116,113,109
1976         FCB     105,100,96,91,86,80,75,69,64
1977         FCB     59,53,48,42,37,32,28,23,19,15,12,9,6
1978         FCB     4,2,1,1,0
1979         FCB     1,1,2,4,6,9,12,15,19,23,28,32,37,42
1980         FCB     48,53,59,64
1981 *
1982 *GWAVE SOUND VECTOR TABLE
1983 *VECTOR FORMAT
1984 *BYTE 0: GECHO,GCCNT
1985 *BYTE 1: GECDEC,WAVE#
1986 *BYTE 2: PREDECAY FACTOR
1987 *BYTE 3: GDFINC
1988 *BYTE 4: VARIABLE FREQ COUNT
1989 *BYTE 5: FREQ PATTERN LENGTH
1990 *BYTE 6: FREQ PATTERN OFFSET
1991 *
1992 SVTAB   EQU     *
1993 HBDV    FCB     $81,$24,0,0,0,22,HBDSND-GFRTAB 1
1994 STDV    FCB     $12,$05,$1A,$FF,0,39,STDSND-GFRTAB 2
1995 DP1V    FCB     $11,$05,$11,1,15,1,SWPAT-GFRTAB 3
1996 XBV     FCB     $11,$31,0,1,0,13,SPNSND-GFRTAB 4
1997 BBSV    FCB     $F4,$12,$0,0,0,20,BBSND-GFRTAB 5
1998 HBEV    FCB     $41,$45,0,0,0,15,HBESND-GFRTAB 6
1999 PROTV   FCB     $21,$35,$11,$FF,0,13,SPNSND-GFRTAB 7
2000 SPNRV   FCB     $15,$00,0,$FD,0,1,SPNR-GFRTAB 8
2001 CLDWNV  FCB     $31,$11,0,1,0,3,COOLDN-GFRTAB 9
2002 SV3     FCB     $01,$15,1,1,1,1,BBSND-GFRTAB 10
2003 ED10    FCB     $F6,$53,3,0,2,6,ED10FP-GFRTAB 11
2004 ED12    FCB     $6A,$10,2,0,2,6,ED13FP-GFRTAB 12
2005 ED17    FCB     $1F,$12,0,$FF,$10,4,SPNR-GFRTAB 13
2006 BONV    FCB     $31,$11,0,$FF,0,13,BONSND-GFRTAB
2007 TRBV    FCB     $12,$06,$0,$FF,1,9,TRBPAT-GFRTAB
2008 ****************************************************
2009 HUNV    FCB     $14,$17,$00,$00,$00,14,HBTSND-GFRTAB
2010 SPD     FCB     $F4,$11,$00,$00,$00,14,HBTSND-GFRTAB
2011 SPNV    FCB     $21,$30,$00,$01,$00,13,SPNSND-GFRTAB
2012 STRT    FCB     $13,$10,$00,$FF,$00,09,YUKSND-GFRTAB
2013 SP1V    FCB     $F4,$18,$00,$00,$00,18,SP2SND-GFRTAB
2014 SSPV    FCB     $82,$22,$00,$00,$00,24,SSPSND-GFRTAB
2015 BMPV    FCB     $F2,$19,$00,$00,$00,22,BWSSND-GFRTAB
2016 WIRDV   FCB     $21,$30,$00,$FF,$00,27,$0D
2017 GDYUKV  FCB     $F1,$19,$00,$00,$00,14,YUKSND-GFRTAB
2018 BK8     FCB     $31,$19,$00,$01,$00,03,COOLDN-GFRTAB
2019 SF10    FCB     $41,$02,$D0,$00,$00,39,STDSND-GFRTAB
2020 BIL30   FCB     $03,$15,$11,$FF,$00,13,SPNSND-GFRTAB
2021 *GWAVE FREQ PATTERN TABLE
2022 *
2023 GFRTAB  EQU     *
2024 *BONUS  SOUND
2025 BONSND  FCB     $A0,$98,$90,$88,$80,$78,$70,$68
2026         FCB     $60,$58,$50,$44,$40
2027 *HUNDRED POINT SOUND
2028 HBTSND  FCB     1,1,2,2,4,4,8,8,$10,$10,$30,$60,$C0,$E0
2029 *SPINNER SOUND
2030 SPNSND  FCB     1,1,2,2,3,4,5,6,7,8,9,$A,$C
2031 *TURBINE START UP
2032 TRBPAT  FCB     $80,$7C,$78,$74,$70,$74,$78,$7C,$80
2033 *HEARTBEAT DISTORTO
2034 HBDSND  FCB     1,1,2,2,4,4,8,8,$10,$20,$28
2035         FCB     $30,$38,$40,$48,$50,$60,$70,$80,$A0,$B0,$C0
2036 *SWEEP PATTERN
2037 SWPAT   EQU     *
2038 *BIGBEN SOUNDS
2039 BBSND   FCB     8,64,8,64,8,64,8,64,8,64
2040         FCB     8,64,8,64,8,64,8,64,8,64
2041 *HEARTBEAT ECHO
2042 HBESND  FCB     1,2,4,8,9,$A,$B,$C,$E,$F,$10
2043         FCB     $12,$14,$16
2044 *SPINNER SOUND "DRIP"
2045 SPNR    FCB     $40
2046 *COOL DOWNER
2047 COOLDN  FCB     $10,8,1
2048 *START DISTORTO SOUND
2049 STDSND  FCB     1,1,1,1,2,2,3,3,4,4,5,6,8,$A,$C,$10
2050         FCB     $14,$18,$20,$30,$40,$50,$40,$30
2051         FCB     $20,$10,$C,$A,8,7,6,5,4,3,2,2,1,1,1
2052 *ED'S SOUND 10
2053 ED10FP  FCB     7,8,9,$A,$C,8
2054 *ED'S SOUND 13
2055 ED13FP  FCB     $17,$18,$19,$1A,$1B,$1C
2056         FCB     0,0,0,0 FILLER
2057 ****************************************************
2058 YUKSND  FCB     $8,$80,$10,$78,$18,$70,$20,$60,$28,$58,$30
2059         FCB     $50,$40,$48,$00
2060 SP2SND  FCB     $01,$08,$10,$01,$08,$10,$01,$08,$10
2061         FCB     $01,$08,$10,$01,$08,$10,$01,$08,$10,$00
2062 SSPSND  FCB     $10,$20,$40,$10,$20,$40,$10,$20,$40,$10,$20,$40
2063         FCB     $10,$20,$40,$10,$20,$40,$10,$20,$40,$10,$20,$40,$00
2064 BWSSND  FCB     $01,$40,$02,$42,$3,$43,$4,$44,$5,$45,$6,$46,$7,$47
2065         FCB     $8,$48,$9,$49,$A,$4A,$B,$4B,$00
2066 *
2067 * VECTORS HERE
2068 *
2069         ORG     VECTOR
2070 IRQV    FDB     IRQ
2071 SWIV    FDB     SETUP
2072 NMIV    FDB     NMI
2073 RESETV  FDB     SETUP
2074         END     CKSUM