33 /* internal work memory layout */
35 PB_MADDRH
: equ MEM_REG
36 PB_MADDRL
: equ MEM_REG+
0x01
38 PB_ADDR
: equ MEM_REG+
0x200
40 /* parameter block layout */
41 OUTBUF_ADDRH
: equ PB_ADDR
42 OUTBUF_ADDRL
: equ PB_ADDR+
0x01
44 SNDBUF_SADDRH
: equ PB_ADDR+
0x02
45 SNDBUF_SADDRL
: equ PB_ADDR+
0x03
46 SNDBUF_EADDRH
: equ PB_ADDR+
0x04
47 SNDBUF_EADDRL
: equ PB_ADDR+
0x05
48 SNDBUF_CADDRH
: equ PB_ADDR+
0x06
49 SNDBUF_CADDRL
: equ PB_ADDR+
0x07
55 FREQ_SMPH
: equ PB_ADDR+
0x0b
56 FREQ_SMPL
: equ PB_ADDR+
0x0c
58 SMP_CNT
: equ PB_ADDR+
0x0d
60 SMP_L
: equ PB_ADDR+
0x0e
61 SMP_R
: equ PB_ADDR+
0x0f
63 VOLUME_L
: equ PB_ADDR+
0x10
64 VOLUME_R
: equ PB_ADDR+
0x11
66 DELAY_SMPH
: equ PB_ADDR+
0x12
67 DELAY_SMPL
: equ PB_ADDR+
0x13
69 FLAGS_SMPH
: equ PB_ADDR+
0x14
70 FLAGS_SMPL
: equ PB_ADDR+
0x15
72 LOOP_PDS
: equ PB_ADDR+
0x16
73 LOOP_YN1
: equ PB_ADDR+
0x17
74 LOOP_YN2
: equ PB_ADDR+
0x18
76 /* flags and buffers used */
77 MEM_SMP_BUF
: equ
0x0800
78 MEM_TMP_BUF
: equ
0x0a00
79 MEM_SND_BUF
: equ
0x0c00 //buffer for output sound data
, will
be DMA
'd out to OUTBUF_SND
81 PB_STURCT_SIZE: equ 64
82 NUM_SAMPLES: equ 96 //process 2ms of sample data
83 DEF_FREQ_INT: equ 0x0001
85 VOICE_FLAGL_PAUSE: equ 0x0004
86 VOICE_FLAGL_LOOP: equ 0x0008
87 VOICE_FLAGL_ONCE: equ 0x0010
89 VOICE_FLAGH_END: equ 0x0010
90 VOICE_FLAGH_STOP: equ 0x0020
91 VOICE_FLAGH_RUN: equ 0x4000
93 ACCL_FMT_8BIT: equ 0x0019
94 ACCL_FMT_16BIT: equ 0x000a
96 ACCL_GAIN_8BIT: equ 0x0100
97 ACCL_GAIN_16BIT: equ 0x0800
149 jeq process_first_voice
152 jeq process_next_voice
186 srs @DMAMMEMH,$acc0.m
187 srs @DMAMMEML,$acc0.l
188 si @DMACR,#DMA_TO_CPU
229 lri $ar0,#MEM_SND_BUF
230 lris $acx1.l,#DMA_TO_CPU
231 lri $acx0.l,#NUM_SAMPLES*4
232 lr $acc0.m,@OUTBUF_ADDRH
233 lr $acc0.l,@OUTBUF_ADDRL
256 si @DMACR,#DMA_TO_DSP
262 si @DMACR,#DMA_TO_DSP
265 lri $ar0,#MEM_SND_BUF
268 lri $acx0.l,#NUM_SAMPLES*2
275 lr $acc1.m,@FLAGS_SMPL
276 andcf $acc1.m,#VOICE_FLAGL_PAUSE
279 lr $acc1.m,@FLAGS_SMPH
280 andcf $acc1.m,#VOICE_FLAGH_RUN
283 lri $ar1,#SNDBUF_SADDRH
291 lr $acc1.l,@FLAGS_SMPL
295 addi $acc1.m,#select_format
303 addi $acc1.m,#select_mixer
309 clr'l $acc0
: $acx0.h
,@$ar1
//left last sample
310 lrri $acx1.h
,@$ar1
//right last sample
316 lri $ar0
,#MEM_SND_BUF
317 lri $acx0.
l,#NUM_SAMPLES
327 bloop $acx0.
l,delay_loop
335 sr @DELAY_SMPH
,$acc0.h
336 sr @DELAY_SMPL
,$acc0.m
340 bloop $acx0.
l,dspmixer_loop_end
342 // right
/left channel sample mix
343 lrri $acc1.m
,@$ar0
// right channel
344 lrr $acc0.m
,@$ar0
// left channel
345 addr
'dr $acc1.m,$acx1.h : $ar0
346 addr's $acc0.m
,$acx0.h
: @$ar0
,$acc1.m
349 clr
'l $acc0 : $acx1.h,@$ar1
357 cmpis $acc0.m,#DEF_FREQ_INT
363 bloop $acx0.l,mono_8bits_end
364 lrs $acc1.m,@ACDAT //right channel
366 mrr $acc0.m,$acc1.m //left channel
371 bloop $acx0.l,stereo_8bits_end
372 lrs $acc1.m,@ACDAT //right channel
374 lrs $acc0.m,@ACDAT //left channel
379 bloop $acx0.l,mono_16bits_end
380 lrs $acc1.m,@ACDAT //right channel
382 mrr $acc0.m,$acc1.m //left channel
387 bloop $acx0.l,stereo_16bits_end
388 lrs $acc1.m,@ACDAT //right channel
390 lrs $acc0.m,@ACDAT //left channel
393 // multiply samples*volume
395 mulc $acc0.m,$acx0.h //left channel
397 mulcmv $acc1.m,$acx1.h,$acc0 //right channel
399 movp's $acc1
: @$ar1
,$acc0.m
425 lr $acc0.m
,@FLAGS_SMPH
426 ori $acc0.m
,#VOICE_FLAGH_END
427 sr @FLAGS_SMPH
,$acc0.m
429 si @DMACR
,#DMA_TO_CPU
439 lr $acc0.m
,@PB_MADDRH
440 lr $acc0.
l,@PB_MADDRL
441 srs @DMAMMEMH
,$acc0.m
442 srs @DMAMMEML
,$acc0.
l
444 si @DMABLEN
,#PB_STURCT_SIZE
453 srs @DMAMMEMH
,$acc0.m
454 srs @DMAMMEML
,$acc0.
l
465 //setup_accl
: acc0.m
= format
, acc1.m
= gain
, ar1
= sndbuf_start
516 andcf $acc1.m
,#0x8000
522 andcf $acc0.m
,#0x8000
528 andcf $acc1.m
,#0x8000
533 exception1
: // Stack overflow
545 exception5
: // Accelerator address overflow
562 exception7
: // External interrupt
(message from CPU
)