L'an dernier j'expliquais la musique 1 bit. C'est pas mal, mais beaucoup moins riche que ce que ce que le CNA permet. Or j'ai pondu ce bout de code
Code:
(main)MP
ORG $9000
f_v0 equ 1234
f_v1 equ 2345
f_v2 equ 3456
f_v3 equ 4567
setdp *<-8
; compteur 24bits pour une voix
VOICE macro
LDB #00 ; 2
s0\0 set *-1
ADDB #f_\0&255 ; 2 LSB frequence
STB <s0\0 ; 4
LDD #S_BEG\0 ; 3
s2\0 set *-2
ADCB #f_\0<-8 ; 2 MSB frequence
ADCA #0 ; 2
CMPD #S_END\0 ; 5
LBHS L0\0 ; 5(6)
FCB $10 ; 1 ==> CMPD so no-op
L0\0 SUBD #S_LOOP\0-S_END\0 ; 4
std <s2\0 ; 5 => 35
endm
ldu #vol
ldx #100
frame
; fait avancer les 4 pointeurs sur sample
VOICE v0
VOICE v1
VOICE v2
VOICE v3 ; => 140
volv0 equ 7*16
volv1 equ 7*16
volv2 equ 7*16
volv3 equ 7*16
; mix des 4 samples après ajout des volumes
ldb <s2v0 ; 4
orb #volv0 ; 2 (volume voix 0)
lda b,u ; 5
ldb <s2v1 ; 4
orb #volv1 ; 2 (volume voix 1)
adda b,u ; 5
ldb <s2v2 ; 4
orb #volv2 ; 2 (volume voix 2)
adda b,u ; 5
ldb <s2v3 ; 4
orb #volv3 ; 2 (volume voix 3)
adda b,u ; 5 ==> 44
sta $E7CD ; 5 sortie son
NOP ; 2 attente
leax -1,x ; 5
lbne frame ; 5(6) ==> 200 cycles
vol fcb 0,0,0,0 ; table des volumes
fcb 0,0,0,0
fcb 0,0,0,0
fcb 0,0,0,0
;... on a 16 tables de 16 valeurs pour des volumes de 0 à 15
vol15 fcb 0,1,2,3 ; vol max
fcb 4,5,6,7
fcb 8,9,10,11
fcb 12,13,14,15
; un sample bidon
SAMPLE macro
; debut
S_BEG\0
fcb $1,$2,$3 ; sample: 4 bits
; bouclage quand on a déjà atteint la fin une fois
S_LOOP\0
fcb $3,$2,$1
; fin
S_END\0
endm
SAMPLE v0
SAMPLE v1
SAMPLE v2
SAMPLE v3
end
Qui joue 5000 fois par secondes 4 samples (4bits) incépendants, situés n'importe où en RAM, chacun avec son propre volume, et sa propre répétition. Le truc de programmation cool c'est le FCB $10, qui transforme le SUBD faisant le bouclage du sample en CMPD inoffensif tout en compensant le LBHS pour avoir un timing constant. Je suis assez fier de cette astuce
L'ensemble de la boucle "frame" dure 100*200µs, soit 20ms, ce qui est pile la durée d'un VBL et d'une "frame" dans un module AMIGA ....
Ohoh!
Ceci permettrait techniquement de pouvoir jouer des MODs amiga sur thomson après conversion dans un format sympathique. Je n'ai pas essayé de voir si les échantillons sur 4bits@5khz sonnent bien, mais la perspective de jouer des MODs me plait bien. En tout cas au niveau des timings on est bon.