;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* ;*÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷* ;* * ;* DSP-replay routine * ;* for Graoumf Tracker modules (.GT2) * ;* Falcon 030 * ;* Code DSP 56001 * ;* * ;*÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷* ;* Version : 4/11/1996, v0.87 * ;* Tab setting : 11 * ;* Fichier g‚n‚r‚ : PLAYDSP (… convertir en .LOD puis en .P56) * ;*÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷(C)oderight L. de Soras 1994-96* ;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* ; Ne jamais mettre de e accent grave sous peine d'erreur de compilation ; This mixer is adapted by earx. ; Optimised for size and speed. ; Multitasked DSP is possible. ; ; Beware: using multitasking, implies _not_ using the following: ; - r4/m4, used for transmitting samples in interrupt ; - X:$3BB0 - X:$4000, used for storing samples from cpu ; - Y:$2D40 - Y:$4000, contains doublebuffers for mixing ;*~~~ Constantes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* PLAYDSP: ; Ident $0,$8700 ; Graoumf Tracker - by Laurent de SORAS (Dumbo/BiG NoZ) 94-96 ; Opt il ; Supprime l'affichage du listing PBC: = $ffe0 PCC: = $ffe1 ; Host HSR: = $ffe9 HRX: = $ffeb HTX: = $ffeb ; SSI CRA: = $ffec CRB: = $ffed SSISR: = $ffee RX: = $ffef TX: = $ffef ; Interruptions BCR: = $fffe IPR: = $ffff YMEM_ORG: = $4000-4800 ;*~~~ Macros ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* readhost: Macro jclr #0,x:< $200 (pour xxxx>$200, p:xxxx = y:xxxx) mixbuf1: Ds 1200*2 ; Buffers stereo de mixage mixbuf2: Ds 1200*2 mixbuf3: ;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* Org p:$0 jmp mixbuf1,x0 cmp x0,a jne <_buf2 move #>mixbuf2,a ; Premier buffer jmp <_tst _buf2: move #>mixbuf1,a ; Deuxieme buffer _tst: move a,x:2,n5 move x:(r1),y0 move x:sambuf,a move x:$7ff800,x0 jeq $400000,x0 jeq sambuf,a move x:$7ff800,x0 jeq $400000,x0 jeq sambuf,a move x:sambuf,a move x:sambuf+1,a move x:sambuf,a move x: 24 bits move x: 24 bits move x:$7ff800,x1 jeq $400000,x1 jeq $7ff800,x1 cmp x1,b jeq $400000,x1 cmp x1,b jeq $1,x0 add x0,a move a1,x:$ffff,m0 move m0,m1 move m0,m4 move m0,m5 clr a #>mixbuf1,r4 move #$4100,x:<$1f8,x:<$1,x:<$0,x:<$3800,x:<mixbuf2,x0 move x0,x:mixbuf1,r4 movep #>$5800,x:<$2,x0 cmp x0,a jeq sambuf,r0 ; r0 pointe le buffer de r‚ception move #>sambuf+1,r1 move #<2,n0 move n0,n1 move #>$8000,x1 ; Pour recalibrer de 8 en 24 bits ; Ici on ne fait pas d'amplification parceque ; 1) Ca ne peut pas ˆtre utile sur du 8 bits ; 2) C'est pas du tout pratique … faire move x:sambuf,r0 ; r0 pointe le buffer de r‚ception move #>$80,a ; R‚ajusteur de 16 en 24 bits move x:mixbuf1,x0 cmp x0,a jne mixbuf2,a sub a,b move b,x:mixbuf1,r4 move #>mixbuf2,x0 move x0,x:mixbuf1,a sub a,b move b,x:mixbuf2,r4 move #>mixbuf1,x0 move x0,x:= taille_b1 move x:100*2,x0 ; * 2 pour corriger le 2eme asl b move a0,x1 mpy x0,x1,a ; Conversion en pourcentage move a,x:255,a move a,x:$0800,x:<mixbuf1,x0 cmp x0,a jne <_nextbuf1 _nextbuf2: move #>mixbuf1,r4 move #>mixbuf2,x0 move x0,x:mixbuf2,r4 move #>mixbuf1,x0 move x0,x:1,a move a,x:$5800,x:<