Non ici on a un générateur FM (YM2413) et un SN76489 (square + noise)
Le pilote prend en entrée des commandes comme celle-ci :
Code:
; jumping sound
Sound20 fdb $0000,$0101
fdb $8080,@a-Sound20,$F400
@a fcb $F5,$00,$9E,$05,$F0,$02,$01,$F8,$65,$A3,$15,$F2
La première ligne c'est le header, la seconde c'est le header de piste (il n'y en a qu'une ici).
Ensuite on a :
$F5 $00 : set tone 00
Un tone c'est un index dans une table "d'enveloppe" de volume, ainsi quand on va jouer un son ça va faire varier le volume dans le temps :
Code:
Flutter1
fcb 0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5
fcb 5,5,6,6,6,7,$80
Flutter2
fcb 0,2,4,6,8,$10,$80
...
Bon ici on n'utilise pas ça (valeur 0)
Ensuite : $9E $05 C'est une note suivi d'une durée
$F0,$02,$01,$F8,$65 : $F0 c'est la commande pour demander une modulation du signal (modification de la fréquence dans le temps). ici on attend $02 frame avant de la déclencher, la vitesse de modulation est toute les frames, on applique -8 (/4) à la fréquence de la note pendant $65 frames
Ensuite : $A3 $15 C'est une note suivi d'une durée
$F2 : balise de fin
Code:
; 70 notes (Note value $81=C3 $C7=G#8) with direct access
; (Note value $C8 is reserved for PSG3 to drive noise PSG4)
; Other notes can be accessed by transpose
PSGFrequencies
fdb $03F8,$03C0,$0388 ; A2 - B2
fdb $0356,$0327,$02FA,$02CF,$02A5,$0281,$025C,$023B,$021A,$01FC,$01E0,$01C4 ; C3 - B3
fdb $01AB,$0193,$017D,$0167,$0152,$0140,$012E,$011D,$010D,$00FE,$00F0,$00E2 ; C4 - B4
fdb $00D5,$00C9,$00BE,$00B3,$00A9,$00A0,$0097,$008E,$0086,$007F,$0078,$0071 ; C5 - B5
fdb $006A,$0064,$005F,$0059,$0054,$0050,$004B,$0047,$0043,$0040,$003C,$0039 ; C6 - B6
fdb $0035,$0032,$002F,$002C,$002A,$0028,$0025,$0023,$0022,$0020,$001F,$001D ; C7 - B7
fdb $001A,$0019,$0017,$0016,$0015,$0014,$0012,$0011,$0010,$0001 ; C8 - G#8
Tu vois qu'il faut peu d'octets pour jouer l'effet sonore d'un saut !
On est bien plus efficace qu'un sample ... mais il faut une carte son ;-)