home *** CD-ROM | disk | FTP | other *** search
- 'This QuickBASIC 4.5 program contains subroutines that control Tandy's
- 'sn76496n complex sound generator. Refer to COMPLEX.DOC for more information.
- 'By Rich Geldreich December 27, 1991
- 'Of course, if you don't have a Tandy 1000 this program won't do anything!
- DEFINT A-Z
-
- DECLARE SUB Volume (Channel, Amplitude)
- DECLARE SUB NoiseSet (Shift, FB)
- DECLARE SUB SoundOff ()
- DECLARE SUB SoundOn ()
- DECLARE SUB Tone (Channel, Count)
- DECLARE FUNCTION GetFrequency (Hertz)
-
- 'Here are some examples...
- SoundOn
-
- Volume 1, 0
- Volume 2, 0
- Volume 3, 0
-
- Tone 1, 1000
- Tone 2, 2000
- Tone 3, 3000
- FOR Times = 1 TO 10
- FOR A = 1 TO 3
- FOR B = 0 TO 1023
- Tone A, B
- NEXT
- Tone A, RND * 1000
- NEXT
- NEXT
- FOR A = 0 TO 15
- FOR B = 1 TO 3
- Volume B, A
- NEXT
- FOR C = 1 TO 3000: NEXT
- NEXT
-
- NoiseSet 3, 1
- Volume 3, 0
- Volume 4, 0
- FOR Times = 1 TO 10
- FOR A = 0 TO 130
- Tone 3, A
- FOR B = 1 TO 150: NEXT
- NEXT
- NEXT
- FOR A = 0 TO 15
- FOR B = 3 TO 4
- Volume B, A
- NEXT
- FOR C = 1 TO 3000: NEXT
- NEXT
- Volume 1, 0
- Volume 2, 2
- Volume 3, 2
- Volume 4, 0
- FOR A = 1023 TO 0 STEP -1
- Tone 1, A
- Tone 2, RND * 1000
- Tone 3, RND * 1000
- FOR C = 1 TO 500: NEXT
- NEXT
-
- SLEEP 1
-
- FOR A = 0 TO 15
- FOR B = 1 TO 4
- Volume B, A
- NEXT
- FOR C = 1 TO 3000: NEXT
- NEXT
-
- Tone 3, 33
- NoiseSet 3, 1
- FOR Times = 1 TO 7
- FOR A = 12 TO 0 STEP -1
- Volume 4, A
- FOR B = 1 TO 8000: NEXT
- NEXT
- FOR A = 1 TO 4000: NEXT
- FOR A = 0 TO 12
- Volume 4, A
- FOR B = 1 TO 8400: NEXT
- NEXT
- NEXT
-
- D = 1
- FOR A = 0 TO 2000
- IF A < 16 THEN Volume 4, 15 - A: FOR B = 1 TO 800: NEXT
- IF A > 1984 THEN Volume 4, A - 1985: FOR B = 1 TO 1000: NEXT
- Tone 3, 512 + 511 * SIN(F!): F! = F! + D / 57.29577
- IF F! > 360 / 57.29577 THEN D = D + 1: F! = 0
- FOR B = 1 TO 200: NEXT
- NEXT
- Volume 1, 0
- Volume 2, 15
- Tone 1, 123
- D! = 1: R = 0
- DO
- FOR A = 1 TO R: NEXT
- Volume 1, 15
- FOR A = 1 TO R: NEXT
- Volume 1, 0
- R = (R + 1) MOD D!: D! = D! + .01
- LOOP UNTIL D! > 100
- FOR A = 0 TO 15
- Volume 1, A
- FOR B = 1 TO 3000: NEXT
- NEXT
- SoundOff
-
- FUNCTION GetFrequency (Hertz)
- GetFrequency = 3579545 \ (32 * CLNG(Hertz))
- END FUNCTION
-
- 'This subprogram controls the noise register.
- 'Ranges: Shift 0-3 FB 0-1
- SUB NoiseSet (Shift, FB)
- OUT &HC0, &HE0 + Shift + FB * 4
- END SUB
-
- 'This subprogram turns all sound off.
- SUB SoundOff
- FOR A = 1 TO 4
- Volume A, 15
- NEXT
- END SUB
-
- 'This subprogram turns on Tandy sound.
- SUB SoundOn
- OUT &H61, &H6C
- END SUB
-
- 'This subprogram programs the frequency of a channel.
- 'Ranges Channel 1-3 Count 0-1023 1023 being lowest frequency
- SUB Tone (Channel, Count)
-
- Count = Count AND 1023
- Low = (Count AND &HF): High = Count \ 16
-
- SELECT CASE Channel
- CASE 1
- OUT &HC0, &H80 + Low: OUT &HC0, High
- CASE 2
- OUT &HC0, &HA0 + Low: OUT &HC0, High
- CASE 3
- OUT &HC0, &HC0 + Low: OUT &HC0, High
- END SELECT
- END SUB
-
- 'This subprogram controls the amplitude(volume) of a channel.
- 'Ranges: Channel 1-4 Amplitude 0-15 (0 being loudest)
- SUB Volume (Channel, Amplitude)
- Amplitude = Amplitude AND 15
- SELECT CASE Channel
- CASE 1
- OUT &HC0, &H90 + Amplitude
- CASE 2
- OUT &HC0, &HB0 + Amplitude
- CASE 3
- OUT &HC0, &HD0 + Amplitude
- CASE 4
- OUT &HC0, &HF0 + Amplitude
- END SELECT
- END SUB
-
-