1 // license:BSD-3-Clause
2 // copyright-holders:Alex Pasadyn,Zsolt Vasvari
3 /***************************************************************************
4 
5     TMS34010: Portable Texas Instruments TMS34010 emulator
6 
7     Copyright Alex Pasadyn/Zsolt Vasvari
8     Parts based on code by Aaron Giles
9 
10 ***************************************************************************/
11 
12 
13 
14 /***************************************************************************
15     FIELD WRITE FUNCTIONS
16 ***************************************************************************/
17 
wfield_01(offs_t offset,UINT32 data)18 void tms340x0_device::wfield_01(offs_t offset, UINT32 data)
19 {
20 	WFIELDMAC(0x01,16);
21 }
22 
wfield_02(offs_t offset,UINT32 data)23 void tms340x0_device::wfield_02(offs_t offset, UINT32 data)
24 {
25 	WFIELDMAC(0x03,15);
26 }
27 
wfield_03(offs_t offset,UINT32 data)28 void tms340x0_device::wfield_03(offs_t offset, UINT32 data)
29 {
30 	WFIELDMAC(0x07,14);
31 }
32 
wfield_04(offs_t offset,UINT32 data)33 void tms340x0_device::wfield_04(offs_t offset, UINT32 data)
34 {
35 	WFIELDMAC(0x0f,13);
36 }
37 
wfield_05(offs_t offset,UINT32 data)38 void tms340x0_device::wfield_05(offs_t offset, UINT32 data)
39 {
40 	WFIELDMAC(0x1f,12);
41 }
42 
wfield_06(offs_t offset,UINT32 data)43 void tms340x0_device::wfield_06(offs_t offset, UINT32 data)
44 {
45 	WFIELDMAC(0x3f,11);
46 }
47 
wfield_07(offs_t offset,UINT32 data)48 void tms340x0_device::wfield_07(offs_t offset, UINT32 data)
49 {
50 	WFIELDMAC(0x7f,10);
51 }
52 
wfield_08(offs_t offset,UINT32 data)53 void tms340x0_device::wfield_08(offs_t offset, UINT32 data)
54 {
55 	WFIELDMAC_8();
56 }
57 
wfield_09(offs_t offset,UINT32 data)58 void tms340x0_device::wfield_09(offs_t offset, UINT32 data)
59 {
60 	WFIELDMAC(0x1ff,8);
61 }
62 
wfield_10(offs_t offset,UINT32 data)63 void tms340x0_device::wfield_10(offs_t offset, UINT32 data)
64 {
65 	WFIELDMAC(0x3ff,7);
66 }
67 
wfield_11(offs_t offset,UINT32 data)68 void tms340x0_device::wfield_11(offs_t offset, UINT32 data)
69 {
70 	WFIELDMAC(0x7ff,6);
71 }
72 
wfield_12(offs_t offset,UINT32 data)73 void tms340x0_device::wfield_12(offs_t offset, UINT32 data)
74 {
75 	WFIELDMAC(0xfff,5);
76 }
77 
wfield_13(offs_t offset,UINT32 data)78 void tms340x0_device::wfield_13(offs_t offset, UINT32 data)
79 {
80 	WFIELDMAC(0x1fff,4);
81 }
82 
wfield_14(offs_t offset,UINT32 data)83 void tms340x0_device::wfield_14(offs_t offset, UINT32 data)
84 {
85 	WFIELDMAC(0x3fff,3);
86 }
87 
wfield_15(offs_t offset,UINT32 data)88 void tms340x0_device::wfield_15(offs_t offset, UINT32 data)
89 {
90 	WFIELDMAC(0x7fff,2);
91 }
92 
wfield_16(offs_t offset,UINT32 data)93 void tms340x0_device::wfield_16(offs_t offset, UINT32 data)
94 {
95 	if (offset & 0x0f)
96 	{
97 		WFIELDMAC(0xffff,1);
98 	}
99 	else
100 	{
101 		TMS34010_WRMEM_WORD(TOBYTE(offset),data);
102 	}
103 }
104 
wfield_17(offs_t offset,UINT32 data)105 void tms340x0_device::wfield_17(offs_t offset, UINT32 data)
106 {
107 	WFIELDMAC(0x1ffff,0);
108 }
109 
wfield_18(offs_t offset,UINT32 data)110 void tms340x0_device::wfield_18(offs_t offset, UINT32 data)
111 {
112 	WFIELDMAC_BIG(0x3ffff,15);
113 }
114 
wfield_19(offs_t offset,UINT32 data)115 void tms340x0_device::wfield_19(offs_t offset, UINT32 data)
116 {
117 	WFIELDMAC_BIG(0x7ffff,14);
118 }
119 
wfield_20(offs_t offset,UINT32 data)120 void tms340x0_device::wfield_20(offs_t offset, UINT32 data)
121 {
122 	WFIELDMAC_BIG(0xfffff,13);
123 }
124 
wfield_21(offs_t offset,UINT32 data)125 void tms340x0_device::wfield_21(offs_t offset, UINT32 data)
126 {
127 	WFIELDMAC_BIG(0x1fffff,12);
128 }
129 
wfield_22(offs_t offset,UINT32 data)130 void tms340x0_device::wfield_22(offs_t offset, UINT32 data)
131 {
132 	WFIELDMAC_BIG(0x3fffff,11);
133 }
134 
wfield_23(offs_t offset,UINT32 data)135 void tms340x0_device::wfield_23(offs_t offset, UINT32 data)
136 {
137 	WFIELDMAC_BIG(0x7fffff,10);
138 }
139 
wfield_24(offs_t offset,UINT32 data)140 void tms340x0_device::wfield_24(offs_t offset, UINT32 data)
141 {
142 	WFIELDMAC_BIG(0xffffff,9);
143 }
144 
wfield_25(offs_t offset,UINT32 data)145 void tms340x0_device::wfield_25(offs_t offset, UINT32 data)
146 {
147 	WFIELDMAC_BIG(0x1ffffff,8);
148 }
149 
wfield_26(offs_t offset,UINT32 data)150 void tms340x0_device::wfield_26(offs_t offset, UINT32 data)
151 {
152 	WFIELDMAC_BIG(0x3ffffff,7);
153 }
154 
wfield_27(offs_t offset,UINT32 data)155 void tms340x0_device::wfield_27(offs_t offset, UINT32 data)
156 {
157 	WFIELDMAC_BIG(0x7ffffff,6);
158 }
159 
wfield_28(offs_t offset,UINT32 data)160 void tms340x0_device::wfield_28(offs_t offset, UINT32 data)
161 {
162 	WFIELDMAC_BIG(0xfffffff,5);
163 }
164 
wfield_29(offs_t offset,UINT32 data)165 void tms340x0_device::wfield_29(offs_t offset, UINT32 data)
166 {
167 	WFIELDMAC_BIG(0x1fffffff,4);
168 }
169 
wfield_30(offs_t offset,UINT32 data)170 void tms340x0_device::wfield_30(offs_t offset, UINT32 data)
171 {
172 	WFIELDMAC_BIG(0x3fffffff,3);
173 }
174 
wfield_31(offs_t offset,UINT32 data)175 void tms340x0_device::wfield_31(offs_t offset, UINT32 data)
176 {
177 	WFIELDMAC_BIG(0x7fffffff,2);
178 }
179 
wfield_32(offs_t offset,UINT32 data)180 void tms340x0_device::wfield_32(offs_t offset, UINT32 data)
181 {
182 	WFIELDMAC_32();
183 }
184 
185 
186 const tms340x0_device::wfield_func tms340x0_device::s_wfield_functions[32] =
187 {
188 	&tms340x0_device::wfield_32, &tms340x0_device::wfield_01, &tms340x0_device::wfield_02, &tms340x0_device::wfield_03, &tms340x0_device::wfield_04, &tms340x0_device::wfield_05,
189 	&tms340x0_device::wfield_06, &tms340x0_device::wfield_07, &tms340x0_device::wfield_08, &tms340x0_device::wfield_09, &tms340x0_device::wfield_10, &tms340x0_device::wfield_11,
190 	&tms340x0_device::wfield_12, &tms340x0_device::wfield_13, &tms340x0_device::wfield_14, &tms340x0_device::wfield_15, &tms340x0_device::wfield_16, &tms340x0_device::wfield_17,
191 	&tms340x0_device::wfield_18, &tms340x0_device::wfield_19, &tms340x0_device::wfield_20, &tms340x0_device::wfield_21, &tms340x0_device::wfield_22, &tms340x0_device::wfield_23,
192 	&tms340x0_device::wfield_24, &tms340x0_device::wfield_25, &tms340x0_device::wfield_26, &tms340x0_device::wfield_27, &tms340x0_device::wfield_28, &tms340x0_device::wfield_29,
193 	&tms340x0_device::wfield_30, &tms340x0_device::wfield_31
194 };
195 
196 
197 
198 /***************************************************************************
199     FIELD READ FUNCTIONS (ZERO-EXTEND)
200 ***************************************************************************/
201 
rfield_z_01(offs_t offset)202 UINT32 tms340x0_device::rfield_z_01(offs_t offset)
203 {
204 	UINT32 ret;
205 	RFIELDMAC(0x01,16);
206 	return ret;
207 }
208 
rfield_z_02(offs_t offset)209 UINT32 tms340x0_device::rfield_z_02(offs_t offset)
210 {
211 	UINT32 ret;
212 	RFIELDMAC(0x03,15);
213 	return ret;
214 }
215 
rfield_z_03(offs_t offset)216 UINT32 tms340x0_device::rfield_z_03(offs_t offset)
217 {
218 	UINT32 ret;
219 	RFIELDMAC(0x07,14);
220 	return ret;
221 }
222 
rfield_z_04(offs_t offset)223 UINT32 tms340x0_device::rfield_z_04(offs_t offset)
224 {
225 	UINT32 ret;
226 	RFIELDMAC(0x0f,13);
227 	return ret;
228 }
229 
rfield_z_05(offs_t offset)230 UINT32 tms340x0_device::rfield_z_05(offs_t offset)
231 {
232 	UINT32 ret;
233 	RFIELDMAC(0x1f,12);
234 	return ret;
235 }
236 
rfield_z_06(offs_t offset)237 UINT32 tms340x0_device::rfield_z_06(offs_t offset)
238 {
239 	UINT32 ret;
240 	RFIELDMAC(0x3f,11);
241 	return ret;
242 }
243 
rfield_z_07(offs_t offset)244 UINT32 tms340x0_device::rfield_z_07(offs_t offset)
245 {
246 	UINT32 ret;
247 	RFIELDMAC(0x7f,10);
248 	return ret;
249 }
250 
rfield_z_08(offs_t offset)251 UINT32 tms340x0_device::rfield_z_08(offs_t offset)
252 {
253 	UINT32 ret;
254 	RFIELDMAC_8();
255 	return ret;
256 }
257 
rfield_z_09(offs_t offset)258 UINT32 tms340x0_device::rfield_z_09(offs_t offset)
259 {
260 	UINT32 ret;
261 	RFIELDMAC(0x1ff,8);
262 	return ret;
263 }
264 
rfield_z_10(offs_t offset)265 UINT32 tms340x0_device::rfield_z_10(offs_t offset)
266 {
267 	UINT32 ret;
268 	RFIELDMAC(0x3ff,7);
269 	return ret;
270 }
271 
rfield_z_11(offs_t offset)272 UINT32 tms340x0_device::rfield_z_11(offs_t offset)
273 {
274 	UINT32 ret;
275 	RFIELDMAC(0x7ff,6);
276 	return ret;
277 }
278 
rfield_z_12(offs_t offset)279 UINT32 tms340x0_device::rfield_z_12(offs_t offset)
280 {
281 	UINT32 ret;
282 	RFIELDMAC(0xfff,5);
283 	return ret;
284 }
285 
rfield_z_13(offs_t offset)286 UINT32 tms340x0_device::rfield_z_13(offs_t offset)
287 {
288 	UINT32 ret;
289 	RFIELDMAC(0x1fff,4);
290 	return ret;
291 }
292 
rfield_z_14(offs_t offset)293 UINT32 tms340x0_device::rfield_z_14(offs_t offset)
294 {
295 	UINT32 ret;
296 	RFIELDMAC(0x3fff,3);
297 	return ret;
298 }
299 
rfield_z_15(offs_t offset)300 UINT32 tms340x0_device::rfield_z_15(offs_t offset)
301 {
302 	UINT32 ret;
303 	RFIELDMAC(0x7fff,2);
304 	return ret;
305 }
306 
rfield_z_16(offs_t offset)307 UINT32 tms340x0_device::rfield_z_16(offs_t offset)
308 {
309 	UINT32 ret;
310 	if (offset & 0x0f)
311 	{
312 		RFIELDMAC(0xffff,1);
313 	}
314 
315 	else
316 		ret = TMS34010_RDMEM_WORD(TOBYTE(offset));
317 	return ret;
318 }
319 
rfield_z_17(offs_t offset)320 UINT32 tms340x0_device::rfield_z_17(offs_t offset)
321 {
322 	UINT32 ret;
323 	RFIELDMAC(0x1ffff,0);
324 	return ret;
325 }
326 
rfield_z_18(offs_t offset)327 UINT32 tms340x0_device::rfield_z_18(offs_t offset)
328 {
329 	UINT32 ret;
330 	RFIELDMAC_BIG(0x3ffff,15);
331 	return ret;
332 }
333 
rfield_z_19(offs_t offset)334 UINT32 tms340x0_device::rfield_z_19(offs_t offset)
335 {
336 	UINT32 ret;
337 	RFIELDMAC_BIG(0x7ffff,14);
338 	return ret;
339 }
340 
rfield_z_20(offs_t offset)341 UINT32 tms340x0_device::rfield_z_20(offs_t offset)
342 {
343 	UINT32 ret;
344 	RFIELDMAC_BIG(0xfffff,13);
345 	return ret;
346 }
347 
rfield_z_21(offs_t offset)348 UINT32 tms340x0_device::rfield_z_21(offs_t offset)
349 {
350 	UINT32 ret;
351 	RFIELDMAC_BIG(0x1fffff,12);
352 	return ret;
353 }
354 
rfield_z_22(offs_t offset)355 UINT32 tms340x0_device::rfield_z_22(offs_t offset)
356 {
357 	UINT32 ret;
358 	RFIELDMAC_BIG(0x3fffff,11);
359 	return ret;
360 }
361 
rfield_z_23(offs_t offset)362 UINT32 tms340x0_device::rfield_z_23(offs_t offset)
363 {
364 	UINT32 ret;
365 	RFIELDMAC_BIG(0x7fffff,10);
366 	return ret;
367 }
368 
rfield_z_24(offs_t offset)369 UINT32 tms340x0_device::rfield_z_24(offs_t offset)
370 {
371 	UINT32 ret;
372 	RFIELDMAC_BIG(0xffffff,9);
373 	return ret;
374 }
375 
rfield_z_25(offs_t offset)376 UINT32 tms340x0_device::rfield_z_25(offs_t offset)
377 {
378 	UINT32 ret;
379 	RFIELDMAC_BIG(0x1ffffff,8);
380 	return ret;
381 }
382 
rfield_z_26(offs_t offset)383 UINT32 tms340x0_device::rfield_z_26(offs_t offset)
384 {
385 	UINT32 ret;
386 	RFIELDMAC_BIG(0x3ffffff,7);
387 	return ret;
388 }
389 
rfield_z_27(offs_t offset)390 UINT32 tms340x0_device::rfield_z_27(offs_t offset)
391 {
392 	UINT32 ret;
393 	RFIELDMAC_BIG(0x7ffffff,6);
394 	return ret;
395 }
396 
rfield_z_28(offs_t offset)397 UINT32 tms340x0_device::rfield_z_28(offs_t offset)
398 {
399 	UINT32 ret;
400 	RFIELDMAC_BIG(0xfffffff,5);
401 	return ret;
402 }
403 
rfield_z_29(offs_t offset)404 UINT32 tms340x0_device::rfield_z_29(offs_t offset)
405 {
406 	UINT32 ret;
407 	RFIELDMAC_BIG(0x1fffffff,4);
408 	return ret;
409 }
410 
rfield_z_30(offs_t offset)411 UINT32 tms340x0_device::rfield_z_30(offs_t offset)
412 {
413 	UINT32 ret;
414 	RFIELDMAC_BIG(0x3fffffff,3);
415 	return ret;
416 }
417 
rfield_z_31(offs_t offset)418 UINT32 tms340x0_device::rfield_z_31(offs_t offset)
419 {
420 	UINT32 ret;
421 	RFIELDMAC_BIG(0x7fffffff,2);
422 	return ret;
423 }
424 
rfield_32(offs_t offset)425 UINT32 tms340x0_device::rfield_32(offs_t offset)
426 {
427 	RFIELDMAC_32();
428 }
429 
430 
431 /***************************************************************************
432     FIELD READ FUNCTIONS (SIGN-EXTEND)
433 ***************************************************************************/
434 
rfield_s_01(offs_t offset)435 UINT32 tms340x0_device::rfield_s_01(offs_t offset)
436 {
437 	UINT32 ret;
438 	RFIELDMAC(0x01,16);
439 	return ((INT32)(ret << 31)) >> 31;
440 }
441 
rfield_s_02(offs_t offset)442 UINT32 tms340x0_device::rfield_s_02(offs_t offset)
443 {
444 	UINT32 ret;
445 	RFIELDMAC(0x03,15);
446 	return ((INT32)(ret << 30)) >> 30;
447 }
448 
rfield_s_03(offs_t offset)449 UINT32 tms340x0_device::rfield_s_03(offs_t offset)
450 {
451 	UINT32 ret;
452 	RFIELDMAC(0x07,14);
453 	return ((INT32)(ret << 29)) >> 29;
454 }
455 
rfield_s_04(offs_t offset)456 UINT32 tms340x0_device::rfield_s_04(offs_t offset)
457 {
458 	UINT32 ret;
459 	RFIELDMAC(0x0f,13);
460 	return ((INT32)(ret << 28)) >> 28;
461 }
462 
rfield_s_05(offs_t offset)463 UINT32 tms340x0_device::rfield_s_05(offs_t offset)
464 {
465 	UINT32 ret;
466 	RFIELDMAC(0x1f,12);
467 	return ((INT32)(ret << 27)) >> 27;
468 }
469 
rfield_s_06(offs_t offset)470 UINT32 tms340x0_device::rfield_s_06(offs_t offset)
471 {
472 	UINT32 ret;
473 	RFIELDMAC(0x3f,11);
474 	return ((INT32)(ret << 26)) >> 26;
475 }
476 
rfield_s_07(offs_t offset)477 UINT32 tms340x0_device::rfield_s_07(offs_t offset)
478 {
479 	UINT32 ret;
480 	RFIELDMAC(0x7f,10);
481 	return ((INT32)(ret << 25)) >> 25;
482 }
483 
rfield_s_08(offs_t offset)484 UINT32 tms340x0_device::rfield_s_08(offs_t offset)
485 {
486 	UINT32 ret;
487 	if (offset & 0x07)
488 	{
489 		RFIELDMAC(0xff,9);
490 	}
491 
492 	else
493 		ret = TMS34010_RDMEM(TOBYTE(offset));
494 	return (INT32)(INT8)ret;
495 }
496 
rfield_s_09(offs_t offset)497 UINT32 tms340x0_device::rfield_s_09(offs_t offset)
498 {
499 	UINT32 ret;
500 	RFIELDMAC(0x1ff,8);
501 	return ((INT32)(ret << 23)) >> 23;
502 }
503 
rfield_s_10(offs_t offset)504 UINT32 tms340x0_device::rfield_s_10(offs_t offset)
505 {
506 	UINT32 ret;
507 	RFIELDMAC(0x3ff,7);
508 	return ((INT32)(ret << 22)) >> 22;
509 }
510 
rfield_s_11(offs_t offset)511 UINT32 tms340x0_device::rfield_s_11(offs_t offset)
512 {
513 	UINT32 ret;
514 	RFIELDMAC(0x7ff,6);
515 	return ((INT32)(ret << 21)) >> 21;
516 }
517 
rfield_s_12(offs_t offset)518 UINT32 tms340x0_device::rfield_s_12(offs_t offset)
519 {
520 	UINT32 ret;
521 	RFIELDMAC(0xfff,5);
522 	return ((INT32)(ret << 20)) >> 20;
523 }
524 
rfield_s_13(offs_t offset)525 UINT32 tms340x0_device::rfield_s_13(offs_t offset)
526 {
527 	UINT32 ret;
528 	RFIELDMAC(0x1fff,4);
529 	return ((INT32)(ret << 19)) >> 19;
530 }
531 
rfield_s_14(offs_t offset)532 UINT32 tms340x0_device::rfield_s_14(offs_t offset)
533 {
534 	UINT32 ret;
535 	RFIELDMAC(0x3fff,3);
536 	return ((INT32)(ret << 18)) >> 18;
537 }
538 
rfield_s_15(offs_t offset)539 UINT32 tms340x0_device::rfield_s_15(offs_t offset)
540 {
541 	UINT32 ret;
542 	RFIELDMAC(0x7fff,2);
543 	return ((INT32)(ret << 17)) >> 17;
544 }
545 
rfield_s_16(offs_t offset)546 UINT32 tms340x0_device::rfield_s_16(offs_t offset)
547 {
548 	UINT32 ret;
549 	if (offset & 0x0f)
550 	{
551 		RFIELDMAC(0xffff,1);
552 	}
553 
554 	else
555 	{
556 		ret = TMS34010_RDMEM_WORD(TOBYTE(offset));
557 	}
558 
559 	return (INT32)(INT16)ret;
560 }
561 
rfield_s_17(offs_t offset)562 UINT32 tms340x0_device::rfield_s_17(offs_t offset)
563 {
564 	UINT32 ret;
565 	RFIELDMAC(0x1ffff,0);
566 	return ((INT32)(ret << 15)) >> 15;
567 }
568 
rfield_s_18(offs_t offset)569 UINT32 tms340x0_device::rfield_s_18(offs_t offset)
570 {
571 	UINT32 ret;
572 	RFIELDMAC_BIG(0x3ffff,15);
573 	return ((INT32)(ret << 14)) >> 14;
574 }
575 
rfield_s_19(offs_t offset)576 UINT32 tms340x0_device::rfield_s_19(offs_t offset)
577 {
578 	UINT32 ret;
579 	RFIELDMAC_BIG(0x7ffff,14);
580 	return ((INT32)(ret << 13)) >> 13;
581 }
582 
rfield_s_20(offs_t offset)583 UINT32 tms340x0_device::rfield_s_20(offs_t offset)
584 {
585 	UINT32 ret;
586 	RFIELDMAC_BIG(0xfffff,13);
587 	return ((INT32)(ret << 12)) >> 12;
588 }
589 
rfield_s_21(offs_t offset)590 UINT32 tms340x0_device::rfield_s_21(offs_t offset)
591 {
592 	UINT32 ret;
593 	RFIELDMAC_BIG(0x1fffff,12);
594 	return ((INT32)(ret << 11)) >> 11;
595 }
596 
rfield_s_22(offs_t offset)597 UINT32 tms340x0_device::rfield_s_22(offs_t offset)
598 {
599 	UINT32 ret;
600 	RFIELDMAC_BIG(0x3fffff,11);
601 	return ((INT32)(ret << 10)) >> 10;
602 }
603 
rfield_s_23(offs_t offset)604 UINT32 tms340x0_device::rfield_s_23(offs_t offset)
605 {
606 	UINT32 ret;
607 	RFIELDMAC_BIG(0x7fffff,10);
608 	return ((INT32)(ret << 9)) >> 9;
609 }
610 
rfield_s_24(offs_t offset)611 UINT32 tms340x0_device::rfield_s_24(offs_t offset)
612 {
613 	UINT32 ret;
614 	RFIELDMAC_BIG(0xffffff,9);
615 	return ((INT32)(ret << 8)) >> 8;
616 }
617 
rfield_s_25(offs_t offset)618 UINT32 tms340x0_device::rfield_s_25(offs_t offset)
619 {
620 	UINT32 ret;
621 	RFIELDMAC_BIG(0x1ffffff,8);
622 	return ((INT32)(ret << 7)) >> 7;
623 }
624 
rfield_s_26(offs_t offset)625 UINT32 tms340x0_device::rfield_s_26(offs_t offset)
626 {
627 	UINT32 ret;
628 	RFIELDMAC_BIG(0x3ffffff,7);
629 	return ((INT32)(ret << 6)) >> 6;
630 }
631 
rfield_s_27(offs_t offset)632 UINT32 tms340x0_device::rfield_s_27(offs_t offset)
633 {
634 	UINT32 ret;
635 	RFIELDMAC_BIG(0x7ffffff,6);
636 	return ((INT32)(ret << 5)) >> 5;
637 }
638 
rfield_s_28(offs_t offset)639 UINT32 tms340x0_device::rfield_s_28(offs_t offset)
640 {
641 	UINT32 ret;
642 	RFIELDMAC_BIG(0xfffffff,5);
643 	return ((INT32)(ret << 4)) >> 4;
644 }
645 
rfield_s_29(offs_t offset)646 UINT32 tms340x0_device::rfield_s_29(offs_t offset)
647 {
648 	UINT32 ret;
649 	RFIELDMAC_BIG(0x1fffffff,4);
650 	return ((INT32)(ret << 3)) >> 3;
651 }
652 
rfield_s_30(offs_t offset)653 UINT32 tms340x0_device::rfield_s_30(offs_t offset)
654 {
655 	UINT32 ret;
656 	RFIELDMAC_BIG(0x3fffffff,3);
657 	return ((INT32)(ret << 2)) >> 2;
658 }
659 
rfield_s_31(offs_t offset)660 UINT32 tms340x0_device::rfield_s_31(offs_t offset)
661 {
662 	UINT32 ret;
663 	RFIELDMAC_BIG(0x7fffffff,2);
664 	return ((INT32)(ret << 1)) >> 1;
665 }
666 
667 const tms340x0_device::rfield_func tms340x0_device::s_rfield_functions[64] =
668 {
669 	&tms340x0_device::rfield_32  , &tms340x0_device::rfield_z_01, &tms340x0_device::rfield_z_02, &tms340x0_device::rfield_z_03, &tms340x0_device::rfield_z_04, &tms340x0_device::rfield_z_05,
670 	&tms340x0_device::rfield_z_06, &tms340x0_device::rfield_z_07, &tms340x0_device::rfield_z_08, &tms340x0_device::rfield_z_09, &tms340x0_device::rfield_z_10, &tms340x0_device::rfield_z_11,
671 	&tms340x0_device::rfield_z_12, &tms340x0_device::rfield_z_13, &tms340x0_device::rfield_z_14, &tms340x0_device::rfield_z_15, &tms340x0_device::rfield_z_16, &tms340x0_device::rfield_z_17,
672 	&tms340x0_device::rfield_z_18, &tms340x0_device::rfield_z_19, &tms340x0_device::rfield_z_20, &tms340x0_device::rfield_z_21, &tms340x0_device::rfield_z_22, &tms340x0_device::rfield_z_23,
673 	&tms340x0_device::rfield_z_24, &tms340x0_device::rfield_z_25, &tms340x0_device::rfield_z_26, &tms340x0_device::rfield_z_27, &tms340x0_device::rfield_z_28, &tms340x0_device::rfield_z_29,
674 	&tms340x0_device::rfield_z_30, &tms340x0_device::rfield_z_31,
675 	&tms340x0_device::rfield_32  , &tms340x0_device::rfield_s_01, &tms340x0_device::rfield_s_02, &tms340x0_device::rfield_s_03, &tms340x0_device::rfield_s_04, &tms340x0_device::rfield_s_05,
676 	&tms340x0_device::rfield_s_06, &tms340x0_device::rfield_s_07, &tms340x0_device::rfield_s_08, &tms340x0_device::rfield_s_09, &tms340x0_device::rfield_s_10, &tms340x0_device::rfield_s_11,
677 	&tms340x0_device::rfield_s_12, &tms340x0_device::rfield_s_13, &tms340x0_device::rfield_s_14, &tms340x0_device::rfield_s_15, &tms340x0_device::rfield_s_16, &tms340x0_device::rfield_s_17,
678 	&tms340x0_device::rfield_s_18, &tms340x0_device::rfield_s_19, &tms340x0_device::rfield_s_20, &tms340x0_device::rfield_s_21, &tms340x0_device::rfield_s_22, &tms340x0_device::rfield_s_23,
679 	&tms340x0_device::rfield_s_24, &tms340x0_device::rfield_s_25, &tms340x0_device::rfield_s_26, &tms340x0_device::rfield_s_27, &tms340x0_device::rfield_s_28, &tms340x0_device::rfield_s_29,
680 	&tms340x0_device::rfield_s_30, &tms340x0_device::rfield_s_31
681 };
682