sound: try to unify uses of redbook_sound
This commit is contained in:
parent
aedf5c130f
commit
f802b938f6
|
@ -1,3 +1,6 @@
|
||||||
|
; note this is Paul Lutus' red book code
|
||||||
|
; see music/redbook_sound for more details
|
||||||
|
|
||||||
; based on code from here
|
; based on code from here
|
||||||
; http://eightbitsoundandfury.ld8.org/programming.html
|
; http://eightbitsoundandfury.ld8.org/programming.html
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
|
||||||
|
; this code is obsolete
|
||||||
|
; grab music/redbook_sound instead
|
||||||
|
|
||||||
; based on code from here
|
; based on code from here
|
||||||
; http://eightbitsoundandfury.ld8.org/programming.html
|
; http://eightbitsoundandfury.ld8.org/programming.html
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
FIXME:
|
||||||
|
+ use zx02 compression
|
||||||
|
+ use updated/proper audio in the speaker_beeps.s (from music/redbook_sound)
|
||||||
|
|
||||||
|
|
||||||
KNOWN BUGS
|
KNOWN BUGS
|
||||||
+ The bounding box for the button in the fireplace should probably be at least
|
+ The bounding box for the button in the fireplace should probably be at least
|
||||||
two pixels higher, it's hard to hit
|
two pixels higher, it's hard to hit
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
; FIXME: replace with updated version from music/redbook_sound
|
||||||
|
; the notes here aren't exactly right
|
||||||
|
|
||||||
; based on code from here
|
; based on code from here
|
||||||
; http://eightbitsoundandfury.ld8.org/programming.html
|
; http://eightbitsoundandfury.ld8.org/programming.html
|
||||||
|
|
||||||
|
|
|
@ -15,3 +15,4 @@ sprite movie playing
|
||||||
|
|
||||||
mockingboard on IIc
|
mockingboard on IIc
|
||||||
|
|
||||||
|
update speaker_tone
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
; OBSOLETE
|
||||||
|
|
||||||
|
; use music/redbook_sound
|
||||||
|
|
||||||
|
|
||||||
|
; based on code from here
|
||||||
|
; http://eightbitsoundandfury.ld8.org/programming.html
|
||||||
|
|
||||||
|
; A,X,Y trashed
|
||||||
|
; duration also trashed
|
||||||
|
|
||||||
|
NOTE_C3 = 255
|
||||||
|
NOTE_CSHARP3 = 241
|
||||||
|
NOTE_D3 = 227
|
||||||
|
NOTE_DSHARP3 = 214
|
||||||
|
NOTE_E3 = 202
|
||||||
|
NOTE_F3 = 191
|
||||||
|
NOTE_FSHARP3 = 180
|
||||||
|
NOTE_G3 = 170
|
||||||
|
NOTE_GSHARP3 = 161
|
||||||
|
NOTE_A3 = 152
|
||||||
|
NOTE_ASHARP3 = 143
|
||||||
|
NOTE_B3 = 135
|
||||||
|
|
||||||
|
NOTE_C4 = 128
|
||||||
|
NOTE_CSHARP4 = 121
|
||||||
|
NOTE_D4 = 114
|
||||||
|
NOTE_DSHARP4 = 108
|
||||||
|
NOTE_E4 = 102
|
||||||
|
NOTE_F4 = 96
|
||||||
|
NOTE_FSHARP4 = 91
|
||||||
|
NOTE_G4 = 85
|
||||||
|
NOTE_GSHARP4 = 81
|
||||||
|
NOTE_A4 = 76
|
||||||
|
NOTE_ASHARP4 = 72
|
||||||
|
NOTE_B4 = 68
|
||||||
|
|
||||||
|
NOTE_C5 = 64
|
||||||
|
NOTE_CSHARP5 = 60
|
||||||
|
NOTE_D5 = 57
|
||||||
|
NOTE_DSHARP5 = 54
|
||||||
|
NOTE_E5 = 51
|
||||||
|
NOTE_F5 = 48
|
||||||
|
NOTE_FSHARP5 = 45
|
||||||
|
NOTE_G5 = 43
|
||||||
|
NOTE_GSHARP5 = 40
|
||||||
|
NOTE_A5 = 38
|
||||||
|
NOTE_ASHARP5 = 36
|
||||||
|
NOTE_B5 = 34
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
speaker_tone:
|
||||||
|
lda $C030 ; click speaker
|
||||||
|
speaker_loop:
|
||||||
|
dey ; y never set?
|
||||||
|
bne slabel1 ; duration roughly 256*?
|
||||||
|
dec speaker_duration ; (Duration)
|
||||||
|
beq done_tone
|
||||||
|
slabel1:
|
||||||
|
dex
|
||||||
|
bne speaker_loop
|
||||||
|
ldx speaker_frequency ; (Frequency)
|
||||||
|
jmp speaker_tone
|
||||||
|
done_tone:
|
||||||
|
rts
|
||||||
|
|
||||||
|
speaker_duration:
|
||||||
|
.byte $00
|
||||||
|
speaker_frequency:
|
||||||
|
.byte $00
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
New:
|
||||||
|
~~~~
|
||||||
|
use updated speaker_beeps.s from music/redbook_sound
|
||||||
|
|
||||||
|
|
||||||
QUESTIONS FOR VIDELECTRIX:
|
QUESTIONS FOR VIDELECTRIX:
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
+ What are the odds of Kerrek appearing each time you enter?
|
+ What are the odds of Kerrek appearing each time you enter?
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
; the sound here is not quite right, use
|
||||||
|
; music/redbook_audio instead
|
||||||
|
|
||||||
|
|
||||||
; based on code from here
|
; based on code from here
|
||||||
; http://eightbitsoundandfury.ld8.org/programming.html
|
; http://eightbitsoundandfury.ld8.org/programming.html
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
+ update speaker_tone.s
|
||||||
|
|
||||||
short-term:
|
short-term:
|
||||||
+ Finish mockingboard music (victory and battle)
|
+ Finish mockingboard music (victory and battle)
|
||||||
+ Get battle finished
|
+ Get battle finished
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
; FIXME: obsolete
|
||||||
|
; use music/redbook_sound instead
|
||||||
|
|
||||||
|
|
||||||
; based on code from here
|
; based on code from here
|
||||||
; http://eightbitsoundandfury.ld8.org/programming.html
|
; http://eightbitsoundandfury.ld8.org/programming.html
|
||||||
|
|
||||||
|
|
|
@ -156,6 +156,7 @@ all_good:
|
||||||
; inx
|
; inx
|
||||||
; txa
|
; txa
|
||||||
|
|
||||||
|
; old
|
||||||
|
|
||||||
;NOTE_A3 = $98 ; 152
|
;NOTE_A3 = $98 ; 152
|
||||||
;NOTE_B3 = $87 ; 135
|
;NOTE_B3 = $87 ; 135
|
||||||
|
@ -164,6 +165,16 @@ all_good:
|
||||||
;NOTE_E4 = $66 ; 102
|
;NOTE_E4 = $66 ; 102
|
||||||
;NOTE_FSHARP4 = $5B ; 91
|
;NOTE_FSHARP4 = $5B ; 91
|
||||||
|
|
||||||
|
; new
|
||||||
|
|
||||||
|
;NOTE_A3 = 223
|
||||||
|
;NOTE_B3 = 199
|
||||||
|
;NOTE_CSHARP4 = 177
|
||||||
|
;NOTE_D4 = 167
|
||||||
|
;NOTE_E4 = 149
|
||||||
|
;NOTE_FSHARP4 = 132
|
||||||
|
|
||||||
|
|
||||||
NOTE_A3 = 0
|
NOTE_A3 = 0
|
||||||
NOTE_B3 = 1
|
NOTE_B3 = 1
|
||||||
NOTE_CSHARP4 = 2
|
NOTE_CSHARP4 = 2
|
||||||
|
@ -174,13 +185,13 @@ NOTE_FSHARP4 = 5
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; based on code from here
|
; this is Paul Lutus's code from Apple II red book
|
||||||
; http://eightbitsoundandfury.ld8.org/programming.html
|
|
||||||
|
|
||||||
; X,Y trashed
|
; X,Y trashed
|
||||||
; duration also trashed
|
; duration also trashed
|
||||||
|
|
||||||
speaker_tone:
|
speaker_tone:
|
||||||
|
ldy #0
|
||||||
|
speaker_tone_loop:
|
||||||
bit $C030 ; click speaker
|
bit $C030 ; click speaker
|
||||||
speaker_loop:
|
speaker_loop:
|
||||||
dey ; y never set?
|
dey ; y never set?
|
||||||
|
@ -191,7 +202,7 @@ slabel1:
|
||||||
dex
|
dex
|
||||||
bne speaker_loop
|
bne speaker_loop
|
||||||
ldx speaker_frequency ; (Frequency)
|
ldx speaker_frequency ; (Frequency)
|
||||||
jmp speaker_tone
|
jmp speaker_tone_loop
|
||||||
done_tone:
|
done_tone:
|
||||||
beq play_music_loop
|
beq play_music_loop
|
||||||
|
|
||||||
|
@ -289,7 +300,9 @@ box_data:
|
||||||
.byte $FF
|
.byte $FF
|
||||||
|
|
||||||
|
|
||||||
note_freqs: .byte $98,$87,$79,$72,$66,$5B
|
;note_freqs: .byte $98,$87,$79,$72,$66,$5B
|
||||||
|
|
||||||
|
note_freqs: .byte 223,199,177,167,149,132
|
||||||
|
|
||||||
speaker_frequency:
|
speaker_frequency:
|
||||||
speaker_duration = speaker_frequency+1
|
speaker_duration = speaker_frequency+1
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
include ../../Makefile.inc
|
||||||
|
|
||||||
|
DOS33 = ../../utils/dos33fs-utils/dos33
|
||||||
|
TOKENIZE = ../../utils/asoft_basic-utils/tokenize_asoft
|
||||||
|
|
||||||
|
all: generate_frequencies
|
||||||
|
|
||||||
|
#still_alive.dsk: SA_COMPRESSED STILL_ALIVE TITLE.BAS ENDING
|
||||||
|
# $(DOS33) -y still_alive.dsk BSAVE -a 0x5900 SA_COMPRESSED
|
||||||
|
# $(DOS33) -y still_alive.dsk BSAVE -a 0x0800 STILL_ALIVE
|
||||||
|
# $(DOS33) -y still_alive.dsk BSAVE -a 0x1800 ENDING
|
||||||
|
# $(DOS33) -y still_alive.dsk SAVE A TITLE.BAS
|
||||||
|
|
||||||
|
STILL_ALIVE: still_alive.o
|
||||||
|
ld65 -o STILL_ALIVE still_alive.o -C ../../linker_scripts/apple2_800.inc
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
generate_frequencies: generate_frequencies.o
|
||||||
|
$(CC) -o generate_frequencies generate_frequencies.o -lm
|
||||||
|
|
||||||
|
generate_frequencies.o:
|
||||||
|
$(CC) $(CFLAGS) -c generate_frequencies.c
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *~ *.o generate_frequencies
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
this code was widely shared for playing tones on Apple II
|
||||||
|
by POKEing the machine language and CALLing from BASIC
|
||||||
|
|
||||||
|
it's originally by Paul Lutus, from the Apple II Red Book, p45
|
||||||
|
|
||||||
|
this code is just toggling the speaker ($C030) on and off with cycle-counted
|
||||||
|
frequncies.
|
||||||
|
|
||||||
|
There are fancier ways to get music out of the speaker, see Electric Duet
|
||||||
|
(also by Paul Lutus), dac522 (by Michael Mahon), and play-btc and
|
||||||
|
a2stream by Oliver Schmidt.
|
||||||
|
|
||||||
|
using regular load/store/bit of $C030 is safe. Some of the more
|
||||||
|
advanced addressing modes can double-toggle due to how some 6502
|
||||||
|
implementations run the address bus
|
||||||
|
|
||||||
|
these was a table of notes floating around, but it seems the note values
|
||||||
|
were off a bit and also seems to have been calculated assuming
|
||||||
|
a 1MHz clock but the Apple II actually runs at roughly 1.023MHz
|
||||||
|
|
||||||
|
; the inner freq loop is roughly FREQ*10cycles
|
||||||
|
; so the square wave generated has a period of
|
||||||
|
; freq*20*1.023us
|
||||||
|
; or a frequency of 1/(freq*20.46e-6)
|
||||||
|
|
||||||
|
; more exactly, it is (4+10F)+(13+10F) = 20F+17
|
||||||
|
|
||||||
|
Note this probably will be a bit off on PAL Apple IIs
|
||||||
|
|
||||||
|
The code was originally in the form of a machine language program that could
|
||||||
|
be POKEd to address $00 of the zero page, and called from Integer Basic.
|
||||||
|
|
||||||
|
Later this was adapted for Applesoft and loaded to $300 instead, although
|
||||||
|
when doing this Y was never initialized properly (Integer BASIC had it at $00
|
||||||
|
but Applesoft it would be $02).
|
||||||
|
|
||||||
|
see ../../utils/asoft_sound for some routines that are related but
|
||||||
|
have slightly different sounds to them
|
|
@ -0,0 +1,55 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
static float note_frequencies[9][12]={
|
||||||
|
/* C C# D D# E F F# G G# A A# B */
|
||||||
|
{16.35, 17.32, 18.35, 19.45, 20.60, 21.83, 23.12, 24.50, 25.96, 27.50, 29.14, 30.87},
|
||||||
|
{32.70, 34.65, 36.71, 38.89, 41.20, 43.65, 46.25, 49.00, 51.91, 55.00, 58.27, 61.74},
|
||||||
|
{65.41, 69.30, 73.42, 77.78, 82.41, 87.31, 92.50, 98.00, 103.8, 110.0, 116.5, 123.5},
|
||||||
|
{130.8, 138.6, 146.8, 155.6, 164.8, 174.6, 185.0, 196.0, 207.7, 220.0, 233.1, 246.9},
|
||||||
|
{261.6, 277.2, 293.7, 311.1, 329.6, 349.2, 370.0, 392.0, 415.3, 440.0, 466.2, 493.9},
|
||||||
|
{523.3, 554.4, 587.3, 622.3, 659.3, 698.5, 740.0, 784.0, 830.6, 880.0, 932.3, 987.8},
|
||||||
|
{1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1976},
|
||||||
|
{2093, 2217, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951},
|
||||||
|
{4186, 4435, 4699, 4978, 5274, 5588, 5920, 6272, 6645, 7040, 7459, 7902},
|
||||||
|
};
|
||||||
|
|
||||||
|
static char note_names[12][12]={
|
||||||
|
"C","CSHARP","D","DSHARP","E","F","FSHARP","G","GSHARP","A","ASHARP","B",
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
int f,o;
|
||||||
|
float value,actual;
|
||||||
|
char temp_string[50];
|
||||||
|
|
||||||
|
for(o=3;o<7;o++) {
|
||||||
|
for(f=0;f<12;f++) {
|
||||||
|
// freq = 1/((20v+17)*1.023e-6)
|
||||||
|
// ((20v+17)*1.023e-6)= 1/freq
|
||||||
|
// 20v*1.023e-6 + 17*1.023e-6 = 1/freq
|
||||||
|
// 20v*1.023e-6 = (1/freq)-17*1.023e-6)
|
||||||
|
// v = ((1/freq)-17*1.023e-6)/(20*1.023e-6)
|
||||||
|
|
||||||
|
value=(1.0/(
|
||||||
|
(20.0*(1.023e-6)*note_frequencies[o][f])-
|
||||||
|
17*1.023e-6
|
||||||
|
));
|
||||||
|
|
||||||
|
actual=1.0/((20.0*value+17)*1.023e-6);
|
||||||
|
|
||||||
|
// value = ((1.0/note_frequencies[o][f])-17.0*1.023e-6)/
|
||||||
|
// 20.0*1.023e-6;
|
||||||
|
|
||||||
|
snprintf(temp_string,50,"NOTE_%s%1d",
|
||||||
|
note_names[f],o);
|
||||||
|
|
||||||
|
printf("%-12s = %d\t; %.1f (%.1f)\n",
|
||||||
|
temp_string,(int)round(value),
|
||||||
|
actual,note_frequencies[o][f]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
;NOTE_C3 = 376 ; 129.7 (130.8)
|
||||||
|
;NOTE_CSHARP3 = 355 ; 137.4 (138.6)
|
||||||
|
;NOTE_D3 = 335 ; 145.6 (146.8)
|
||||||
|
;NOTE_DSHARP3 = 316 ; 154.3 (155.6)
|
||||||
|
;NOTE_E3 = 298 ; 163.5 (164.8)
|
||||||
|
;NOTE_F3 = 281 ; 173.2 (174.6)
|
||||||
|
;NOTE_FSHARP3 = 265 ; 183.6 (185.0)
|
||||||
|
NOTE_G3 = 250 ; 194.5 (196.0)
|
||||||
|
NOTE_GSHARP3 = 236 ; 206.1 (207.7)
|
||||||
|
NOTE_A3 = 223 ; 218.3 (220.0)
|
||||||
|
NOTE_ASHARP3 = 210 ; 231.3 (233.1)
|
||||||
|
NOTE_B3 = 199 ; 245.0 (246.9)
|
||||||
|
NOTE_C4 = 187 ; 259.6 (261.6)
|
||||||
|
NOTE_CSHARP4 = 177 ; 275.0 (277.2)
|
||||||
|
NOTE_D4 = 167 ; 291.4 (293.7)
|
||||||
|
NOTE_DSHARP4 = 158 ; 308.6 (311.1)
|
||||||
|
NOTE_E4 = 149 ; 326.9 (329.6)
|
||||||
|
NOTE_F4 = 140 ; 346.3 (349.2)
|
||||||
|
NOTE_FSHARP4 = 132 ; 366.8 (370.0)
|
||||||
|
NOTE_G4 = 125 ; 388.5 (392.0)
|
||||||
|
NOTE_GSHARP4 = 118 ; 411.5 (415.3)
|
||||||
|
NOTE_A4 = 111 ; 435.8 (440.0)
|
||||||
|
NOTE_ASHARP4 = 105 ; 461.6 (466.2)
|
||||||
|
NOTE_B4 = 99 ; 488.9 (493.9)
|
||||||
|
NOTE_C5 = 94 ; 517.7 (523.3)
|
||||||
|
NOTE_CSHARP5 = 88 ; 548.3 (554.4)
|
||||||
|
NOTE_D5 = 83 ; 580.5 (587.3)
|
||||||
|
NOTE_DSHARP5 = 79 ; 614.8 (622.3)
|
||||||
|
NOTE_E5 = 74 ; 651.0 (659.3)
|
||||||
|
NOTE_F5 = 70 ; 689.3 (698.5)
|
||||||
|
NOTE_FSHARP5 = 66 ; 729.8 (740.0)
|
||||||
|
NOTE_G5 = 62 ; 772.6 (784.0)
|
||||||
|
NOTE_GSHARP5 = 59 ; 817.9 (830.6)
|
||||||
|
NOTE_A5 = 56 ; 865.9 (880.0)
|
||||||
|
NOTE_ASHARP5 = 52 ; 916.6 (932.3)
|
||||||
|
NOTE_B5 = 50 ; 970.3 (987.8)
|
||||||
|
NOTE_C6 = 47 ; 1027.5 (1047.0)
|
||||||
|
NOTE_CSHARP6 = 44 ; 1087.2 (1109.0)
|
||||||
|
NOTE_D6 = 42 ; 1150.7 (1175.0)
|
||||||
|
NOTE_DSHARP6 = 39 ; 1217.8 (1245.0)
|
||||||
|
NOTE_E6 = 37 ; 1288.6 (1319.0)
|
||||||
|
NOTE_F6 = 35 ; 1363.1 (1397.0)
|
||||||
|
NOTE_FSHARP6 = 33 ; 1442.1 (1480.0)
|
||||||
|
NOTE_G6 = 31 ; 1525.6 (1568.0)
|
||||||
|
NOTE_GSHARP6 = 29 ; 1613.6 (1661.0)
|
||||||
|
NOTE_A6 = 28 ; 1706.9 (1760.0)
|
||||||
|
NOTE_ASHARP6 = 26 ; 1805.6 (1865.0)
|
||||||
|
NOTE_B6 = 25 ; 1909.6 (1976.0)
|
|
@ -0,0 +1,7 @@
|
||||||
|
10 GOSUB 100
|
||||||
|
20 F=94:D=100:GOSUB 140
|
||||||
|
90 END
|
||||||
|
100 FOR L = 770 TO 790: READ V: POKE L,V: NEXT L: RETURN
|
||||||
|
120 DATA 173,48,192,136,208,5,206,1,3,240,9
|
||||||
|
130 DATA 202,208,245,174,0,3,76,2,3,96
|
||||||
|
140 POKE 768,F: POKE 769,D: CALL 770: RETURN
|
|
@ -0,0 +1,111 @@
|
||||||
|
; this code was widely shared for playing tones on Apple II
|
||||||
|
; by POKEing the machine language and CALLing from BASIC
|
||||||
|
|
||||||
|
; it's originally by Paul Lutus, from the Apple II Red Book p45
|
||||||
|
|
||||||
|
|
||||||
|
; it's hard to find good info on this, but loading from $C030
|
||||||
|
; "toggles" the speaker. So toggling twice is esentially a square wave?
|
||||||
|
|
||||||
|
; using regular load/store/bit of $C030 is safe. Some of the more
|
||||||
|
; advanced addressing modes can double-toggle due to how some 6502
|
||||||
|
; implementations run the address bus
|
||||||
|
|
||||||
|
; these seem to have been calculated assuming a 1MHz clock
|
||||||
|
; but the Apple II actually runs at roughly 1.023MHz
|
||||||
|
|
||||||
|
; or a frequency of 1/(speaker_freq*20.46e-6)
|
||||||
|
|
||||||
|
; to go other way, speaker_freq=1/(freq*20.46e-6)
|
||||||
|
|
||||||
|
;NOTE_C3 = 376 ; 129.7 (130.8)
|
||||||
|
;NOTE_CSHARP3 = 355 ; 137.4 (138.6)
|
||||||
|
;NOTE_D3 = 335 ; 145.6 (146.8)
|
||||||
|
;NOTE_DSHARP3 = 316 ; 154.3 (155.6)
|
||||||
|
;NOTE_E3 = 298 ; 163.5 (164.8)
|
||||||
|
;NOTE_F3 = 281 ; 173.2 (174.6)
|
||||||
|
;NOTE_FSHARP3 = 265 ; 183.6 (185.0)
|
||||||
|
NOTE_G3 = 250 ; 194.5 (196.0)
|
||||||
|
NOTE_GSHARP3 = 236 ; 206.1 (207.7)
|
||||||
|
NOTE_A3 = 223 ; 218.3 (220.0)
|
||||||
|
NOTE_ASHARP3 = 210 ; 231.3 (233.1)
|
||||||
|
NOTE_B3 = 199 ; 245.0 (246.9)
|
||||||
|
NOTE_C4 = 187 ; 259.6 (261.6)
|
||||||
|
NOTE_CSHARP4 = 177 ; 275.0 (277.2)
|
||||||
|
NOTE_D4 = 167 ; 291.4 (293.7)
|
||||||
|
NOTE_DSHARP4 = 158 ; 308.6 (311.1)
|
||||||
|
NOTE_E4 = 149 ; 326.9 (329.6)
|
||||||
|
NOTE_F4 = 140 ; 346.3 (349.2)
|
||||||
|
NOTE_FSHARP4 = 132 ; 366.8 (370.0)
|
||||||
|
NOTE_G4 = 125 ; 388.5 (392.0)
|
||||||
|
NOTE_GSHARP4 = 118 ; 411.5 (415.3)
|
||||||
|
NOTE_A4 = 111 ; 435.8 (440.0)
|
||||||
|
NOTE_ASHARP4 = 105 ; 461.6 (466.2)
|
||||||
|
NOTE_B4 = 99 ; 488.9 (493.9)
|
||||||
|
NOTE_C5 = 94 ; 517.7 (523.3)
|
||||||
|
NOTE_CSHARP5 = 88 ; 548.3 (554.4)
|
||||||
|
NOTE_D5 = 83 ; 580.5 (587.3)
|
||||||
|
NOTE_DSHARP5 = 79 ; 614.8 (622.3)
|
||||||
|
NOTE_E5 = 74 ; 651.0 (659.3)
|
||||||
|
NOTE_F5 = 70 ; 689.3 (698.5)
|
||||||
|
NOTE_FSHARP5 = 66 ; 729.8 (740.0)
|
||||||
|
NOTE_G5 = 62 ; 772.6 (784.0)
|
||||||
|
NOTE_GSHARP5 = 59 ; 817.9 (830.6)
|
||||||
|
NOTE_A5 = 56 ; 865.9 (880.0)
|
||||||
|
NOTE_ASHARP5 = 52 ; 916.6 (932.3)
|
||||||
|
NOTE_B5 = 50 ; 970.3 (987.8)
|
||||||
|
NOTE_C6 = 47 ; 1027.5 (1047.0)
|
||||||
|
NOTE_CSHARP6 = 44 ; 1087.2 (1109.0)
|
||||||
|
NOTE_D6 = 42 ; 1150.7 (1175.0)
|
||||||
|
NOTE_DSHARP6 = 39 ; 1217.8 (1245.0)
|
||||||
|
NOTE_E6 = 37 ; 1288.6 (1319.0)
|
||||||
|
NOTE_F6 = 35 ; 1363.1 (1397.0)
|
||||||
|
NOTE_FSHARP6 = 33 ; 1442.1 (1480.0)
|
||||||
|
NOTE_G6 = 31 ; 1525.6 (1568.0)
|
||||||
|
NOTE_GSHARP6 = 29 ; 1613.6 (1661.0)
|
||||||
|
NOTE_A6 = 28 ; 1706.9 (1760.0)
|
||||||
|
NOTE_ASHARP6 = 26 ; 1805.6 (1865.0)
|
||||||
|
NOTE_B6 = 25 ; 1909.6 (1976.0)
|
||||||
|
|
||||||
|
|
||||||
|
;=====================================================
|
||||||
|
; speaker tone
|
||||||
|
;=====================================================
|
||||||
|
; A,X,Y trashed
|
||||||
|
; duration also trashed
|
||||||
|
|
||||||
|
; this was designed by basic to be poked into 770 ($302)
|
||||||
|
; on an Applesoft CALL, X=$9d, Y=$02 (A,Y = Address to call)
|
||||||
|
|
||||||
|
; it was originally designed for Integer BASIC where Y=0 on call
|
||||||
|
; and it was poked to $00 (zero page)
|
||||||
|
|
||||||
|
; the inner freq loop is roughly FREQ*10cycles
|
||||||
|
; so the square wave generated has a period of
|
||||||
|
; freq*20*1.023us
|
||||||
|
; or a frequency of 1/(freq*20.46e-6)
|
||||||
|
|
||||||
|
; more exactly, it is (4+10F)+(13+10F) = 20F+17
|
||||||
|
|
||||||
|
speaker_tone:
|
||||||
|
ldy #0 ; 3
|
||||||
|
speaker_tone_loop:
|
||||||
|
lda $C030 ; click speaker ; 4
|
||||||
|
speaker_loop:
|
||||||
|
dey ; ; 2
|
||||||
|
bne freq_loop ; ; 2/3
|
||||||
|
dec speaker_duration ; (Duration) ; 6
|
||||||
|
beq done_tone ; 2/3
|
||||||
|
freq_loop:
|
||||||
|
dex ; 2
|
||||||
|
bne speaker_loop ; 2/3
|
||||||
|
ldx speaker_frequency ; (Frequency) ; 4
|
||||||
|
jmp speaker_tone_loop ; 3
|
||||||
|
done_tone:
|
||||||
|
rts
|
||||||
|
|
||||||
|
speaker_duration:
|
||||||
|
.byte $00
|
||||||
|
speaker_frequency:
|
||||||
|
.byte $00
|
||||||
|
|
|
@ -0,0 +1,508 @@
|
||||||
|
40 FOR L = 770 TO 790: READ V: POKE L,V: NEXT L
|
||||||
|
41 DATA 173,48,192,136,208,5,206,1,3,240,9
|
||||||
|
42 DATA 202,208,245,174,0,3,76,2,3,96
|
||||||
|
43 GOTO 100
|
||||||
|
50 DATA 173,48,192,174,0,3,202,240,247,234,234,136,208,248,206,1,3,208,243,96
|
||||||
|
51 FOR L=770 TO 789:READ V:POKE L,V:NEXT L
|
||||||
|
52 GOTO 100
|
||||||
|
60 DATA 173,48,192,174,0,3,202,240,247,234,136,208,249,206,1,3,208,244,96
|
||||||
|
61 FOR L=770 TO 788:READ V:POKE L,V:NEXT L
|
||||||
|
62 GOTO 100
|
||||||
|
70 DATA 173,48,192,174,0,3,202,240,247,234,234,234,136,208,247,206,1,3,208,242,96
|
||||||
|
71 FOR L=770 TO 790:READ V:POKE L,V:NEXT L
|
||||||
|
72 GOTO 100
|
||||||
|
80 DATA 172,1,3,173,0,3,133,250,174,0,3,228,250,208,3,173,48,192,202,208,246,173,48,192,136,240,7,198,250,208,233,76,5,3,96
|
||||||
|
81 FOR L=770 TO 804:READ V:POKE L,V:NEXT L
|
||||||
|
82 GOTO 100
|
||||||
|
90 POKE 768,F:POKE 769,D:CALL 770:RETURN
|
||||||
|
' Still Alive
|
||||||
|
' from Portal
|
||||||
|
' Words and Music by Jonathan Coulton
|
||||||
|
' Transcribed from the sheet music made by Ryan Maziarz
|
||||||
|
' This was a triumph
|
||||||
|
100 D=54:F=85:GOSUB 90
|
||||||
|
101 F=91:GOSUB 90
|
||||||
|
102 F=102:GOSUB 90
|
||||||
|
103 F=102:GOSUB 90
|
||||||
|
104 F=91:GOSUB 90
|
||||||
|
105 FOR I=1 TO 80: NEXT I
|
||||||
|
106 FOR I=1 TO 160: NEXT I
|
||||||
|
107 FOR I=1 TO 320: NEXT I
|
||||||
|
108 FOR I=1 TO 160: NEXT I
|
||||||
|
109 FOR I=1 TO 80: NEXT I
|
||||||
|
' I'm making a note here, HUGE SUCCESS
|
||||||
|
110 F=152:GOSUB 90
|
||||||
|
111 F=85:GOSUB 90
|
||||||
|
112 F=91:GOSUB 90
|
||||||
|
113 F=102:GOSUB 90
|
||||||
|
114 D=108:F=102:GOSUB 90
|
||||||
|
115 D=54:F=91:GOSUB 90
|
||||||
|
116 FOR I=1 TO 160: NEXT I
|
||||||
|
117 D=108:F=114:GOSUB 90
|
||||||
|
118 D=54:F=102:GOSUB 90
|
||||||
|
119 D=108:F=152:GOSUB 90
|
||||||
|
120 FOR I=1 TO 80: NEXT I
|
||||||
|
121 FOR I=1 TO 160: NEXT I
|
||||||
|
122 FOR I=1 TO 160: NEXT I
|
||||||
|
123 FOR I=1 TO 80: NEXT I
|
||||||
|
' It's hard to overstate my satisfaction
|
||||||
|
'L8 < A > L4 E L8 F# G L4 G L8 F# C# C# L3 D L4 E L8 < A A A > L4 F# R8 R2 R2
|
||||||
|
124 D=54:F=152:GOSUB 90
|
||||||
|
125 D=108:F=102:GOSUB 90
|
||||||
|
126 D=54:F=91:GOSUB 90
|
||||||
|
127 D=162:F=85:GOSUB 90
|
||||||
|
128 D=54:F=91:GOSUB 90
|
||||||
|
129 D=108:F=121:GOSUB 90
|
||||||
|
130 D=162:F=114:GOSUB 90
|
||||||
|
131 D=108:F=102:GOSUB 90
|
||||||
|
132 D=54:F=152:GOSUB 90
|
||||||
|
133 D=108:F=152:GOSUB 90
|
||||||
|
134 F=91:GOSUB 90
|
||||||
|
135 FOR I=1 TO 80: NEXT I
|
||||||
|
136 FOR I=1 TO 320: NEXT I
|
||||||
|
137 FOR I=1 TO 320: NEXT I
|
||||||
|
' Aperture Science
|
||||||
|
138 D=54:F=85:GOSUB 90
|
||||||
|
139 F=91:GOSUB 90
|
||||||
|
140 F=102:GOSUB 90
|
||||||
|
141 F=102:GOSUB 90
|
||||||
|
142 F=91:GOSUB 90
|
||||||
|
143 FOR I=1 TO 80: NEXT I
|
||||||
|
144 FOR I=1 TO 160: NEXT I
|
||||||
|
145 FOR I=1 TO 320: NEXT I
|
||||||
|
146 FOR I=1 TO 160: NEXT I
|
||||||
|
147 FOR I=1 TO 80: NEXT I
|
||||||
|
' we do what we must because we can.
|
||||||
|
148 F=152:GOSUB 90
|
||||||
|
149 F=85:GOSUB 90
|
||||||
|
150 F=91:GOSUB 90
|
||||||
|
151 F=102:GOSUB 90
|
||||||
|
152 F=102:GOSUB 90
|
||||||
|
153 FOR I=1 TO 160: NEXT I
|
||||||
|
154 F=91:GOSUB 90
|
||||||
|
155 F=114:GOSUB 90
|
||||||
|
156 FOR I=1 TO 160: NEXT I
|
||||||
|
157 F=102:GOSUB 90
|
||||||
|
158 D=162:F=152:GOSUB 90
|
||||||
|
159 FOR I=1 TO 80: NEXT I
|
||||||
|
160 FOR I=1 TO 160: NEXT I
|
||||||
|
161 FOR I=1 TO 320: NEXT I
|
||||||
|
' for the good of all of us except the ones who are dead.
|
||||||
|
162 D=108:F=102:GOSUB 90
|
||||||
|
163 D=54:F=91:GOSUB 90
|
||||||
|
164 D=162:F=85:GOSUB 90
|
||||||
|
165 D=54:F=102:GOSUB 90
|
||||||
|
166 D=162:F=121:GOSUB 90
|
||||||
|
167 D=54:F=114:GOSUB 90
|
||||||
|
168 F=102:GOSUB 90
|
||||||
|
169 FOR I=1 TO 80: NEXT I
|
||||||
|
170 F=152:GOSUB 90
|
||||||
|
171 F=114:GOSUB 90
|
||||||
|
172 F=102:GOSUB 90
|
||||||
|
173 F=96:GOSUB 90
|
||||||
|
174 F=102:GOSUB 90
|
||||||
|
175 F=114:GOSUB 90
|
||||||
|
176 F=128:GOSUB 90
|
||||||
|
177 FOR I=1 TO 160: NEXT I
|
||||||
|
' But there's no sense crying over every mistake
|
||||||
|
178 F=152:GOSUB 90
|
||||||
|
179 F=143:GOSUB 90
|
||||||
|
180 D=108:F=128:GOSUB 90
|
||||||
|
181 F=96:GOSUB 90
|
||||||
|
182 D=54:F=102:GOSUB 90
|
||||||
|
183 F=114:GOSUB 90
|
||||||
|
184 F=114:GOSUB 90
|
||||||
|
185 F=128:GOSUB 90
|
||||||
|
186 F=114:GOSUB 90
|
||||||
|
187 F=128:GOSUB 90
|
||||||
|
188 D=108:F=128:GOSUB 90
|
||||||
|
189 F=128:GOSUB 90
|
||||||
|
' you just keep on trying till you run out of cake
|
||||||
|
190 D=54:F=152:GOSUB 90
|
||||||
|
191 F=143:GOSUB 90
|
||||||
|
192 D=108:F=128:GOSUB 90
|
||||||
|
193 F=96:GOSUB 90
|
||||||
|
194 D=54:F=85:GOSUB 90
|
||||||
|
195 F=96:GOSUB 90
|
||||||
|
196 F=102:GOSUB 90
|
||||||
|
197 F=114:GOSUB 90
|
||||||
|
198 F=114:GOSUB 90
|
||||||
|
199 F=102:GOSUB 90
|
||||||
|
200 D=108:F=96:GOSUB 90
|
||||||
|
201 F=96:GOSUB 90
|
||||||
|
' and the Science gets done and you make a neat gun
|
||||||
|
202 D=54:F=85:GOSUB 90
|
||||||
|
203 F=76:GOSUB 90
|
||||||
|
204 F=72:GOSUB 90
|
||||||
|
205 F=72:GOSUB 90
|
||||||
|
206 D=108:F=76:GOSUB 90
|
||||||
|
207 F=85:GOSUB 90
|
||||||
|
208 D=54:F=96:GOSUB 90
|
||||||
|
209 F=85:GOSUB 90
|
||||||
|
210 F=76:GOSUB 90
|
||||||
|
211 F=76:GOSUB 90
|
||||||
|
212 D=108:F=85:GOSUB 90
|
||||||
|
213 F=96:GOSUB 90
|
||||||
|
' for the people who are still alive.
|
||||||
|
214 D=54:F=114:GOSUB 90
|
||||||
|
215 F=128:GOSUB 90
|
||||||
|
216 F=114:GOSUB 90
|
||||||
|
217 F=96:GOSUB 90
|
||||||
|
218 F=96:GOSUB 90
|
||||||
|
219 D=108:F=102:GOSUB 90
|
||||||
|
220 D=54:F=102:GOSUB 90
|
||||||
|
221 F=91:GOSUB 90
|
||||||
|
222 D=162:F=91:GOSUB 90
|
||||||
|
223 FOR I=1 TO 160: NEXT I
|
||||||
|
224 FOR I=1 TO 320: NEXT I
|
||||||
|
225 FOR I=1 TO 640: NEXT I
|
||||||
|
226 FOR I=1 TO 640: NEXT I
|
||||||
|
227 FOR I=1 TO 160: NEXT I
|
||||||
|
228 FOR I=1 TO 80: NEXT I
|
||||||
|
' I'm not even angry
|
||||||
|
' Note 8-16 and dotted 8
|
||||||
|
229 D=54:F=152:GOSUB 90
|
||||||
|
230 F=85:GOSUB 90
|
||||||
|
231 F=91:GOSUB 90
|
||||||
|
232 F=102:GOSUB 90
|
||||||
|
233 F=102:GOSUB 90
|
||||||
|
234 F=91:GOSUB 90
|
||||||
|
235 FOR I=1 TO 160: NEXT I
|
||||||
|
236 FOR I=1 TO 320: NEXT I
|
||||||
|
237 FOR I=1 TO 320: NEXT I
|
||||||
|
' I'm being so sincere right now
|
||||||
|
238 F=85:GOSUB 90
|
||||||
|
239 F=91:GOSUB 90
|
||||||
|
240 F=102:GOSUB 90
|
||||||
|
241 D=162:F=102:GOSUB 90
|
||||||
|
242 D=54:F=91:GOSUB 90
|
||||||
|
243 D=108:F=114:GOSUB 90
|
||||||
|
244 F=102:GOSUB 90
|
||||||
|
245 F=152:GOSUB 90
|
||||||
|
246 FOR I=1 TO 80: NEXT I
|
||||||
|
247 FOR I=1 TO 160: NEXT I
|
||||||
|
248 FOR I=1 TO 320: NEXT I
|
||||||
|
' even though you broke my heart and killed me.
|
||||||
|
249 F=102:GOSUB 90
|
||||||
|
250 D=54:F=91:GOSUB 90
|
||||||
|
251 D=162:F=85:GOSUB 90
|
||||||
|
252 D=108:F=102:GOSUB 90
|
||||||
|
253 F=121:GOSUB 90
|
||||||
|
254 D=54:F=114:GOSUB 90
|
||||||
|
255 D=162:F=102:GOSUB 90
|
||||||
|
256 D=54:F=152:GOSUB 90
|
||||||
|
257 D=108:F=152:GOSUB 90
|
||||||
|
258 D=54:F=91:GOSUB 90
|
||||||
|
259 FOR I=1 TO 160: NEXT I
|
||||||
|
260 FOR I=1 TO 320: NEXT I
|
||||||
|
261 FOR I=1 TO 160: NEXT I
|
||||||
|
262 FOR I=1 TO 80: NEXT I
|
||||||
|
' and tore me to pieces
|
||||||
|
263 F=152:GOSUB 90
|
||||||
|
264 F=85:GOSUB 90
|
||||||
|
265 F=91:GOSUB 90
|
||||||
|
266 F=102:GOSUB 90
|
||||||
|
267 F=102:GOSUB 90
|
||||||
|
268 F=91:GOSUB 90
|
||||||
|
269 FOR I=1 TO 80: NEXT I
|
||||||
|
270 FOR I=1 TO 160: NEXT I
|
||||||
|
271 FOR I=1 TO 320: NEXT I
|
||||||
|
272 FOR I=1 TO 160: NEXT I
|
||||||
|
273 FOR I=1 TO 80: NEXT I
|
||||||
|
' L8 C# B A G G A R8 R4 R2 R4 R8
|
||||||
|
' and threw every piece into a fire
|
||||||
|
274 F=152:GOSUB 90
|
||||||
|
275 F=85:GOSUB 90
|
||||||
|
276 F=91:GOSUB 90
|
||||||
|
277 F=102:GOSUB 90
|
||||||
|
278 F=102:GOSUB 90
|
||||||
|
279 FOR I=1 TO 160: NEXT I
|
||||||
|
280 F=91:GOSUB 90
|
||||||
|
281 F=114:GOSUB 90
|
||||||
|
282 FOR I=1 TO 160: NEXT I
|
||||||
|
283 F=102:GOSUB 90
|
||||||
|
284 D=108:F=152:GOSUB 90
|
||||||
|
285 FOR I=1 TO 80: NEXT I
|
||||||
|
286 FOR I=1 TO 160: NEXT I
|
||||||
|
287 FOR I=1 TO 320: NEXT I
|
||||||
|
' As they burned it hurt because
|
||||||
|
288 F=102:GOSUB 90
|
||||||
|
289 D=54:F=91:GOSUB 90
|
||||||
|
290 D=162:F=85:GOSUB 90
|
||||||
|
291 D=108:F=102:GOSUB 90
|
||||||
|
292 F=121:GOSUB 90
|
||||||
|
293 D=54:F=114:GOSUB 90
|
||||||
|
294 F=102:GOSUB 90
|
||||||
|
295 FOR I=1 TO 80: NEXT I
|
||||||
|
' I was so happy for you
|
||||||
|
296 F=152:GOSUB 90
|
||||||
|
297 F=114:GOSUB 90
|
||||||
|
298 F=102:GOSUB 90
|
||||||
|
299 F=96:GOSUB 90
|
||||||
|
300 F=102:GOSUB 90
|
||||||
|
301 F=114:GOSUB 90
|
||||||
|
302 F=128:GOSUB 90
|
||||||
|
303 FOR I=1 TO 160: NEXT I
|
||||||
|
' Now these points of data make a beautiful line
|
||||||
|
304 F=152:GOSUB 90
|
||||||
|
305 F=143:GOSUB 90
|
||||||
|
306 D=108:F=128:GOSUB 90
|
||||||
|
307 F=96:GOSUB 90
|
||||||
|
308 D=54:F=102:GOSUB 90
|
||||||
|
309 F=114:GOSUB 90
|
||||||
|
310 F=114:GOSUB 90
|
||||||
|
311 F=128:GOSUB 90
|
||||||
|
312 F=114:GOSUB 90
|
||||||
|
313 F=128:GOSUB 90
|
||||||
|
314 D=108:F=128:GOSUB 90
|
||||||
|
315 F=128:GOSUB 90
|
||||||
|
' and we're out of beta, we're releasing on time.
|
||||||
|
316 D=54:F=152:GOSUB 90
|
||||||
|
317 F=143:GOSUB 90
|
||||||
|
318 D=108:F=128:GOSUB 90
|
||||||
|
319 F=96:GOSUB 90
|
||||||
|
320 D=54:F=85:GOSUB 90
|
||||||
|
321 F=96:GOSUB 90
|
||||||
|
322 F=102:GOSUB 90
|
||||||
|
323 F=114:GOSUB 90
|
||||||
|
324 F=114:GOSUB 90
|
||||||
|
325 F=102:GOSUB 90
|
||||||
|
326 D=108:F=96:GOSUB 90
|
||||||
|
327 F=96:GOSUB 90
|
||||||
|
' So I'm GLaD. I got burned. Think of all the things we learned
|
||||||
|
328 D=54:F=85:GOSUB 90
|
||||||
|
329 F=76:GOSUB 90
|
||||||
|
330 F=72:GOSUB 90
|
||||||
|
331 F=72:GOSUB 90
|
||||||
|
332 D=108:F=76:GOSUB 90
|
||||||
|
333 F=85:GOSUB 90
|
||||||
|
334 D=54:F=96:GOSUB 90
|
||||||
|
335 F=85:GOSUB 90
|
||||||
|
336 F=76:GOSUB 90
|
||||||
|
337 F=76:GOSUB 90
|
||||||
|
338 F=85:GOSUB 90
|
||||||
|
339 F=96:GOSUB 90
|
||||||
|
340 D=108:F=96:GOSUB 90
|
||||||
|
' for the people who are still alive
|
||||||
|
341 D=54:F=114:GOSUB 90
|
||||||
|
342 F=128:GOSUB 90
|
||||||
|
343 F=114:GOSUB 90
|
||||||
|
344 F=96:GOSUB 90
|
||||||
|
345 F=96:GOSUB 90
|
||||||
|
346 D=108:F=102:GOSUB 90
|
||||||
|
347 D=54:F=102:GOSUB 90
|
||||||
|
348 F=91:GOSUB 90
|
||||||
|
349 D=162:F=91:GOSUB 90
|
||||||
|
350 FOR I=1 TO 80: NEXT I
|
||||||
|
351 FOR I=1 TO 320: NEXT I
|
||||||
|
352 FOR I=1 TO 640: NEXT I
|
||||||
|
353 FOR I=1 TO 640: NEXT I
|
||||||
|
354 FOR I=1 TO 320: NEXT I
|
||||||
|
' Go ahead and leave me
|
||||||
|
355 D=54:F=85:GOSUB 90
|
||||||
|
356 D=27:F=91:GOSUB 90
|
||||||
|
357 F=91:GOSUB 90
|
||||||
|
358 D=54:F=102:GOSUB 90
|
||||||
|
359 D=108:F=102:GOSUB 90
|
||||||
|
360 D=54:F=91:GOSUB 90
|
||||||
|
361 FOR I=1 TO 160: NEXT I
|
||||||
|
362 FOR I=1 TO 320: NEXT I
|
||||||
|
363 FOR I=1 TO 160: NEXT I
|
||||||
|
364 FOR I=1 TO 80: NEXT I
|
||||||
|
' I think I'd prefer to stay inside
|
||||||
|
365 F=152:GOSUB 90
|
||||||
|
366 F=85:GOSUB 90
|
||||||
|
367 F=91:GOSUB 90
|
||||||
|
368 F=102:GOSUB 90
|
||||||
|
369 F=102:GOSUB 90
|
||||||
|
370 FOR I=1 TO 160: NEXT I
|
||||||
|
371 F=91:GOSUB 90
|
||||||
|
372 F=114:GOSUB 90
|
||||||
|
373 FOR I=1 TO 160: NEXT I
|
||||||
|
374 F=102:GOSUB 90
|
||||||
|
375 D=108:F=152:GOSUB 90
|
||||||
|
376 FOR I=1 TO 80: NEXT I
|
||||||
|
377 FOR I=1 TO 160: NEXT I
|
||||||
|
378 FOR I=1 TO 320: NEXT I
|
||||||
|
' Maybe you'll find someone else to help you.
|
||||||
|
379 F=102:GOSUB 90
|
||||||
|
380 D=54:F=91:GOSUB 90
|
||||||
|
381 D=162:F=85:GOSUB 90
|
||||||
|
382 D=108:F=102:GOSUB 90
|
||||||
|
383 F=121:GOSUB 90
|
||||||
|
384 D=54:F=114:GOSUB 90
|
||||||
|
385 D=162:F=102:GOSUB 90
|
||||||
|
386 D=54:F=152:GOSUB 90
|
||||||
|
387 D=108:F=152:GOSUB 90
|
||||||
|
388 D=54:F=91:GOSUB 90
|
||||||
|
389 FOR I=1 TO 160: NEXT I
|
||||||
|
390 FOR I=1 TO 320: NEXT I
|
||||||
|
391 FOR I=1 TO 320: NEXT I
|
||||||
|
' Maybe Black Mesa
|
||||||
|
392 F=85:GOSUB 90
|
||||||
|
393 F=91:GOSUB 90
|
||||||
|
394 F=102:GOSUB 90
|
||||||
|
395 D=108:F=102:GOSUB 90
|
||||||
|
396 D=54:F=91:GOSUB 90
|
||||||
|
397 FOR I=1 TO 160: NEXT I
|
||||||
|
398 FOR I=1 TO 320: NEXT I
|
||||||
|
399 FOR I=1 TO 320: NEXT I
|
||||||
|
' THAT WAS A JOKE, HA HA, FAT CHANCE
|
||||||
|
400 F=85:GOSUB 90
|
||||||
|
401 F=91:GOSUB 90
|
||||||
|
402 F=102:GOSUB 90
|
||||||
|
403 F=102:GOSUB 90
|
||||||
|
404 FOR I=1 TO 160: NEXT I
|
||||||
|
405 F=91:GOSUB 90
|
||||||
|
406 F=114:GOSUB 90
|
||||||
|
407 FOR I=1 TO 160: NEXT I
|
||||||
|
408 F=102:GOSUB 90
|
||||||
|
409 D=108:F=152:GOSUB 90
|
||||||
|
410 FOR I=1 TO 80: NEXT I
|
||||||
|
411 FOR I=1 TO 160: NEXT I
|
||||||
|
412 FOR I=1 TO 320: NEXT I
|
||||||
|
' Anyway this cake is great, it's so delicious and moist.
|
||||||
|
413 F=102:GOSUB 90
|
||||||
|
414 D=54:F=91:GOSUB 90
|
||||||
|
415 D=162:F=85:GOSUB 90
|
||||||
|
416 D=108:F=102:GOSUB 90
|
||||||
|
417 F=121:GOSUB 90
|
||||||
|
418 D=54:F=114:GOSUB 90
|
||||||
|
419 F=102:GOSUB 90
|
||||||
|
420 FOR I=1 TO 80: NEXT I
|
||||||
|
421 F=152:GOSUB 90
|
||||||
|
422 F=114:GOSUB 90
|
||||||
|
423 F=102:GOSUB 90
|
||||||
|
424 F=96:GOSUB 90
|
||||||
|
425 F=102:GOSUB 90
|
||||||
|
426 F=114:GOSUB 90
|
||||||
|
427 F=128:GOSUB 90
|
||||||
|
428 FOR I=1 TO 160: NEXT I
|
||||||
|
' Look at me still talking when there's Science to do
|
||||||
|
429 F=152:GOSUB 90
|
||||||
|
430 F=143:GOSUB 90
|
||||||
|
431 D=108:F=128:GOSUB 90
|
||||||
|
432 F=96:GOSUB 90
|
||||||
|
433 D=54:F=102:GOSUB 90
|
||||||
|
434 F=114:GOSUB 90
|
||||||
|
435 F=114:GOSUB 90
|
||||||
|
436 F=128:GOSUB 90
|
||||||
|
437 F=114:GOSUB 90
|
||||||
|
438 F=128:GOSUB 90
|
||||||
|
439 D=108:F=128:GOSUB 90
|
||||||
|
440 F=128:GOSUB 90
|
||||||
|
' When I look out there is makes me GLaD I'm not you.
|
||||||
|
441 D=54:F=152:GOSUB 90
|
||||||
|
442 F=143:GOSUB 90
|
||||||
|
443 D=108:F=128:GOSUB 90
|
||||||
|
444 F=96:GOSUB 90
|
||||||
|
445 D=54:F=85:GOSUB 90
|
||||||
|
446 F=96:GOSUB 90
|
||||||
|
447 F=102:GOSUB 90
|
||||||
|
448 F=114:GOSUB 90
|
||||||
|
449 F=114:GOSUB 90
|
||||||
|
450 F=102:GOSUB 90
|
||||||
|
451 D=108:F=96:GOSUB 90
|
||||||
|
452 F=96:GOSUB 90
|
||||||
|
' I've experiments to run. There is research to be done.
|
||||||
|
453 D=54:F=85:GOSUB 90
|
||||||
|
454 F=76:GOSUB 90
|
||||||
|
455 F=72:GOSUB 90
|
||||||
|
456 F=72:GOSUB 90
|
||||||
|
457 F=76:GOSUB 90
|
||||||
|
458 F=85:GOSUB 90
|
||||||
|
459 D=108:F=85:GOSUB 90
|
||||||
|
460 D=54:F=96:GOSUB 90
|
||||||
|
461 F=85:GOSUB 90
|
||||||
|
462 F=76:GOSUB 90
|
||||||
|
463 F=76:GOSUB 90
|
||||||
|
464 F=85:GOSUB 90
|
||||||
|
465 F=96:GOSUB 90
|
||||||
|
466 D=108:F=96:GOSUB 90
|
||||||
|
' On the people who are still alive.
|
||||||
|
467 D=54:F=114:GOSUB 90
|
||||||
|
468 F=128:GOSUB 90
|
||||||
|
469 F=114:GOSUB 90
|
||||||
|
470 F=96:GOSUB 90
|
||||||
|
471 F=96:GOSUB 90
|
||||||
|
472 D=108:F=102:GOSUB 90
|
||||||
|
473 D=54:F=102:GOSUB 90
|
||||||
|
474 F=91:GOSUB 90
|
||||||
|
475 D=162:F=91:GOSUB 90
|
||||||
|
476 FOR I=1 TO 160: NEXT I
|
||||||
|
477 FOR I=1 TO 160: NEXT I
|
||||||
|
' And believe me I am still alive.
|
||||||
|
478 D=54:F=76:GOSUB 90
|
||||||
|
479 F=76:GOSUB 90
|
||||||
|
480 F=68:GOSUB 90
|
||||||
|
481 F=76:GOSUB 90
|
||||||
|
482 F=91:GOSUB 90
|
||||||
|
483 D=108:F=114:GOSUB 90
|
||||||
|
484 D=54:F=102:GOSUB 90
|
||||||
|
485 F=91:GOSUB 90
|
||||||
|
486 D=162:F=91:GOSUB 90
|
||||||
|
487 FOR I=1 TO 160: NEXT I
|
||||||
|
488 FOR I=1 TO 80: NEXT I
|
||||||
|
' I'm doing science and I'm still alive.
|
||||||
|
489 D=54:F=76:GOSUB 90
|
||||||
|
490 F=76:GOSUB 90
|
||||||
|
491 F=76:GOSUB 90
|
||||||
|
492 F=68:GOSUB 90
|
||||||
|
493 F=76:GOSUB 90
|
||||||
|
494 F=91:GOSUB 90
|
||||||
|
495 D=108:F=114:GOSUB 90
|
||||||
|
496 D=54:F=102:GOSUB 90
|
||||||
|
497 F=91:GOSUB 90
|
||||||
|
498 D=162:F=91:GOSUB 90
|
||||||
|
499 FOR I=1 TO 160: NEXT I
|
||||||
|
500 FOR I=1 TO 80: NEXT I
|
||||||
|
' I feel FANTASTIC and I'm still alive.
|
||||||
|
501 D=54:F=76:GOSUB 90
|
||||||
|
502 F=76:GOSUB 90
|
||||||
|
503 F=76:GOSUB 90
|
||||||
|
504 F=68:GOSUB 90
|
||||||
|
505 F=76:GOSUB 90
|
||||||
|
506 F=91:GOSUB 90
|
||||||
|
507 D=108:F=114:GOSUB 90
|
||||||
|
508 D=54:F=102:GOSUB 90
|
||||||
|
509 F=91:GOSUB 90
|
||||||
|
510 D=162:F=91:GOSUB 90
|
||||||
|
511 FOR I=1 TO 160: NEXT I
|
||||||
|
512 FOR I=1 TO 160: NEXT I
|
||||||
|
' While you're dying I'll be still aliave
|
||||||
|
513 D=54:F=76:GOSUB 90
|
||||||
|
514 F=76:GOSUB 90
|
||||||
|
515 F=68:GOSUB 90
|
||||||
|
516 F=76:GOSUB 90
|
||||||
|
517 F=91:GOSUB 90
|
||||||
|
518 D=108:F=114:GOSUB 90
|
||||||
|
519 D=54:F=102:GOSUB 90
|
||||||
|
520 F=91:GOSUB 90
|
||||||
|
521 D=162:F=91:GOSUB 90
|
||||||
|
522 FOR I=1 TO 160: NEXT I
|
||||||
|
523 FOR I=1 TO 80: NEXT I
|
||||||
|
' And when you're dead I will be still alive
|
||||||
|
524 D=54:F=76:GOSUB 90
|
||||||
|
525 F=76:GOSUB 90
|
||||||
|
526 F=76:GOSUB 90
|
||||||
|
527 F=68:GOSUB 90
|
||||||
|
528 F=76:GOSUB 90
|
||||||
|
529 F=91:GOSUB 90
|
||||||
|
530 D=108:F=114:GOSUB 90
|
||||||
|
531 D=54:F=102:GOSUB 90
|
||||||
|
532 F=91:GOSUB 90
|
||||||
|
533 D=162:F=91:GOSUB 90
|
||||||
|
534 FOR I=1 TO 160: NEXT I
|
||||||
|
535 FOR I=1 TO 80: NEXT I
|
||||||
|
' STILL ALIVE
|
||||||
|
536 D=54:F=85:GOSUB 90
|
||||||
|
537 F=76:GOSUB 90
|
||||||
|
538 D=162:F=76:GOSUB 90
|
||||||
|
539 FOR I=1 TO 160: NEXT I
|
||||||
|
540 FOR I=1 TO 80: NEXT I
|
||||||
|
' STILL ALIVE
|
||||||
|
541 D=54:F=85:GOSUB 90
|
||||||
|
542 F=91:GOSUB 90
|
||||||
|
543 D=162:F=91:GOSUB 90
|
||||||
|
544 FOR I=1 TO 160: NEXT I
|
||||||
|
545 FOR I=1 TO 320: NEXT I
|
|
@ -0,0 +1,45 @@
|
||||||
|
; this table of notes was from
|
||||||
|
; http://eightbitsoundandfury.ld8.org/programming.html
|
||||||
|
|
||||||
|
; it assumes 1MHz clock
|
||||||
|
; and has shifted the notes to better match octave boundaries
|
||||||
|
; NOTE_C3 is actually closer to G3
|
||||||
|
|
||||||
|
NOTE_C3 = 255
|
||||||
|
NOTE_CSHARP3 = 241
|
||||||
|
NOTE_D3 = 227
|
||||||
|
NOTE_DSHARP3 = 214
|
||||||
|
NOTE_E3 = 202
|
||||||
|
NOTE_F3 = 191
|
||||||
|
NOTE_FSHARP3 = 180
|
||||||
|
NOTE_G3 = 170
|
||||||
|
NOTE_GSHARP3 = 161
|
||||||
|
NOTE_A3 = 152
|
||||||
|
NOTE_ASHARP3 = 143
|
||||||
|
NOTE_B3 = 135
|
||||||
|
|
||||||
|
NOTE_C4 = 128
|
||||||
|
NOTE_CSHARP4 = 121
|
||||||
|
NOTE_D4 = 114
|
||||||
|
NOTE_DSHARP4 = 108
|
||||||
|
NOTE_E4 = 102
|
||||||
|
NOTE_F4 = 96
|
||||||
|
NOTE_FSHARP4 = 91
|
||||||
|
NOTE_G4 = 85
|
||||||
|
NOTE_GSHARP4 = 81
|
||||||
|
NOTE_A4 = 76
|
||||||
|
NOTE_ASHARP4 = 72
|
||||||
|
NOTE_B4 = 68
|
||||||
|
|
||||||
|
NOTE_C5 = 64
|
||||||
|
NOTE_CSHARP5 = 60
|
||||||
|
NOTE_D5 = 57
|
||||||
|
NOTE_DSHARP5 = 54
|
||||||
|
NOTE_E5 = 51
|
||||||
|
NOTE_F5 = 48
|
||||||
|
NOTE_FSHARP5 = 45
|
||||||
|
NOTE_G5 = 43
|
||||||
|
NOTE_GSHARP5 = 40
|
||||||
|
NOTE_A5 = 38
|
||||||
|
NOTE_ASHARP5 = 36
|
||||||
|
NOTE_B5 = 34
|
|
@ -479,53 +479,12 @@ dly3: rts ; 6 6 6 6 6 6 6 00 00 00 00 01 01 01 0 1 1 1 0 0 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; based on code from here
|
; redbook sound by Paul Lutus
|
||||||
; http://eightbitsoundandfury.ld8.org/programming.html
|
; see music/redbook_sound
|
||||||
|
|
||||||
; A,X,Y trashed
|
; A,X,Y trashed
|
||||||
; duration also trashed
|
; duration also trashed
|
||||||
|
|
||||||
NOTE_C3 = 255
|
|
||||||
NOTE_CSHARP3 = 241
|
|
||||||
NOTE_D3 = 227
|
|
||||||
NOTE_DSHARP3 = 214
|
|
||||||
NOTE_E3 = 202
|
|
||||||
NOTE_F3 = 191
|
|
||||||
NOTE_FSHARP3 = 180
|
|
||||||
NOTE_G3 = 170
|
|
||||||
NOTE_GSHARP3 = 161
|
|
||||||
NOTE_A3 = 152
|
|
||||||
NOTE_ASHARP3 = 143
|
|
||||||
NOTE_B3 = 135
|
|
||||||
|
|
||||||
NOTE_C4 = 128
|
|
||||||
NOTE_CSHARP4 = 121
|
|
||||||
NOTE_D4 = 114
|
|
||||||
NOTE_DSHARP4 = 108
|
|
||||||
NOTE_E4 = 102
|
|
||||||
NOTE_F4 = 96
|
|
||||||
NOTE_FSHARP4 = 91
|
|
||||||
NOTE_G4 = 85
|
|
||||||
NOTE_GSHARP4 = 81
|
|
||||||
NOTE_A4 = 76
|
|
||||||
NOTE_ASHARP4 = 72
|
|
||||||
NOTE_B4 = 68
|
|
||||||
|
|
||||||
NOTE_C5 = 64
|
|
||||||
NOTE_CSHARP5 = 60
|
|
||||||
NOTE_D5 = 57
|
|
||||||
NOTE_DSHARP5 = 54
|
|
||||||
NOTE_E5 = 51
|
|
||||||
NOTE_F5 = 48
|
|
||||||
NOTE_FSHARP5 = 45
|
|
||||||
NOTE_G5 = 43
|
|
||||||
NOTE_GSHARP5 = 40
|
|
||||||
NOTE_A5 = 38
|
|
||||||
NOTE_ASHARP5 = 36
|
|
||||||
NOTE_B5 = 34
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
speaker_tone:
|
speaker_tone:
|
||||||
lda $C030 ; click speaker
|
lda $C030 ; click speaker
|
||||||
speaker_loop:
|
speaker_loop:
|
||||||
|
|
|
@ -3,19 +3,12 @@
|
||||||
|
|
||||||
static int line=0;
|
static int line=0;
|
||||||
|
|
||||||
|
/* frequencies from the eightbitsoundandfury webpage */
|
||||||
static int get_freq(int note, int octave, int flat, int sharp) {
|
static int get_freq_old(int note, int octave, int flat, int sharp) {
|
||||||
|
|
||||||
if (octave==0) {
|
if (octave==0) {
|
||||||
|
|
||||||
switch(note) {
|
switch(note) {
|
||||||
case 'A':
|
|
||||||
if (sharp) return 143;
|
|
||||||
if (flat) return 161;
|
|
||||||
return 152;
|
|
||||||
case 'B':
|
|
||||||
if (flat) return 143;
|
|
||||||
return 135;
|
|
||||||
case 'C':
|
case 'C':
|
||||||
if (sharp) return 241;
|
if (sharp) return 241;
|
||||||
return 255;
|
return 255;
|
||||||
|
@ -33,6 +26,13 @@ static int get_freq(int note, int octave, int flat, int sharp) {
|
||||||
if (sharp) return 161;
|
if (sharp) return 161;
|
||||||
if (flat) return 180;
|
if (flat) return 180;
|
||||||
return 170;
|
return 170;
|
||||||
|
case 'A':
|
||||||
|
if (sharp) return 143;
|
||||||
|
if (flat) return 161;
|
||||||
|
return 152;
|
||||||
|
case 'B':
|
||||||
|
if (flat) return 143;
|
||||||
|
return 135;
|
||||||
default: fprintf(stderr,"Unknown note %c Line %d\n",
|
default: fprintf(stderr,"Unknown note %c Line %d\n",
|
||||||
note,line);
|
note,line);
|
||||||
}
|
}
|
||||||
|
@ -42,13 +42,6 @@ static int get_freq(int note, int octave, int flat, int sharp) {
|
||||||
if (octave==1) {
|
if (octave==1) {
|
||||||
|
|
||||||
switch(note) {
|
switch(note) {
|
||||||
case 'A':
|
|
||||||
if (sharp) return 72;
|
|
||||||
if (flat) return 81;
|
|
||||||
return 76;
|
|
||||||
case 'B':
|
|
||||||
if (flat) return 72;
|
|
||||||
return 68;
|
|
||||||
case 'C':
|
case 'C':
|
||||||
if (sharp) return 121;
|
if (sharp) return 121;
|
||||||
return 128;
|
return 128;
|
||||||
|
@ -66,6 +59,14 @@ static int get_freq(int note, int octave, int flat, int sharp) {
|
||||||
if (sharp) return 81;
|
if (sharp) return 81;
|
||||||
if (flat) return 91;
|
if (flat) return 91;
|
||||||
return 85;
|
return 85;
|
||||||
|
case 'A':
|
||||||
|
if (sharp) return 72;
|
||||||
|
if (flat) return 81;
|
||||||
|
return 76;
|
||||||
|
case 'B':
|
||||||
|
if (flat) return 72;
|
||||||
|
return 68;
|
||||||
|
|
||||||
default: fprintf(stderr,"Unknown note %c\n",note);
|
default: fprintf(stderr,"Unknown note %c\n",note);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
|
@ -73,13 +74,6 @@ static int get_freq(int note, int octave, int flat, int sharp) {
|
||||||
if (octave==2) {
|
if (octave==2) {
|
||||||
|
|
||||||
switch(note) {
|
switch(note) {
|
||||||
case 'A':
|
|
||||||
if (sharp) return 36;
|
|
||||||
if (flat) return 40;
|
|
||||||
return 38;
|
|
||||||
case 'B':
|
|
||||||
if (flat) return 36;
|
|
||||||
return 34;
|
|
||||||
case 'C':
|
case 'C':
|
||||||
if (sharp) return 60;
|
if (sharp) return 60;
|
||||||
return 64;
|
return 64;
|
||||||
|
@ -97,6 +91,14 @@ static int get_freq(int note, int octave, int flat, int sharp) {
|
||||||
if (sharp) return 40;
|
if (sharp) return 40;
|
||||||
if (flat) return 45;
|
if (flat) return 45;
|
||||||
return 43;
|
return 43;
|
||||||
|
case 'A':
|
||||||
|
if (sharp) return 36;
|
||||||
|
if (flat) return 40;
|
||||||
|
return 38;
|
||||||
|
case 'B':
|
||||||
|
if (flat) return 36;
|
||||||
|
return 34;
|
||||||
|
|
||||||
default: fprintf(stderr,"Unknown note %c\n",note);
|
default: fprintf(stderr,"Unknown note %c\n",note);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,6 +109,117 @@ static int get_freq(int note, int octave, int flat, int sharp) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* proper frequencies */
|
||||||
|
static int get_freq_new(int note, int octave, int flat, int sharp) {
|
||||||
|
|
||||||
|
if (octave==0) {
|
||||||
|
|
||||||
|
switch(note) { // C3
|
||||||
|
// case 'C':
|
||||||
|
// if (sharp) return 241;
|
||||||
|
// return 255;
|
||||||
|
// case 'D':
|
||||||
|
// if (sharp) return 214;
|
||||||
|
// if (flat) return 241;
|
||||||
|
// return 227;
|
||||||
|
// case 'E':
|
||||||
|
// if (flat) return 214;
|
||||||
|
// return 202;
|
||||||
|
// case 'F':
|
||||||
|
// if (sharp) return 180;
|
||||||
|
// return 191;
|
||||||
|
case 'G':
|
||||||
|
if (sharp) return 236;
|
||||||
|
return 250;
|
||||||
|
case 'A':
|
||||||
|
if (sharp) return 210;
|
||||||
|
if (flat) return 236;
|
||||||
|
return 223;
|
||||||
|
case 'B':
|
||||||
|
if (flat) return 210;
|
||||||
|
return 199;
|
||||||
|
|
||||||
|
default: fprintf(stderr,"Unknown note %c Line %d\n",
|
||||||
|
note,line);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else
|
||||||
|
|
||||||
|
if (octave==1) {
|
||||||
|
|
||||||
|
switch(note) {
|
||||||
|
case 'C':
|
||||||
|
if (sharp) return 177;
|
||||||
|
return 187;
|
||||||
|
case 'D':
|
||||||
|
if (sharp) return 158;
|
||||||
|
if (flat) return 177;
|
||||||
|
return 167;
|
||||||
|
case 'E':
|
||||||
|
if (flat) return 158;
|
||||||
|
return 149;
|
||||||
|
case 'F':
|
||||||
|
if (sharp) return 132;
|
||||||
|
return 140;
|
||||||
|
case 'G':
|
||||||
|
if (sharp) return 118;
|
||||||
|
if (flat) return 132;
|
||||||
|
return 125;
|
||||||
|
case 'A':
|
||||||
|
if (sharp) return 105;
|
||||||
|
if (flat) return 118;
|
||||||
|
return 111;
|
||||||
|
case 'B':
|
||||||
|
if (flat) return 105;
|
||||||
|
return 99;
|
||||||
|
default: fprintf(stderr,"Unknown note %c\n",note);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
|
||||||
|
if (octave==2) {
|
||||||
|
|
||||||
|
switch(note) {
|
||||||
|
case 'C':
|
||||||
|
if (sharp) return 88;
|
||||||
|
return 94;
|
||||||
|
case 'D':
|
||||||
|
if (sharp) return 79;
|
||||||
|
if (flat) return 88;
|
||||||
|
return 83;
|
||||||
|
case 'E':
|
||||||
|
if (flat) return 79;
|
||||||
|
return 74;
|
||||||
|
case 'F':
|
||||||
|
if (sharp) return 66;
|
||||||
|
return 70;
|
||||||
|
case 'G':
|
||||||
|
if (sharp) return 59;
|
||||||
|
if (flat) return 66;
|
||||||
|
return 62;
|
||||||
|
case 'A':
|
||||||
|
if (sharp) return 52;
|
||||||
|
if (flat) return 59;
|
||||||
|
return 56;
|
||||||
|
case 'B':
|
||||||
|
if (flat) return 52;
|
||||||
|
return 50;
|
||||||
|
|
||||||
|
default: fprintf(stderr,"Unknown note %c\n",note);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
fprintf(stderr,"Unknown octave %d!\n",octave);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get_freq(int note, int octave, int flat, int sharp) {
|
||||||
|
|
||||||
|
return get_freq_new(note,octave,flat,sharp);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int get_duration(int length) {
|
static int get_duration(int length) {
|
||||||
|
|
||||||
int d=0;
|
int d=0;
|
||||||
|
|
Loading…
Reference in New Issue