source: buchla-68k/ram/etloc.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: 4.5 KB
Line 
1/*
2 =============================================================================
3 etloc.c -- location field handlers
4 Version 11 -- 1988-07-13 -- D.N. Lynx Crowe
5 =============================================================================
6*/
7
8#include "stddefs.h"
9#include "fields.h"
10#include "hwdefs.h"
11#include "fpu.h"
12#include "graphdef.h"
13#include "vsdd.h"
14#include "vsddsw.h"
15#include "score.h"
16#include "scfns.h"
17
18#include "midas.h"
19#include "scdsp.h"
20#include "instdsp.h"
21
22extern uint16_t setsr(uint16_t sr);
23
24extern void advscur(void);
25extern void scupd(void);
26extern void se_disp(struct s_entry *ep, int16_t sd, struct gdsel *gdstb[], int16_t cf);
27
28extern uint16_t *obj8;
29
30extern uint16_t curintp;
31
32extern int16_t ctrsw;
33extern int16_t timemlt;
34extern int16_t recsw;
35extern int16_t stccol;
36
37extern int16_t grploc[];
38extern int16_t grpmode[];
39extern int16_t grpstat[];
40extern int16_t loctab[];
41extern int16_t vce2grp[];
42
43extern int16_t expbit[];
44
45extern struct gdsel *gdstbc[];
46
47extern struct instdef vbufs[];
48
49/*
50
51*/
52
53/*
54 =============================================================================
55 et_loc() -- load edit buffer
56 =============================================================================
57*/
58
59int16_t et_loc(int16_t n)
60{
61 ebuf[0] =grploc[n] + 1 + '0';
62 ebuf[1] = '\0';
63 ebflag = TRUE;
64 return(SUCCESS);
65}
66
67/*
68
69*/
70
71/*
72 =============================================================================
73 setloc() -- set location
74 =============================================================================
75*/
76
77void setloc(int16_t grp, int16_t loc)
78{
79 register int16_t g, i, val;
80 register int32_t ltmp;
81 register uint16_t *fpu;
82 register struct idfnhdr *fp;
83 uint16_t fpmant, fpexp;
84 int16_t oldsr;
85 int16_t nop;
86
87 grploc[grp] = loc;
88 val = (loctab[loc] << 1) ^ 0x8000;
89 g = grp + 1;
90
91 fpmant = (((int32_t)curintp & 0x0000FFF0L) *
92 ((int32_t)timemlt & 0x0000FFFFL)) >> 15;
93
94 fpexp = expbit[curintp & 0x000F];
95
96/*
97
98*/
99 for (i = 0; i < 12; i++)
100 if (g EQ vce2grp[i]) {
101
102 fp = &vbufs[i].idhfnc[4];
103 fpu = io_fpu + FPU_OFNC + (i << 8) + 0x0040;
104
105 oldsr = setsr(0x2200);
106
107/* ++++++++++++++++++++++++++++ FPU interrupts disabled +++++++++++++++++++++ */
108
109 fp->idftmd ^= I_NVBITS;
110
111 *(fpu + (int32_t)FPU_TMNT) = fpmant;
112 ++nop; ++nop; ++nop;
113 *(fpu + (int32_t)FPU_TEXP) = fpexp;
114 ++nop; ++nop; ++nop;
115
116 if (fp->idftmd & I_VNSUBN)
117 *(fpu + (int32_t)FPU_TNV1) = val;
118 else
119 *(fpu + (int32_t)FPU_TNV0) = val;
120
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 =============================================================================
139 ef_loc() -- parse edit buffer
140 =============================================================================
141*/
142
143int16_t ef_loc(int16_t n)
144{
145 register int16_t ival;
146 register struct s_entry *ep;
147
148 ebuf[1] = '\0';
149 ival = ebuf[0] - '0';
150 ebflag = FALSE;
151
152 if (ival EQ 0)
153 return(FAILURE);
154
155 --ival;
156
157 setloc(n, ival);
158
159 if (recsw AND grpstat[n] AND (2 EQ grpmode[n])) {
160
161 if (E_NULL NE (ep = findev(p_cur, t_cur, EV_LOCN, n, -1))) {
162
163 ep->e_data2 = ival;
164
165 } else if (E_NULL NE (ep = e_alc(E_SIZE2))) {
166
167 ep->e_type = EV_LOCN;
168 ep->e_data1 = n;
169 ep->e_data2 = ival;
170 ep->e_time = t_cur;
171 p_cur = e_ins(ep, ep_adj(p_cur, 0, t_cur))->e_fwd;
172 eh_ins(ep, EH_LOCN);
173 ctrsw = TRUE;
174 se_disp(ep, D_FWD, gdstbc, 1);
175 scupd();
176 }
177 }
178
179 return(SUCCESS);
180}
181
182/*
183
184*/
185
186/*
187 =============================================================================
188 rd_loc() -- (re)display the field
189 =============================================================================
190*/
191
192int16_t rd_loc(int16_t n)
193{
194 if (v_regs[5] & 0x0180)
195 vbank(0);
196
197 vputc(obj8, 4, 8+(n*5), (grploc[n] + 1 + '0'), SDW11ATR);
198
199 return(SUCCESS);
200}
201
202/*
203 =============================================================================
204 ds_loc() -- display all location to group assignments
205 =============================================================================
206*/
207
208void ds_loc(void)
209{
210 register int16_t i;
211
212 for (i = 0; i < 12; i++)
213 rd_loc(i);
214}
215
216/*
217
218*/
219
220/*
221 =============================================================================
222 nd_loc() -- data entry function
223 =============================================================================
224*/
225
226int16_t nd_loc(int16_t n, int16_t k)
227{
228 ebuf[0] = k + '0';
229
230 if (v_regs[5] & 0x0180)
231 vbank(0);
232
233 vputc(obj8, 4, stccol, k + '0', SDW11DEA);
234 advscur();
235
236 return(SUCCESS);
237}
Note: See TracBrowser for help on using the repository browser.