source: buchla-68k/ram/execkey.s@ 7c0efb6

Last change on this file since 7c0efb6 was 8325447, checked in by Thomas Lopatic <thomas@…>, 7 years ago

Removed _ prefix.

  • Property mode set to 100644
File size: 100.2 KB
Line 
1| ------------------------------------------------------------------------------
2| execkey.s -- execute key -- FPU function start subroutine
3| Version 15 -- 1988-08-29 -- D.N. Lynx Crowe
4| Hand optimized version of execkey() and fnstart() from C compiler output
5| ------------------------------------------------------------------------------
6 .text
7
8LOC_EOR = 0
9LOC_SUB = 1
10
11 .xdef execkey
12
13 .xref xgetran
14
15 .xref rsntab
16 .xref expbit
17 .xref io_fpu
18 .xref legato
19 .xref prstab
20 .xref ptoftab
21 .xref timemlt
22 .xref valents
23 .xref vbufs
24 .xref vce2grp
25 .xref vce2trg
26 .xref veltab
27 .xref vpsms
28
29 .page
30
31| Offsets for execkey() parameters
32| --------------------------------
33TRG = 8 | WORD -- trigger
34PCH = 10 | WORD -- pitch
35VCE = 12 | WORD -- voice (0..11)
36TAG = 14 | WORD -- I_TM_... inversion tag
37
38| Register variables
39| ------------------
40A_FP = A5 | LONG -- struct idfnhdr *
41A_FPU = A4 | LONG -- FPU base address
42A_SMP = A3 | LONG -- struct sment *
43
44R_FPMANT = D7 | WORD -- FPU time mantissa
45R_FPEXP = D6 | WORD -- FPU time exponent
46R_FPCTL = D5 | WORD -- FPU control word
47R_I = D4 | WORD -- loop index
48R_FPVAL = D3 | WORD -- FPU value
49
50| Local (stack) variables
51| -----------------------
52PT = -4 | LONG -- instpnt *
53VEP = -8 | LONG -- struct valent *
54OLDI = -10 | WORD -- old IPL (sr)
55OCTYPE = -12 | WORD -- oscillator 1 mode / scratch
56VP = -14 | WORD -- voice # + function # index
57SRCNUM = -16 | WORD -- general source #
58SRCVAL = -18 | WORD -- general source value
59TSRCVAL = -20 | WORD -- temporary general source value
60MLTVAL = -22 | WORD -- general source multiplier
61TFPVAL = -24 | WORD -- temporary FPU value
62LTMP = -28 | LONG -- long temporary
63IP = -32 | LONG -- struct instdef *
64GROUP = -34 | WORD -- group number << 4
65
66| Symbolic constants
67| ------------------
68LASTLOCL = GROUP | last local on the stack
69
70FPU_DI = 0x2200 | sr value for disabling FPU interrupts
71PITCHMAX = 21920 | maximum pitch value
72VALMAX = 0x00007D00 | maximum FPU value
73VALMIN = 0xFFFF8300 | minimum FPU value
74VBLEN = 3938 | length of a voice buffer
75LSPCH = 2 | left shift for pitch sources
76
77 .page
78
79| execkey(trg, pch, vce)
80| short trg, pch, vce;
81| {
82
83execkey: link A6,#LASTLOCL
84 movem.l D2-R_FPMANT/A_SMP-A_FP,-(sp)
85
86| ip = &vbufs[vce];
87
88 move.w VCE(A6),D0
89 asl.w #2,D0
90 lea vbtab,A0
91 move.l 0(A0,D0.W),IP(A6)
92
93| vce2trg[vce] = trg;
94
95 lsr.w #1,D0
96 lea vce2trg,A0
97 move.w TRG(A6),0(A0,D0.W)
98
99| group = (vce2grp[vce] - 1) << 4;
100
101 move.w VCE(A6),A0
102 add.l A0,A0
103 move.l #vce2grp,A1
104 clr.l D0
105 move.w 0(A0,A1.l),D0
106 sub.w #1,D0
107 asl.w #4,D0
108 move.w D0,GROUP(A6)
109
110 .page
111| ------------------------------------------------------------------------------
112| Start function 0 -- Frq 1
113| ------------------------------------------------------------------------------
114
115| if (ip->idhfnc[0].idftmd & I_TM_KEY) {
116
117 move.l IP(A6),A0
118 move.b 93(A0),D0
119 move.w TAG(A6),D1
120 eor.w D1,D0
121 btst #0,D0
122 bne FN00A
123
124 jmp FN01
125
126| vp = (vce << 4) + 1;
127
128FN00A: move VCE(A6),D0
129 asl #4,D0
130 add.w #1,D0
131 move D0,VP(A6)
132
133| fpu = io_fpu + FPU_OFNC + (vp << 4);
134
135 asl #5,D0
136 ext.l D0
137 move.l D0,A_FPU
138 add.l #io_fpu+0x4000,A_FPU
139
140| fp = &ip->idhfnc[0];
141
142 move.l IP(A6),A_FP
143 add.l #86,A_FP
144
145| pt = &ip->idhpnt[fp->idfpt1];
146
147 clr.l D0
148 move.b 6(A_FP),D0
149 lsl.l #2,D0
150 move.l D0,D1
151 add.l D0,D0
152 add.l D1,D0
153 add.l IP(A6),D0
154 add.l #242,D0
155 move.l D0,PT(A6)
156
157 .page
158
159| srcnum = group | fp->idfsrc;
160
161 move.w GROUP(A6),D0
162 ext.l D0
163 clr.l D1
164 move.b 4(A_FP),D1
165 or D1,D0
166 move D0,SRCNUM(A6)
167
168| vep = &valents[srcnum];
169
170 add.l D0,D0
171 move.l D0,D1
172 lsl.l #2,D0
173 add.l D1,D0
174 add.l #valents,D0
175 move.l D0,VEP(A6)
176
177| smp = vpsms[vp];
178
179 move VP(A6),A0
180 add.l A0,A0
181 add.l A0,A0
182 add.l #vpsms,A0
183 move.l (A0),A_SMP
184
185| if (srcnum NE smp->sm) {
186
187 clr D0
188 move 10(A_SMP),D0
189 cmp SRCNUM(A6),D0
190 beq F00L113
191
192| (smp->prv)->nxt = smp->nxt;
193
194 move.l 4(A_SMP),A0
195 move.l (A_SMP),(A0)
196
197| (smp->nxt)->prv = smp->prv;
198
199 move.l (A_SMP),A0
200 move.l 4(A_SMP),4(A0)
201
202| smp->prv = (struct sment *)vep;
203
204 move.l VEP(A6),4(A_SMP)
205
206| smp->nxt = vep->nxt;
207
208 move.l VEP(A6),A0
209 move.l (A0),(A_SMP)
210
211| (vep->nxt)->prv = smp;
212
213 move.l VEP(A6),A0
214 move.l (A0),A0
215 move.l A_SMP,4(A0)
216
217| vep->nxt = smp;
218
219 move.l VEP(A6),A0
220 move.l A_SMP,(A0)
221
222| smp->sm = srcnum;
223
224 move SRCNUM(A6),10(A_SMP)
225
226| }
227
228| mltval = fp->idfmlt;
229
230F00L113: move 2(A_FP),MLTVAL(A6)
231
232 .page
233
234| switch (fp->idfsrc) {
235
236 move.b 4(A_FP),D0
237 ext.w d0
238 cmp #10,D0
239 bhi F00L122
240
241 asl #2,D0
242 lea F00L123,A0
243 movea.l 0(A0,D0.W),A0
244 jmp (A0)
245
246| case SM_NONE:
247| mltval = 0;
248
249F00L116: clr MLTVAL(A6)
250
251| tsrcval = 0;
252
253 clr TSRCVAL(A6)
254
255| break;
256
257 bra F00L114
258
259| case SM_RAND:
260| tsrcval = xgetran(mltval);
261
262F00L117: move MLTVAL(A6),(sp)
263 jsr xgetran
264 move D0,TSRCVAL(A6)
265
266| break;
267
268 bra F00L114
269
270| case SM_PTCH:
271| tsrcval = pch;
272
273F00L118: move PCH(A6),TSRCVAL(A6)
274
275| break;
276
277 bra F00L114
278
279 .page
280
281| case SM_FREQ:
282| tsrcval = ptoftab[(pch >> 7) & 0x00FF];
283
284F00L119: move.w PCH(A6),D0
285 asr.w #7,D0
286 and.w #0x00FF,D0
287 move.w D0,A0
288 add.l A0,A0
289 add.l #ptoftab,A0
290 move.w (A0),TSRCVAL(A6)
291
292| break;
293
294 bra F00L114
295
296| case SM_KVEL:
297| tsrcval = veltab[trg];
298
299F00L120: move.w TRG(A6),A0
300 add.l A0,A0
301 add.l #veltab,A0
302 move.w (A0),TSRCVAL(A6)
303
304| break;
305
306 bra F00L114
307
308| case SM_KPRS:
309| tsrcval = prstab[trg];
310
311F00L121: move.w TRG(A6),A0
312 add.l A0,A0
313 add.l #prstab,A0
314 move.w (A0),TSRCVAL(A6)
315
316| break;
317
318 bra F00L114
319
320| default:
321| tsrcval = vep->val;
322
323F00L122: move.l VEP(A6),A0
324 move.w 8(A0),TSRCVAL(A6)
325
326| }
327
328 .page
329
330| srcval = addpch(tsrcval, 0);
331
332F00L114: move.w TSRCVAL(A6),D0
333 ext.l D0
334 asr.l #5,D0
335| sub.l #500,D0
336 asl.l #LSPCH,D0
337 cmp.l #PITCHMAX,D0
338 ble F00L129A
339
340 move.l #PITCHMAX,D0
341
342F00L129A: move D0,SRCVAL(A6)
343
344 .page
345
346| if (pt->ipvsrc) {
347
348F00L124: move.l PT(A6),A0
349 tst.b 6(A0)
350 beq F00L136
351
352| switch (pt->ipvsrc) {
353
354 move.l PT(A6),A0
355 move.b 6(A0),D0
356 ext.w D0
357 sub #1,D0
358 cmp #9,D0
359 bhi F00L144
360
361 asl #2,D0
362 lea F00L145,A0
363 move.l 0(A0,D0.W),A0
364 jmp (A0)
365
366| case SM_RAND:
367| ltmp = xgetran(pt_>ipvmlt);
368
369F00L139: move.l PT(A6),A0
370 move 4(A0),(sp)
371 jsr xgetran
372 ext.l D0
373 move.l D0,LTMP(A6)
374
375| break;
376
377 bra F00L137
378
379| case SM_PTCH:
380| ltmp = pch;
381
382F00L140: move PCH(A6),A0
383 move.l A0,LTMP(A6)
384
385| break;
386
387 bra F00L137
388
389 .page
390
391| case SM_FREQ:
392| ltmp = ptoftab[(pch >> 7) & 0x00FF];
393
394F00L141: move PCH(A6),D0
395 asr #7,D0
396 and #255,D0
397 move D0,A0
398 add.l A0,A0
399 move.l #ptoftab,A1
400 move 0(A0,A1.l),D0
401 ext.l D0
402 move.l D0,LTMP(A6)
403
404| break;
405
406 bra F00L137
407
408| case SM_KVEL:
409| ltmp = veltab[trg];
410
411F00L142: move TRG(A6),A0
412 add.l A0,A0
413 move.l #veltab,A1
414 move 0(A0,A1.l),D0
415 ext.l D0
416 move.l D0,LTMP(A6)
417
418| break;
419
420 bra F00L137
421
422 .page
423
424| case SM_KPRS:
425| ltmp = prstab[trg];
426
427F00L143: move TRG(A6),A0
428 add.l A0,A0
429 move.l #prstab,A1
430 move 0(A0,A1.l),D0
431 ext.l D0
432 move.l D0,LTMP(A6)
433
434| break;
435
436 bra F00L137
437
438 .page
439
440| default:
441| ltmp = valents[group | pt->ipvsrc].val;
442
443F00L144: move.l PT(A6),A0
444 clr.l D0
445 move.b 6(A0),D0
446 or.w GROUP(A6),D0
447 add.l D0,D0
448 move.l D0,D1
449 lsl.l #2,D0
450 add.l D1,D0
451 move.l D0,A0
452 move.l #valents,A1
453 clr.l D0
454 move 8(A0,A1.l),D0
455 move.l D0,LTMP(A6)
456
457| }
458
459
460 .page
461
462| ltmp = (ltmp * pt->ipvmlt) >> 15;
463
464F00L137: move.l PT(A6),A0
465 move.w 4(A0),D0
466 move.w LTMP+2(A6),D1
467 muls D1,D0
468 move.l #15,D1
469 asr.l D1,D0
470 move.l D0,LTMP(A6)
471
472| ltmp += (long)pt->ipval;
473
474 move.l PT(A6),A0
475 move 2(A0),D0
476 ext.l D0
477 add.l D0,LTMP(A6)
478
479| if (ltmp GT (long)VALMAX)
480| ltmp = (long)VALMAX;
481
482 cmp.l #VALMAX,LTMP(A6)
483 ble F00L146
484
485 move.l #VALMAX,LTMP(A6)
486 bra F00L147
487
488| else if (ltmp LT (long)VALMIN)
489| ltmp = (long)VALMIN;
490
491F00L146: cmp.l #VALMIN,LTMP(A6)
492 bge F00L147
493
494 move.l #VALMIN,LTMP(A6)
495
496| tfpval = (short)ltmp;
497
498F00L147: move.w LTMP+2(A6),TFPVAL(A6)
499 bra F00L149
500
501| } else {
502
503| tfpval = pt->ipval;
504
505F00L136: move.l PT(A6),A0
506 move 2(A0),TFPVAL(A6)
507
508| }
509
510 .page
511
512| fpmant = (((long)pt->iptim & 0x0000FFF0L)
513| | ((long)timemlt & 0x0000FFFFL)) >> 15;
514
515F00L149: move.l PT(A6),A0
516 move.w (A0),D0
517 move.w D0,D2
518 andi.w #0xFFF0,D0
519 move.w timemlt,D1
520 muls D1,D0
521 move.l #15,D1
522 asr.l D1,D0
523 move D0,R_FPMANT
524
525| fpexp = expbit[pt->iptim & 0x000F];
526
527 and #0x000F,D2
528 move D2,A0
529 add.l A0,A0
530 add.l #expbit,A0
531 move (A0),R_FPEXP
532
533 .page
534
535| octype = ip->idhos1c & OC_MOD;
536
537F00L152: move.l IP(A6),A0
538 move.b 74(A0),D0
539 and #3,D0
540
541| if ((octype EQ OC_FRQ) OR (octype EQ OC_PCH))
542
543 cmp #2,D0
544 beq F00L1001
545
546 cmp #3,D0
547 bne F00L153
548
549| fp->idfpch = ip->idhos1v;
550
551F00L1001: move.l IP(A6),A0
552 move 78(A0),(A_FP)
553 bra F00L154
554
555| else
556| fp->idfpch = pch + ip->idhos1v;
557
558F00L153: move.w PCH(A6),D0
559 ext.l D0
560 move.w 78(A0),D1
561 ext.l D1
562 add.l d1,d0
563
564| if (fp->idfpch > PITCHMAX)
565| fp->idfpch = PITCHMAX;
566
567 cmp.l #PITCHMAX,d0
568 ble F00153A
569
570 move.l #PITCHMAX,d0
571
572F00153A: move.w d0,(A_FP)
573
574| fpval = addpch(tfpval, fp->idfpch);
575
576F00L154: move.w TFPVAL(A6),D1
577 ext.l D1
578 asr.l #5,D1
579 sub.l #500,D1
580 asl.l #LSPCH,D1
581 move.w (A_FP),D0
582 ext.l D0
583 add.l D1,D0
584 cmp.l #PITCHMAX,D0
585 ble F00L154A
586
587 move.l #PITCHMAX,D0
588
589F00L154A: move D0,R_FPVAL
590
591 .page
592
593 move.b 5(A_FP),D0
594 ext.w D0
595 sub.w #1,D0
596 movea.l PT(A6),A0
597
598| oldi = setipl(FPU_DI);
599
600 move sr,OLDI(A6)
601 move #FPU_DI,sr
602
603F00L168: clr.b 10(A0)
604 add.l #12,A0
605 dbra D0,F00L168
606
607 .page
608
609| fp->idftmd ^= I_NVBITS;
610
611F00L165: eor.b #24,7(A_FP)
612
613| fpctl = (fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0003;
614
615 move.b 7(A_FP),R_FPCTL
616 and #28,R_FPCTL
617 or #3,R_FPCTL
618
619| fp->idfcpt = fp->idfpt1;
620
621 move.b 6(A_FP),8(A_FP)
622
623| fp->idftmd |= I_ACTIVE;
624
625 or.b #2,7(A_FP)
626
627| fp->idftrf = trg;
628
629 move TRG(A6),10(A_FP)
630
631| |(fpu + (long)FPU_TCV1) = srcval;
632
633 move SRCVAL(A6),0x8(A_FPU)
634
635| ++octype;
636
637 add #1,OCTYPE(A6)
638
639| |(fpu + (long)FPU_TSF1) = mltval;
640
641 move MLTVAL(A6),0xA(A_FPU)
642
643| ++octype;
644
645 add #1,OCTYPE(A6)
646
647| |(fpu + (long)FPU_TMNT) = fpmant;
648
649 move R_FPMANT,0x14(A_FPU)
650
651| ++octype;
652
653 add #1,OCTYPE(A6)
654
655| |(fpu + (long)FPU_TEXP) = fpexp;
656
657 move R_FPEXP,0x16(A_FPU)
658
659| ++octype;
660
661 add #1,OCTYPE(A6)
662
663 .page
664
665| if (fp->idftmd & I_VNSUBN)
666
667 btst #3,7(A_FP)
668 beq F00L169
669
670| |(fpu + (long)FPU_TNV1) = fpval;
671
672 move R_FPVAL,0x1C(A_FPU)
673 bra F00L170
674
675| else
676| |(fpu + (long)FPU_TNV0) = fpval;
677
678F00L169: move R_FPVAL,2(A_FPU)
679
680| ++octype;
681
682F00L170: add #1,OCTYPE(A6)
683
684| |(fpu + (long)FPU_TCTL) = fpctl;
685
686 move R_FPCTL,(A_FPU)
687
688| setipl(oldi);
689
690 move OLDI(A6),sr
691| }
692
693 .page
694| ------------------------------------------------------------------------------
695| Start function 1 -- Frq 2
696| ------------------------------------------------------------------------------
697| if (legato) {
698
699| legato = 0;
700| return;
701| }
702FN01: tst.w legato
703 beq FN01AA
704
705 clr.w legato
706 bra FNEXIT
707
708| if (ip->idhfnc[1].idftmd & I_TM_KEY) {
709
710FN01AA: move.l IP(A6),A0
711 move.b 105(A0),D0
712 move.w TAG(A6),D1
713 eor.w D1,D0
714 btst #0,D0
715 bne FN01A
716
717 jmp FN02
718
719| vp = (vce << 4) + 3;
720
721FN01A: move VCE(A6),D0
722 asl #4,D0
723 add.w #3,D0
724 move D0,VP(A6)
725
726| fpu = io_fpu + FPU_OFNC + (vp << 4);
727
728 asl #5,D0
729 ext.l D0
730 move.l D0,A_FPU
731 add.l #io_fpu+0x4000,A_FPU
732
733| fp = &ip->idhfnc[1];
734
735 move.l #12,A_FP
736 add.l IP(A6),A_FP
737 add.l #86,A_FP
738
739| pt = &ip->idhpnt[fp->idfpt1];
740
741 clr.l D0
742 move.b 6(A_FP),D0
743 lsl.l #2,D0
744 move.l D0,D1
745 add.l D0,D0
746 add.l D1,D0
747 add.l IP(A6),D0
748 add.l #242,D0
749 move.l D0,PT(A6)
750
751 .page
752
753| srcnum = group | fp->idfsrc;
754
755 move.w GROUP(A6),D0
756 ext.l D0
757 clr.l D1
758 move.b 4(A_FP),D1
759 or D1,D0
760 move D0,SRCNUM(A6)
761
762| vep = &valents[srcnum];
763
764 add.l D0,D0
765 move.l D0,D1
766 lsl.l #2,D0
767 add.l D1,D0
768 add.l #valents,D0
769 move.l D0,VEP(A6)
770
771| smp = vpsms[vp];
772
773 move VP(A6),A0
774 add.l A0,A0
775 add.l A0,A0
776 add.l #vpsms,A0
777 move.l (A0),A_SMP
778
779| if (srcnum NE smp->sm) {
780
781 clr D0
782 move 10(A_SMP),D0
783 cmp SRCNUM(A6),D0
784 beq F01L113
785
786| (smp->prv)->nxt = smp->nxt;
787
788 move.l 4(A_SMP),A0
789 move.l (A_SMP),(A0)
790
791| (smp->nxt)->prv = smp->prv;
792
793 move.l (A_SMP),A0
794 move.l 4(A_SMP),4(A0)
795
796| smp->prv = (struct sment *)vep;
797
798 move.l VEP(A6),4(A_SMP)
799
800| smp->nxt = vep->nxt;
801
802 move.l VEP(A6),A0
803 move.l (A0),(A_SMP)
804
805| (vep->nxt)->prv = smp;
806
807 move.l VEP(A6),A0
808 move.l (A0),A0
809 move.l A_SMP,4(A0)
810
811| vep->nxt = smp;
812
813 move.l VEP(A6),A0
814 move.l A_SMP,(A0)
815
816| smp->sm = srcnum;
817
818 move SRCNUM(A6),10(A_SMP)
819
820| }
821
822| mltval = fp->idfmlt;
823
824F01L113: move 2(A_FP),MLTVAL(A6)
825
826 .page
827
828| switch (fp->idfsrc) {
829
830 move.b 4(A_FP),D0
831 ext.w d0
832 cmp #10,D0
833 bhi F01L122
834
835 asl #2,D0
836 lea F01L123,A0
837 movea.l 0(A0,D0.W),A0
838 jmp (A0)
839
840| case SM_NONE:
841| mltval = 0;
842
843F01L116: clr MLTVAL(A6)
844
845| tsrcval = 0;
846
847 clr TSRCVAL(A6)
848
849| break;
850
851 bra F01L114
852
853| case SM_RAND:
854| tsrcval = xgetran(mltval);
855
856F01L117: move MLTVAL(A6),(sp)
857 jsr xgetran
858 move D0,TSRCVAL(A6)
859
860| break;
861
862 bra F01L114
863
864| case SM_PTCH:
865| tsrcval = pch;
866
867F01L118: move PCH(A6),TSRCVAL(A6)
868
869| break;
870
871 bra F01L114
872
873 .page
874
875| case SM_FREQ:
876| tsrcval = ptoftab[(pch >> 7) & 0x00FF];
877
878F01L119: move PCH(A6),D0
879 asr #7,D0
880 and #255,D0
881 move D0,A0
882 add.l A0,A0
883 add.l #ptoftab,A0
884 move (A0),TSRCVAL(A6)
885
886| break;
887
888 bra F01L114
889
890| case SM_KVEL:
891| tsrcval = veltab[trg];
892
893F01L120: move TRG(A6),A0
894 add.l A0,A0
895 add.l #veltab,A0
896 move (A0),TSRCVAL(A6)
897
898| break;
899
900 bra F01L114
901
902| case SM_KPRS:
903| tsrcval = prstab[trg];
904
905F01L121: move TRG(A6),A0
906 add.l A0,A0
907 add.l #prstab,A0
908 move (A0),TSRCVAL(A6)
909
910| break;
911
912 bra F01L114
913
914| default:
915| tsrcval = vep->val;
916
917F01L122: move.l VEP(A6),A0
918 move 8(A0),TSRCVAL(A6)
919
920| }
921
922 .page
923
924| srcval = addpch(tsrcval, 0);
925
926F01L114: move.w TSRCVAL(A6),D0
927 ext.l D0
928 asr.l #5,D0
929| sub.l #500,D0
930 asl.l #LSPCH,D0
931 cmp.l #PITCHMAX,D0
932 ble F01L129A
933
934 move.l #PITCHMAX,D0
935
936F01L129A: move D0,SRCVAL(A6)
937
938 .page
939
940| if (pt->ipvsrc) {
941
942F01L124: move.l PT(A6),A0
943 tst.b 6(A0)
944 beq F01L136
945
946| switch (pt->ipvsrc) {
947
948 move.l PT(A6),A0
949 move.b 6(A0),D0
950 ext.w D0
951 sub #1,D0
952 cmp #9,D0
953 bhi F01L144
954
955 asl #2,D0
956 lea F01L145,A0
957 move.l 0(A0,D0.W),A0
958 jmp (A0)
959
960| case SM_RAND:
961| ltmp = xgetran(pt_>ipvmlt);
962
963F01L139: move.l PT(A6),A0
964 move 4(A0),(sp)
965 jsr xgetran
966 ext.l D0
967 move.l D0,LTMP(A6)
968
969| break;
970
971 bra F01L137
972
973| case SM_PTCH:
974| ltmp = pch;
975
976F01L140: move PCH(A6),A0
977 move.l A0,LTMP(A6)
978
979| break;
980
981 bra F01L137
982
983 .page
984
985| case SM_FREQ:
986| ltmp = ptoftab[(pch >> 7) & 0x00FF];
987
988F01L141: move PCH(A6),D0
989 asr #7,D0
990 and #255,D0
991 move D0,A0
992 add.l A0,A0
993 move.l #ptoftab,A1
994 move 0(A0,A1.l),D0
995 ext.l D0
996 move.l D0,LTMP(A6)
997
998| break;
999
1000 bra F01L137
1001
1002| case SM_KVEL:
1003| ltmp = veltab[trg];
1004
1005F01L142: move TRG(A6),A0
1006 add.l A0,A0
1007 move.l #veltab,A1
1008 move 0(A0,A1.l),D0
1009 ext.l D0
1010 move.l D0,LTMP(A6)
1011
1012| break;
1013
1014 bra F01L137
1015
1016 .page
1017
1018| case SM_KPRS:
1019| ltmp = prstab[trg];
1020
1021F01L143: move TRG(A6),A0
1022 add.l A0,A0
1023 move.l #prstab,A1
1024 move 0(A0,A1.l),D0
1025 ext.l D0
1026 move.l D0,LTMP(A6)
1027
1028| break;
1029
1030 bra F01L137
1031
1032 .page
1033
1034| default:
1035| ltmp = valents[group | pt->ipvsrc].val;
1036
1037F01L144: move.l PT(A6),A0
1038 clr.l D0
1039 move.b 6(A0),D0
1040 or.w GROUP(A6),D0
1041 add.l D0,D0
1042 move.l D0,D1
1043 lsl.l #2,D0
1044 add.l D1,D0
1045 move.l D0,A0
1046 move.l #valents,A1
1047 clr.l D0
1048 move 8(A0,A1.l),D0
1049 move.l D0,LTMP(A6)
1050
1051| }
1052
1053
1054 .page
1055
1056| ltmp = (ltmp * pt->ipvmlt) >> 15;
1057
1058F01L137: move.l PT(A6),A0
1059 move.w 4(A0),D0
1060 move.w LTMP+2(A6),D1
1061 muls D1,D0
1062 move.l #15,D1
1063 asr.l D1,D0
1064 move.l D0,LTMP(A6)
1065
1066| ltmp += (long)pt->ipval;
1067
1068 move.l PT(A6),A0
1069 move 2(A0),D0
1070 ext.l D0
1071 add.l D0,LTMP(A6)
1072
1073| if (ltmp GT (long)VALMAX)
1074| ltmp = (long)VALMAX;
1075
1076 cmp.l #VALMAX,LTMP(A6)
1077 ble F01L146
1078
1079 move.l #VALMAX,LTMP(A6)
1080 bra F01L147
1081
1082| else if (ltmp LT (long)VALMIN)
1083| ltmp = (long)VALMIN;
1084
1085F01L146: cmp.l #VALMIN,LTMP(A6)
1086 bge F01L147
1087
1088 move.l #VALMIN,LTMP(A6)
1089
1090| tfpval = (short)ltmp;
1091
1092F01L147: move.w LTMP+2(A6),TFPVAL(A6)
1093 bra F01L149
1094
1095| } else {
1096
1097| tfpval = pt->ipval;
1098
1099F01L136: move.l PT(A6),A0
1100 move 2(A0),TFPVAL(A6)
1101
1102| }
1103
1104 .page
1105
1106| fpmant = (((long)pt->iptom & 0x0000FFF0L)
1107| | ((long)timemlt & 0x0000FFFFL)) >> 15;
1108
1109F01L149: move.l PT(A6),A0
1110 move.w (A0),D0
1111 move.w D0,D2
1112 andi.w #0xFFF0,D0
1113 move.w timemlt,D1
1114 muls D1,D0
1115 move.l #15,D1
1116 asr.l D1,D0
1117 move D0,R_FPMANT
1118
1119| fpexp = expbit[pt->iptim & 0x000F];
1120
1121 and #0x000F,D2
1122 move D2,A0
1123 add.l A0,A0
1124 add.l #expbit,A0
1125 move (A0),R_FPEXP
1126
1127 .page
1128
1129| fp->idfpch = ip->idhos2v;
1130
1131F01L155: move.l IP(A6),A0
1132 move.w 80(A0),(A_FP)
1133
1134| fpval = addpch(tfpval, fp_>idfpch);
1135
1136 move.w TFPVAL(A6),D1
1137 ext.l D1
1138 asr.l #5,D1
1139 sub.l #500,D1
1140 asl.l #LSPCH,D1
1141 move.w (A_FP),D0
1142 ext.l D0
1143 add.l D1,D0
1144 cmp.l #PITCHMAX,D0
1145 ble F01L155A
1146
1147 move.l #PITCHMAX,D0
1148
1149F01L155A: move D0,R_FPVAL
1150
1151 .page
1152
1153 move.b 5(A_FP),D0
1154 ext.w D0
1155 sub.w #1,D0
1156 movea.l PT(A6),A0
1157
1158| oldi = setipl(FPU_DI);
1159
1160 move sr,OLDI(A6)
1161 move #FPU_DI,sr
1162
1163F01L168: clr.b 10(A0)
1164 add.l #12,a0
1165 dbra D0,F01L168
1166
1167 .page
1168
1169| fp->idftmd ^= I_NVBITS;
1170
1171F01L165: eor.b #24,7(A_FP)
1172
1173| fpctl = (fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0003;
1174
1175 move.b 7(A_FP),R_FPCTL
1176 and #28,R_FPCTL
1177 or #3,R_FPCTL
1178
1179| fp->idfcpt = fp->idfpt1;
1180
1181 move.b 6(A_FP),8(A_FP)
1182
1183| fp->idftmd |= I_ACTIVE;
1184
1185 or.b #2,7(A_FP)
1186
1187| fp->idftrf = trg;
1188
1189 move TRG(A6),10(A_FP)
1190
1191| |(fpu + (long)FPU_TCV1) = srcval;
1192
1193 move SRCVAL(A6),0x8(A_FPU)
1194
1195| ++octype;
1196
1197 add #1,OCTYPE(A6)
1198
1199| |(fpu + (long)FPU_TSF1) = mltval;
1200
1201 move MLTVAL(A6),0xA(A_FPU)
1202
1203| ++octype;
1204
1205 add #1,OCTYPE(A6)
1206
1207| |(fpu + (long)FPU_TMNT) = fpmant;
1208
1209 move R_FPMANT,0x14(A_FPU)
1210
1211| ++octype;
1212
1213 add #1,OCTYPE(A6)
1214
1215| |(fpu + (long)FPU_TEXP) = fpexp;
1216
1217 move R_FPEXP,0x16(A_FPU)
1218
1219| ++octype;
1220
1221 add #1,OCTYPE(A6)
1222
1223 .page
1224
1225| if (fp->idftmd & I_VNSUBN)
1226
1227 btst #3,7(A_FP)
1228 beq F01L169
1229
1230| |(fpu + (long)FPU_TNV1) = fpval;
1231
1232 move R_FPVAL,0x1C(A_FPU)
1233 bra F01L170
1234
1235| else
1236| |(fpu + (long)FPU_TNV0) = fpval;
1237
1238F01L169: move R_FPVAL,2(A_FPU)
1239
1240| ++octype;
1241
1242F01L170: add #1,OCTYPE(A6)
1243
1244| |(fpu + (long)FPU_TCTL) = fpctl;
1245
1246 move R_FPCTL,(A_FPU)
1247
1248| setipl(oldi);
1249
1250 move OLDI(A6),sr
1251
1252 .page
1253| ------------------------------------------------------------------------------
1254| Start function 2 -- Frq 3
1255| ------------------------------------------------------------------------------
1256
1257| if (ip->idhfnc[2].idftmd & I_TM_KEY) {
1258
1259FN02: move.l IP(A6),A0
1260 move.b 117(A0),D0
1261 move.w TAG(A6),D1
1262 eor.w D1,D0
1263 btst #0,D0
1264 bne FN02A
1265
1266 jmp FN03
1267
1268| vp = (vce << 4) + 5;
1269
1270FN02A: move VCE(A6),D0
1271 asl #4,D0
1272 add.w #5,D0
1273 move D0,VP(A6)
1274
1275| fpu = io_fpu + FPU_OFNC + (vp << 4);
1276
1277 asl #5,D0
1278 ext.l D0
1279 move.l D0,A_FPU
1280 add.l #io_fpu+0x4000,A_FPU
1281
1282| fp = &ip->idhfnc[2];
1283
1284 move.l #24,A_FP
1285 add.l IP(A6),A_FP
1286 add.l #86,A_FP
1287
1288| pt = &ip->idhpnt[fp->idfpt1];
1289
1290 clr.l D0
1291 move.b 6(A_FP),D0
1292 lsl.l #2,D0
1293 move.l D0,D1
1294 add.l D0,D0
1295 add.l D1,D0
1296 add.l IP(A6),D0
1297 add.l #242,D0
1298 move.l D0,PT(A6)
1299
1300 .page
1301
1302| srcnum = group | fp->idfsrc;
1303
1304 move.w GROUP(A6),D0
1305 ext.l D0
1306 clr.l D1
1307 move.b 4(A_FP),D1
1308 or D1,D0
1309 move D0,SRCNUM(A6)
1310
1311| vep = &valents[srcnum];
1312
1313 add.l D0,D0
1314 move.l D0,D1
1315 lsl.l #2,D0
1316 add.l D1,D0
1317 add.l #valents,D0
1318 move.l D0,VEP(A6)
1319
1320| smp = vpsms[vp];
1321
1322 move VP(A6),A0
1323 add.l A0,A0
1324 add.l A0,A0
1325 add.l #vpsms,A0
1326 move.l (A0),A_SMP
1327
1328| if (srcnum NE smp->sm) {
1329
1330 clr D0
1331 move 10(A_SMP),D0
1332 cmp SRCNUM(A6),D0
1333 beq F02L113
1334
1335| (smp->prv)->nxt = smp->nxt;
1336
1337 move.l 4(A_SMP),A0
1338 move.l (A_SMP),(A0)
1339
1340| (smp->nxt)->prv = smp->prv;
1341
1342 move.l (A_SMP),A0
1343 move.l 4(A_SMP),4(A0)
1344
1345| smp->prv = (struct sment *)vep;
1346
1347 move.l VEP(A6),4(A_SMP)
1348
1349| smp->nxt = vep->nxt;
1350
1351 move.l VEP(A6),A0
1352 move.l (A0),(A_SMP)
1353
1354| (vep->nxt)->prv = smp;
1355
1356 move.l VEP(A6),A0
1357 move.l (A0),A0
1358 move.l A_SMP,4(A0)
1359
1360| vep->nxt = smp;
1361
1362 move.l VEP(A6),A0
1363 move.l A_SMP,(A0)
1364
1365| smp->sm = srcnum;
1366
1367 move SRCNUM(A6),10(A_SMP)
1368
1369| }
1370
1371| mltval = fp->idfmlt;
1372
1373F02L113: move 2(A_FP),MLTVAL(A6)
1374
1375 .page
1376
1377| switch (fp->idfsrc) {
1378
1379 move.b 4(A_FP),D0
1380 ext.w d0
1381 cmp #10,D0
1382 bhi F02L122
1383
1384 asl #2,D0
1385 lea F02L123,A0
1386 movea.l 0(A0,D0.W),A0
1387 jmp (A0)
1388
1389| case SM_NONE:
1390| mltval = 0;
1391
1392F02L116: clr MLTVAL(A6)
1393
1394| tsrcval = 0;
1395
1396 clr TSRCVAL(A6)
1397
1398| break;
1399
1400 bra F02L114
1401
1402| case SM_RAND:
1403| tsrcval = xgetran(mltval);
1404
1405F02L117: move MLTVAL(A6),(sp)
1406 jsr xgetran
1407 move D0,TSRCVAL(A6)
1408
1409| break;
1410
1411 bra F02L114
1412
1413| case SM_PTCH:
1414| tsrcval = pch;
1415
1416F02L118: move PCH(A6),TSRCVAL(A6)
1417
1418| break;
1419
1420 bra F02L114
1421
1422 .page
1423
1424| case SM_FREQ:
1425| tsrcval = ptoftab[(pch >> 7) & 0x00FF];
1426
1427F02L119: move PCH(A6),D0
1428 asr #7,D0
1429 and #255,D0
1430 move D0,A0
1431 add.l A0,A0
1432 add.l #ptoftab,A0
1433 move (A0),TSRCVAL(A6)
1434
1435| break;
1436
1437 bra F02L114
1438
1439| case SM_KVEL:
1440| tsrcval = veltab[trg];
1441
1442F02L120: move TRG(A6),A0
1443 add.l A0,A0
1444 add.l #veltab,A0
1445 move (A0),TSRCVAL(A6)
1446
1447| break;
1448
1449 bra F02L114
1450
1451| case SM_KPRS:
1452| tsrcval = prstab[trg];
1453
1454F02L121: move TRG(A6),A0
1455 add.l A0,A0
1456 add.l #prstab,A0
1457 move (A0),TSRCVAL(A6)
1458
1459| break;
1460
1461 bra F02L114
1462
1463| default:
1464| tsrcval = vep->val;
1465
1466F02L122: move.l VEP(A6),A0
1467 move 8(A0),TSRCVAL(A6)
1468
1469| }
1470
1471 .page
1472
1473| srcval = addpch(tsrcval, 0);
1474
1475F02L114: move.w TSRCVAL(A6),D0
1476 ext.l D0
1477 asr.l #5,D0
1478| sub.l #500,D0
1479 asl.l #LSPCH,D0
1480 cmp.l #PITCHMAX,D0
1481 ble F02L129A
1482
1483 move.l #PITCHMAX,D0
1484
1485F02L129A: move D0,SRCVAL(A6)
1486
1487 .page
1488
1489| if (pt->ipvsrc) {
1490
1491F02L124: move.l PT(A6),A0
1492 tst.b 6(A0)
1493 beq F02L136
1494
1495| switch (pt->ipvsrc) {
1496
1497 move.l PT(A6),A0
1498 move.b 6(A0),D0
1499 ext.w D0
1500 sub #1,D0
1501 cmp #9,D0
1502 bhi F02L144
1503
1504 asl #2,D0
1505 lea F02L145,A0
1506 move.l 0(A0,D0.W),A0
1507 jmp (A0)
1508
1509| case SM_RAND:
1510| ltmp = xgetran(pt_>ipvmlt);
1511
1512F02L139: move.l PT(A6),A0
1513 move 4(A0),(sp)
1514 jsr xgetran
1515 ext.l D0
1516 move.l D0,LTMP(A6)
1517
1518| break;
1519
1520 bra F02L137
1521
1522| case SM_PTCH:
1523| ltmp = pch;
1524
1525F02L140: move PCH(A6),A0
1526 move.l A0,LTMP(A6)
1527
1528| break;
1529
1530 bra F02L137
1531
1532 .page
1533
1534| case SM_FREQ:
1535| ltmp = ptoftab[(pch >> 7) & 0x00FF];
1536
1537F02L141: move PCH(A6),D0
1538 asr #7,D0
1539 and #255,D0
1540 move D0,A0
1541 add.l A0,A0
1542 move.l #ptoftab,A1
1543 move 0(A0,A1.l),D0
1544 ext.l D0
1545 move.l D0,LTMP(A6)
1546
1547| break;
1548
1549 bra F02L137
1550
1551| case SM_KVEL:
1552| ltmp = veltab[trg];
1553
1554F02L142: move TRG(A6),A0
1555 add.l A0,A0
1556 move.l #veltab,A1
1557 move 0(A0,A1.l),D0
1558 ext.l D0
1559 move.l D0,LTMP(A6)
1560
1561| break;
1562
1563 bra F02L137
1564
1565 .page
1566
1567| case SM_KPRS:
1568| ltmp = prstab[trg];
1569
1570F02L143: move TRG(A6),A0
1571 add.l A0,A0
1572 move.l #prstab,A1
1573 move 0(A0,A1.l),D0
1574 ext.l D0
1575 move.l D0,LTMP(A6)
1576
1577| break;
1578
1579 bra F02L137
1580
1581 .page
1582
1583| default:
1584| ltmp = valents[group | pt->ipvsrc].val;
1585
1586F02L144: move.l PT(A6),A0
1587 clr.l D0
1588 move.b 6(A0),D0
1589 or.w GROUP(A6),D0
1590 add.l D0,D0
1591 move.l D0,D1
1592 lsl.l #2,D0
1593 add.l D1,D0
1594 move.l D0,A0
1595 move.l #valents,A1
1596 clr.l D0
1597 move 8(A0,A1.l),D0
1598 move.l D0,LTMP(A6)
1599
1600| }
1601
1602
1603 .page
1604
1605| ltmp = (ltmp * pt->ipvmlt) >> 15;
1606
1607F02L137: move.l PT(A6),A0
1608 move.w 4(A0),D0
1609 move.w LTMP+2(A6),D1
1610 muls D1,D0
1611 move.l #15,D1
1612 asr.l D1,D0
1613 move.l D0,LTMP(A6)
1614
1615| ltmp += (long)pt->ipval;
1616
1617 move.l PT(A6),A0
1618 move 2(A0),D0
1619 ext.l D0
1620 add.l D0,LTMP(A6)
1621
1622| if (ltmp GT (long)VALMAX)
1623| ltmp = (long)VALMAX;
1624
1625 cmp.l #VALMAX,LTMP(A6)
1626 ble F02L146
1627
1628 move.l #VALMAX,LTMP(A6)
1629 bra F02L147
1630
1631| else if (ltmp LT (long)VALMIN)
1632| ltmp = (long)VALMIN;
1633
1634F02L146: cmp.l #VALMIN,LTMP(A6)
1635 bge F02L147
1636
1637 move.l #VALMIN,LTMP(A6)
1638
1639| tfpval = (short)ltmp;
1640
1641F02L147: move.w LTMP+2(A6),TFPVAL(A6)
1642 bra F02L149
1643
1644| } else {
1645
1646| tfpval = pt->ipval;
1647
1648F02L136: move.l PT(A6),A0
1649 move 2(A0),TFPVAL(A6)
1650
1651| }
1652
1653 .page
1654
1655| fpmant = (((long)pt->iptom & 0x0000FFF0L)
1656| | ((long)timemlt & 0x0000FFFFL)) >> 15;
1657
1658F02L149: move.l PT(A6),A0
1659 move.w (A0),D0
1660 move.w D0,D2
1661 andi.w #0xFFF0,D0
1662 move.w timemlt,D1
1663 muls D1,D0
1664 move.l #15,D1
1665 asr.l D1,D0
1666 move D0,R_FPMANT
1667
1668| fpexp = expbit[pt->iptim & 0x000F];
1669
1670 and #0x000F,D2
1671 move D2,A0
1672 add.l A0,A0
1673 add.l #expbit,A0
1674 move (A0),R_FPEXP
1675
1676 .page
1677
1678| fp->idfpch = ip->idhos3v;
1679
1680F02L156: move.l IP(A6),A0
1681 move.w 82(A0),(A_FP)
1682
1683| fpval = addpch(tfpval, fp->idfpch);
1684
1685 move.w TFPVAL(A6),D1
1686 ext.l D1
1687 asr.l #5,D1
1688 sub.l #500,D1
1689 asl.l #LSPCH,D1
1690 move.w (A_FP),D0
1691 ext.l D0
1692 add.l D1,D0
1693 cmp.l #PITCHMAX,D0
1694 ble F02L156A
1695
1696 move.l #PITCHMAX,D0
1697
1698F02L156A: move D0,R_FPVAL
1699
1700 .page
1701
1702 move.b 5(A_FP),D0
1703 ext.w D0
1704 sub.w #1,D0
1705 movea.l PT(A6),A0
1706
1707| oldi = setipl(FPU_DI);
1708
1709 move sr,OLDI(A6)
1710 move #FPU_DI,sr
1711
1712F02L168: clr.b 10(A0)
1713 add.l #12,a0
1714 dbra D0,F02L168
1715
1716 .page
1717
1718| fp->idftmd ^= I_NVBITS;
1719
1720F02L165: eor.b #24,7(A_FP)
1721
1722| fpctl = (fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0003;
1723
1724 move.b 7(A_FP),R_FPCTL
1725 and #28,R_FPCTL
1726 or #3,R_FPCTL
1727
1728| fp->idfcpt = fp->idfpt1;
1729
1730 move.b 6(A_FP),8(A_FP)
1731
1732| fp->idftmd |= I_ACTIVE;
1733
1734 or.b #2,7(A_FP)
1735
1736| fp->idftrf = trg;
1737
1738 move TRG(A6),10(A_FP)
1739
1740| |(fpu + (long)FPU_TCV1) = srcval;
1741
1742 move SRCVAL(A6),0x8(A_FPU)
1743
1744| ++octype;
1745
1746 add #1,OCTYPE(A6)
1747
1748| |(fpu + (long)FPU_TSF1) = mltval;
1749
1750 move MLTVAL(A6),0xA(A_FPU)
1751
1752| ++octype;
1753
1754 add #1,OCTYPE(A6)
1755
1756| |(fpu + (long)FPU_TMNT) = fpmant;
1757
1758 move R_FPMANT,0x14(A_FPU)
1759
1760| ++octype;
1761
1762 add #1,OCTYPE(A6)
1763
1764| |(fpu + (long)FPU_TEXP) = fpexp;
1765
1766 move R_FPEXP,0x16(A_FPU)
1767
1768| ++octype;
1769
1770 add #1,OCTYPE(A6)
1771
1772 .page
1773
1774| if (fp->idftmd & I_VNSUBN)
1775
1776 btst #3,7(A_FP)
1777 beq F02L169
1778
1779| |(fpu + (long)FPU_TNV1) = fpval;
1780
1781 move R_FPVAL,0x1C(A_FPU)
1782 bra F02L170
1783
1784| else
1785| |(fpu + (long)FPU_TNV0) = fpval;
1786
1787F02L169: move R_FPVAL,2(A_FPU)
1788
1789| ++octype;
1790
1791F02L170: add #1,OCTYPE(A6)
1792
1793| |(fpu + (long)FPU_TCTL) = fpctl;
1794
1795 move R_FPCTL,(A_FPU)
1796
1797| setipl(oldi);
1798
1799 move OLDI(A6),sr
1800
1801 .page
1802| ------------------------------------------------------------------------------
1803| Start function 3 -- Frq 4
1804| ------------------------------------------------------------------------------
1805
1806| if (ip->idhfnc[3].idftmd & I_TM_KEY) {
1807
1808FN03: move.l IP(A6),A0
1809 move.b 129(A0),D0
1810 move.w TAG(A6),D1
1811 eor.w D1,D0
1812 btst #0,D0
1813 bne FN03A
1814
1815 jmp FN04
1816
1817| vp = (vce << 4) + 7;
1818
1819FN03A: move VCE(A6),D0
1820 asl #4,D0
1821 add.w #7,D0
1822 move D0,VP(A6)
1823
1824| fpu = io_fpu + FPU_OFNC + (vp << 4);
1825
1826 asl #5,D0
1827 ext.l D0
1828 move.l D0,A_FPU
1829 add.l #io_fpu+0x4000,A_FPU
1830
1831| fp = &ip->idhfnc[3];
1832
1833 move.l #36,A_FP
1834 add.l IP(A6),A_FP
1835 add.l #86,A_FP
1836
1837| pt = &ip->idhpnt[fp->idfpt1];
1838
1839 clr.l D0
1840 move.b 6(A_FP),D0
1841 lsl.l #2,D0
1842 move.l D0,D1
1843 add.l D0,D0
1844 add.l D1,D0
1845 add.l IP(A6),D0
1846 add.l #242,D0
1847 move.l D0,PT(A6)
1848
1849 .page
1850
1851| srcnum = group | fp->idfsrc;
1852
1853 move.w GROUP(A6),D0
1854 ext.l D0
1855 clr.l D1
1856 move.b 4(A_FP),D1
1857 or D1,D0
1858 move D0,SRCNUM(A6)
1859
1860| vep = &valents[srcnum];
1861
1862 add.l D0,D0
1863 move.l D0,D1
1864 lsl.l #2,D0
1865 add.l D1,D0
1866 add.l #valents,D0
1867 move.l D0,VEP(A6)
1868
1869| smp = vpsms[vp];
1870
1871 move VP(A6),A0
1872 add.l A0,A0
1873 add.l A0,A0
1874 add.l #vpsms,A0
1875 move.l (A0),A_SMP
1876
1877| if (srcnum NE smp->sm) {
1878
1879 clr D0
1880 move 10(A_SMP),D0
1881 cmp SRCNUM(A6),D0
1882 beq F03L113
1883
1884| (smp->prv)->nxt = smp->nxt;
1885
1886 move.l 4(A_SMP),A0
1887 move.l (A_SMP),(A0)
1888
1889| (smp->nxt)->prv = smp->prv;
1890
1891 move.l (A_SMP),A0
1892 move.l 4(A_SMP),4(A0)
1893
1894| smp->prv = (struct sment *)vep;
1895
1896 move.l VEP(A6),4(A_SMP)
1897
1898| smp->nxt = vep->nxt;
1899
1900 move.l VEP(A6),A0
1901 move.l (A0),(A_SMP)
1902
1903| (vep->nxt)->prv = smp;
1904
1905 move.l VEP(A6),A0
1906 move.l (A0),A0
1907 move.l A_SMP,4(A0)
1908
1909| vep->nxt = smp;
1910
1911 move.l VEP(A6),A0
1912 move.l A_SMP,(A0)
1913
1914| smp->sm = srcnum;
1915
1916 move SRCNUM(A6),10(A_SMP)
1917
1918| }
1919
1920| mltval = fp->idfmlt;
1921
1922F03L113: move 2(A_FP),MLTVAL(A6)
1923
1924 .page
1925
1926| switch (fp->idfsrc) {
1927
1928 move.b 4(A_FP),D0
1929 ext.w d0
1930 cmp #10,D0
1931 bhi F03L122
1932
1933 asl #2,D0
1934 lea F03L123,A0
1935 movea.l 0(A0,D0.W),A0
1936 jmp (A0)
1937
1938| case SM_NONE:
1939| mltval = 0;
1940
1941F03L116: clr MLTVAL(A6)
1942
1943| tsrcval = 0;
1944
1945 clr TSRCVAL(A6)
1946
1947| break;
1948
1949 bra F03L114
1950
1951| case SM_RAND:
1952| tsrcval = xgetran(mltval);
1953
1954F03L117: move MLTVAL(A6),(sp)
1955 jsr xgetran
1956 move D0,TSRCVAL(A6)
1957
1958| break;
1959
1960 bra F03L114
1961
1962| case SM_PTCH:
1963| tsrcval = pch;
1964
1965F03L118: move PCH(A6),TSRCVAL(A6)
1966
1967| break;
1968
1969 bra F03L114
1970
1971 .page
1972
1973| case SM_FREQ:
1974| tsrcval = ptoftab[(pch >> 7) & 0x00FF];
1975
1976F03L119: move PCH(A6),D0
1977 asr #7,D0
1978 and #255,D0
1979 move D0,A0
1980 add.l A0,A0
1981 add.l #ptoftab,A0
1982 move (A0),TSRCVAL(A6)
1983
1984| break;
1985
1986 bra F03L114
1987
1988| case SM_KVEL:
1989| tsrcval = veltab[trg];
1990
1991F03L120: move TRG(A6),A0
1992 add.l A0,A0
1993 add.l #veltab,A0
1994 move (A0),TSRCVAL(A6)
1995
1996| break;
1997
1998 bra F03L114
1999
2000| case SM_KPRS:
2001| tsrcval = prstab[trg];
2002
2003F03L121: move TRG(A6),A0
2004 add.l A0,A0
2005 add.l #prstab,A0
2006 move (A0),TSRCVAL(A6)
2007
2008| break;
2009
2010 bra F03L114
2011
2012| default:
2013| tsrcval = vep->val;
2014
2015F03L122: move.l VEP(A6),A0
2016 move 8(A0),TSRCVAL(A6)
2017
2018| }
2019
2020 .page
2021
2022| srcval = addpch(tsrcval, 0);
2023
2024F03L114: move.w TSRCVAL(A6),D0
2025 ext.l D0
2026 asr.l #5,D0
2027| sub.l #500,D0
2028 asl.l #LSPCH,D0
2029 cmp.l #PITCHMAX,D0
2030 ble F03L129A
2031
2032 move.l #PITCHMAX,D0
2033
2034F03L129A: move D0,SRCVAL(A6)
2035
2036 .page
2037
2038| if (pt->ipvsrc) {
2039
2040F03L124: move.l PT(A6),A0
2041 tst.b 6(A0)
2042 beq F03L136
2043
2044| switch (pt->ipvsrc) {
2045
2046 move.l PT(A6),A0
2047 move.b 6(A0),D0
2048 ext.w D0
2049 sub #1,D0
2050 cmp #9,D0
2051 bhi F03L144
2052
2053 asl #2,D0
2054 lea F03L145,A0
2055 move.l 0(A0,D0.W),A0
2056 jmp (A0)
2057
2058| case SM_RAND:
2059| ltmp = xgetran(pt_>ipvmlt);
2060
2061F03L139: move.l PT(A6),A0
2062 move 4(A0),(sp)
2063 jsr xgetran
2064 ext.l D0
2065 move.l D0,LTMP(A6)
2066
2067| break;
2068
2069 bra F03L137
2070
2071| case SM_PTCH:
2072| ltmp = pch;
2073
2074F03L140: move PCH(A6),A0
2075 move.l A0,LTMP(A6)
2076
2077| break;
2078
2079 bra F03L137
2080
2081 .page
2082
2083| case SM_FREQ:
2084| ltmp = ptoftab[(pch >> 7) & 0x00FF];
2085
2086F03L141: move PCH(A6),D0
2087 asr #7,D0
2088 and #255,D0
2089 move D0,A0
2090 add.l A0,A0
2091 move.l #ptoftab,A1
2092 move 0(A0,A1.l),D0
2093 ext.l D0
2094 move.l D0,LTMP(A6)
2095
2096| break;
2097
2098 bra F03L137
2099
2100| case SM_KVEL:
2101| ltmp = veltab[trg];
2102
2103F03L142: move TRG(A6),A0
2104 add.l A0,A0
2105 move.l #veltab,A1
2106 move 0(A0,A1.l),D0
2107 ext.l D0
2108 move.l D0,LTMP(A6)
2109
2110| break;
2111
2112 bra F03L137
2113
2114 .page
2115
2116| case SM_KPRS:
2117| ltmp = prstab[trg];
2118
2119F03L143: move TRG(A6),A0
2120 add.l A0,A0
2121 move.l #prstab,A1
2122 move 0(A0,A1.l),D0
2123 ext.l D0
2124 move.l D0,LTMP(A6)
2125
2126| break;
2127
2128 bra F03L137
2129
2130 .page
2131
2132| default:
2133| ltmp = valents[group | pt->ipvsrc].val;
2134
2135F03L144: move.l PT(A6),A0
2136 clr.l D0
2137 move.b 6(A0),D0
2138 or.w GROUP(A6),D0
2139 add.l D0,D0
2140 move.l D0,D1
2141 lsl.l #2,D0
2142 add.l D1,D0
2143 move.l D0,A0
2144 move.l #valents,A1
2145 clr.l D0
2146 move 8(A0,A1.l),D0
2147 move.l D0,LTMP(A6)
2148
2149| }
2150
2151
2152 .page
2153
2154| ltmp = (ltmp * pt->ipvmlt) >> 15;
2155
2156F03L137: move.l PT(A6),A0
2157 move.w 4(A0),D0
2158 move.w LTMP+2(A6),D1
2159 muls D1,D0
2160 move.l #15,D1
2161 asr.l D1,D0
2162 move.l D0,LTMP(A6)
2163
2164| ltmp += (long)pt->ipval;
2165
2166 move.l PT(A6),A0
2167 move 2(A0),D0
2168 ext.l D0
2169 add.l D0,LTMP(A6)
2170
2171| if (ltmp GT (long)VALMAX)
2172| ltmp = (long)VALMAX;
2173
2174 cmp.l #VALMAX,LTMP(A6)
2175 ble F03L146
2176
2177 move.l #VALMAX,LTMP(A6)
2178 bra F03L147
2179
2180| else if (ltmp LT (long)VALMIN)
2181| ltmp = (long)VALMIN;
2182
2183F03L146: cmp.l #VALMIN,LTMP(A6)
2184 bge F03L147
2185
2186 move.l #VALMIN,LTMP(A6)
2187
2188| tfpval = (short)ltmp;
2189
2190F03L147: move.w LTMP+2(A6),TFPVAL(A6)
2191 bra F03L149
2192
2193| } else {
2194
2195| tfpval = pt->ipval;
2196
2197F03L136: move.l PT(A6),A0
2198 move 2(A0),TFPVAL(A6)
2199
2200| }
2201
2202 .page
2203
2204| fpmant = (((long)pt->iptom & 0x0000FFF0L)
2205| | ((long)timemlt & 0x0000FFFFL)) >> 15;
2206
2207F03L149: move.l PT(A6),A0
2208 move.w (A0),D0
2209 move.w D0,D2
2210 andi.w #0xFFF0,D0
2211 move.w timemlt,D1
2212 muls D1,D0
2213 move.l #15,D1
2214 asr.l D1,D0
2215 move D0,R_FPMANT
2216
2217| fpexp = expbit[pt->iptim & 0x000F];
2218
2219 and #0x000F,D2
2220 move D2,A0
2221 add.l A0,A0
2222 add.l #expbit,A0
2223 move (A0),R_FPEXP
2224
2225 .page
2226
2227| fp->idfpch = ip->idhos4v;
2228
2229F03L157: move.l IP(A6),A0
2230 move.w 84(A0),(A_FP)
2231
2232| fpval = addpch(tfpval, fp->idfpch);
2233
2234 move.w TFPVAL(A6),D1
2235 ext.l D1
2236 asr.l #5,D1
2237 sub.l #500,D1
2238 asl.l #LSPCH,D1
2239 move.w (A_FP),D0
2240 ext.l D0
2241 add.l D1,D0
2242 cmp.l #PITCHMAX,D0
2243 ble F03L157A
2244
2245 move.l #PITCHMAX,D0
2246
2247F03L157A: move D0,R_FPVAL
2248
2249 .page
2250
2251 move.b 5(A_FP),D0
2252 ext.w D0
2253 sub.w #1,D0
2254 movea.l PT(A6),A0
2255
2256| oldi = setipl(FPU_DI);
2257
2258 move sr,OLDI(A6)
2259 move #FPU_DI,sr
2260
2261F03L168: clr.b 10(A0)
2262 add.l #12,a0
2263 dbra D0,F03L168
2264
2265 .page
2266
2267| fp->idftmd ^= I_NVBITS;
2268
2269F03L165: eor.b #24,7(A_FP)
2270
2271| fpctl = (fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0003;
2272
2273 move.b 7(A_FP),R_FPCTL
2274 and #28,R_FPCTL
2275 or #3,R_FPCTL
2276
2277| fp->idfcpt = fp->idfpt1;
2278
2279 move.b 6(A_FP),8(A_FP)
2280
2281| fp->idftmd |= I_ACTIVE;
2282
2283 or.b #2,7(A_FP)
2284
2285| fp->idftrf = trg;
2286
2287 move TRG(A6),10(A_FP)
2288
2289| |(fpu + (long)FPU_TCV1) = srcval;
2290
2291 move SRCVAL(A6),0x8(A_FPU)
2292
2293| ++octype;
2294
2295 add #1,OCTYPE(A6)
2296
2297| |(fpu + (long)FPU_TSF1) = mltval;
2298
2299 move MLTVAL(A6),0xA(A_FPU)
2300
2301| ++octype;
2302
2303 add #1,OCTYPE(A6)
2304
2305| |(fpu + (long)FPU_TMNT) = fpmant;
2306
2307 move R_FPMANT,0x14(A_FPU)
2308
2309| ++octype;
2310
2311 add #1,OCTYPE(A6)
2312
2313| |(fpu + (long)FPU_TEXP) = fpexp;
2314
2315 move R_FPEXP,0x16(A_FPU)
2316
2317| ++octype;
2318
2319 add #1,OCTYPE(A6)
2320
2321 .page
2322
2323| if (fp->idftmd & I_VNSUBN)
2324
2325 btst #3,7(A_FP)
2326 beq F03L169
2327
2328| |(fpu + (long)FPU_TNV1) = fpval;
2329
2330 move R_FPVAL,0x1C(A_FPU)
2331 bra F03L170
2332
2333| else
2334| |(fpu + (long)FPU_TNV0) = fpval;
2335
2336F03L169: move R_FPVAL,2(A_FPU)
2337
2338| ++octype;
2339
2340F03L170: add #1,OCTYPE(A6)
2341
2342| |(fpu + (long)FPU_TCTL) = fpctl;
2343
2344 move R_FPCTL,(A_FPU)
2345
2346| setipl(oldi);
2347
2348 move OLDI(A6),sr
2349
2350 .page
2351| ------------------------------------------------------------------------------
2352| Start function 4 -- Filtr
2353| ------------------------------------------------------------------------------
2354
2355| if (ip->idhfnc[4].idftmd & I_TM_KEY) {
2356
2357FN04: move.l IP(A6),A0
2358 move.b 141(A0),D0
2359 move.w TAG(A6),D1
2360 eor.w D1,D0
2361 btst #0,D0
2362 bne FN04A
2363
2364 jmp FN05
2365
2366| vp = (vce << 4) + 10;
2367
2368FN04A: move VCE(A6),D0
2369 asl #4,D0
2370 add.w #10,D0
2371 move D0,VP(A6)
2372
2373| fpu = io_fpu + FPU_OFNC + (vp << 4);
2374
2375 asl #5,D0
2376 ext.l D0
2377 move.l D0,A_FPU
2378 add.l #io_fpu+0x4000,A_FPU
2379
2380| fp = &ip->idhfnc[4];
2381
2382 move.l #48,A_FP
2383 add.l IP(A6),A_FP
2384 add.l #86,A_FP
2385
2386 .page
2387
2388| Added code:
2389
2390| output resonance via table lookup with FPU interrupts off
2391
2392 lea rsntab,A0
2393 clr.w D0
2394 move.b 9(A_FP),D0
2395 add.w D0,D0
2396 move.w 0(A0,D0.W),D1
2397 move.w VCE(A6),D0
2398 asl.w #4,d0
2399 add.w #6,d0
2400 asl.w #5,D0
2401 ext.l D0
2402 move.l D0,A0
2403 add.l #io_fpu+0x4000,A0
2404 move.w sr,OLDI(A6)
2405 move.w #FPU_DI,sr
2406 move.w d1,2(A0)
2407 add.w #1,OCTYPE(A6)
2408 move.w d1,0x1C(A0)
2409 add.w #1,OCTYPE(A6)
2410 move.w #0x0015,(A0)
2411 move.w OLDI(A6),sr
2412
2413| pt = &ip->idhpnt[fp->idfpt1];
2414
2415 clr.l D0
2416 move.b 6(A_FP),D0
2417 lsl.l #2,D0
2418 move.l D0,D1
2419 add.l D0,D0
2420 add.l D1,D0
2421 add.l IP(A6),D0
2422 add.l #242,D0
2423 move.l D0,PT(A6)
2424
2425 .page
2426
2427| srcnum = group | fp->idfsrc;
2428
2429 move.w GROUP(A6),D0
2430 ext.l D0
2431 clr.l D1
2432 move.b 4(A_FP),D1
2433 or D1,D0
2434 move D0,SRCNUM(A6)
2435
2436| vep = &valents[srcnum];
2437
2438 add.l D0,D0
2439 move.l D0,D1
2440 lsl.l #2,D0
2441 add.l D1,D0
2442 add.l #valents,D0
2443 move.l D0,VEP(A6)
2444
2445| smp = vpsms[vp];
2446
2447 move VP(A6),A0
2448 add.l A0,A0
2449 add.l A0,A0
2450 add.l #vpsms,A0
2451 move.l (A0),A_SMP
2452
2453| if (srcnum NE smp->sm) {
2454
2455 clr D0
2456 move 10(A_SMP),D0
2457 cmp SRCNUM(A6),D0
2458 beq F04L113
2459
2460| (smp->prv)->nxt = smp->nxt;
2461
2462 move.l 4(A_SMP),A0
2463 move.l (A_SMP),(A0)
2464
2465| (smp->nxt)->prv = smp->prv;
2466
2467 move.l (A_SMP),A0
2468 move.l 4(A_SMP),4(A0)
2469
2470| smp->prv = (struct sment *)vep;
2471
2472 move.l VEP(A6),4(A_SMP)
2473
2474| smp->nxt = vep->nxt;
2475
2476 move.l VEP(A6),A0
2477 move.l (A0),(A_SMP)
2478
2479| (vep->nxt)->prv = smp;
2480
2481 move.l VEP(A6),A0
2482 move.l (A0),A0
2483 move.l A_SMP,4(A0)
2484
2485| vep->nxt = smp;
2486
2487 move.l VEP(A6),A0
2488 move.l A_SMP,(A0)
2489
2490| smp->sm = srcnum;
2491
2492 move SRCNUM(A6),10(A_SMP)
2493
2494| }
2495
2496| mltval = fp->idfmlt;
2497
2498F04L113: move 2(A_FP),MLTVAL(A6)
2499
2500 .page
2501
2502| switch (fp->idfsrc) {
2503
2504 move.b 4(A_FP),D0
2505 ext.w d0
2506 cmp #10,D0
2507 bhi F04L122
2508
2509 asl #2,D0
2510 lea F04L123,A0
2511 movea.l 0(A0,D0.W),A0
2512 jmp (A0)
2513
2514| case SM_NONE:
2515| mltval = 0;
2516
2517F04L116: clr MLTVAL(A6)
2518
2519| tsrcval = 0;
2520
2521 clr TSRCVAL(A6)
2522
2523| break;
2524
2525 bra F04L114
2526
2527| case SM_RAND:
2528| tsrcval = xgetran(mltval);
2529
2530F04L117: move MLTVAL(A6),(sp)
2531 jsr xgetran
2532 move D0,TSRCVAL(A6)
2533
2534| break;
2535
2536 bra F04L114
2537
2538| case SM_PTCH:
2539| tsrcval = pch;
2540
2541F04L118: move PCH(A6),TSRCVAL(A6)
2542
2543| break;
2544
2545 bra F04L114
2546
2547 .page
2548
2549| case SM_FREQ:
2550| tsrcval = ptoftab[(pch >> 7) & 0x00FF];
2551
2552F04L119: move PCH(A6),D0
2553 asr #7,D0
2554 and #255,D0
2555 move D0,A0
2556 add.l A0,A0
2557 add.l #ptoftab,A0
2558 move (A0),TSRCVAL(A6)
2559
2560| break;
2561
2562 bra F04L114
2563
2564| case SM_KVEL:
2565| tsrcval = veltab[trg];
2566
2567F04L120: move TRG(A6),A0
2568 add.l A0,A0
2569 add.l #veltab,A0
2570 move (A0),TSRCVAL(A6)
2571
2572| break;
2573
2574 bra F04L114
2575
2576| case SM_KPRS:
2577| tsrcval = prstab[trg];
2578
2579F04L121: move TRG(A6),A0
2580 add.l A0,A0
2581 add.l #prstab,A0
2582 move (A0),TSRCVAL(A6)
2583
2584| break;
2585
2586 bra F04L114
2587
2588| default:
2589| tsrcval = vep->val;
2590
2591F04L122: move.l VEP(A6),A0
2592 move 8(A0),TSRCVAL(A6)
2593
2594| }
2595
2596 .page
2597
2598| ltmp = ((long)tsrcval >> 1) + ((long)tsrcval >> 2);
2599
2600F04L114: move TSRCVAL(A6),D0
2601 ext.l D0
2602 asr.l #1,D0
2603 move TSRCVAL(A6),D1
2604 ext.l D1
2605 asr.l #2,D1
2606 add.l D1,D0
2607 move.l D0,LTMP(A6)
2608
2609| if (ltmp GT (long)VALMAX)
2610| ltmp = (long)VALMAX;
2611
2612 cmp.l #VALMAX,LTMP(A6)
2613 ble F04L131
2614
2615 move.l #VALMAX,LTMP(A6)
2616 bra F04L132
2617
2618| else if (ltmp LT (long)VALMIN)
2619| ltmp = (long)VALMIN;
2620
2621F04L131: cmp.l #VALMIN,LTMP(A6)
2622 bge F04L132
2623
2624 move.l #VALMIN,LTMP(A6)
2625
2626| srcval = (short)ltmp;
2627
2628F04L132: move.l LTMP(A6),D0
2629 move D0,SRCVAL(A6)
2630
2631 .page
2632
2633| if (pt->ipvsrc) {
2634
2635F04L124: move.l PT(A6),A0
2636 tst.b 6(A0)
2637 beq F04L136
2638
2639| switch (pt->ipvsrc) {
2640
2641 move.l PT(A6),A0
2642 move.b 6(A0),D0
2643 ext.w D0
2644 sub #1,D0
2645 cmp #9,D0
2646 bhi F04L144
2647
2648 asl #2,D0
2649 lea F04L145,A0
2650 move.l 0(A0,D0.W),A0
2651 jmp (A0)
2652
2653| case SM_RAND:
2654| ltmp = xgetran(pt_>ipvmlt);
2655
2656F04L139: move.l PT(A6),A0
2657 move 4(A0),(sp)
2658 jsr xgetran
2659 ext.l D0
2660 move.l D0,LTMP(A6)
2661
2662| break;
2663
2664 bra F04L137
2665
2666| case SM_PTCH:
2667| ltmp = pch;
2668
2669F04L140: move PCH(A6),A0
2670 move.l A0,LTMP(A6)
2671
2672| break;
2673
2674 bra F04L137
2675
2676 .page
2677
2678| case SM_FREQ:
2679| ltmp = ptoftab[(pch >> 7) & 0x00FF];
2680
2681F04L141: move PCH(A6),D0
2682 asr #7,D0
2683 and #255,D0
2684 move D0,A0
2685 add.l A0,A0
2686 move.l #ptoftab,A1
2687 move 0(A0,A1.l),D0
2688 ext.l D0
2689 move.l D0,LTMP(A6)
2690
2691| break;
2692
2693 bra F04L137
2694
2695| case SM_KVEL:
2696| ltmp = veltab[trg];
2697
2698F04L142: move TRG(A6),A0
2699 add.l A0,A0
2700 move.l #veltab,A1
2701 move 0(A0,A1.l),D0
2702 ext.l D0
2703 move.l D0,LTMP(A6)
2704
2705| break;
2706
2707 bra F04L137
2708
2709 .page
2710
2711| case SM_KPRS:
2712| ltmp = prstab[trg];
2713
2714F04L143: move TRG(A6),A0
2715 add.l A0,A0
2716 move.l #prstab,A1
2717 move 0(A0,A1.l),D0
2718 ext.l D0
2719 move.l D0,LTMP(A6)
2720
2721| break;
2722
2723 bra F04L137
2724
2725 .page
2726
2727| default:
2728| ltmp = valents[group | pt->ipvsrc].val;
2729
2730F04L144: move.l PT(A6),A0
2731 clr.l D0
2732 move.b 6(A0),D0
2733 or.w GROUP(A6),D0
2734 add.l D0,D0
2735 move.l D0,D1
2736 lsl.l #2,D0
2737 add.l D1,D0
2738 move.l D0,A0
2739 move.l #valents,A1
2740 clr.l D0
2741 move 8(A0,A1.l),D0
2742 move.l D0,LTMP(A6)
2743
2744| }
2745
2746
2747 .page
2748
2749| ltmp = (ltmp * pt->ipvmlt) >> 15;
2750
2751F04L137: move.l PT(A6),A0
2752 move.w 4(A0),D0
2753 move.w LTMP+2(A6),D1
2754 muls D1,D0
2755 move.l #15,D1
2756 asr.l D1,D0
2757 move.l D0,LTMP(A6)
2758
2759| ltmp += (long)pt->ipval;
2760
2761 move.l PT(A6),A0
2762 move 2(A0),D0
2763 ext.l D0
2764 add.l D0,LTMP(A6)
2765
2766| if (ltmp GT (long)VALMAX)
2767| ltmp = (long)VALMAX;
2768
2769 cmp.l #VALMAX,LTMP(A6)
2770 ble F04L146
2771
2772 move.l #VALMAX,LTMP(A6)
2773 bra F04L147
2774
2775| else if (ltmp LT (long)VALMIN)
2776| ltmp = (long)VALMIN;
2777
2778F04L146: cmp.l #VALMIN,LTMP(A6)
2779 bge F04L147
2780
2781 move.l #VALMIN,LTMP(A6)
2782
2783| tfpval = (short)ltmp;
2784
2785F04L147: move.w LTMP+2(A6),TFPVAL(A6)
2786 bra F04L149
2787
2788| } else {
2789
2790| tfpval = pt->ipval;
2791
2792F04L136: move.l PT(A6),A0
2793 move 2(A0),TFPVAL(A6)
2794
2795| }
2796
2797 .page
2798
2799| fpmant = (((long)pt->iptom & 0x0000FFF0L)
2800| | ((long)timemlt & 0x0000FFFFL)) >> 15;
2801
2802F04L149: move.l PT(A6),A0
2803 move.w (A0),D0
2804 move.w D0,D2
2805 andi.w #0xFFF0,D0
2806 move.w timemlt,D1
2807 muls D1,D0
2808 move.l #15,D1
2809 asr.l D1,D0
2810 move D0,R_FPMANT
2811
2812| fpexp = expbit[pt->iptim & 0x000F];
2813
2814 and #0x000F,D2
2815 move D2,A0
2816 add.l A0,A0
2817 add.l #expbit,A0
2818 move (A0),R_FPEXP
2819
2820 .page
2821
2822| fp->idfpch = pch;
2823
2824F04L158: move PCH(A6),(A_FP)
2825
2826| ltmp = ((long)tfpval >> 1) + ((longtfpval >>2)
2827| + (long)fp->idfpch;
2828
2829 move TFPVAL(A6),D0
2830 ext.l D0
2831 asr.l #1,D0
2832 move TFPVAL(A6),D1
2833 ext.l D1
2834 asr.l #2,D1
2835 add.l D1,D0
2836 move (A_FP),D1
2837 ext.l D1
2838 add.l D1,D0
2839 move.l D0,LTMP(A6)
2840
2841| if (ltmp GT (long)VALMAX)
2842| ltmp = (long)VALMAX;
2843
2844 cmp.l #VALMAX,LTMP(A6)
2845 ble F04L159
2846
2847 move.l #VALMAX,LTMP(A6)
2848 bra F04L160
2849
2850| else if (ltmp LT (long)VALMIN)
2851| ltmp = (long)VALMIN;
2852
2853F04L159: cmp.l #VALMIN,LTMP(A6)
2854 bge F04L160
2855
2856 move.l #VALMIN,LTMP(A6)
2857
2858| fpval = (short)ltmp;
2859
2860F04L160: move.l LTMP(A6),D0
2861 move D0,R_FPVAL
2862
2863 .page
2864
2865 move.b 5(A_FP),D0
2866 ext.w D0
2867 sub.w #1,D0
2868 movea.l PT(A6),A0
2869
2870| oldi = setipl(FPU_DI);
2871
2872 move sr,OLDI(A6)
2873 move #FPU_DI,sr
2874
2875F04L168: clr.b 10(A0)
2876 add.l #12,a0
2877 dbra D0,F04L168
2878
2879 .page
2880
2881| fp->idftmd ^= I_NVBITS;
2882
2883F04L165: eor.b #24,7(A_FP)
2884
2885| fpctl = (fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0003;
2886
2887 move.b 7(A_FP),R_FPCTL
2888 and #28,R_FPCTL
2889 or #3,R_FPCTL
2890
2891| fp->idfcpt = fp->idfpt1;
2892
2893 move.b 6(A_FP),8(A_FP)
2894
2895| fp->idftmd |= I_ACTIVE;
2896
2897 or.b #2,7(A_FP)
2898
2899| fp->idftrf = trg;
2900
2901 move TRG(A6),10(A_FP)
2902
2903| |(fpu + (long)FPU_TCV1) = srcval;
2904
2905 move SRCVAL(A6),0x8(A_FPU)
2906
2907| ++octype;
2908
2909 add #1,OCTYPE(A6)
2910
2911| |(fpu + (long)FPU_TSF1) = mltval;
2912
2913 move MLTVAL(A6),0xA(A_FPU)
2914
2915| ++octype;
2916
2917 add #1,OCTYPE(A6)
2918
2919| |(fpu + (long)FPU_TMNT) = fpmant;
2920
2921 move R_FPMANT,0x14(A_FPU)
2922
2923| ++octype;
2924
2925 add #1,OCTYPE(A6)
2926
2927| |(fpu + (long)FPU_TEXP) = fpexp;
2928
2929 move R_FPEXP,0x16(A_FPU)
2930
2931| ++octype;
2932
2933 add #1,OCTYPE(A6)
2934
2935 .page
2936
2937| if (fp->idftmd & I_VNSUBN)
2938
2939 btst #3,7(A_FP)
2940 beq F04L169
2941
2942| |(fpu + (long)FPU_TNV1) = fpval;
2943
2944 move R_FPVAL,0x1C(A_FPU)
2945 bra F04L170
2946
2947| else
2948| |(fpu + (long)FPU_TNV0) = fpval;
2949
2950F04L169: move R_FPVAL,2(A_FPU)
2951
2952| ++octype;
2953
2954F04L170: add #1,OCTYPE(A6)
2955
2956| |(fpu + (long)FPU_TCTL) = fpctl;
2957
2958 move R_FPCTL,(A_FPU)
2959
2960| setipl(oldi);
2961
2962 move OLDI(A6),sr
2963
2964 .page
2965| ------------------------------------------------------------------------------
2966| Start function 5 -- Loctn
2967| ------------------------------------------------------------------------------
2968
2969| if (ip->idhfnc[5].idftmd & I_TM_KEY) {
2970
2971FN05: move.l IP(A6),A0
2972 move.b 153(A0),D0
2973 move.w TAG(A6),D1
2974 eor.w D1,D0
2975 btst #0,D0
2976 bne FN05A
2977
2978 jmp FN06
2979
2980| vp = (vce << 4) + 4;
2981
2982FN05A: move VCE(A6),D0
2983 asl #4,D0
2984 add.w #4,D0
2985 move D0,VP(A6)
2986
2987| fpu = io_fpu + FPU_OFNC + (vp << 4);
2988
2989 asl #5,D0
2990 ext.l D0
2991 move.l D0,A_FPU
2992 add.l #io_fpu+0x4000,A_FPU
2993
2994| fp = &ip->idhfnc[5];
2995
2996 move.l #60,A_FP
2997 add.l IP(A6),A_FP
2998 add.l #86,A_FP
2999
3000| pt = &ip->idhpnt[fp->idfpt1];
3001
3002 clr.l D0
3003 move.b 6(A_FP),D0
3004 lsl.l #2,D0
3005 move.l D0,D1
3006 add.l D0,D0
3007 add.l D1,D0
3008 add.l IP(A6),D0
3009 add.l #242,D0
3010 move.l D0,PT(A6)
3011
3012 .page
3013
3014| srcnum = group | fp->idfsrc;
3015
3016 move.w GROUP(A6),D0
3017 ext.l D0
3018 clr.l D1
3019 move.b 4(A_FP),D1
3020 or D1,D0
3021 move D0,SRCNUM(A6)
3022
3023| vep = &valents[srcnum];
3024
3025 add.l D0,D0
3026 move.l D0,D1
3027 lsl.l #2,D0
3028 add.l D1,D0
3029 add.l #valents,D0
3030 move.l D0,VEP(A6)
3031
3032| smp = vpsms[vp];
3033
3034 move VP(A6),A0
3035 add.l A0,A0
3036 add.l A0,A0
3037 add.l #vpsms,A0
3038 move.l (A0),A_SMP
3039
3040| if (srcnum NE smp->sm) {
3041
3042 clr D0
3043 move 10(A_SMP),D0
3044 cmp SRCNUM(A6),D0
3045 beq F05L113
3046
3047| (smp->prv)->nxt = smp->nxt;
3048
3049 move.l 4(A_SMP),A0
3050 move.l (A_SMP),(A0)
3051
3052| (smp->nxt)->prv = smp->prv;
3053
3054 move.l (A_SMP),A0
3055 move.l 4(A_SMP),4(A0)
3056
3057| smp->prv = (struct sment *)vep;
3058
3059 move.l VEP(A6),4(A_SMP)
3060
3061| smp->nxt = vep->nxt;
3062
3063 move.l VEP(A6),A0
3064 move.l (A0),(A_SMP)
3065
3066| (vep->nxt)->prv = smp;
3067
3068 move.l VEP(A6),A0
3069 move.l (A0),A0
3070 move.l A_SMP,4(A0)
3071
3072| vep->nxt = smp;
3073
3074 move.l VEP(A6),A0
3075 move.l A_SMP,(A0)
3076
3077| smp->sm = srcnum;
3078
3079 move SRCNUM(A6),10(A_SMP)
3080
3081| }
3082
3083| mltval = fp->idfmlt;
3084
3085F05L113: move 2(A_FP),MLTVAL(A6)
3086
3087 .page
3088
3089| switch (fp->idfsrc) {
3090
3091 move.b 4(A_FP),D0
3092 ext.w d0
3093 cmp #10,D0
3094 bhi F05L122
3095
3096 asl #2,D0
3097 lea F05L123,A0
3098 movea.l 0(A0,D0.W),A0
3099 jmp (A0)
3100
3101| case SM_NONE:
3102| mltval = 0;
3103
3104F05L116: clr MLTVAL(A6)
3105
3106| tsrcval = 0;
3107
3108 clr TSRCVAL(A6)
3109
3110| break;
3111
3112 bra F05L114
3113
3114| case SM_RAND:
3115| tsrcval = xgetran(mltval);
3116
3117F05L117: move MLTVAL(A6),(sp)
3118 jsr xgetran
3119 move D0,TSRCVAL(A6)
3120
3121| break;
3122
3123 bra F05L114
3124
3125| case SM_PTCH:
3126| tsrcval = pch;
3127
3128F05L118: move PCH(A6),TSRCVAL(A6)
3129
3130| break;
3131
3132 bra F05L114
3133
3134 .page
3135
3136| case SM_FREQ:
3137| tsrcval = ptoftab[(pch >> 7) & 0x00FF];
3138
3139F05L119: move PCH(A6),D0
3140 asr #7,D0
3141 and #255,D0
3142 move D0,A0
3143 add.l A0,A0
3144 add.l #ptoftab,A0
3145 move (A0),TSRCVAL(A6)
3146
3147| break;
3148
3149 bra F05L114
3150
3151| case SM_KVEL:
3152| tsrcval = veltab[trg];
3153
3154F05L120: move TRG(A6),A0
3155 add.l A0,A0
3156 add.l #veltab,A0
3157 move (A0),TSRCVAL(A6)
3158
3159| break;
3160
3161 bra F05L114
3162
3163| case SM_KPRS:
3164| tsrcval = prstab[trg];
3165
3166F05L121: move TRG(A6),A0
3167 add.l A0,A0
3168 add.l #prstab,A0
3169 move (A0),TSRCVAL(A6)
3170
3171| break;
3172
3173 bra F05L114
3174
3175| default:
3176| tsrcval = vep->val;
3177
3178F05L122: move.l VEP(A6),A0
3179 move 8(A0),TSRCVAL(A6)
3180
3181| }
3182
3183 .page
3184
3185| srcval = tsrcval;
3186
3187F05L114: move TSRCVAL(A6),SRCVAL(A6)
3188
3189 .page
3190
3191| if (pt->ipvsrc) {
3192
3193F05L124: move.l PT(A6),A0
3194 tst.b 6(A0)
3195 beq F05L136
3196
3197| switch (pt->ipvsrc) {
3198
3199 move.l PT(A6),A0
3200 move.b 6(A0),D0
3201 ext.w D0
3202 sub #1,D0
3203 cmp #9,D0
3204 bhi F05L144
3205
3206 asl #2,D0
3207 lea F05L145,A0
3208 move.l 0(A0,D0.W),A0
3209 jmp (A0)
3210
3211| case SM_RAND:
3212| ltmp = xgetran(pt_>ipvmlt);
3213
3214F05L139: move.l PT(A6),A0
3215 move 4(A0),(sp)
3216 jsr xgetran
3217 ext.l D0
3218 move.l D0,LTMP(A6)
3219
3220| break;
3221
3222 bra F05L137
3223
3224| case SM_PTCH:
3225| ltmp = pch;
3226
3227F05L140: move PCH(A6),A0
3228 move.l A0,LTMP(A6)
3229
3230| break;
3231
3232 bra F05L137
3233
3234 .page
3235
3236| case SM_FREQ:
3237| ltmp = ptoftab[(pch >> 7) & 0x00FF];
3238
3239F05L141: move PCH(A6),D0
3240 asr #7,D0
3241 and #255,D0
3242 move D0,A0
3243 add.l A0,A0
3244 move.l #ptoftab,A1
3245 move 0(A0,A1.l),D0
3246 ext.l D0
3247 move.l D0,LTMP(A6)
3248
3249| break;
3250
3251 bra F05L137
3252
3253| case SM_KVEL:
3254| ltmp = veltab[trg];
3255
3256F05L142: move TRG(A6),A0
3257 add.l A0,A0
3258 move.l #veltab,A1
3259 move 0(A0,A1.l),D0
3260 ext.l D0
3261 move.l D0,LTMP(A6)
3262
3263| break;
3264
3265 bra F05L137
3266
3267 .page
3268
3269| case SM_KPRS:
3270| ltmp = prstab[trg];
3271
3272F05L143: move TRG(A6),A0
3273 add.l A0,A0
3274 move.l #prstab,A1
3275 move 0(A0,A1.l),D0
3276 ext.l D0
3277 move.l D0,LTMP(A6)
3278
3279| break;
3280
3281 bra F05L137
3282
3283 .page
3284
3285| default:
3286| ltmp = valents[group | pt->ipvsrc].val;
3287
3288F05L144: move.l PT(A6),A0
3289 clr.l D0
3290 move.b 6(A0),D0
3291 or.w GROUP(A6),D0
3292 add.l D0,D0
3293 move.l D0,D1
3294 lsl.l #2,D0
3295 add.l D1,D0
3296 move.l D0,A0
3297 move.l #valents,A1
3298 clr.l D0
3299 move 8(A0,A1.l),D0
3300 move.l D0,LTMP(A6)
3301
3302| }
3303
3304
3305 .page
3306
3307| ltmp = (ltmp * pt->ipvmlt) >> 15;
3308
3309F05L137: move.l PT(A6),A0
3310 move.w 4(A0),D0
3311 move.w LTMP+2(A6),D1
3312 muls D1,D0
3313 move.l #15,D1
3314 asr.l D1,D0
3315 move.l D0,LTMP(A6)
3316
3317| ltmp += (long)pt->ipval;
3318
3319 move.l PT(A6),A0
3320 move 2(A0),D0
3321 ext.l D0
3322 add.l D0,LTMP(A6)
3323
3324| if (ltmp GT (long)VALMAX)
3325| ltmp = (long)VALMAX;
3326
3327 cmp.l #VALMAX,LTMP(A6)
3328 ble F05L146
3329
3330 move.l #VALMAX,LTMP(A6)
3331 bra F05L147
3332
3333| else if (ltmp LT (long)VALMIN)
3334| ltmp = (long)VALMIN;
3335
3336F05L146: cmp.l #VALMIN,LTMP(A6)
3337 bge F05L147
3338
3339 move.l #VALMIN,LTMP(A6)
3340
3341| tfpval = (short)ltmp;
3342
3343F05L147: move.w LTMP+2(A6),TFPVAL(A6)
3344 bra F05L149
3345
3346| } else {
3347
3348| tfpval = pt->ipval;
3349
3350F05L136: move.l PT(A6),A0
3351 move 2(A0),TFPVAL(A6)
3352
3353| }
3354
3355 .page
3356
3357| fpmant = (((long)pt->iptom & 0x0000FFF0L)
3358| | ((long)timemlt & 0x0000FFFFL)) >> 15;
3359
3360F05L149: move.l PT(A6),A0
3361 move.w (A0),D0
3362 move.w D0,D2
3363 andi.w #0xFFF0,D0
3364 move.w timemlt,D1
3365 muls D1,D0
3366 move.l #15,D1
3367 asr.l D1,D0
3368 move D0,R_FPMANT
3369
3370| fpexp = expbit[pt->iptim & 0x000F];
3371
3372 and #0x000F,D2
3373 move D2,A0
3374 add.l A0,A0
3375 add.l #expbit,A0
3376 move (A0),R_FPEXP
3377
3378 .page
3379
3380| fp->idfpch = pch;
3381
3382F05L163: move PCH(A6),(A_FP)
3383
3384| if (tfpval > VALMAX)
3385| tfpval = VALMAX;
3386| else if (tfpval < 0)
3387| tfpval = 0;
3388
3389 move.w TFPVAL(A6),D0
3390 cmp.w #0x7D00,D0
3391 ble F05L163B
3392
3393 move.w #0x7D00,D0
3394 bra F05L163A
3395
3396F05L163B: tst.w D0
3397 bpl F05L163A
3398
3399 clr.w D0
3400
3401|#if LOC_EOR
3402| fpval = (tfpval << 1) ^ 0x8000;
3403|#endif
3404
3405 .ifne LOC_EOR
3406F05L163A: add.w D0,D0
3407 eor.w #0x8000,D0
3408 .endc
3409
3410|#if LOC_SUB
3411| fpval = ((tfpval >> 5) - 500) << 6;
3412|#endif
3413
3414 .ifne LOC_SUB
3415F05L163A: asr.w #5,D0
3416 sub.w #500,D0
3417 asl.w #6,D0
3418 .endc
3419
3420 move.w D0,R_FPVAL
3421
3422 .page
3423
3424 move.b 5(A_FP),D0
3425 ext.w D0
3426 sub.w #1,D0
3427 movea.l PT(A6),A0
3428
3429| oldi = setipl(FPU_DI);
3430
3431 move sr,OLDI(A6)
3432 move #FPU_DI,sr
3433
3434F05L168: clr.b 10(A0)
3435 add.l #12,a0
3436 dbra D0,F05L168
3437
3438 .page
3439
3440| fp->idftmd ^= I_NVBITS;
3441
3442F05L165: eor.b #24,7(A_FP)
3443
3444| fpctl = (fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0003;
3445
3446 move.b 7(A_FP),R_FPCTL
3447 and #28,R_FPCTL
3448 or #3,R_FPCTL
3449
3450| fp->idfcpt = fp->idfpt1;
3451
3452 move.b 6(A_FP),8(A_FP)
3453
3454| fp->idftmd |= I_ACTIVE;
3455
3456 or.b #2,7(A_FP)
3457
3458| fp->idftrf = trg;
3459
3460 move TRG(A6),10(A_FP)
3461
3462| |(fpu + (long)FPU_TCV1) = srcval;
3463
3464 move SRCVAL(A6),0x8(A_FPU)
3465
3466| ++octype;
3467
3468 add #1,OCTYPE(A6)
3469
3470| |(fpu + (long)FPU_TSF1) = mltval;
3471
3472 move MLTVAL(A6),0xA(A_FPU)
3473
3474| ++octype;
3475
3476 add #1,OCTYPE(A6)
3477
3478| |(fpu + (long)FPU_TMNT) = fpmant;
3479
3480 move R_FPMANT,0x14(A_FPU)
3481
3482| ++octype;
3483
3484 add #1,OCTYPE(A6)
3485
3486| |(fpu + (long)FPU_TEXP) = fpexp;
3487
3488 move R_FPEXP,0x16(A_FPU)
3489
3490| ++octype;
3491
3492 add #1,OCTYPE(A6)
3493
3494 .page
3495
3496| if (fp->idftmd & I_VNSUBN)
3497
3498 btst #3,7(A_FP)
3499 beq F05L169
3500
3501| |(fpu + (long)FPU_TNV1) = fpval;
3502
3503 move R_FPVAL,0x1C(A_FPU)
3504 bra F05L170
3505
3506| else
3507| |(fpu + (long)FPU_TNV0) = fpval;
3508
3509F05L169: move R_FPVAL,2(A_FPU)
3510
3511| ++octype;
3512
3513F05L170: add #1,OCTYPE(A6)
3514
3515| |(fpu + (long)FPU_TCTL) = fpctl;
3516
3517 move R_FPCTL,(A_FPU)
3518
3519| setipl(oldi);
3520
3521 move OLDI(A6),sr
3522
3523 .page
3524| ------------------------------------------------------------------------------
3525| Start function 6 -- Ind 1
3526| ------------------------------------------------------------------------------
3527
3528| if (ip->idhfnc[2].idftmd & I_TM_KEY) {
3529
3530FN06: move.l IP(A6),A0
3531 move.b 165(A0),D0
3532 move.w TAG(A6),D1
3533 eor.w D1,D0
3534 btst #0,D0
3535 bne FN06A
3536
3537 jmp FN07
3538
3539| vp = (vce << 4) + 9;
3540
3541FN06A: move VCE(A6),D0
3542 asl #4,D0
3543 add.w #9,D0
3544 move D0,VP(A6)
3545
3546| fpu = io_fpu + FPU_OFNC + (vp << 4);
3547
3548 asl #5,D0
3549 ext.l D0
3550 move.l D0,A_FPU
3551 add.l #io_fpu+0x4000,A_FPU
3552
3553| fp = &ip->idhfnc[6];
3554
3555 move.l #72,A_FP
3556 add.l IP(A6),A_FP
3557 add.l #86,A_FP
3558
3559| pt = &ip->idhpnt[fp->idfpt1];
3560
3561 clr.l D0
3562 move.b 6(A_FP),D0
3563 lsl.l #2,D0
3564 move.l D0,D1
3565 add.l D0,D0
3566 add.l D1,D0
3567 add.l IP(A6),D0
3568 add.l #242,D0
3569 move.l D0,PT(A6)
3570
3571 .page
3572
3573| srcnum = group | fp->idfsrc;
3574
3575 move.w GROUP(A6),D0
3576 ext.l D0
3577 clr.l D1
3578 move.b 4(A_FP),D1
3579 or D1,D0
3580 move D0,SRCNUM(A6)
3581
3582| vep = &valents[srcnum];
3583
3584 add.l D0,D0
3585 move.l D0,D1
3586 lsl.l #2,D0
3587 add.l D1,D0
3588 add.l #valents,D0
3589 move.l D0,VEP(A6)
3590
3591| smp = vpsms[vp];
3592
3593 move VP(A6),A0
3594 add.l A0,A0
3595 add.l A0,A0
3596 add.l #vpsms,A0
3597 move.l (A0),A_SMP
3598
3599| if (srcnum NE smp->sm) {
3600
3601 clr D0
3602 move 10(A_SMP),D0
3603 cmp SRCNUM(A6),D0
3604 beq F06L113
3605
3606| (smp->prv)->nxt = smp->nxt;
3607
3608 move.l 4(A_SMP),A0
3609 move.l (A_SMP),(A0)
3610
3611| (smp->nxt)->prv = smp->prv;
3612
3613 move.l (A_SMP),A0
3614 move.l 4(A_SMP),4(A0)
3615
3616| smp->prv = (struct sment *)vep;
3617
3618 move.l VEP(A6),4(A_SMP)
3619
3620| smp->nxt = vep->nxt;
3621
3622 move.l VEP(A6),A0
3623 move.l (A0),(A_SMP)
3624
3625| (vep->nxt)->prv = smp;
3626
3627 move.l VEP(A6),A0
3628 move.l (A0),A0
3629 move.l A_SMP,4(A0)
3630
3631| vep->nxt = smp;
3632
3633 move.l VEP(A6),A0
3634 move.l A_SMP,(A0)
3635
3636| smp->sm = srcnum;
3637
3638 move SRCNUM(A6),10(A_SMP)
3639
3640| }
3641
3642| mltval = fp->idfmlt;
3643
3644F06L113: move 2(A_FP),MLTVAL(A6)
3645
3646 .page
3647
3648| switch (fp->idfsrc) {
3649
3650 move.b 4(A_FP),D0
3651 ext.w d0
3652 cmp #10,D0
3653 bhi F06L122
3654
3655 asl #2,D0
3656 lea F06L123,A0
3657 movea.l 0(A0,D0.W),A0
3658 jmp (A0)
3659
3660| case SM_NONE:
3661| mltval = 0;
3662
3663F06L116: clr MLTVAL(A6)
3664
3665| tsrcval = 0;
3666
3667 clr TSRCVAL(A6)
3668
3669| break;
3670
3671 bra F06L114
3672
3673| case SM_RAND:
3674| tsrcval = xgetran(mltval);
3675
3676F06L117: move MLTVAL(A6),(sp)
3677 jsr xgetran
3678 move D0,TSRCVAL(A6)
3679
3680| break;
3681
3682 bra F06L114
3683
3684| case SM_PTCH:
3685| tsrcval = pch;
3686
3687F06L118: move PCH(A6),TSRCVAL(A6)
3688
3689| break;
3690
3691 bra F06L114
3692
3693 .page
3694
3695| case SM_FREQ:
3696| tsrcval = ptoftab[(pch >> 7) & 0x00FF];
3697
3698F06L119: move PCH(A6),D0
3699 asr #7,D0
3700 and #255,D0
3701 move D0,A0
3702 add.l A0,A0
3703 add.l #ptoftab,A0
3704 move (A0),TSRCVAL(A6)
3705
3706| break;
3707
3708 bra F06L114
3709
3710| case SM_KVEL:
3711| tsrcval = veltab[trg];
3712
3713F06L120: move TRG(A6),A0
3714 add.l A0,A0
3715 add.l #veltab,A0
3716 move (A0),TSRCVAL(A6)
3717
3718| break;
3719
3720 bra F06L114
3721
3722| case SM_KPRS:
3723| tsrcval = prstab[trg];
3724
3725F06L121: move TRG(A6),A0
3726 add.l A0,A0
3727 add.l #prstab,A0
3728 move (A0),TSRCVAL(A6)
3729
3730| break;
3731
3732 bra F06L114
3733
3734| default:
3735| tsrcval = vep->val;
3736
3737F06L122: move.l VEP(A6),A0
3738 move 8(A0),TSRCVAL(A6)
3739
3740| }
3741
3742 .page
3743
3744| srcval = tsrcval;
3745
3746F06L114: move TSRCVAL(A6),SRCVAL(A6)
3747
3748 .page
3749
3750| if (pt->ipvsrc) {
3751
3752F06L124: move.l PT(A6),A0
3753 tst.b 6(A0)
3754 beq F06L136
3755
3756| switch (pt->ipvsrc) {
3757
3758 move.l PT(A6),A0
3759 move.b 6(A0),D0
3760 ext.w D0
3761 sub #1,D0
3762 cmp #9,D0
3763 bhi F06L144
3764
3765 asl #2,D0
3766 lea F06L145,A0
3767 move.l 0(A0,D0.W),A0
3768 jmp (A0)
3769
3770| case SM_RAND:
3771| ltmp = xgetran(pt_>ipvmlt);
3772
3773F06L139: move.l PT(A6),A0
3774 move 4(A0),(sp)
3775 jsr xgetran
3776 ext.l D0
3777 move.l D0,LTMP(A6)
3778
3779| break;
3780
3781 bra F06L137
3782
3783| case SM_PTCH:
3784| ltmp = pch;
3785
3786F06L140: move PCH(A6),A0
3787 move.l A0,LTMP(A6)
3788
3789| break;
3790
3791 bra F06L137
3792
3793 .page
3794
3795| case SM_FREQ:
3796| ltmp = ptoftab[(pch >> 7) & 0x00FF];
3797
3798F06L141: move PCH(A6),D0
3799 asr #7,D0
3800 and #255,D0
3801 move D0,A0
3802 add.l A0,A0
3803 move.l #ptoftab,A1
3804 move 0(A0,A1.l),D0
3805 ext.l D0
3806 move.l D0,LTMP(A6)
3807
3808| break;
3809
3810 bra F06L137
3811
3812| case SM_KVEL:
3813| ltmp = veltab[trg];
3814
3815F06L142: move TRG(A6),A0
3816 add.l A0,A0
3817 move.l #veltab,A1
3818 move 0(A0,A1.l),D0
3819 ext.l D0
3820 move.l D0,LTMP(A6)
3821
3822| break;
3823
3824 bra F06L137
3825
3826 .page
3827
3828| case SM_KPRS:
3829| ltmp = prstab[trg];
3830
3831F06L143: move TRG(A6),A0
3832 add.l A0,A0
3833 move.l #prstab,A1
3834 move 0(A0,A1.l),D0
3835 ext.l D0
3836 move.l D0,LTMP(A6)
3837
3838| break;
3839
3840 bra F06L137
3841
3842 .page
3843
3844| default:
3845| ltmp = valents[group | pt->ipvsrc].val;
3846
3847F06L144: move.l PT(A6),A0
3848 clr.l D0
3849 move.b 6(A0),D0
3850 or.w GROUP(A6),D0
3851 add.l D0,D0
3852 move.l D0,D1
3853 lsl.l #2,D0
3854 add.l D1,D0
3855 move.l D0,A0
3856 move.l #valents,A1
3857 clr.l D0
3858 move 8(A0,A1.l),D0
3859 move.l D0,LTMP(A6)
3860
3861| }
3862
3863
3864 .page
3865
3866| ltmp = (ltmp * pt->ipvmlt) >> 15;
3867
3868F06L137: move.l PT(A6),A0
3869 move.w 4(A0),D0
3870 move.w LTMP+2(A6),D1
3871 muls D1,D0
3872 move.l #15,D1
3873 asr.l D1,D0
3874 move.l D0,LTMP(A6)
3875
3876| ltmp += (long)pt->ipval;
3877
3878 move.l PT(A6),A0
3879 move 2(A0),D0
3880 ext.l D0
3881 add.l D0,LTMP(A6)
3882
3883| if (ltmp GT (long)VALMAX)
3884| ltmp = (long)VALMAX;
3885
3886 cmp.l #VALMAX,LTMP(A6)
3887 ble F06L146
3888
3889 move.l #VALMAX,LTMP(A6)
3890 bra F06L147
3891
3892| else if (ltmp LT (long)VALMIN)
3893| ltmp = (long)VALMIN;
3894
3895F06L146: cmp.l #VALMIN,LTMP(A6)
3896 bge F06L147
3897
3898 move.l #VALMIN,LTMP(A6)
3899
3900| tfpval = (short)ltmp;
3901
3902F06L147: move.w LTMP+2(A6),TFPVAL(A6)
3903 bra F06L149
3904
3905| } else {
3906
3907| tfpval = pt->ipval;
3908
3909F06L136: move.l PT(A6),A0
3910 move 2(A0),TFPVAL(A6)
3911
3912| }
3913
3914 .page
3915
3916| fpmant = (((long)pt->iptom & 0x0000FFF0L)
3917| | ((long)timemlt & 0x0000FFFFL)) >> 15;
3918
3919F06L149: move.l PT(A6),A0
3920 move.w (A0),D0
3921 move.w D0,D2
3922 andi.w #0xFFF0,D0
3923 move.w timemlt,D1
3924 muls D1,D0
3925 move.l #15,D1
3926 asr.l D1,D0
3927 move D0,R_FPMANT
3928
3929| fpexp = expbit[pt->iptim & 0x000F];
3930
3931 and #0x000F,D2
3932 move D2,A0
3933 add.l A0,A0
3934 add.l #expbit,A0
3935 move (A0),R_FPEXP
3936
3937 .page
3938
3939| fp->idfpch = pch;
3940
3941F06L163: move PCH(A6),(A_FP)
3942
3943| fpval = tfpval;
3944
3945 move TFPVAL(A6),R_FPVAL
3946
3947 .page
3948
3949 move.b 5(A_FP),D0
3950 ext.w D0
3951 sub.w #1,D0
3952 movea.l PT(A6),A0
3953
3954| oldi = setipl(FPU_DI);
3955
3956 move sr,OLDI(A6)
3957 move #FPU_DI,sr
3958
3959F06L168: clr.b 10(A0)
3960 add.l #12,a0
3961 dbra D0,F06L168
3962
3963 .page
3964
3965| fp->idftmd ^= I_NVBITS;
3966
3967F06L165: eor.b #24,7(A_FP)
3968
3969| fpctl = (fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0003;
3970
3971 move.b 7(A_FP),R_FPCTL
3972 and #28,R_FPCTL
3973 or #3,R_FPCTL
3974
3975| fp->idfcpt = fp->idfpt1;
3976
3977 move.b 6(A_FP),8(A_FP)
3978
3979| fp->idftmd |= I_ACTIVE;
3980
3981 or.b #2,7(A_FP)
3982
3983| fp->idftrf = trg;
3984
3985 move TRG(A6),10(A_FP)
3986
3987| |(fpu + (long)FPU_TCV1) = srcval;
3988
3989 move SRCVAL(A6),0x8(A_FPU)
3990
3991| ++octype;
3992
3993 add #1,OCTYPE(A6)
3994
3995| |(fpu + (long)FPU_TSF1) = mltval;
3996
3997 move MLTVAL(A6),0xA(A_FPU)
3998
3999| ++octype;
4000
4001 add #1,OCTYPE(A6)
4002
4003| |(fpu + (long)FPU_TMNT) = fpmant;
4004
4005 move R_FPMANT,0x14(A_FPU)
4006
4007| ++octype;
4008
4009 add #1,OCTYPE(A6)
4010
4011| |(fpu + (long)FPU_TEXP) = fpexp;
4012
4013 move R_FPEXP,0x16(A_FPU)
4014
4015| ++octype;
4016
4017 add #1,OCTYPE(A6)
4018
4019 .page
4020
4021| if (fp->idftmd & I_VNSUBN)
4022
4023 btst #3,7(A_FP)
4024 beq F06L169
4025
4026| |(fpu + (long)FPU_TNV1) = fpval;
4027
4028 move R_FPVAL,0x1C(A_FPU)
4029 bra F06L170
4030
4031| else
4032| |(fpu + (long)FPU_TNV0) = fpval;
4033
4034F06L169: move R_FPVAL,2(A_FPU)
4035
4036| ++octype;
4037
4038F06L170: add #1,OCTYPE(A6)
4039
4040| |(fpu + (long)FPU_TCTL) = fpctl;
4041
4042 move R_FPCTL,(A_FPU)
4043
4044| setipl(oldi);
4045
4046 move OLDI(A6),sr
4047
4048 .page
4049| ------------------------------------------------------------------------------
4050| Start function 7 -- Ind 2
4051| ------------------------------------------------------------------------------
4052
4053| if (ip->idhfnc[7].idftmd & I_TM_KEY) {
4054
4055FN07: move.l IP(A6),A0
4056 move.b 177(A0),D0
4057 move.w TAG(A6),D1
4058 eor.w D1,D0
4059 btst #0,D0
4060 bne FN07A
4061
4062 jmp FN08
4063
4064| vp = (vce << 4) + 11;
4065
4066FN07A: move VCE(A6),D0
4067 asl #4,D0
4068 add.w #11,D0
4069 move D0,VP(A6)
4070
4071| fpu = io_fpu + FPU_OFNC + (vp << 4);
4072
4073 asl #5,D0
4074 ext.l D0
4075 move.l D0,A_FPU
4076 add.l #io_fpu+0x4000,A_FPU
4077
4078| fp = &ip->idhfnc[7];
4079
4080 move.l #84,A_FP
4081 add.l IP(A6),A_FP
4082 add.l #86,A_FP
4083
4084| pt = &ip->idhpnt[fp->idfpt1];
4085
4086 clr.l D0
4087 move.b 6(A_FP),D0
4088 lsl.l #2,D0
4089 move.l D0,D1
4090 add.l D0,D0
4091 add.l D1,D0
4092 add.l IP(A6),D0
4093 add.l #242,D0
4094 move.l D0,PT(A6)
4095
4096 .page
4097
4098| srcnum = group | fp->idfsrc;
4099
4100 move.w GROUP(A6),D0
4101 ext.l D0
4102 clr.l D1
4103 move.b 4(A_FP),D1
4104 or D1,D0
4105 move D0,SRCNUM(A6)
4106
4107| vep = &valents[srcnum];
4108
4109 add.l D0,D0
4110 move.l D0,D1
4111 lsl.l #2,D0
4112 add.l D1,D0
4113 add.l #valents,D0
4114 move.l D0,VEP(A6)
4115
4116| smp = vpsms[vp];
4117
4118 move VP(A6),A0
4119 add.l A0,A0
4120 add.l A0,A0
4121 add.l #vpsms,A0
4122 move.l (A0),A_SMP
4123
4124| if (srcnum NE smp->sm) {
4125
4126 clr D0
4127 move 10(A_SMP),D0
4128 cmp SRCNUM(A6),D0
4129 beq F07L113
4130
4131| (smp->prv)->nxt = smp->nxt;
4132
4133 move.l 4(A_SMP),A0
4134 move.l (A_SMP),(A0)
4135
4136| (smp->nxt)->prv = smp->prv;
4137
4138 move.l (A_SMP),A0
4139 move.l 4(A_SMP),4(A0)
4140
4141| smp->prv = (struct sment *)vep;
4142
4143 move.l VEP(A6),4(A_SMP)
4144
4145| smp->nxt = vep->nxt;
4146
4147 move.l VEP(A6),A0
4148 move.l (A0),(A_SMP)
4149
4150| (vep->nxt)->prv = smp;
4151
4152 move.l VEP(A6),A0
4153 move.l (A0),A0
4154 move.l A_SMP,4(A0)
4155
4156| vep->nxt = smp;
4157
4158 move.l VEP(A6),A0
4159 move.l A_SMP,(A0)
4160
4161| smp->sm = srcnum;
4162
4163 move SRCNUM(A6),10(A_SMP)
4164
4165| }
4166
4167| mltval = fp->idfmlt;
4168
4169F07L113: move 2(A_FP),MLTVAL(A6)
4170
4171 .page
4172
4173| switch (fp->idfsrc) {
4174
4175 move.b 4(A_FP),D0
4176 ext.w d0
4177 cmp #10,D0
4178 bhi F07L122
4179
4180 asl #2,D0
4181 lea F07L123,A0
4182 movea.l 0(A0,D0.W),A0
4183 jmp (A0)
4184
4185| case SM_NONE:
4186| mltval = 0;
4187
4188F07L116: clr MLTVAL(A6)
4189
4190| tsrcval = 0;
4191
4192 clr TSRCVAL(A6)
4193
4194| break;
4195
4196 bra F07L114
4197
4198| case SM_RAND:
4199| tsrcval = xgetran(mltval);
4200
4201F07L117: move MLTVAL(A6),(sp)
4202 jsr xgetran
4203 move D0,TSRCVAL(A6)
4204
4205| break;
4206
4207 bra F07L114
4208
4209| case SM_PTCH:
4210| tsrcval = pch;
4211
4212F07L118: move PCH(A6),TSRCVAL(A6)
4213
4214| break;
4215
4216 bra F07L114
4217
4218 .page
4219
4220| case SM_FREQ:
4221| tsrcval = ptoftab[(pch >> 7) & 0x00FF];
4222
4223F07L119: move PCH(A6),D0
4224 asr #7,D0
4225 and #255,D0
4226 move D0,A0
4227 add.l A0,A0
4228 add.l #ptoftab,A0
4229 move (A0),TSRCVAL(A6)
4230
4231| break;
4232
4233 bra F07L114
4234
4235| case SM_KVEL:
4236| tsrcval = veltab[trg];
4237
4238F07L120: move TRG(A6),A0
4239 add.l A0,A0
4240 add.l #veltab,A0
4241 move (A0),TSRCVAL(A6)
4242
4243| break;
4244
4245 bra F07L114
4246
4247| case SM_KPRS:
4248| tsrcval = prstab[trg];
4249
4250F07L121: move TRG(A6),A0
4251 add.l A0,A0
4252 add.l #prstab,A0
4253 move (A0),TSRCVAL(A6)
4254
4255| break;
4256
4257 bra F07L114
4258
4259| default:
4260| tsrcval = vep->val;
4261
4262F07L122: move.l VEP(A6),A0
4263 move 8(A0),TSRCVAL(A6)
4264
4265| }
4266
4267 .page
4268
4269| srcval = tsrcval;
4270
4271F07L114: move TSRCVAL(A6),SRCVAL(A6)
4272
4273 .page
4274
4275| if (pt->ipvsrc) {
4276
4277F07L124: move.l PT(A6),A0
4278 tst.b 6(A0)
4279 beq F07L136
4280
4281| switch (pt->ipvsrc) {
4282
4283 move.l PT(A6),A0
4284 move.b 6(A0),D0
4285 ext.w D0
4286 sub #1,D0
4287 cmp #9,D0
4288 bhi F07L144
4289
4290 asl #2,D0
4291 lea F07L145,A0
4292 move.l 0(A0,D0.W),A0
4293 jmp (A0)
4294
4295| case SM_RAND:
4296| ltmp = xgetran(pt_>ipvmlt);
4297
4298F07L139: move.l PT(A6),A0
4299 move 4(A0),(sp)
4300 jsr xgetran
4301 ext.l D0
4302 move.l D0,LTMP(A6)
4303
4304| break;
4305
4306 bra F07L137
4307
4308| case SM_PTCH:
4309| ltmp = pch;
4310
4311F07L140: move PCH(A6),A0
4312 move.l A0,LTMP(A6)
4313
4314| break;
4315
4316 bra F07L137
4317
4318 .page
4319
4320| case SM_FREQ:
4321| ltmp = ptoftab[(pch >> 7) & 0x00FF];
4322
4323F07L141: move PCH(A6),D0
4324 asr #7,D0
4325 and #255,D0
4326 move D0,A0
4327 add.l A0,A0
4328 move.l #ptoftab,A1
4329 move 0(A0,A1.l),D0
4330 ext.l D0
4331 move.l D0,LTMP(A6)
4332
4333| break;
4334
4335 bra F07L137
4336
4337| case SM_KVEL:
4338| ltmp = veltab[trg];
4339
4340F07L142: move TRG(A6),A0
4341 add.l A0,A0
4342 move.l #veltab,A1
4343 move 0(A0,A1.l),D0
4344 ext.l D0
4345 move.l D0,LTMP(A6)
4346
4347| break;
4348
4349 bra F07L137
4350
4351 .page
4352
4353| case SM_KPRS:
4354| ltmp = prstab[trg];
4355
4356F07L143: move TRG(A6),A0
4357 add.l A0,A0
4358 move.l #prstab,A1
4359 move 0(A0,A1.l),D0
4360 ext.l D0
4361 move.l D0,LTMP(A6)
4362
4363| break;
4364
4365 bra F07L137
4366
4367 .page
4368
4369| default:
4370| ltmp = valents[group | pt->ipvsrc].val;
4371
4372F07L144: move.l PT(A6),A0
4373 clr.l D0
4374 move.b 6(A0),D0
4375 or.w GROUP(A6),D0
4376 add.l D0,D0
4377 move.l D0,D1
4378 lsl.l #2,D0
4379 add.l D1,D0
4380 move.l D0,A0
4381 move.l #valents,A1
4382 clr.l D0
4383 move 8(A0,A1.l),D0
4384 move.l D0,LTMP(A6)
4385
4386| }
4387
4388
4389 .page
4390
4391| ltmp = (ltmp * pt->ipvmlt) >> 15;
4392
4393F07L137: move.l PT(A6),A0
4394 move.w 4(A0),D0
4395 move.w LTMP+2(A6),D1
4396 muls D1,D0
4397 move.l #15,D1
4398 asr.l D1,D0
4399 move.l D0,LTMP(A6)
4400
4401| ltmp += (long)pt->ipval;
4402
4403 move.l PT(A6),A0
4404 move 2(A0),D0
4405 ext.l D0
4406 add.l D0,LTMP(A6)
4407
4408| if (ltmp GT (long)VALMAX)
4409| ltmp = (long)VALMAX;
4410
4411 cmp.l #VALMAX,LTMP(A6)
4412 ble F07L146
4413
4414 move.l #VALMAX,LTMP(A6)
4415 bra F07L147
4416
4417| else if (ltmp LT (long)VALMIN)
4418| ltmp = (long)VALMIN;
4419
4420F07L146: cmp.l #VALMIN,LTMP(A6)
4421 bge F07L147
4422
4423 move.l #VALMIN,LTMP(A6)
4424
4425| tfpval = (short)ltmp;
4426
4427F07L147: move.w LTMP+2(A6),TFPVAL(A6)
4428 bra F07L149
4429
4430| } else {
4431
4432| tfpval = pt->ipval;
4433
4434F07L136: move.l PT(A6),A0
4435 move 2(A0),TFPVAL(A6)
4436
4437| }
4438
4439 .page
4440
4441| fpmant = (((long)pt->iptom & 0x0000FFF0L)
4442| | ((long)timemlt & 0x0000FFFFL)) >> 15;
4443
4444F07L149: move.l PT(A6),A0
4445 move.w (A0),D0
4446 move.w D0,D2
4447 andi.w #0xFFF0,D0
4448 move.w timemlt,D1
4449 muls D1,D0
4450 move.l #15,D1
4451 asr.l D1,D0
4452 move D0,R_FPMANT
4453
4454| fpexp = expbit[pt->iptim & 0x000F];
4455
4456 and #0x000F,D2
4457 move D2,A0
4458 add.l A0,A0
4459 add.l #expbit,A0
4460 move (A0),R_FPEXP
4461
4462 .page
4463
4464| fp->idfpch = pch;
4465
4466F07L163: move PCH(A6),(A_FP)
4467
4468| fpval = tfpval;
4469
4470 move TFPVAL(A6),R_FPVAL
4471
4472 .page
4473
4474 move.b 5(A_FP),D0
4475 ext.w D0
4476 sub.w #1,D0
4477 movea.l PT(A6),A0
4478
4479| oldi = setipl(FPU_DI);
4480
4481 move sr,OLDI(A6)
4482 move #FPU_DI,sr
4483
4484F07L168: clr.b 10(A0)
4485 add.l #12,a0
4486 dbra D0,F07L168
4487
4488 .page
4489
4490| fp->idftmd ^= I_NVBITS;
4491
4492F07L165: eor.b #24,7(A_FP)
4493
4494| fpctl = (fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0003;
4495
4496 move.b 7(A_FP),R_FPCTL
4497 and #28,R_FPCTL
4498 or #3,R_FPCTL
4499
4500| fp->idfcpt = fp->idfpt1;
4501
4502 move.b 6(A_FP),8(A_FP)
4503
4504| fp->idftmd |= I_ACTIVE;
4505
4506 or.b #2,7(A_FP)
4507
4508| fp->idftrf = trg;
4509
4510 move TRG(A6),10(A_FP)
4511
4512| |(fpu + (long)FPU_TCV1) = srcval;
4513
4514 move SRCVAL(A6),0x8(A_FPU)
4515
4516| ++octype;
4517
4518 add #1,OCTYPE(A6)
4519
4520| |(fpu + (long)FPU_TSF1) = mltval;
4521
4522 move MLTVAL(A6),0xA(A_FPU)
4523
4524| ++octype;
4525
4526 add #1,OCTYPE(A6)
4527
4528| |(fpu + (long)FPU_TMNT) = fpmant;
4529
4530 move R_FPMANT,0x14(A_FPU)
4531
4532| ++octype;
4533
4534 add #1,OCTYPE(A6)
4535
4536| |(fpu + (long)FPU_TEXP) = fpexp;
4537
4538 move R_FPEXP,0x16(A_FPU)
4539
4540| ++octype;
4541
4542 add #1,OCTYPE(A6)
4543
4544 .page
4545
4546| if (fp->idftmd & I_VNSUBN)
4547
4548 btst #3,7(A_FP)
4549 beq F07L169
4550
4551| |(fpu + (long)FPU_TNV1) = fpval;
4552
4553 move R_FPVAL,0x1C(A_FPU)
4554 bra F07L170
4555
4556| else
4557| |(fpu + (long)FPU_TNV0) = fpval;
4558
4559F07L169: move R_FPVAL,2(A_FPU)
4560
4561| ++octype;
4562
4563F07L170: add #1,OCTYPE(A6)
4564
4565| |(fpu + (long)FPU_TCTL) = fpctl;
4566
4567 move R_FPCTL,(A_FPU)
4568
4569| setipl(oldi);
4570
4571 move OLDI(A6),sr
4572
4573 .page
4574| ------------------------------------------------------------------------------
4575| Start function 8 -- Ind 3
4576| ------------------------------------------------------------------------------
4577
4578| if (ip->idhfnc[8].idftmd & I_TM_KEY) {
4579
4580FN08: move.l IP(A6),A0
4581 move.b 189(A0),D0
4582 move.w TAG(A6),D1
4583 eor.w D1,D0
4584 btst #0,D0
4585 bne FN08A
4586
4587 jmp FN09
4588
4589| vp = (vce << 4) + 12;
4590
4591FN08A: move VCE(A6),D0
4592 asl #4,D0
4593 add.w #12,D0
4594 move D0,VP(A6)
4595
4596| fpu = io_fpu + FPU_OFNC + (vp << 4);
4597
4598 asl #5,D0
4599 ext.l D0
4600 move.l D0,A_FPU
4601 add.l #io_fpu+0x4000,A_FPU
4602
4603| fp = &ip->idhfnc[8];
4604
4605 move.l #96,A_FP
4606 add.l IP(A6),A_FP
4607 add.l #86,A_FP
4608
4609| pt = &ip->idhpnt[fp->idfpt1];
4610
4611 clr.l D0
4612 move.b 6(A_FP),D0
4613 lsl.l #2,D0
4614 move.l D0,D1
4615 add.l D0,D0
4616 add.l D1,D0
4617 add.l IP(A6),D0
4618 add.l #242,D0
4619 move.l D0,PT(A6)
4620
4621 .page
4622
4623| srcnum = group | fp->idfsrc;
4624
4625 move.w GROUP(A6),D0
4626 ext.l D0
4627 clr.l D1
4628 move.b 4(A_FP),D1
4629 or D1,D0
4630 move D0,SRCNUM(A6)
4631
4632| vep = &valents[srcnum];
4633
4634 add.l D0,D0
4635 move.l D0,D1
4636 lsl.l #2,D0
4637 add.l D1,D0
4638 add.l #valents,D0
4639 move.l D0,VEP(A6)
4640
4641| smp = vpsms[vp];
4642
4643 move VP(A6),A0
4644 add.l A0,A0
4645 add.l A0,A0
4646 add.l #vpsms,A0
4647 move.l (A0),A_SMP
4648
4649| if (srcnum NE smp->sm) {
4650
4651 clr D0
4652 move 10(A_SMP),D0
4653 cmp SRCNUM(A6),D0
4654 beq F08L113
4655
4656| (smp->prv)->nxt = smp->nxt;
4657
4658 move.l 4(A_SMP),A0
4659 move.l (A_SMP),(A0)
4660
4661| (smp->nxt)->prv = smp->prv;
4662
4663 move.l (A_SMP),A0
4664 move.l 4(A_SMP),4(A0)
4665
4666| smp->prv = (struct sment *)vep;
4667
4668 move.l VEP(A6),4(A_SMP)
4669
4670| smp->nxt = vep->nxt;
4671
4672 move.l VEP(A6),A0
4673 move.l (A0),(A_SMP)
4674
4675| (vep->nxt)->prv = smp;
4676
4677 move.l VEP(A6),A0
4678 move.l (A0),A0
4679 move.l A_SMP,4(A0)
4680
4681| vep->nxt = smp;
4682
4683 move.l VEP(A6),A0
4684 move.l A_SMP,(A0)
4685
4686| smp->sm = srcnum;
4687
4688 move SRCNUM(A6),10(A_SMP)
4689
4690| }
4691
4692| mltval = fp->idfmlt;
4693
4694F08L113: move 2(A_FP),MLTVAL(A6)
4695
4696 .page
4697
4698| switch (fp->idfsrc) {
4699
4700 move.b 4(A_FP),D0
4701 ext.w d0
4702 cmp #10,D0
4703 bhi F08L122
4704
4705 asl #2,D0
4706 lea F08L123,A0
4707 movea.l 0(A0,D0.W),A0
4708 jmp (A0)
4709
4710| case SM_NONE:
4711| mltval = 0;
4712
4713F08L116: clr MLTVAL(A6)
4714
4715| tsrcval = 0;
4716
4717 clr TSRCVAL(A6)
4718
4719| break;
4720
4721 bra F08L114
4722
4723| case SM_RAND:
4724| tsrcval = xgetran(mltval);
4725
4726F08L117: move MLTVAL(A6),(sp)
4727 jsr xgetran
4728 move D0,TSRCVAL(A6)
4729
4730| break;
4731
4732 bra F08L114
4733
4734| case SM_PTCH:
4735| tsrcval = pch;
4736
4737F08L118: move PCH(A6),TSRCVAL(A6)
4738
4739| break;
4740
4741 bra F08L114
4742
4743 .page
4744
4745| case SM_FREQ:
4746| tsrcval = ptoftab[(pch >> 7) & 0x00FF];
4747
4748F08L119: move PCH(A6),D0
4749 asr #7,D0
4750 and #255,D0
4751 move D0,A0
4752 add.l A0,A0
4753 add.l #ptoftab,A0
4754 move (A0),TSRCVAL(A6)
4755
4756| break;
4757
4758 bra F08L114
4759
4760| case SM_KVEL:
4761| tsrcval = veltab[trg];
4762
4763F08L120: move TRG(A6),A0
4764 add.l A0,A0
4765 add.l #veltab,A0
4766 move (A0),TSRCVAL(A6)
4767
4768| break;
4769
4770 bra F08L114
4771
4772| case SM_KPRS:
4773| tsrcval = prstab[trg];
4774
4775F08L121: move TRG(A6),A0
4776 add.l A0,A0
4777 add.l #prstab,A0
4778 move (A0),TSRCVAL(A6)
4779
4780| break;
4781
4782 bra F08L114
4783
4784| default:
4785| tsrcval = vep->val;
4786
4787F08L122: move.l VEP(A6),A0
4788 move 8(A0),TSRCVAL(A6)
4789
4790| }
4791
4792 .page
4793
4794| srcval = tsrcval;
4795
4796F08L114: move TSRCVAL(A6),SRCVAL(A6)
4797
4798 .page
4799
4800| if (pt->ipvsrc) {
4801
4802F08L124: move.l PT(A6),A0
4803 tst.b 6(A0)
4804 beq F08L136
4805
4806| switch (pt->ipvsrc) {
4807
4808 move.l PT(A6),A0
4809 move.b 6(A0),D0
4810 ext.w D0
4811 sub #1,D0
4812 cmp #9,D0
4813 bhi F08L144
4814
4815 asl #2,D0
4816 lea F08L145,A0
4817 move.l 0(A0,D0.W),A0
4818 jmp (A0)
4819
4820| case SM_RAND:
4821| ltmp = xgetran(pt_>ipvmlt);
4822
4823F08L139: move.l PT(A6),A0
4824 move 4(A0),(sp)
4825 jsr xgetran
4826 ext.l D0
4827 move.l D0,LTMP(A6)
4828
4829| break;
4830
4831 bra F08L137
4832
4833| case SM_PTCH:
4834| ltmp = pch;
4835
4836F08L140: move PCH(A6),A0
4837 move.l A0,LTMP(A6)
4838
4839| break;
4840
4841 bra F08L137
4842
4843 .page
4844
4845| case SM_FREQ:
4846| ltmp = ptoftab[(pch >> 7) & 0x00FF];
4847
4848F08L141: move PCH(A6),D0
4849 asr #7,D0
4850 and #255,D0
4851 move D0,A0
4852 add.l A0,A0
4853 move.l #ptoftab,A1
4854 move 0(A0,A1.l),D0
4855 ext.l D0
4856 move.l D0,LTMP(A6)
4857
4858| break;
4859
4860 bra F08L137
4861
4862| case SM_KVEL:
4863| ltmp = veltab[trg];
4864
4865F08L142: move TRG(A6),A0
4866 add.l A0,A0
4867 move.l #veltab,A1
4868 move 0(A0,A1.l),D0
4869 ext.l D0
4870 move.l D0,LTMP(A6)
4871
4872| break;
4873
4874 bra F08L137
4875
4876 .page
4877
4878| case SM_KPRS:
4879| ltmp = prstab[trg];
4880
4881F08L143: move TRG(A6),A0
4882 add.l A0,A0
4883 move.l #prstab,A1
4884 move 0(A0,A1.l),D0
4885 ext.l D0
4886 move.l D0,LTMP(A6)
4887
4888| break;
4889
4890 bra F08L137
4891
4892 .page
4893
4894| default:
4895| ltmp = valents[group | pt->ipvsrc].val;
4896
4897F08L144: move.l PT(A6),A0
4898 clr.l D0
4899 move.b 6(A0),D0
4900 or.w GROUP(A6),D0
4901 add.l D0,D0
4902 move.l D0,D1
4903 lsl.l #2,D0
4904 add.l D1,D0
4905 move.l D0,A0
4906 move.l #valents,A1
4907 clr.l D0
4908 move 8(A0,A1.l),D0
4909 move.l D0,LTMP(A6)
4910
4911| }
4912
4913
4914 .page
4915
4916| ltmp = (ltmp * pt->ipvmlt) >> 15;
4917
4918F08L137: move.l PT(A6),A0
4919 move.w 4(A0),D0
4920 move.w LTMP+2(A6),D1
4921 muls D1,D0
4922 move.l #15,D1
4923 asr.l D1,D0
4924 move.l D0,LTMP(A6)
4925
4926| ltmp += (long)pt->ipval;
4927
4928 move.l PT(A6),A0
4929 move 2(A0),D0
4930 ext.l D0
4931 add.l D0,LTMP(A6)
4932
4933| if (ltmp GT (long)VALMAX)
4934| ltmp = (long)VALMAX;
4935
4936 cmp.l #VALMAX,LTMP(A6)
4937 ble F08L146
4938
4939 move.l #VALMAX,LTMP(A6)
4940 bra F08L147
4941
4942| else if (ltmp LT (long)VALMIN)
4943| ltmp = (long)VALMIN;
4944
4945F08L146: cmp.l #VALMIN,LTMP(A6)
4946 bge F08L147
4947
4948 move.l #VALMIN,LTMP(A6)
4949
4950| tfpval = (short)ltmp;
4951
4952F08L147: move.w LTMP+2(A6),TFPVAL(A6)
4953 bra F08L149
4954
4955| } else {
4956
4957| tfpval = pt->ipval;
4958
4959F08L136: move.l PT(A6),A0
4960 move 2(A0),TFPVAL(A6)
4961
4962| }
4963
4964 .page
4965
4966| fpmant = (((long)pt->iptom & 0x0000FFF0L)
4967| | ((long)timemlt & 0x0000FFFFL)) >> 15;
4968
4969F08L149: move.l PT(A6),A0
4970 move.w (A0),D0
4971 move.w D0,D2
4972 andi.w #0xFFF0,D0
4973 move.w timemlt,D1
4974 muls D1,D0
4975 move.l #15,D1
4976 asr.l D1,D0
4977 move D0,R_FPMANT
4978
4979| fpexp = expbit[pt->iptim & 0x000F];
4980
4981 and #0x000F,D2
4982 move D2,A0
4983 add.l A0,A0
4984 add.l #expbit,A0
4985 move (A0),R_FPEXP
4986
4987 .page
4988
4989| fp->idfpch = pch;
4990
4991F08L163: move PCH(A6),(A_FP)
4992
4993| fpval = tfpval;
4994
4995 move TFPVAL(A6),R_FPVAL
4996
4997 .page
4998
4999 move.b 5(A_FP),D0
5000 ext.w D0
5001 sub.w #1,D0
5002 movea.l PT(A6),A0
5003
5004| oldi = setipl(FPU_DI);
5005
5006 move sr,OLDI(A6)
5007 move #FPU_DI,sr
5008
5009F08L168: clr.b 10(A0)
5010 add.l #12,a0
5011 dbra D0,F08L168
5012
5013 .page
5014
5015| fp->idftmd ^= I_NVBITS;
5016
5017F08L165: eor.b #24,7(A_FP)
5018
5019| fpctl = (fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0003;
5020
5021 move.b 7(A_FP),R_FPCTL
5022 and #28,R_FPCTL
5023 or #3,R_FPCTL
5024
5025| fp->idfcpt = fp->idfpt1;
5026
5027 move.b 6(A_FP),8(A_FP)
5028
5029| fp->idftmd |= I_ACTIVE;
5030
5031 or.b #2,7(A_FP)
5032
5033| fp->idftrf = trg;
5034
5035 move TRG(A6),10(A_FP)
5036
5037| |(fpu + (long)FPU_TCV1) = srcval;
5038
5039 move SRCVAL(A6),0x8(A_FPU)
5040
5041| ++octype;
5042
5043 add #1,OCTYPE(A6)
5044
5045| |(fpu + (long)FPU_TSF1) = mltval;
5046
5047 move MLTVAL(A6),0xA(A_FPU)
5048
5049| ++octype;
5050
5051 add #1,OCTYPE(A6)
5052
5053| |(fpu + (long)FPU_TMNT) = fpmant;
5054
5055 move R_FPMANT,0x14(A_FPU)
5056
5057| ++octype;
5058
5059 add #1,OCTYPE(A6)
5060
5061| |(fpu + (long)FPU_TEXP) = fpexp;
5062
5063 move R_FPEXP,0x16(A_FPU)
5064
5065| ++octype;
5066
5067 add #1,OCTYPE(A6)
5068
5069 .page
5070
5071| if (fp->idftmd & I_VNSUBN)
5072
5073 btst #3,7(A_FP)
5074 beq F08L169
5075
5076| |(fpu + (long)FPU_TNV1) = fpval;
5077
5078 move R_FPVAL,0x1C(A_FPU)
5079 bra F08L170
5080
5081| else
5082| |(fpu + (long)FPU_TNV0) = fpval;
5083
5084F08L169: move R_FPVAL,2(A_FPU)
5085
5086| ++octype;
5087
5088F08L170: add #1,OCTYPE(A6)
5089
5090| |(fpu + (long)FPU_TCTL) = fpctl;
5091
5092 move R_FPCTL,(A_FPU)
5093
5094| setipl(oldi);
5095
5096 move OLDI(A6),sr
5097
5098 .page
5099| ------------------------------------------------------------------------------
5100| Start function 9 -- Ind 4
5101| ------------------------------------------------------------------------------
5102
5103| if (ip->idhfnc[9].idftmd & I_TM_KEY) {
5104
5105FN09: move.l IP(A6),A0
5106 move.b 201(A0),D0
5107 move.w TAG(A6),D1
5108 eor.w D1,D0
5109 btst #0,D0
5110 bne FN09A
5111
5112 jmp FN10
5113
5114| vp = (vce << 4) + 13;
5115
5116FN09A: move VCE(A6),D0
5117 asl #4,D0
5118 add.w #13,D0
5119 move D0,VP(A6)
5120
5121| fpu = io_fpu + FPU_OFNC + (vp << 4);
5122
5123 asl #5,D0
5124 ext.l D0
5125 move.l D0,A_FPU
5126 add.l #io_fpu+0x4000,A_FPU
5127
5128| fp = &ip->idhfnc[9];
5129
5130 move.l #108,A_FP
5131 add.l IP(A6),A_FP
5132 add.l #86,A_FP
5133
5134| pt = &ip->idhpnt[fp->idfpt1];
5135
5136 clr.l D0
5137 move.b 6(A_FP),D0
5138 lsl.l #2,D0
5139 move.l D0,D1
5140 add.l D0,D0
5141 add.l D1,D0
5142 add.l IP(A6),D0
5143 add.l #242,D0
5144 move.l D0,PT(A6)
5145
5146 .page
5147
5148| srcnum = group | fp->idfsrc;
5149
5150 move.w GROUP(A6),D0
5151 ext.l D0
5152 clr.l D1
5153 move.b 4(A_FP),D1
5154 or D1,D0
5155 move D0,SRCNUM(A6)
5156
5157| vep = &valents[srcnum];
5158
5159 add.l D0,D0
5160 move.l D0,D1
5161 lsl.l #2,D0
5162 add.l D1,D0
5163 add.l #valents,D0
5164 move.l D0,VEP(A6)
5165
5166| smp = vpsms[vp];
5167
5168 move VP(A6),A0
5169 add.l A0,A0
5170 add.l A0,A0
5171 add.l #vpsms,A0
5172 move.l (A0),A_SMP
5173
5174| if (srcnum NE smp->sm) {
5175
5176 clr D0
5177 move 10(A_SMP),D0
5178 cmp SRCNUM(A6),D0
5179 beq F09L113
5180
5181| (smp->prv)->nxt = smp->nxt;
5182
5183 move.l 4(A_SMP),A0
5184 move.l (A_SMP),(A0)
5185
5186| (smp->nxt)->prv = smp->prv;
5187
5188 move.l (A_SMP),A0
5189 move.l 4(A_SMP),4(A0)
5190
5191| smp->prv = (struct sment *)vep;
5192
5193 move.l VEP(A6),4(A_SMP)
5194
5195| smp->nxt = vep->nxt;
5196
5197 move.l VEP(A6),A0
5198 move.l (A0),(A_SMP)
5199
5200| (vep->nxt)->prv = smp;
5201
5202 move.l VEP(A6),A0
5203 move.l (A0),A0
5204 move.l A_SMP,4(A0)
5205
5206| vep->nxt = smp;
5207
5208 move.l VEP(A6),A0
5209 move.l A_SMP,(A0)
5210
5211| smp->sm = srcnum;
5212
5213 move SRCNUM(A6),10(A_SMP)
5214
5215| }
5216
5217| mltval = fp->idfmlt;
5218
5219F09L113: move 2(A_FP),MLTVAL(A6)
5220
5221 .page
5222
5223| switch (fp->idfsrc) {
5224
5225 move.b 4(A_FP),D0
5226 ext.w d0
5227 cmp #10,D0
5228 bhi F09L122
5229
5230 asl #2,D0
5231 lea F09L123,A0
5232 movea.l 0(A0,D0.W),A0
5233 jmp (A0)
5234
5235| case SM_NONE:
5236| mltval = 0;
5237
5238F09L116: clr MLTVAL(A6)
5239
5240| tsrcval = 0;
5241
5242 clr TSRCVAL(A6)
5243
5244| break;
5245
5246 bra F09L114
5247
5248| case SM_RAND:
5249| tsrcval = xgetran(mltval);
5250
5251F09L117: move MLTVAL(A6),(sp)
5252 jsr xgetran
5253 move D0,TSRCVAL(A6)
5254
5255| break;
5256
5257 bra F09L114
5258
5259| case SM_PTCH:
5260| tsrcval = pch;
5261
5262F09L118: move PCH(A6),TSRCVAL(A6)
5263
5264| break;
5265
5266 bra F09L114
5267
5268 .page
5269
5270| case SM_FREQ:
5271| tsrcval = ptoftab[(pch >> 7) & 0x00FF];
5272
5273F09L119: move PCH(A6),D0
5274 asr #7,D0
5275 and #255,D0
5276 move D0,A0
5277 add.l A0,A0
5278 add.l #ptoftab,A0
5279 move (A0),TSRCVAL(A6)
5280
5281| break;
5282
5283 bra F09L114
5284
5285| case SM_KVEL:
5286| tsrcval = veltab[trg];
5287
5288F09L120: move TRG(A6),A0
5289 add.l A0,A0
5290 add.l #veltab,A0
5291 move (A0),TSRCVAL(A6)
5292
5293| break;
5294
5295 bra F09L114
5296
5297| case SM_KPRS:
5298| tsrcval = prstab[trg];
5299
5300F09L121: move TRG(A6),A0
5301 add.l A0,A0
5302 add.l #prstab,A0
5303 move (A0),TSRCVAL(A6)
5304
5305| break;
5306
5307 bra F09L114
5308
5309| default:
5310| tsrcval = vep->val;
5311
5312F09L122: move.l VEP(A6),A0
5313 move 8(A0),TSRCVAL(A6)
5314
5315| }
5316
5317 .page
5318
5319| srcval = tsrcval;
5320
5321F09L114: move TSRCVAL(A6),SRCVAL(A6)
5322
5323 .page
5324
5325| if (pt->ipvsrc) {
5326
5327F09L124: move.l PT(A6),A0
5328 tst.b 6(A0)
5329 beq F09L136
5330
5331| switch (pt->ipvsrc) {
5332
5333 move.l PT(A6),A0
5334 move.b 6(A0),D0
5335 ext.w D0
5336 sub #1,D0
5337 cmp #9,D0
5338 bhi F09L144
5339
5340 asl #2,D0
5341 lea F09L145,A0
5342 move.l 0(A0,D0.W),A0
5343 jmp (A0)
5344
5345| case SM_RAND:
5346| ltmp = xgetran(pt_>ipvmlt);
5347
5348F09L139: move.l PT(A6),A0
5349 move 4(A0),(sp)
5350 jsr xgetran
5351 ext.l D0
5352 move.l D0,LTMP(A6)
5353
5354| break;
5355
5356 bra F09L137
5357
5358| case SM_PTCH:
5359| ltmp = pch;
5360
5361F09L140: move PCH(A6),A0
5362 move.l A0,LTMP(A6)
5363
5364| break;
5365
5366 bra F09L137
5367
5368 .page
5369
5370| case SM_FREQ:
5371| ltmp = ptoftab[(pch >> 7) & 0x00FF];
5372
5373F09L141: move PCH(A6),D0
5374 asr #7,D0
5375 and #255,D0
5376 move D0,A0
5377 add.l A0,A0
5378 move.l #ptoftab,A1
5379 move 0(A0,A1.l),D0
5380 ext.l D0
5381 move.l D0,LTMP(A6)
5382
5383| break;
5384
5385 bra F09L137
5386
5387| case SM_KVEL:
5388| ltmp = veltab[trg];
5389
5390F09L142: move TRG(A6),A0
5391 add.l A0,A0
5392 move.l #veltab,A1
5393 move 0(A0,A1.l),D0
5394 ext.l D0
5395 move.l D0,LTMP(A6)
5396
5397| break;
5398
5399 bra F09L137
5400
5401 .page
5402
5403| case SM_KPRS:
5404| ltmp = prstab[trg];
5405
5406F09L143: move TRG(A6),A0
5407 add.l A0,A0
5408 move.l #prstab,A1
5409 move 0(A0,A1.l),D0
5410 ext.l D0
5411 move.l D0,LTMP(A6)
5412
5413| break;
5414
5415 bra F09L137
5416
5417 .page
5418
5419| default:
5420| ltmp = valents[group | pt->ipvsrc].val;
5421
5422F09L144: move.l PT(A6),A0
5423 clr.l D0
5424 move.b 6(A0),D0
5425 or.w GROUP(A6),D0
5426 add.l D0,D0
5427 move.l D0,D1
5428 lsl.l #2,D0
5429 add.l D1,D0
5430 move.l D0,A0
5431 move.l #valents,A1
5432 clr.l D0
5433 move 8(A0,A1.l),D0
5434 move.l D0,LTMP(A6)
5435
5436| }
5437
5438
5439 .page
5440
5441| ltmp = (ltmp * pt->ipvmlt) >> 15;
5442
5443F09L137: move.l PT(A6),A0
5444 move.w 4(A0),D0
5445 move.w LTMP+2(A6),D1
5446 muls D1,D0
5447 move.l #15,D1
5448 asr.l D1,D0
5449 move.l D0,LTMP(A6)
5450
5451| ltmp += (long)pt->ipval;
5452
5453 move.l PT(A6),A0
5454 move 2(A0),D0
5455 ext.l D0
5456 add.l D0,LTMP(A6)
5457
5458| if (ltmp GT (long)VALMAX)
5459| ltmp = (long)VALMAX;
5460
5461 cmp.l #VALMAX,LTMP(A6)
5462 ble F09L146
5463
5464 move.l #VALMAX,LTMP(A6)
5465 bra F09L147
5466
5467| else if (ltmp LT (long)VALMIN)
5468| ltmp = (long)VALMIN;
5469
5470F09L146: cmp.l #VALMIN,LTMP(A6)
5471 bge F09L147
5472
5473 move.l #VALMIN,LTMP(A6)
5474
5475| tfpval = (short)ltmp;
5476
5477F09L147: move.w LTMP+2(A6),TFPVAL(A6)
5478 bra F09L149
5479
5480| } else {
5481
5482| tfpval = pt->ipval;
5483
5484F09L136: move.l PT(A6),A0
5485 move 2(A0),TFPVAL(A6)
5486
5487| }
5488
5489 .page
5490
5491| fpmant = (((long)pt->iptom & 0x0000FFF0L)
5492| | ((long)timemlt & 0x0000FFFFL)) >> 15;
5493
5494F09L149: move.l PT(A6),A0
5495 move.w (A0),D0
5496 move.w D0,D2
5497 andi.w #0xFFF0,D0
5498 move.w timemlt,D1
5499 muls D1,D0
5500 move.l #15,D1
5501 asr.l D1,D0
5502 move D0,R_FPMANT
5503
5504| fpexp = expbit[pt->iptim & 0x000F];
5505
5506 and #0x000F,D2
5507 move D2,A0
5508 add.l A0,A0
5509 add.l #expbit,A0
5510 move (A0),R_FPEXP
5511
5512 .page
5513
5514| fp->idfpch = pch;
5515
5516F09L163: move PCH(A6),(A_FP)
5517
5518| fpval = tfpval;
5519
5520 move TFPVAL(A6),R_FPVAL
5521
5522 .page
5523
5524 move.b 5(A_FP),D0
5525 ext.w D0
5526 sub.w #1,D0
5527 movea.l PT(A6),A0
5528
5529| oldi = setipl(FPU_DI);
5530
5531 move sr,OLDI(A6)
5532 move #FPU_DI,sr
5533
5534F09L168: clr.b 10(A0)
5535 add.l #12,a0
5536 dbra D0,F09L168
5537
5538 .page
5539
5540| fp->idftmd ^= I_NVBITS;
5541
5542F09L165: eor.b #24,7(A_FP)
5543
5544| fpctl = (fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0003;
5545
5546 move.b 7(A_FP),R_FPCTL
5547 and #28,R_FPCTL
5548 or #3,R_FPCTL
5549
5550| fp->idfcpt = fp->idfpt1;
5551
5552 move.b 6(A_FP),8(A_FP)
5553
5554| fp->idftmd |= I_ACTIVE;
5555
5556 or.b #2,7(A_FP)
5557
5558| fp->idftrf = trg;
5559
5560 move TRG(A6),10(A_FP)
5561
5562| |(fpu + (long)FPU_TCV1) = srcval;
5563
5564 move SRCVAL(A6),0x8(A_FPU)
5565
5566| ++octype;
5567
5568 add #1,OCTYPE(A6)
5569
5570| |(fpu + (long)FPU_TSF1) = mltval;
5571
5572 move MLTVAL(A6),0xA(A_FPU)
5573
5574| ++octype;
5575
5576 add #1,OCTYPE(A6)
5577
5578| |(fpu + (long)FPU_TMNT) = fpmant;
5579
5580 move R_FPMANT,0x14(A_FPU)
5581
5582| ++octype;
5583
5584 add #1,OCTYPE(A6)
5585
5586| |(fpu + (long)FPU_TEXP) = fpexp;
5587
5588 move R_FPEXP,0x16(A_FPU)
5589
5590| ++octype;
5591
5592 add #1,OCTYPE(A6)
5593
5594 .page
5595
5596| if (fp->idftmd & I_VNSUBN)
5597
5598 btst #3,7(A_FP)
5599 beq F09L169
5600
5601| |(fpu + (long)FPU_TNV1) = fpval;
5602
5603 move R_FPVAL,0x1C(A_FPU)
5604 bra F09L170
5605
5606| else
5607| |(fpu + (long)FPU_TNV0) = fpval;
5608
5609F09L169: move R_FPVAL,2(A_FPU)
5610
5611| ++octype;
5612
5613F09L170: add #1,OCTYPE(A6)
5614
5615| |(fpu + (long)FPU_TCTL) = fpctl;
5616
5617 move R_FPCTL,(A_FPU)
5618
5619| setipl(oldi);
5620
5621 move OLDI(A6),sr
5622
5623 .page
5624| ------------------------------------------------------------------------------
5625| Start function 10 -- Ind 5
5626| ------------------------------------------------------------------------------
5627
5628| if (ip->idhfnc[10].idftmd & I_TM_KEY) {
5629
5630FN10: move.l IP(A6),A0
5631 move.b 213(A0),D0
5632 move.w TAG(A6),D1
5633 eor.w D1,D0
5634 btst #0,D0
5635 bne FN10A
5636
5637 jmp FN11
5638
5639| vp = (vce << 4) + 14;
5640
5641FN10A: move VCE(A6),D0
5642 asl #4,D0
5643 add.w #14,D0
5644 move D0,VP(A6)
5645
5646| fpu = io_fpu + FPU_OFNC + (vp << 4);
5647
5648 asl #5,D0
5649 ext.l D0
5650 move.l D0,A_FPU
5651 add.l #io_fpu+0x4000,A_FPU
5652
5653| fp = &ip->idhfnc[10];
5654
5655 move.l #120,A_FP
5656 add.l IP(A6),A_FP
5657 add.l #86,A_FP
5658
5659| pt = &ip->idhpnt[fp->idfpt1];
5660
5661 clr.l D0
5662 move.b 6(A_FP),D0
5663 lsl.l #2,D0
5664 move.l D0,D1
5665 add.l D0,D0
5666 add.l D1,D0
5667 add.l IP(A6),D0
5668 add.l #242,D0
5669 move.l D0,PT(A6)
5670
5671 .page
5672
5673| srcnum = group | fp->idfsrc;
5674
5675 move.w GROUP(A6),D0
5676 ext.l D0
5677 clr.l D1
5678 move.b 4(A_FP),D1
5679 or D1,D0
5680 move D0,SRCNUM(A6)
5681
5682| vep = &valents[srcnum];
5683
5684 add.l D0,D0
5685 move.l D0,D1
5686 lsl.l #2,D0
5687 add.l D1,D0
5688 add.l #valents,D0
5689 move.l D0,VEP(A6)
5690
5691| smp = vpsms[vp];
5692
5693 move VP(A6),A0
5694 add.l A0,A0
5695 add.l A0,A0
5696 add.l #vpsms,A0
5697 move.l (A0),A_SMP
5698
5699| if (srcnum NE smp->sm) {
5700
5701 clr D0
5702 move 10(A_SMP),D0
5703 cmp SRCNUM(A6),D0
5704 beq F10L113
5705
5706| (smp->prv)->nxt = smp->nxt;
5707
5708 move.l 4(A_SMP),A0
5709 move.l (A_SMP),(A0)
5710
5711| (smp->nxt)->prv = smp->prv;
5712
5713 move.l (A_SMP),A0
5714 move.l 4(A_SMP),4(A0)
5715
5716| smp->prv = (struct sment *)vep;
5717
5718 move.l VEP(A6),4(A_SMP)
5719
5720| smp->nxt = vep->nxt;
5721
5722 move.l VEP(A6),A0
5723 move.l (A0),(A_SMP)
5724
5725| (vep->nxt)->prv = smp;
5726
5727 move.l VEP(A6),A0
5728 move.l (A0),A0
5729 move.l A_SMP,4(A0)
5730
5731| vep->nxt = smp;
5732
5733 move.l VEP(A6),A0
5734 move.l A_SMP,(A0)
5735
5736| smp->sm = srcnum;
5737
5738 move SRCNUM(A6),10(A_SMP)
5739
5740| }
5741
5742| mltval = fp->idfmlt;
5743
5744F10L113: move 2(A_FP),MLTVAL(A6)
5745
5746 .page
5747
5748| switch (fp->idfsrc) {
5749
5750 move.b 4(A_FP),D0
5751 ext.w d0
5752 cmp #10,D0
5753 bhi F10L122
5754
5755 asl #2,D0
5756 lea F10L123,A0
5757 movea.l 0(A0,D0.W),A0
5758 jmp (A0)
5759
5760| case SM_NONE:
5761| mltval = 0;
5762
5763F10L116: clr MLTVAL(A6)
5764
5765| tsrcval = 0;
5766
5767 clr TSRCVAL(A6)
5768
5769| break;
5770
5771 bra F10L114
5772
5773| case SM_RAND:
5774| tsrcval = xgetran(mltval);
5775
5776F10L117: move MLTVAL(A6),(sp)
5777 jsr xgetran
5778 move D0,TSRCVAL(A6)
5779
5780| break;
5781
5782 bra F10L114
5783
5784| case SM_PTCH:
5785| tsrcval = pch;
5786
5787F10L118: move PCH(A6),TSRCVAL(A6)
5788
5789| break;
5790
5791 bra F10L114
5792
5793 .page
5794
5795| case SM_FREQ:
5796| tsrcval = ptoftab[(pch >> 7) & 0x00FF];
5797
5798F10L119: move PCH(A6),D0
5799 asr #7,D0
5800 and #255,D0
5801 move D0,A0
5802 add.l A0,A0
5803 add.l #ptoftab,A0
5804 move (A0),TSRCVAL(A6)
5805
5806| break;
5807
5808 bra F10L114
5809
5810| case SM_KVEL:
5811| tsrcval = veltab[trg];
5812
5813F10L120: move TRG(A6),A0
5814 add.l A0,A0
5815 add.l #veltab,A0
5816 move (A0),TSRCVAL(A6)
5817
5818| break;
5819
5820 bra F10L114
5821
5822| case SM_KPRS:
5823| tsrcval = prstab[trg];
5824
5825F10L121: move TRG(A6),A0
5826 add.l A0,A0
5827 add.l #prstab,A0
5828 move (A0),TSRCVAL(A6)
5829
5830| break;
5831
5832 bra F10L114
5833
5834| default:
5835| tsrcval = vep->val;
5836
5837F10L122: move.l VEP(A6),A0
5838 move 8(A0),TSRCVAL(A6)
5839
5840| }
5841
5842 .page
5843
5844| srcval = tsrcval;
5845
5846F10L114: move TSRCVAL(A6),SRCVAL(A6)
5847
5848 .page
5849
5850| if (pt->ipvsrc) {
5851
5852F10L124: move.l PT(A6),A0
5853 tst.b 6(A0)
5854 beq F10L136
5855
5856| switch (pt->ipvsrc) {
5857
5858 move.l PT(A6),A0
5859 move.b 6(A0),D0
5860 ext.w D0
5861 sub #1,D0
5862 cmp #9,D0
5863 bhi F10L144
5864
5865 asl #2,D0
5866 lea F10L145,A0
5867 move.l 0(A0,D0.W),A0
5868 jmp (A0)
5869
5870| case SM_RAND:
5871| ltmp = xgetran(pt_>ipvmlt);
5872
5873F10L139: move.l PT(A6),A0
5874 move 4(A0),(sp)
5875 jsr xgetran
5876 ext.l D0
5877 move.l D0,LTMP(A6)
5878
5879| break;
5880
5881 bra F10L137
5882
5883| case SM_PTCH:
5884| ltmp = pch;
5885
5886F10L140: move PCH(A6),A0
5887 move.l A0,LTMP(A6)
5888
5889| break;
5890
5891 bra F10L137
5892
5893 .page
5894
5895| case SM_FREQ:
5896| ltmp = ptoftab[(pch >> 7) & 0x00FF];
5897
5898F10L141: move PCH(A6),D0
5899 asr #7,D0
5900 and #255,D0
5901 move D0,A0
5902 add.l A0,A0
5903 move.l #ptoftab,A1
5904 move 0(A0,A1.l),D0
5905 ext.l D0
5906 move.l D0,LTMP(A6)
5907
5908| break;
5909
5910 bra F10L137
5911
5912| case SM_KVEL:
5913| ltmp = veltab[trg];
5914
5915F10L142: move TRG(A6),A0
5916 add.l A0,A0
5917 move.l #veltab,A1
5918 move 0(A0,A1.l),D0
5919 ext.l D0
5920 move.l D0,LTMP(A6)
5921
5922| break;
5923
5924 bra F10L137
5925
5926 .page
5927
5928| case SM_KPRS:
5929| ltmp = prstab[trg];
5930
5931F10L143: move TRG(A6),A0
5932 add.l A0,A0
5933 move.l #prstab,A1
5934 move 0(A0,A1.l),D0
5935 ext.l D0
5936 move.l D0,LTMP(A6)
5937
5938| break;
5939
5940 bra F10L137
5941
5942 .page
5943
5944| default:
5945| ltmp = valents[group | pt->ipvsrc].val;
5946
5947F10L144: move.l PT(A6),A0
5948 clr.l D0
5949 move.b 6(A0),D0
5950 or.w GROUP(A6),D0
5951 add.l D0,D0
5952 move.l D0,D1
5953 lsl.l #2,D0
5954 add.l D1,D0
5955 move.l D0,A0
5956 move.l #valents,A1
5957 clr.l D0
5958 move 8(A0,A1.l),D0
5959 move.l D0,LTMP(A6)
5960
5961| }
5962
5963
5964 .page
5965
5966| ltmp = (ltmp * pt->ipvmlt) >> 15;
5967
5968F10L137: move.l PT(A6),A0
5969 move.w 4(A0),D0
5970 move.w LTMP+2(A6),D1
5971 muls D1,D0
5972 move.l #15,D1
5973 asr.l D1,D0
5974 move.l D0,LTMP(A6)
5975
5976| ltmp += (long)pt->ipval;
5977
5978 move.l PT(A6),A0
5979 move 2(A0),D0
5980 ext.l D0
5981 add.l D0,LTMP(A6)
5982
5983| if (ltmp GT (long)VALMAX)
5984| ltmp = (long)VALMAX;
5985
5986 cmp.l #VALMAX,LTMP(A6)
5987 ble F10L146
5988
5989 move.l #VALMAX,LTMP(A6)
5990 bra F10L147
5991
5992| else if (ltmp LT (long)VALMIN)
5993| ltmp = (long)VALMIN;
5994
5995F10L146: cmp.l #VALMIN,LTMP(A6)
5996 bge F10L147
5997
5998 move.l #VALMIN,LTMP(A6)
5999
6000| tfpval = (short)ltmp;
6001
6002F10L147: move.w LTMP+2(A6),TFPVAL(A6)
6003 bra F10L149
6004
6005| } else {
6006
6007| tfpval = pt->ipval;
6008
6009F10L136: move.l PT(A6),A0
6010 move 2(A0),TFPVAL(A6)
6011
6012| }
6013
6014 .page
6015
6016| fpmant = (((long)pt->iptom & 0x0000FFF0L)
6017| | ((long)timemlt & 0x0000FFFFL)) >> 15;
6018
6019F10L149: move.l PT(A6),A0
6020 move.w (A0),D0
6021 move.w D0,D2
6022 andi.w #0xFFF0,D0
6023 move.w timemlt,D1
6024 muls D1,D0
6025 move.l #15,D1
6026 asr.l D1,D0
6027 move D0,R_FPMANT
6028
6029| fpexp = expbit[pt->iptim & 0x000F];
6030
6031 and #0x000F,D2
6032 move D2,A0
6033 add.l A0,A0
6034 add.l #expbit,A0
6035 move (A0),R_FPEXP
6036
6037 .page
6038
6039| fp->idfpch = pch;
6040
6041F10L163: move PCH(A6),(A_FP)
6042
6043| fpval = tfpval;
6044
6045 move TFPVAL(A6),R_FPVAL
6046
6047 .page
6048
6049 move.b 5(A_FP),D0
6050 ext.w D0
6051 sub.w #1,D0
6052 movea.l PT(A6),A0
6053
6054| oldi = setipl(FPU_DI);
6055
6056 move sr,OLDI(A6)
6057 move #FPU_DI,sr
6058
6059F10L168: clr.b 10(A0)
6060 add.l #12,a0
6061 dbra D0,F10L168
6062
6063 .page
6064
6065| fp->idftmd ^= I_NVBITS;
6066
6067F10L165: eor.b #24,7(A_FP)
6068
6069| fpctl = (fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0003;
6070
6071 move.b 7(A_FP),R_FPCTL
6072 and #28,R_FPCTL
6073 or #3,R_FPCTL
6074
6075| fp->idfcpt = fp->idfpt1;
6076
6077 move.b 6(A_FP),8(A_FP)
6078
6079| fp->idftmd |= I_ACTIVE;
6080
6081 or.b #2,7(A_FP)
6082
6083| fp->idftrf = trg;
6084
6085 move TRG(A6),10(A_FP)
6086
6087| |(fpu + (long)FPU_TCV1) = srcval;
6088
6089 move SRCVAL(A6),0x8(A_FPU)
6090
6091| ++octype;
6092
6093 add #1,OCTYPE(A6)
6094
6095| |(fpu + (long)FPU_TSF1) = mltval;
6096
6097 move MLTVAL(A6),0xA(A_FPU)
6098
6099| ++octype;
6100
6101 add #1,OCTYPE(A6)
6102
6103| |(fpu + (long)FPU_TMNT) = fpmant;
6104
6105 move R_FPMANT,0x14(A_FPU)
6106
6107| ++octype;
6108
6109 add #1,OCTYPE(A6)
6110
6111| |(fpu + (long)FPU_TEXP) = fpexp;
6112
6113 move R_FPEXP,0x16(A_FPU)
6114
6115| ++octype;
6116
6117 add #1,OCTYPE(A6)
6118
6119 .page
6120
6121| if (fp->idftmd & I_VNSUBN)
6122
6123 btst #3,7(A_FP)
6124 beq F10L169
6125
6126| |(fpu + (long)FPU_TNV1) = fpval;
6127
6128 move R_FPVAL,0x1C(A_FPU)
6129 bra F10L170
6130
6131| else
6132| |(fpu + (long)FPU_TNV0) = fpval;
6133
6134F10L169: move R_FPVAL,2(A_FPU)
6135
6136| ++octype;
6137
6138F10L170: add #1,OCTYPE(A6)
6139
6140| |(fpu + (long)FPU_TCTL) = fpctl;
6141
6142 move R_FPCTL,(A_FPU)
6143
6144| setipl(oldi);
6145
6146 move OLDI(A6),sr
6147
6148 .page
6149| ------------------------------------------------------------------------------
6150| Start function 11 -- Ind 6
6151| ------------------------------------------------------------------------------
6152
6153| if (ip->idhfnc[11].idftmd & I_TM_KEY) {
6154
6155FN11: move.l IP(A6),A0
6156 move.b 225(A0),D0
6157 move.w TAG(A6),D1
6158 eor.w D1,D0
6159 btst #0,D0
6160 bne FN11A
6161
6162 jmp FN12
6163
6164| vp = (vce << 4) + 15;
6165
6166FN11A: move VCE(A6),D0
6167 asl #4,D0
6168 add.w #15,D0
6169 move D0,VP(A6)
6170
6171| fpu = io_fpu + FPU_OFNC + (vp << 4);
6172
6173 asl #5,D0
6174 ext.l D0
6175 move.l D0,A_FPU
6176 add.l #io_fpu+0x4000,A_FPU
6177
6178| fp = &ip->idhfnc[11];
6179
6180 move.l #132,A_FP
6181 add.l IP(A6),A_FP
6182 add.l #86,A_FP
6183
6184| pt = &ip->idhpnt[fp->idfpt1];
6185
6186 clr.l D0
6187 move.b 6(A_FP),D0
6188 lsl.l #2,D0
6189 move.l D0,D1
6190 add.l D0,D0
6191 add.l D1,D0
6192 add.l IP(A6),D0
6193 add.l #242,D0
6194 move.l D0,PT(A6)
6195
6196 .page
6197
6198| srcnum = group | fp->idfsrc;
6199
6200 move.w GROUP(A6),D0
6201 ext.l D0
6202 clr.l D1
6203 move.b 4(A_FP),D1
6204 or D1,D0
6205 move D0,SRCNUM(A6)
6206
6207| vep = &valents[srcnum];
6208
6209 add.l D0,D0
6210 move.l D0,D1
6211 lsl.l #2,D0
6212 add.l D1,D0
6213 add.l #valents,D0
6214 move.l D0,VEP(A6)
6215
6216| smp = vpsms[vp];
6217
6218 move VP(A6),A0
6219 add.l A0,A0
6220 add.l A0,A0
6221 add.l #vpsms,A0
6222 move.l (A0),A_SMP
6223
6224| if (srcnum NE smp->sm) {
6225
6226 clr D0
6227 move 10(A_SMP),D0
6228 cmp SRCNUM(A6),D0
6229 beq F11L113
6230
6231| (smp->prv)->nxt = smp->nxt;
6232
6233 move.l 4(A_SMP),A0
6234 move.l (A_SMP),(A0)
6235
6236| (smp->nxt)->prv = smp->prv;
6237
6238 move.l (A_SMP),A0
6239 move.l 4(A_SMP),4(A0)
6240
6241| smp->prv = (struct sment *)vep;
6242
6243 move.l VEP(A6),4(A_SMP)
6244
6245| smp->nxt = vep->nxt;
6246
6247 move.l VEP(A6),A0
6248 move.l (A0),(A_SMP)
6249
6250| (vep->nxt)->prv = smp;
6251
6252 move.l VEP(A6),A0
6253 move.l (A0),A0
6254 move.l A_SMP,4(A0)
6255
6256| vep->nxt = smp;
6257
6258 move.l VEP(A6),A0
6259 move.l A_SMP,(A0)
6260
6261| smp->sm = srcnum;
6262
6263 move SRCNUM(A6),10(A_SMP)
6264
6265| }
6266
6267| mltval = fp->idfmlt;
6268
6269F11L113: move 2(A_FP),MLTVAL(A6)
6270
6271 .page
6272
6273| switch (fp->idfsrc) {
6274
6275 move.b 4(A_FP),D0
6276 ext.w d0
6277 cmp #10,D0
6278 bhi F11L122
6279
6280 asl #2,D0
6281 lea F11L123,A0
6282 movea.l 0(A0,D0.W),A0
6283 jmp (A0)
6284
6285| case SM_NONE:
6286| mltval = 0;
6287
6288F11L116: clr MLTVAL(A6)
6289
6290| tsrcval = 0;
6291
6292 clr TSRCVAL(A6)
6293
6294| break;
6295
6296 bra F11L114
6297
6298| case SM_RAND:
6299| tsrcval = xgetran(mltval);
6300
6301F11L117: move MLTVAL(A6),(sp)
6302 jsr xgetran
6303 move D0,TSRCVAL(A6)
6304
6305| break;
6306
6307 bra F11L114
6308
6309| case SM_PTCH:
6310| tsrcval = pch;
6311
6312F11L118: move PCH(A6),TSRCVAL(A6)
6313
6314| break;
6315
6316 bra F11L114
6317
6318 .page
6319
6320| case SM_FREQ:
6321| tsrcval = ptoftab[(pch >> 7) & 0x00FF];
6322
6323F11L119: move PCH(A6),D0
6324 asr #7,D0
6325 and #255,D0
6326 move D0,A0
6327 add.l A0,A0
6328 add.l #ptoftab,A0
6329 move (A0),TSRCVAL(A6)
6330
6331| break;
6332
6333 bra F11L114
6334
6335| case SM_KVEL:
6336| tsrcval = veltab[trg];
6337
6338F11L120: move TRG(A6),A0
6339 add.l A0,A0
6340 add.l #veltab,A0
6341 move (A0),TSRCVAL(A6)
6342
6343| break;
6344
6345 bra F11L114
6346
6347| case SM_KPRS:
6348| tsrcval = prstab[trg];
6349
6350F11L121: move TRG(A6),A0
6351 add.l A0,A0
6352 add.l #prstab,A0
6353 move (A0),TSRCVAL(A6)
6354
6355| break;
6356
6357 bra F11L114
6358
6359| default:
6360| tsrcval = vep->val;
6361
6362F11L122: move.l VEP(A6),A0
6363 move 8(A0),TSRCVAL(A6)
6364
6365| }
6366
6367 .page
6368
6369| srcval = tsrcval;
6370
6371F11L114: move TSRCVAL(A6),SRCVAL(A6)
6372
6373 .page
6374
6375| if (pt->ipvsrc) {
6376
6377F11L124: move.l PT(A6),A0
6378 tst.b 6(A0)
6379 beq F11L136
6380
6381| switch (pt->ipvsrc) {
6382
6383 move.l PT(A6),A0
6384 move.b 6(A0),D0
6385 ext.w D0
6386 sub #1,D0
6387 cmp #9,D0
6388 bhi F11L144
6389
6390 asl #2,D0
6391 lea F11L145,A0
6392 move.l 0(A0,D0.W),A0
6393 jmp (A0)
6394
6395| case SM_RAND:
6396| ltmp = xgetran(pt_>ipvmlt);
6397
6398F11L139: move.l PT(A6),A0
6399 move 4(A0),(sp)
6400 jsr xgetran
6401 ext.l D0
6402 move.l D0,LTMP(A6)
6403
6404| break;
6405
6406 bra F11L137
6407
6408| case SM_PTCH:
6409| ltmp = pch;
6410
6411F11L140: move PCH(A6),A0
6412 move.l A0,LTMP(A6)
6413
6414| break;
6415
6416 bra F11L137
6417
6418 .page
6419
6420| case SM_FREQ:
6421| ltmp = ptoftab[(pch >> 7) & 0x00FF];
6422
6423F11L141: move PCH(A6),D0
6424 asr #7,D0
6425 and #255,D0
6426 move D0,A0
6427 add.l A0,A0
6428 move.l #ptoftab,A1
6429 move 0(A0,A1.l),D0
6430 ext.l D0
6431 move.l D0,LTMP(A6)
6432
6433| break;
6434
6435 bra F11L137
6436
6437| case SM_KVEL:
6438| ltmp = veltab[trg];
6439
6440F11L142: move TRG(A6),A0
6441 add.l A0,A0
6442 move.l #veltab,A1
6443 move 0(A0,A1.l),D0
6444 ext.l D0
6445 move.l D0,LTMP(A6)
6446
6447| break;
6448
6449 bra F11L137
6450
6451 .page
6452
6453| case SM_KPRS:
6454| ltmp = prstab[trg];
6455
6456F11L143: move TRG(A6),A0
6457 add.l A0,A0
6458 move.l #prstab,A1
6459 move 0(A0,A1.l),D0
6460 ext.l D0
6461 move.l D0,LTMP(A6)
6462
6463| break;
6464
6465 bra F11L137
6466
6467 .page
6468
6469| default:
6470| ltmp = valents[group | pt->ipvsrc].val;
6471
6472F11L144: move.l PT(A6),A0
6473 clr.l D0
6474 move.b 6(A0),D0
6475 or.w GROUP(A6),D0
6476 add.l D0,D0
6477 move.l D0,D1
6478 lsl.l #2,D0
6479 add.l D1,D0
6480 move.l D0,A0
6481 move.l #valents,A1
6482 clr.l D0
6483 move 8(A0,A1.l),D0
6484 move.l D0,LTMP(A6)
6485
6486| }
6487
6488
6489 .page
6490
6491| ltmp = (ltmp * pt->ipvmlt) >> 15;
6492
6493F11L137: move.l PT(A6),A0
6494 move.w 4(A0),D0
6495 move.w LTMP+2(A6),D1
6496 muls D1,D0
6497 move.l #15,D1
6498 asr.l D1,D0
6499 move.l D0,LTMP(A6)
6500
6501| ltmp += (long)pt->ipval;
6502
6503 move.l PT(A6),A0
6504 move 2(A0),D0
6505 ext.l D0
6506 add.l D0,LTMP(A6)
6507
6508| if (ltmp GT (long)VALMAX)
6509| ltmp = (long)VALMAX;
6510
6511 cmp.l #VALMAX,LTMP(A6)
6512 ble F11L146
6513
6514 move.l #VALMAX,LTMP(A6)
6515 bra F11L147
6516
6517| else if (ltmp LT (long)VALMIN)
6518| ltmp = (long)VALMIN;
6519
6520F11L146: cmp.l #VALMIN,LTMP(A6)
6521 bge F11L147
6522
6523 move.l #VALMIN,LTMP(A6)
6524
6525| tfpval = (short)ltmp;
6526
6527F11L147: move.w LTMP+2(A6),TFPVAL(A6)
6528 bra F11L149
6529
6530| } else {
6531
6532| tfpval = pt->ipval;
6533
6534F11L136: move.l PT(A6),A0
6535 move 2(A0),TFPVAL(A6)
6536
6537| }
6538
6539 .page
6540
6541| fpmant = (((long)pt->iptom & 0x0000FFF0L)
6542| | ((long)timemlt & 0x0000FFFFL)) >> 15;
6543
6544F11L149: move.l PT(A6),A0
6545 move.w (A0),D0
6546 move.w D0,D2
6547 andi.w #0xFFF0,D0
6548 move.w timemlt,D1
6549 muls D1,D0
6550 move.l #15,D1
6551 asr.l D1,D0
6552 move D0,R_FPMANT
6553
6554| fpexp = expbit[pt->iptim & 0x000F];
6555
6556 and #0x000F,D2
6557 move D2,A0
6558 add.l A0,A0
6559 add.l #expbit,A0
6560 move (A0),R_FPEXP
6561
6562 .page
6563
6564| fp->idfpch = pch;
6565
6566F11L163: move PCH(A6),(A_FP)
6567
6568| fpval = tfpval;
6569
6570 move TFPVAL(A6),R_FPVAL
6571
6572 .page
6573
6574 move.b 5(A_FP),D0
6575 ext.w D0
6576 sub.w #1,D0
6577 movea.l PT(A6),A0
6578
6579| oldi = setipl(FPU_DI);
6580
6581 move sr,OLDI(A6)
6582 move #FPU_DI,sr
6583
6584F11L168: clr.b 10(A0)
6585 add.l #12,a0
6586 dbra D0,F11L168
6587
6588 .page
6589
6590| fp->idftmd ^= I_NVBITS;
6591
6592F11L165: eor.b #24,7(A_FP)
6593
6594| fpctl = (fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0003;
6595
6596 move.b 7(A_FP),R_FPCTL
6597 and #28,R_FPCTL
6598 or #3,R_FPCTL
6599
6600| fp->idfcpt = fp->idfpt1;
6601
6602 move.b 6(A_FP),8(A_FP)
6603
6604| fp->idftmd |= I_ACTIVE;
6605
6606 or.b #2,7(A_FP)
6607
6608| fp->idftrf = trg;
6609
6610 move TRG(A6),10(A_FP)
6611
6612| |(fpu + (long)FPU_TCV1) = srcval;
6613
6614 move SRCVAL(A6),0x8(A_FPU)
6615
6616| ++octype;
6617
6618 add #1,OCTYPE(A6)
6619
6620| |(fpu + (long)FPU_TSF1) = mltval;
6621
6622 move MLTVAL(A6),0xA(A_FPU)
6623
6624| ++octype;
6625
6626 add #1,OCTYPE(A6)
6627
6628| |(fpu + (long)FPU_TMNT) = fpmant;
6629
6630 move R_FPMANT,0x14(A_FPU)
6631
6632| ++octype;
6633
6634 add #1,OCTYPE(A6)
6635
6636| |(fpu + (long)FPU_TEXP) = fpexp;
6637
6638 move R_FPEXP,0x16(A_FPU)
6639
6640| ++octype;
6641
6642 add #1,OCTYPE(A6)
6643
6644 .page
6645
6646| if (fp->idftmd & I_VNSUBN)
6647
6648 btst #3,7(A_FP)
6649 beq F11L169
6650
6651| |(fpu + (long)FPU_TNV1) = fpval;
6652
6653 move R_FPVAL,0x1C(A_FPU)
6654 bra F11L170
6655
6656| else
6657| |(fpu + (long)FPU_TNV0) = fpval;
6658
6659F11L169: move R_FPVAL,2(A_FPU)
6660
6661| ++octype;
6662
6663F11L170: add #1,OCTYPE(A6)
6664
6665| |(fpu + (long)FPU_TCTL) = fpctl;
6666
6667 move R_FPCTL,(A_FPU)
6668
6669| setipl(oldi);
6670
6671 move OLDI(A6),sr
6672
6673 .page
6674| ------------------------------------------------------------------------------
6675| Start function 12 -- Level
6676| ------------------------------------------------------------------------------
6677
6678| if (ip->idhfnc[12].idftmd & I_TM_KEY) {
6679
6680FN12: move.l IP(A6),A0
6681 move.b 237(A0),D0
6682 move.w TAG(A6),D1
6683 eor.w D1,D0
6684 btst #0,D0
6685 bne FN12A
6686
6687 jmp FNEXIT
6688
6689| vp = (vce << 4) + 2;
6690
6691FN12A: move VCE(A6),D0
6692 asl #4,D0
6693 add.w #2,D0
6694 move D0,VP(A6)
6695
6696| fpu = io_fpu + FPU_OFNC + (vp << 4);
6697
6698 asl #5,D0
6699 ext.l D0
6700 move.l D0,A_FPU
6701 add.l #io_fpu+0x4000,A_FPU
6702
6703| fp = &ip->idhfnc[12];
6704
6705 move.l #144,A_FP
6706 add.l IP(A6),A_FP
6707 add.l #86,A_FP
6708
6709| pt = &ip->idhpnt[fp->idfpt1];
6710
6711 clr.l D0
6712 move.b 6(A_FP),D0
6713 lsl.l #2,D0
6714 move.l D0,D1
6715 add.l D0,D0
6716 add.l D1,D0
6717 add.l IP(A6),D0
6718 add.l #242,D0
6719 move.l D0,PT(A6)
6720
6721 .page
6722
6723| srcnum = group | fp->idfsrc;
6724
6725 move.w GROUP(A6),D0
6726 ext.l D0
6727 clr.l D1
6728 move.b 4(A_FP),D1
6729 or D1,D0
6730 move D0,SRCNUM(A6)
6731
6732| vep = &valents[srcnum];
6733
6734 add.l D0,D0
6735 move.l D0,D1
6736 lsl.l #2,D0
6737 add.l D1,D0
6738 add.l #valents,D0
6739 move.l D0,VEP(A6)
6740
6741| smp = vpsms[vp];
6742
6743 move VP(A6),A0
6744 add.l A0,A0
6745 add.l A0,A0
6746 add.l #vpsms,A0
6747 move.l (A0),A_SMP
6748
6749| if (srcnum NE smp->sm) {
6750
6751 clr D0
6752 move 10(A_SMP),D0
6753 cmp SRCNUM(A6),D0
6754 beq F12L113
6755
6756| (smp->prv)->nxt = smp->nxt;
6757
6758 move.l 4(A_SMP),A0
6759 move.l (A_SMP),(A0)
6760
6761| (smp->nxt)->prv = smp->prv;
6762
6763 move.l (A_SMP),A0
6764 move.l 4(A_SMP),4(A0)
6765
6766| smp->prv = (struct sment *)vep;
6767
6768 move.l VEP(A6),4(A_SMP)
6769
6770| smp->nxt = vep->nxt;
6771
6772 move.l VEP(A6),A0
6773 move.l (A0),(A_SMP)
6774
6775| (vep->nxt)->prv = smp;
6776
6777 move.l VEP(A6),A0
6778 move.l (A0),A0
6779 move.l A_SMP,4(A0)
6780
6781| vep->nxt = smp;
6782
6783 move.l VEP(A6),A0
6784 move.l A_SMP,(A0)
6785
6786| smp->sm = srcnum;
6787
6788 move SRCNUM(A6),10(A_SMP)
6789
6790| }
6791
6792| mltval = fp->idfmlt;
6793
6794F12L113: move 2(A_FP),MLTVAL(A6)
6795
6796 .page
6797
6798| switch (fp->idfsrc) {
6799
6800 move.b 4(A_FP),D0
6801 ext.w d0
6802 cmp #10,D0
6803 bhi F12L122
6804
6805 asl #2,D0
6806 lea F12L123,A0
6807 movea.l 0(A0,D0.W),A0
6808 jmp (A0)
6809
6810| case SM_NONE:
6811| mltval = 0;
6812
6813F12L116: clr MLTVAL(A6)
6814
6815| tsrcval = 0;
6816
6817 clr TSRCVAL(A6)
6818
6819| break;
6820
6821 bra F12L114
6822
6823| case SM_RAND:
6824| tsrcval = xgetran(mltval);
6825
6826F12L117: move MLTVAL(A6),(sp)
6827 jsr xgetran
6828 move D0,TSRCVAL(A6)
6829
6830| break;
6831
6832 bra F12L114
6833
6834| case SM_PTCH:
6835| tsrcval = pch;
6836
6837F12L118: move PCH(A6),TSRCVAL(A6)
6838
6839| break;
6840
6841 bra F12L114
6842
6843 .page
6844
6845| case SM_FREQ:
6846| tsrcval = ptoftab[(pch >> 7) & 0x00FF];
6847
6848F12L119: move PCH(A6),D0
6849 asr #7,D0
6850 and #255,D0
6851 move D0,A0
6852 add.l A0,A0
6853 add.l #ptoftab,A0
6854 move (A0),TSRCVAL(A6)
6855
6856| break;
6857
6858 bra F12L114
6859
6860| case SM_KVEL:
6861| tsrcval = veltab[trg];
6862
6863F12L120: move TRG(A6),A0
6864 add.l A0,A0
6865 add.l #veltab,A0
6866 move (A0),TSRCVAL(A6)
6867
6868| break;
6869
6870 bra F12L114
6871
6872| case SM_KPRS:
6873| tsrcval = prstab[trg];
6874
6875F12L121: move TRG(A6),A0
6876 add.l A0,A0
6877 add.l #prstab,A0
6878 move (A0),TSRCVAL(A6)
6879
6880| break;
6881
6882 bra F12L114
6883
6884| default:
6885| tsrcval = vep->val;
6886
6887F12L122: move.l VEP(A6),A0
6888 move 8(A0),TSRCVAL(A6)
6889
6890| }
6891
6892 .page
6893
6894| srcval = tsrcval;
6895
6896F12L114: move TSRCVAL(A6),SRCVAL(A6)
6897
6898 .page
6899
6900| if (pt->ipvsrc) {
6901
6902F12L124: move.l PT(A6),A0
6903 tst.b 6(A0)
6904 beq F12L136
6905
6906| switch (pt->ipvsrc) {
6907
6908 move.l PT(A6),A0
6909 move.b 6(A0),D0
6910 ext.w D0
6911 sub #1,D0
6912 cmp #9,D0
6913 bhi F12L144
6914
6915 asl #2,D0
6916 lea F12L145,A0
6917 move.l 0(A0,D0.W),A0
6918 jmp (A0)
6919
6920| case SM_RAND:
6921| ltmp = xgetran(pt_>ipvmlt);
6922
6923F12L139: move.l PT(A6),A0
6924 move 4(A0),(sp)
6925 jsr xgetran
6926 ext.l D0
6927 move.l D0,LTMP(A6)
6928
6929| break;
6930
6931 bra F12L137
6932
6933| case SM_PTCH:
6934| ltmp = pch;
6935
6936F12L140: move PCH(A6),A0
6937 move.l A0,LTMP(A6)
6938
6939| break;
6940
6941 bra F12L137
6942
6943 .page
6944
6945| case SM_FREQ:
6946| ltmp = ptoftab[(pch >> 7) & 0x00FF];
6947
6948F12L141: move PCH(A6),D0
6949 asr #7,D0
6950 and #255,D0
6951 move D0,A0
6952 add.l A0,A0
6953 move.l #ptoftab,A1
6954 move 0(A0,A1.l),D0
6955 ext.l D0
6956 move.l D0,LTMP(A6)
6957
6958| break;
6959
6960 bra F12L137
6961
6962| case SM_KVEL:
6963| ltmp = veltab[trg];
6964
6965F12L142: move TRG(A6),A0
6966 add.l A0,A0
6967 move.l #veltab,A1
6968 move 0(A0,A1.l),D0
6969 ext.l D0
6970 move.l D0,LTMP(A6)
6971
6972| break;
6973
6974 bra F12L137
6975
6976 .page
6977
6978| case SM_KPRS:
6979| ltmp = prstab[trg];
6980
6981F12L143: move TRG(A6),A0
6982 add.l A0,A0
6983 move.l #prstab,A1
6984 move 0(A0,A1.l),D0
6985 ext.l D0
6986 move.l D0,LTMP(A6)
6987
6988| break;
6989
6990 bra F12L137
6991
6992 .page
6993
6994| default:
6995| ltmp = valents[group | pt->ipvsrc].val;
6996
6997F12L144: move.l PT(A6),A0
6998 clr.l D0
6999 move.b 6(A0),D0
7000 or.w GROUP(A6),D0
7001 add.l D0,D0
7002 move.l D0,D1
7003 lsl.l #2,D0
7004 add.l D1,D0
7005 move.l D0,A0
7006 move.l #valents,A1
7007 clr.l D0
7008 move 8(A0,A1.l),D0
7009 move.l D0,LTMP(A6)
7010
7011| }
7012
7013
7014 .page
7015
7016| ltmp = (ltmp * pt->ipvmlt) >> 15;
7017
7018F12L137: move.l PT(A6),A0
7019 move.w 4(A0),D0
7020 move.w LTMP+2(A6),D1
7021 muls D1,D0
7022 move.l #15,D1
7023 asr.l D1,D0
7024 move.l D0,LTMP(A6)
7025
7026| ltmp += (long)pt->ipval;
7027
7028 move.l PT(A6),A0
7029 move 2(A0),D0
7030 ext.l D0
7031 add.l D0,LTMP(A6)
7032
7033| if (ltmp GT (long)VALMAX)
7034| ltmp = (long)VALMAX;
7035
7036 cmp.l #VALMAX,LTMP(A6)
7037 ble F12L146
7038
7039 move.l #VALMAX,LTMP(A6)
7040 bra F12L147
7041
7042| else if (ltmp LT (long)VALMIN)
7043| ltmp = (long)VALMIN;
7044
7045F12L146: cmp.l #VALMIN,LTMP(A6)
7046 bge F12L147
7047
7048 move.l #VALMIN,LTMP(A6)
7049
7050| tfpval = (short)ltmp;
7051
7052F12L147: move.w LTMP+2(A6),TFPVAL(A6)
7053 bra F12L149
7054
7055| } else {
7056
7057| tfpval = pt->ipval;
7058
7059F12L136: move.l PT(A6),A0
7060 move 2(A0),TFPVAL(A6)
7061
7062| }
7063
7064 .page
7065
7066| fpmant = (((long)pt->iptom & 0x0000FFF0L)
7067| | ((long)timemlt & 0x0000FFFFL)) >> 15;
7068
7069F12L149: move.l PT(A6),A0
7070 move.w (A0),D0
7071 move.w D0,D2
7072 andi.w #0xFFF0,D0
7073 move.w timemlt,D1
7074 muls D1,D0
7075 move.l #15,D1
7076 asr.l D1,D0
7077 move D0,R_FPMANT
7078
7079| fpexp = expbit[pt->iptim & 0x000F];
7080
7081 and #0x000F,D2
7082 move D2,A0
7083 add.l A0,A0
7084 add.l #expbit,A0
7085 move (A0),R_FPEXP
7086
7087 .page
7088
7089| fp->idfpch = pch;
7090
7091F12L162: move PCH(A6),(A_FP)
7092
7093| fpval = ((tfpval >> 5) - 500) << 6;
7094
7095 move TFPVAL(A6),R_FPVAL
7096 asr #5,R_FPVAL
7097 add #-500,R_FPVAL
7098 asl #6,R_FPVAL
7099
7100 .page
7101
7102 move.b 5(A_FP),D0
7103 ext.w D0
7104 sub.w #1,D0
7105 movea.l PT(A6),A0
7106
7107| oldi = setipl(FPU_DI);
7108
7109 move sr,OLDI(A6)
7110 move #FPU_DI,sr
7111
7112F12L168: clr.b 10(A0)
7113 add.l #12,a0
7114 dbra D0,F12L168
7115
7116 .page
7117
7118| fp->idftmd ^= I_NVBITS;
7119
7120F12L165: eor.b #24,7(A_FP)
7121
7122| fpctl = (fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0003;
7123
7124 move.b 7(A_FP),R_FPCTL
7125 and #28,R_FPCTL
7126 or #3,R_FPCTL
7127
7128| fp->idfcpt = fp->idfpt1;
7129
7130 move.b 6(A_FP),8(A_FP)
7131
7132| fp->idftmd |= I_ACTIVE;
7133
7134 or.b #2,7(A_FP)
7135
7136| fp->idftrf = trg;
7137
7138 move TRG(A6),10(A_FP)
7139
7140| |(fpu + (long)FPU_TCV1) = srcval;
7141
7142 move SRCVAL(A6),0x8(A_FPU)
7143
7144| ++octype;
7145
7146 add #1,OCTYPE(A6)
7147
7148| |(fpu + (long)FPU_TSF1) = mltval;
7149
7150 move MLTVAL(A6),0xA(A_FPU)
7151
7152| ++octype;
7153
7154 add #1,OCTYPE(A6)
7155
7156| |(fpu + (long)FPU_TMNT) = fpmant;
7157
7158 move R_FPMANT,0x14(A_FPU)
7159
7160| ++octype;
7161
7162 add #1,OCTYPE(A6)
7163
7164| |(fpu + (long)FPU_TEXP) = fpexp;
7165
7166 move R_FPEXP,0x16(A_FPU)
7167
7168| ++octype;
7169
7170 add #1,OCTYPE(A6)
7171
7172 .page
7173
7174| if (fp->idftmd & I_VNSUBN)
7175
7176 btst #3,7(A_FP)
7177 beq F12L169
7178
7179| |(fpu + (long)FPU_TNV1) = fpval;
7180
7181 move R_FPVAL,0x1C(A_FPU)
7182 bra F12L170
7183
7184| else
7185| |(fpu + (long)FPU_TNV0) = fpval;
7186
7187F12L169: move R_FPVAL,2(A_FPU)
7188
7189| ++octype;
7190
7191F12L170: add #1,OCTYPE(A6)
7192
7193| |(fpu + (long)FPU_TCTL) = fpctl;
7194
7195 move R_FPCTL,(A_FPU)
7196
7197| setipl(oldi);
7198
7199 move OLDI(A6),sr
7200
7201| }
7202
7203 .page
7204
7205FNEXIT: tst.l (sp)+
7206 movem.l (sp)+,R_FPVAL-R_FPMANT/A_SMP-A_FP
7207 unlk A6
7208 rts
7209
7210| }
7211
7212 .page
7213
7214 .data
7215
7216| Jump tables for switch statements
7217| ---------------------------------
7218
7219F00L123: .dc.l F00L116
7220 .dc.l F00L117
7221 .dc.l F00L122
7222 .dc.l F00L122
7223 .dc.l F00L122
7224 .dc.l F00L118
7225 .dc.l F00L121
7226 .dc.l F00L120
7227 .dc.l F00L122
7228 .dc.l F00L122
7229 .dc.l F00L119
7230
7231F00L145: .dc.l F00L139
7232 .dc.l F00L144
7233 .dc.l F00L144
7234 .dc.l F00L144
7235 .dc.l F00L140
7236 .dc.l F00L143
7237 .dc.l F00L142
7238 .dc.l F00L144
7239 .dc.l F00L144
7240 .dc.l F00L141
7241
7242F01L123: .dc.l F01L116
7243 .dc.l F01L117
7244 .dc.l F01L122
7245 .dc.l F01L122
7246 .dc.l F01L122
7247 .dc.l F01L118
7248 .dc.l F01L121
7249 .dc.l F01L120
7250 .dc.l F01L122
7251 .dc.l F01L122
7252 .dc.l F01L119
7253
7254F01L145: .dc.l F01L139
7255 .dc.l F01L144
7256 .dc.l F01L144
7257 .dc.l F01L144
7258 .dc.l F01L140
7259 .dc.l F01L143
7260 .dc.l F01L142
7261 .dc.l F01L144
7262 .dc.l F01L144
7263 .dc.l F01L141
7264
7265F02L123: .dc.l F02L116
7266 .dc.l F02L117
7267 .dc.l F02L122
7268 .dc.l F02L122
7269 .dc.l F02L122
7270 .dc.l F02L118
7271 .dc.l F02L121
7272 .dc.l F02L120
7273 .dc.l F02L122
7274 .dc.l F02L122
7275 .dc.l F02L119
7276
7277F02L145: .dc.l F02L139
7278 .dc.l F02L144
7279 .dc.l F02L144
7280 .dc.l F02L144
7281 .dc.l F02L140
7282 .dc.l F02L143
7283 .dc.l F02L142
7284 .dc.l F02L144
7285 .dc.l F02L144
7286 .dc.l F02L141
7287
7288F03L123: .dc.l F03L116
7289 .dc.l F03L117
7290 .dc.l F03L122
7291 .dc.l F03L122
7292 .dc.l F03L122
7293 .dc.l F03L118
7294 .dc.l F03L121
7295 .dc.l F03L120
7296 .dc.l F03L122
7297 .dc.l F03L122
7298 .dc.l F03L119
7299
7300F03L145: .dc.l F03L139
7301 .dc.l F03L144
7302 .dc.l F03L144
7303 .dc.l F03L144
7304 .dc.l F03L140
7305 .dc.l F03L143
7306 .dc.l F03L142
7307 .dc.l F03L144
7308 .dc.l F03L144
7309 .dc.l F03L141
7310
7311F04L123: .dc.l F04L116
7312 .dc.l F04L117
7313 .dc.l F04L122
7314 .dc.l F04L122
7315 .dc.l F04L122
7316 .dc.l F04L118
7317 .dc.l F04L121
7318 .dc.l F04L120
7319 .dc.l F04L122
7320 .dc.l F04L122
7321 .dc.l F04L119
7322
7323F04L145: .dc.l F04L139
7324 .dc.l F04L144
7325 .dc.l F04L144
7326 .dc.l F04L144
7327 .dc.l F04L140
7328 .dc.l F04L143
7329 .dc.l F04L142
7330 .dc.l F04L144
7331 .dc.l F04L144
7332 .dc.l F04L141
7333
7334F05L123: .dc.l F05L116
7335 .dc.l F05L117
7336 .dc.l F05L122
7337 .dc.l F05L122
7338 .dc.l F05L122
7339 .dc.l F05L118
7340 .dc.l F05L121
7341 .dc.l F05L120
7342 .dc.l F05L122
7343 .dc.l F05L122
7344 .dc.l F05L119
7345
7346F05L145: .dc.l F05L139
7347 .dc.l F05L144
7348 .dc.l F05L144
7349 .dc.l F05L144
7350 .dc.l F05L140
7351 .dc.l F05L143
7352 .dc.l F05L142
7353 .dc.l F05L144
7354 .dc.l F05L144
7355 .dc.l F05L141
7356
7357F06L123: .dc.l F06L116
7358 .dc.l F06L117
7359 .dc.l F06L122
7360 .dc.l F06L122
7361 .dc.l F06L122
7362 .dc.l F06L118
7363 .dc.l F06L121
7364 .dc.l F06L120
7365 .dc.l F06L122
7366 .dc.l F06L122
7367 .dc.l F06L119
7368
7369F06L145: .dc.l F06L139
7370 .dc.l F06L144
7371 .dc.l F06L144
7372 .dc.l F06L144
7373 .dc.l F06L140
7374 .dc.l F06L143
7375 .dc.l F06L142
7376 .dc.l F06L144
7377 .dc.l F06L144
7378 .dc.l F06L141
7379
7380F07L123: .dc.l F07L116
7381 .dc.l F07L117
7382 .dc.l F07L122
7383 .dc.l F07L122
7384 .dc.l F07L122
7385 .dc.l F07L118
7386 .dc.l F07L121
7387 .dc.l F07L120
7388 .dc.l F07L122
7389 .dc.l F07L122
7390 .dc.l F07L119
7391
7392F07L145: .dc.l F07L139
7393 .dc.l F07L144
7394 .dc.l F07L144
7395 .dc.l F07L144
7396 .dc.l F07L140
7397 .dc.l F07L143
7398 .dc.l F07L142
7399 .dc.l F07L144
7400 .dc.l F07L144
7401 .dc.l F07L141
7402
7403F08L123: .dc.l F08L116
7404 .dc.l F08L117
7405 .dc.l F08L122
7406 .dc.l F08L122
7407 .dc.l F08L122
7408 .dc.l F08L118
7409 .dc.l F08L121
7410 .dc.l F08L120
7411 .dc.l F08L122
7412 .dc.l F08L122
7413 .dc.l F08L119
7414
7415F08L145: .dc.l F08L139
7416 .dc.l F08L144
7417 .dc.l F08L144
7418 .dc.l F08L144
7419 .dc.l F08L140
7420 .dc.l F08L143
7421 .dc.l F08L142
7422 .dc.l F08L144
7423 .dc.l F08L144
7424 .dc.l F08L141
7425
7426F09L123: .dc.l F09L116
7427 .dc.l F09L117
7428 .dc.l F09L122
7429 .dc.l F09L122
7430 .dc.l F09L122
7431 .dc.l F09L118
7432 .dc.l F09L121
7433 .dc.l F09L120
7434 .dc.l F09L122
7435 .dc.l F09L122
7436 .dc.l F09L119
7437
7438F09L145: .dc.l F09L139
7439 .dc.l F09L144
7440 .dc.l F09L144
7441 .dc.l F09L144
7442 .dc.l F09L140
7443 .dc.l F09L143
7444 .dc.l F09L142
7445 .dc.l F09L144
7446 .dc.l F09L144
7447 .dc.l F09L141
7448
7449F10L123: .dc.l F10L116
7450 .dc.l F10L117
7451 .dc.l F10L122
7452 .dc.l F10L122
7453 .dc.l F10L122
7454 .dc.l F10L118
7455 .dc.l F10L121
7456 .dc.l F10L120
7457 .dc.l F10L122
7458 .dc.l F10L122
7459 .dc.l F10L119
7460
7461F10L145: .dc.l F10L139
7462 .dc.l F10L144
7463 .dc.l F10L144
7464 .dc.l F10L144
7465 .dc.l F10L140
7466 .dc.l F10L143
7467 .dc.l F10L142
7468 .dc.l F10L144
7469 .dc.l F10L144
7470 .dc.l F10L141
7471
7472F11L123: .dc.l F11L116
7473 .dc.l F11L117
7474 .dc.l F11L122
7475 .dc.l F11L122
7476 .dc.l F11L122
7477 .dc.l F11L118
7478 .dc.l F11L121
7479 .dc.l F11L120
7480 .dc.l F11L122
7481 .dc.l F11L122
7482 .dc.l F11L119
7483
7484F11L145: .dc.l F11L139
7485 .dc.l F11L144
7486 .dc.l F11L144
7487 .dc.l F11L144
7488 .dc.l F11L140
7489 .dc.l F11L143
7490 .dc.l F11L142
7491 .dc.l F11L144
7492 .dc.l F11L144
7493 .dc.l F11L141
7494
7495F12L123: .dc.l F12L116
7496 .dc.l F12L117
7497 .dc.l F12L122
7498 .dc.l F12L122
7499 .dc.l F12L122
7500 .dc.l F12L118
7501 .dc.l F12L121
7502 .dc.l F12L120
7503 .dc.l F12L122
7504 .dc.l F12L122
7505 .dc.l F12L119
7506
7507F12L145: .dc.l F12L139
7508 .dc.l F12L144
7509 .dc.l F12L144
7510 .dc.l F12L144
7511 .dc.l F12L140
7512 .dc.l F12L143
7513 .dc.l F12L142
7514 .dc.l F12L144
7515 .dc.l F12L144
7516 .dc.l F12L141
7517
7518| vbtab -- vbuf pointer table -- indexed by voice number
7519| ----- ---------------------------------------------
7520vbtab: .dc.l vbufs
7521 .dc.l vbufs+VBLEN
7522 .dc.l vbufs+(2*VBLEN)
7523 .dc.l vbufs+(3*VBLEN)
7524 .dc.l vbufs+(4*VBLEN)
7525 .dc.l vbufs+(5*VBLEN)
7526 .dc.l vbufs+(6*VBLEN)
7527 .dc.l vbufs+(7*VBLEN)
7528 .dc.l vbufs+(8*VBLEN)
7529 .dc.l vbufs+(9*VBLEN)
7530 .dc.l vbufs+(10*VBLEN)
7531 .dc.l vbufs+(11*VBLEN)
7532
7533 .end
Note: See TracBrowser for help on using the repository browser.