source: buchla-68k/orig/RAM/EXECKEY.S@ b8080f6

Last change on this file since b8080f6 was 3ae31e9, checked in by Thomas Lopatic <thomas@…>, 8 years ago

Imported original source code.

  • Property mode set to 100755
File size: 110.1 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 .equ 0
9LOC_SUB .equ 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 .equ 8 * WORD -- trigger
34PCH .equ 10 * WORD -- pitch
35VCE .equ 12 * WORD -- voice (0..11)
36TAG .equ 14 * WORD -- I_TM_... inversion tag
37*
38* Register variables
39* ------------------
40A_FP .equ A5 * LONG -- struct idfnhdr *
41A_FPU .equ A4 * LONG -- FPU base address
42A_SMP .equ A3 * LONG -- struct sment *
43*
44R_FPMANT .equ D7 * WORD -- FPU time mantissa
45R_FPEXP .equ D6 * WORD -- FPU time exponent
46R_FPCTL .equ D5 * WORD -- FPU control word
47R_I .equ D4 * WORD -- loop index
48R_FPVAL .equ D3 * WORD -- FPU value
49*
50* Local (stack) variables
51* -----------------------
52PT .equ -4 * LONG -- instpnt *
53VEP .equ -8 * LONG -- struct valent *
54OLDI .equ -10 * WORD -- old IPL (sr)
55OCTYPE .equ -12 * WORD -- oscillator 1 mode / scratch
56VP .equ -14 * WORD -- voice # + function # index
57SRCNUM .equ -16 * WORD -- general source #
58SRCVAL .equ -18 * WORD -- general source value
59TSRCVAL .equ -20 * WORD -- temporary general source value
60MLTVAL .equ -22 * WORD -- general source multiplier
61TFPVAL .equ -24 * WORD -- temporary FPU value
62LTMP .equ -28 * LONG -- long temporary
63IP .equ -32 * LONG -- struct instdef *
64GROUP .equ -34 * WORD -- group number << 4
65*
66* Symbolic constants
67* ------------------
68LASTLOCL .equ GROUP * last local on the stack
69*
70FPU_DI .equ $2200 * sr value for disabling FPU interrupts
71PITCHMAX .equ 21920 * maximum pitch value
72VALMAX .equ $00007D00 * maximum FPU value
73VALMIN .equ $FFFF8300 * minimum FPU value
74VBLEN .equ 3938 * length of a voice buffer
75LSPCH .equ 2 * left shift for pitch sources
76*
77 .page
78*
79* execkey(trg, pch, vce)
80* short trg, pch, vce;
81* {
82*
83_execkey: 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+$4000,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 #$00FF,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 #$FFF0,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 #$000F,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),$8(A_FPU)
634*
635* ++octype;
636*
637 add #1,OCTYPE(A6)
638*
639* *(fpu + (long)FPU_TSF1) = mltval;
640*
641 move MLTVAL(A6),$A(A_FPU)
642*
643* ++octype;
644*
645 add #1,OCTYPE(A6)
646*
647* *(fpu + (long)FPU_TMNT) = fpmant;
648*
649 move R_FPMANT,$14(A_FPU)
650*
651* ++octype;
652*
653 add #1,OCTYPE(A6)
654*
655* *(fpu + (long)FPU_TEXP) = fpexp;
656*
657 move R_FPEXP,$16(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,$1C(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+$4000,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 #$FFF0,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 #$000F,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),$8(A_FPU)
1194*
1195* ++octype;
1196*
1197 add #1,OCTYPE(A6)
1198*
1199* *(fpu + (long)FPU_TSF1) = mltval;
1200*
1201 move MLTVAL(A6),$A(A_FPU)
1202*
1203* ++octype;
1204*
1205 add #1,OCTYPE(A6)
1206*
1207* *(fpu + (long)FPU_TMNT) = fpmant;
1208*
1209 move R_FPMANT,$14(A_FPU)
1210*
1211* ++octype;
1212*
1213 add #1,OCTYPE(A6)
1214*
1215* *(fpu + (long)FPU_TEXP) = fpexp;
1216*
1217 move R_FPEXP,$16(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,$1C(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+$4000,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 #$FFF0,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 #$000F,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),$8(A_FPU)
1743*
1744* ++octype;
1745*
1746 add #1,OCTYPE(A6)
1747*
1748* *(fpu + (long)FPU_TSF1) = mltval;
1749*
1750 move MLTVAL(A6),$A(A_FPU)
1751*
1752* ++octype;
1753*
1754 add #1,OCTYPE(A6)
1755*
1756* *(fpu + (long)FPU_TMNT) = fpmant;
1757*
1758 move R_FPMANT,$14(A_FPU)
1759*
1760* ++octype;
1761*
1762 add #1,OCTYPE(A6)
1763*
1764* *(fpu + (long)FPU_TEXP) = fpexp;
1765*
1766 move R_FPEXP,$16(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,$1C(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+$4000,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 #$FFF0,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 #$000F,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),$8(A_FPU)
2292*
2293* ++octype;
2294*
2295 add #1,OCTYPE(A6)
2296*
2297* *(fpu + (long)FPU_TSF1) = mltval;
2298*
2299 move MLTVAL(A6),$A(A_FPU)
2300*
2301* ++octype;
2302*
2303 add #1,OCTYPE(A6)
2304*
2305* *(fpu + (long)FPU_TMNT) = fpmant;
2306*
2307 move R_FPMANT,$14(A_FPU)
2308*
2309* ++octype;
2310*
2311 add #1,OCTYPE(A6)
2312*
2313* *(fpu + (long)FPU_TEXP) = fpexp;
2314*
2315 move R_FPEXP,$16(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,$1C(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+$4000,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+$4000,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,$1C(A0)
2409 add.w #1,OCTYPE(A6)
2410 move.w #$0015,(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 #$FFF0,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 #$000F,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),$8(A_FPU)
2906*
2907* ++octype;
2908*
2909 add #1,OCTYPE(A6)
2910*
2911* *(fpu + (long)FPU_TSF1) = mltval;
2912*
2913 move MLTVAL(A6),$A(A_FPU)
2914*
2915* ++octype;
2916*
2917 add #1,OCTYPE(A6)
2918*
2919* *(fpu + (long)FPU_TMNT) = fpmant;
2920*
2921 move R_FPMANT,$14(A_FPU)
2922*
2923* ++octype;
2924*
2925 add #1,OCTYPE(A6)
2926*
2927* *(fpu + (long)FPU_TEXP) = fpexp;
2928*
2929 move R_FPEXP,$16(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,$1C(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+$4000,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 #$FFF0,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 #$000F,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 #$7D00,D0
3391 ble F05L163B
3392*
3393 move.w #$7D00,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 #$8000,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),$8(A_FPU)
3465*
3466* ++octype;
3467*
3468 add #1,OCTYPE(A6)
3469*
3470* *(fpu + (long)FPU_TSF1) = mltval;
3471*
3472 move MLTVAL(A6),$A(A_FPU)
3473*
3474* ++octype;
3475*
3476 add #1,OCTYPE(A6)
3477*
3478* *(fpu + (long)FPU_TMNT) = fpmant;
3479*
3480 move R_FPMANT,$14(A_FPU)
3481*
3482* ++octype;
3483*
3484 add #1,OCTYPE(A6)
3485*
3486* *(fpu + (long)FPU_TEXP) = fpexp;
3487*
3488 move R_FPEXP,$16(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,$1C(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+$4000,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 #$FFF0,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 #$000F,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),$8(A_FPU)
3990*
3991* ++octype;
3992*
3993 add #1,OCTYPE(A6)
3994*
3995* *(fpu + (long)FPU_TSF1) = mltval;
3996*
3997 move MLTVAL(A6),$A(A_FPU)
3998*
3999* ++octype;
4000*
4001 add #1,OCTYPE(A6)
4002*
4003* *(fpu + (long)FPU_TMNT) = fpmant;
4004*
4005 move R_FPMANT,$14(A_FPU)
4006*
4007* ++octype;
4008*
4009 add #1,OCTYPE(A6)
4010*
4011* *(fpu + (long)FPU_TEXP) = fpexp;
4012*
4013 move R_FPEXP,$16(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,$1C(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+$4000,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 #$FFF0,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 #$000F,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),$8(A_FPU)
4515*
4516* ++octype;
4517*
4518 add #1,OCTYPE(A6)
4519*
4520* *(fpu + (long)FPU_TSF1) = mltval;
4521*
4522 move MLTVAL(A6),$A(A_FPU)
4523*
4524* ++octype;
4525*
4526 add #1,OCTYPE(A6)
4527*
4528* *(fpu + (long)FPU_TMNT) = fpmant;
4529*
4530 move R_FPMANT,$14(A_FPU)
4531*
4532* ++octype;
4533*
4534 add #1,OCTYPE(A6)
4535*
4536* *(fpu + (long)FPU_TEXP) = fpexp;
4537*
4538 move R_FPEXP,$16(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,$1C(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+$4000,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 #$FFF0,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 #$000F,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),$8(A_FPU)
5040*
5041* ++octype;
5042*
5043 add #1,OCTYPE(A6)
5044*
5045* *(fpu + (long)FPU_TSF1) = mltval;
5046*
5047 move MLTVAL(A6),$A(A_FPU)
5048*
5049* ++octype;
5050*
5051 add #1,OCTYPE(A6)
5052*
5053* *(fpu + (long)FPU_TMNT) = fpmant;
5054*
5055 move R_FPMANT,$14(A_FPU)
5056*
5057* ++octype;
5058*
5059 add #1,OCTYPE(A6)
5060*
5061* *(fpu + (long)FPU_TEXP) = fpexp;
5062*
5063 move R_FPEXP,$16(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,$1C(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+$4000,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 #$FFF0,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 #$000F,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),$8(A_FPU)
5565*
5566* ++octype;
5567*
5568 add #1,OCTYPE(A6)
5569*
5570* *(fpu + (long)FPU_TSF1) = mltval;
5571*
5572 move MLTVAL(A6),$A(A_FPU)
5573*
5574* ++octype;
5575*
5576 add #1,OCTYPE(A6)
5577*
5578* *(fpu + (long)FPU_TMNT) = fpmant;
5579*
5580 move R_FPMANT,$14(A_FPU)
5581*
5582* ++octype;
5583*
5584 add #1,OCTYPE(A6)
5585*
5586* *(fpu + (long)FPU_TEXP) = fpexp;
5587*
5588 move R_FPEXP,$16(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,$1C(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+$4000,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 #$FFF0,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 #$000F,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),$8(A_FPU)
6090*
6091* ++octype;
6092*
6093 add #1,OCTYPE(A6)
6094*
6095* *(fpu + (long)FPU_TSF1) = mltval;
6096*
6097 move MLTVAL(A6),$A(A_FPU)
6098*
6099* ++octype;
6100*
6101 add #1,OCTYPE(A6)
6102*
6103* *(fpu + (long)FPU_TMNT) = fpmant;
6104*
6105 move R_FPMANT,$14(A_FPU)
6106*
6107* ++octype;
6108*
6109 add #1,OCTYPE(A6)
6110*
6111* *(fpu + (long)FPU_TEXP) = fpexp;
6112*
6113 move R_FPEXP,$16(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,$1C(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+$4000,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 #$FFF0,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 #$000F,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),$8(A_FPU)
6615*
6616* ++octype;
6617*
6618 add #1,OCTYPE(A6)
6619*
6620* *(fpu + (long)FPU_TSF1) = mltval;
6621*
6622 move MLTVAL(A6),$A(A_FPU)
6623*
6624* ++octype;
6625*
6626 add #1,OCTYPE(A6)
6627*
6628* *(fpu + (long)FPU_TMNT) = fpmant;
6629*
6630 move R_FPMANT,$14(A_FPU)
6631*
6632* ++octype;
6633*
6634 add #1,OCTYPE(A6)
6635*
6636* *(fpu + (long)FPU_TEXP) = fpexp;
6637*
6638 move R_FPEXP,$16(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,$1C(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+$4000,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 #$FFF0,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 #$000F,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),$8(A_FPU)
7143*
7144* ++octype;
7145*
7146 add #1,OCTYPE(A6)
7147*
7148* *(fpu + (long)FPU_TSF1) = mltval;
7149*
7150 move MLTVAL(A6),$A(A_FPU)
7151*
7152* ++octype;
7153*
7154 add #1,OCTYPE(A6)
7155*
7156* *(fpu + (long)FPU_TMNT) = fpmant;
7157*
7158 move R_FPMANT,$14(A_FPU)
7159*
7160* ++octype;
7161*
7162 add #1,OCTYPE(A6)
7163*
7164* *(fpu + (long)FPU_TEXP) = fpexp;
7165*
7166 move R_FPEXP,$16(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,$1C(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.