source: buchla-68k/ram/etadyn.c@ e225e77

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

Added missing includes and declarations.

  • Property mode set to 100644
File size: 3.9 KB
RevLine 
[f40a309]1/*
2 =============================================================================
3 etadyn.c -- MIDAS assignment editor -- dynamics to group field handlers
4 Version 7 -- 1988-07-13 -- D.N. Lynx Crowe
5 =============================================================================
6*/
7
8#include "stddefs.h"
9#include "fields.h"
10#include "fpu.h"
11#include "hwdefs.h"
12#include "vsdd.h"
13#include "vsddsw.h"
14#include "graphdef.h"
15
16#include "midas.h"
17#include "asgdsp.h"
18#include "instdsp.h"
19
[7258c6a]20extern uint16_t setsr(uint16_t sr);
[f40a309]21
[e225e77]22extern void modasg(void);
23
[7258c6a]24extern uint16_t *asgob;
[f40a309]25
[7258c6a]26extern uint16_t curintp;
[f40a309]27
[7258c6a]28extern int16_t stccol;
29extern int16_t stcrow;
30extern int16_t timemlt;
[f40a309]31
[7258c6a]32extern int8_t dspbuf[];
[f40a309]33
[7258c6a]34extern int16_t vce2grp[];
35extern int16_t grpdyn[];
36extern int16_t dyntab[];
[f40a309]37
[7258c6a]38extern int16_t expbit[];
[f40a309]39
[7258c6a]40extern int16_t adbox[][8];
[f40a309]41
42extern struct instdef vbufs[];
43
44/*
45
46*/
47
48/*
49 =============================================================================
50 et_adyn() -- load the edit buffer
51 =============================================================================
52*/
[7258c6a]53
[f40a309]54int16_t et_adyn(int16_t n)
[7258c6a]55{
[f40a309]56 register int16_t grp;
57
58 grp = 0x00FF & (n >> 8);
59
60 ebuf[0] = grpdyn[grp] + '0';
61 ebuf[1] = '\0';
62
63 ebflag = TRUE;
64
65 return(SUCCESS);
66}
67
68/*
69
70*/
71
72/*
73 =============================================================================
74 setdyn() -- set dynamics for a group
75 =============================================================================
[7258c6a]76*/
[f40a309]77
[7258c6a]78void setdyn(int16_t grp, int16_t dyn)
79{
80 register int16_t g, i, val;
[f40a309]81 register int32_t ltmp;
[7258c6a]82 register uint16_t *fpu;
83 register struct idfnhdr *fp;
84 uint16_t fpmant, fpexp;
[f40a309]85 int16_t oldsr;
86 int16_t nop;
87
88 grpdyn[grp] = dyn;
89 val = dyntab[dyn];
[7258c6a]90 g = grp + 1;
91
[f40a309]92 fpmant = (((int32_t)curintp & 0x0000FFF0L) *
93 ((int32_t)timemlt & 0x0000FFFFL)) >> 15;
94
95 fpexp = expbit[curintp & 0x000F];
96
97/*
98
99*/
100 for (i = 0; i < 12; i++)
101 if (g EQ vce2grp[i]) {
102
103 fp = &vbufs[i].idhfnc[8];
104 fpu = io_fpu + FPU_OFNC + (i << 8) + 0x0080;
105
106 oldsr = setsr(0x2200);
107
[7258c6a]108/* ++++++++++++++++++++++++++++ FPU interrupts disabled +++++++++++++++++++++ */
[f40a309]109
[7258c6a]110 fp->idftmd ^= I_NVBITS;
[f40a309]111 *(fpu + (int32_t)FPU_TMNT) = fpmant;
112 ++nop; ++nop; ++nop;
113 *(fpu + (int32_t)FPU_TEXP) = fpexp;
[7258c6a]114 ++nop; ++nop; ++nop;
[f40a309]115
[7258c6a]116 if (fp->idftmd & I_VNSUBN)
[f40a309]117 *(fpu + (int32_t)FPU_TNV1) = val;
118 else
119 *(fpu + (int32_t)FPU_TNV0) = val;
[7258c6a]120
[f40a309]121 ++nop; ++nop; ++nop;
122
123 *(fpu + (int32_t)FPU_TCTL) =
124 (fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0001;
125
126 setsr(oldsr);
127
128/* ++++++++++++++++++++++++++++ Interrupts restored +++++++++++++++++++++++++ */
129
130 }
131}
132
133/*
134
135*/
136
137/*
138 =============================================================================
[7258c6a]139 ef_adyn() -- parse (unload) the edit buffer
[f40a309]140 =============================================================================
[7258c6a]141*/
[f40a309]142
143int16_t ef_adyn(int16_t n)
144{
145 register int16_t dyn, grp;
146
147 grp = 0x00FF & (n >> 8);
148
149 ebuf[1] = '\0'; /* terminate the string in ebuf */
150 ebflag = FALSE;
151
152 dyn = ebuf[0] - '0';
153
154 setdyn(grp, dyn);
155 modasg();
156 return(SUCCESS);
157}
158
159/*
160
161*/
162
163/*
[7258c6a]164 =============================================================================
[f40a309]165 rd_adyn() -- (re)display the field
[7258c6a]166 =============================================================================
[f40a309]167*/
168
169int16_t rd_adyn(int16_t nn)
170{
171 register int16_t n, grp;
172
173 n = 0x00FF & nn;
174 grp = 0x00FF & (nn >> 8);
175
176 dspbuf[0] = grpdyn[grp] + '0';
177 dspbuf[1] = '\0';
178
179 vbank(0);
180 vcputsv(asgob, 64, adbox[n][4], adbox[n][5],
181 cfetp->frow, cfetp->flcol, dspbuf, 14);
182
183 return(SUCCESS);
184}
185
186/*
[7258c6a]187 =============================================================================
[f40a309]188 nd_adyn() -- handle new data entry
[7258c6a]189 =============================================================================
[f40a309]190*/
191
192int16_t nd_adyn(int16_t nn, int16_t k)
193{
194 register int16_t n;
195
196 n = nn & 0xFF;
197
198 dspbuf[0] = ebuf[0] = k + '0';
199 dspbuf[1] = ebuf[1] = '\0';
200
201 vbank(0);
202 vcputsv(asgob, 64, AK_ENTRY, adbox[n][5], stcrow, stccol, dspbuf, 14);
203
204 return(SUCCESS);
205}
206
Note: See TracBrowser for help on using the repository browser.