prog8/examples/cx16/bdmusic.p8
2022-07-02 18:47:12 +02:00

123 lines
3.1 KiB
Lua

%import textio
%import syslib
%import floats
%import psg
main {
sub start() {
txt.print("will play the music from boulderdash,\nmade in 1984 by peter liepa.\npress enter to start: ")
void c64.CHRIN()
txt.clear_screen()
psg.voice(0, psg.LEFT, 63, psg.TRIANGLE, 0)
psg.voice(1, psg.RIGHT, 63, psg.TRIANGLE, 0)
cx16.set_irq(&psg.envelopes_irq, false)
repeat {
uword note
for note in notes {
ubyte note0 = lsb(note)
ubyte note1 = msb(note)
psg.freq_vera(0, vera_freq(note0))
psg.freq_vera(1, vera_freq(note1))
psg.envelope(0, 255, 6)
psg.envelope(1, 255, 6)
print_notes(note0, note1)
sys.wait(10)
}
}
}
sub vera_freq(ubyte note) -> uword {
return (freqs_hz[note-10] / 0.3725290298461914) as uword
}
sub print_notes(ubyte n1, ubyte n2) {
txt.nl()
txt.plot(n1, txt.DEFAULT_HEIGHT-1)
txt.color(7)
txt.chrout('Q')
txt.plot(n2, txt.DEFAULT_HEIGHT-1)
txt.color(4)
txt.chrout('Q')
}
; details about the boulderdash music can be found here:
; https://www.elmerproductions.com/sp/peterb/sounds.html#Theme%20tune
uword[] notes = [
$1622, $1d26, $2229, $252e, $1424, $1f27, $2029, $2730,
$122a, $122c, $1e2e, $1231, $202c, $3337, $212d, $3135,
$1622, $162e, $161d, $1624, $1420, $1430, $1424, $1420,
$1622, $162e, $161d, $1624, $1e2a, $1e3a, $1e2e, $1e2a,
$142c, $142c, $141b, $1422, $1c28, $1c38, $1c2c, $1c28,
$111d, $292d, $111f, $292e, $0f27, $0f27, $1633, $1627,
$162e, $162e, $162e, $162e, $222e, $222e, $162e, $162e,
$142e, $142e, $142e, $142e, $202e, $202e, $142e, $142e,
$162e, $322e, $162e, $332e, $222e, $322e, $162e, $332e,
$142e, $322e, $142e, $332e, $202c, $302c, $142c, $312c,
$162e, $163a, $162e, $3538, $222e, $2237, $162e, $3135,
$142c, $1438, $142c, $1438, $202c, $2033, $142c, $1438,
$162e, $322e, $162e, $332e, $222e, $322e, $162e, $332e,
$142e, $322e, $142e, $332e, $202c, $302c, $142c, $312c,
$2e32, $292e, $2629, $2226, $2c30, $272c, $2427, $1420,
$3532, $322e, $2e29, $2926, $2730, $242c, $2027, $1420
]
float[] freqs_hz = [
; first 10 are unused so should index by i-10
44.6,
47.4,
50.4,
53.4,
56.6,
59.6,
63.5,
67.1,
71.3,
75.5,
80.0,
84.7,
89.3,
94.9,
100.7,
106.8,
113.2,
119.3,
127.1,
134.1,
142.7,
151.0,
160.0,
169.5,
178.5,
189.7,
201.4,
213.6,
226.3,
238.5,
254.1,
268.3,
285.3,
301.9,
320.0,
339.0,
357.0,
379.5,
402.9,
427.3,
452.6,
477.0,
508.2,
536.5,
570.7,
603.8,
639.9,
678.0,
714.1
]
}