Ho adattato un listato dell'"inserto Campus" presente nel n.63 di CCC (p.8 - "A suon di Assembly") e mi sono reso conto di come sia facile,anche per un broccaccio come me in campo musicale ( :lol: ),tradurre uno spartito in una melodia da far eseguire al SID.
Mano ad un tutorial di teoria musicale,più questa semplice formula che converte la frequenza della nota da suonare in dati binari
registri frequenza = freq.nota x 16777216 / 985248
Per le pause basta tener presente la cadenza dell'IRQ standard:1/60mo di secondo...
irqvet = $314
irqsys = $ea31
reg = $d400
durata = $fb
onda = $fc
flagnt = $fd
* = $c000
sei
lda #<rout
ldx #>rout
sta irqvet
stx irqvet+1 ;interrupt
ldx #1
stx durata
lda #160
sta reg+5
sta reg+12 ;att=10 dec=0
lda #250
sta reg+6
sta reg+13 ;sos=15 ril=10
lda #15
sta reg+24 ;volume al max
lda #17
sta reg+4 ;triangolo
lda #33
sta reg+11 ;sawtooth
cli
rts
rout
dec durata
bne uscita
ldx flagnt ;indice nota
lda nota,x
bne cont
inx
lda nota,x
bne decr
tax
tay
iny
sty durata
bne storex ;reset indice
decr
dex
cont
sta reg
lsr
sta reg+7
inx
lda nota,x
sta reg+1
lsr
sta reg+8 ;~ -1 ottava
inx
lda nota,x
sta durata ;load durata
inx
storex
stx flagnt
uscita
jmp irqsys
nota
.byte 19,26,15 ;Frà
.byte 68,29,15 ;Mar
.byte 220,32,15 ;ti
.byte 19,26,15 ;no
.byte 19,26,15 ;Cam
.byte 68,29,15 ;pa
.byte 220,32,15 ;na
.byte 19,26,15 ;ro
.byte 220,32,15 ;Dor
.byte 201,34,15 ;mi
.byte 11,39,30 ;tu?
.byte 220,32,15 ;Dor
.byte 201,34,15 ;mi
.byte 11,39,30 ;tu?
.byte 11,39,8 ;Suo
.byte 213,43,8 ;na
.byte 11,39,8 ;le
.byte 201,34,8 ;cam
.byte 220,32,15 ;pa
.byte 19,26,15 ;ne
.byte 11,39,8 ;Suo
.byte 213,43,8 ;na
.byte 11,39,8 ;le
.byte 201,34,8 ;cam
.byte 220,32,15 ;pa
.byte 19,26,15 ;ne
.byte 68,29,15 ;Din
.byte 142,19,15 ;don
.byte 19,26,30 ;dàn!
.byte 68,29,15 ;Din
.byte 142,19,15 ;don
.byte 19,26,30 ;dàn!
.byte 0,0