Previous 199869 Revisions Next

r26841 Tuesday 31st December, 2013 at 16:05:21 UTC by Wilbert Pol
tms32051.c: Modernized cpu core.  [Wilbert Pol]
[src/emu/cpu/tms32051]32051ops.c 32051ops.h tms32051.c tms32051.h

trunk/src/emu/cpu/tms32051/tms32051.h
r26840r26841
33#ifndef __TMS32051_H__
44#define __TMS32051_H__
55
6DECLARE_LEGACY_CPU_DEVICE(TMS32051, tms32051);
76
8CPU_DISASSEMBLE( tms32051 );
7struct TMS32051_PMST
8{
9   UINT16 iptr;
10   UINT16 avis;
11   UINT16 ovly;
12   UINT16 ram;
13   UINT16 mpmc;
14   UINT16 ndx;
15   UINT16 trm;
16   UINT16 braf;
17};
918
19struct TMS32051_ST0
20{
21   UINT16 dp;
22   UINT16 intm;
23   UINT16 ovm;
24   UINT16 ov;
25   UINT16 arp;
26};
27
28struct TMS32051_ST1
29{
30   UINT16 arb;
31   UINT16 cnf;
32   UINT16 tc;
33   UINT16 sxm;
34   UINT16 c;
35   UINT16 hm;
36   UINT16 xf;
37   UINT16 pm;
38};
39
40
41class tms32051_device : public cpu_device
42{
43public:
44   // construction/destruction
45   tms32051_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
46
47   DECLARE_READ16_MEMBER( cpuregs_r );
48   DECLARE_WRITE16_MEMBER( cpuregs_w );
49
50protected:
51   // device-level overrides
52   virtual void device_start();
53   virtual void device_reset();
54
55   // device_execute_interface overrides
56   virtual UINT32 execute_min_cycles() const { return 1; }
57   virtual UINT32 execute_max_cycles() const { return 5; }
58   virtual UINT32 execute_input_lines() const { return 6; }
59   virtual void execute_run();
60   virtual void execute_set_input(int inputnum, int state);
61
62   // device_memory_interface overrides
63   virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_DATA) ? &m_data_config : NULL ); }
64    virtual bool memory_read(address_spacenum spacenum, offs_t offset, int size, UINT64 &value);
65
66   // device_disasm_interface overrides
67   virtual UINT32 disasm_min_opcode_bytes() const { return 2; }
68   virtual UINT32 disasm_max_opcode_bytes() const { return 4; }
69   virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
70
71private:
72   address_space_config m_program_config;
73   address_space_config m_data_config;
74
75   typedef void ( tms32051_device::*opcode_func )();
76   static const opcode_func s_opcode_table[256];
77   static const opcode_func s_opcode_table_be[256];
78   static const opcode_func s_opcode_table_bf[256];
79
80   UINT16 m_pc;
81   UINT16 m_op;
82   INT32 m_acc;
83   INT32 m_accb;
84   INT32 m_preg;
85   UINT16 m_treg0;
86   UINT16 m_treg1;
87   UINT16 m_treg2;
88   UINT16 m_ar[8];
89   INT32 m_rptc;
90
91   UINT16 m_bmar;
92   INT32 m_brcr;
93   UINT16 m_paer;
94   UINT16 m_pasr;
95   UINT16 m_indx;
96   UINT16 m_dbmr;
97   UINT16 m_arcr;
98
99   TMS32051_ST0 m_st0;
100   TMS32051_ST1 m_st1;
101   TMS32051_PMST m_pmst;
102
103   UINT16 m_ifr;
104   UINT16 m_imr;
105
106   UINT16 m_pcstack[8];
107   int m_pcstack_ptr;
108
109   UINT16 m_rpt_start, m_rpt_end;
110
111   UINT16 m_cbcr;
112   UINT16 m_cbsr1;
113   UINT16 m_cber1;
114   UINT16 m_cbsr2;
115   UINT16 m_cber2;
116
117   struct
118   {
119      int tddr;
120      int psc;
121      UINT16 tim;
122      UINT16 prd;
123   } m_timer;
124
125   struct
126   {
127      INT32 acc;
128      INT32 accb;
129      UINT16 arcr;
130      UINT16 indx;
131      TMS32051_PMST pmst;
132      INT32 preg;
133      TMS32051_ST0 st0;
134      TMS32051_ST1 st1;
135      INT32 treg0;
136      INT32 treg1;
137      INT32 treg2;
138   } m_shadow;
139
140   address_space *m_program;
141   direct_read_data *m_direct;
142   address_space *m_data;
143   int m_icount;
144
145   inline void CHANGE_PC(UINT16 new_pc);
146   inline UINT16 PM_READ16(UINT16 address);
147   inline void PM_WRITE16(UINT16 address, UINT16 data);
148   inline UINT16 DM_READ16(UINT16 address);
149   inline void DM_WRITE16(UINT16 address, UINT16 data);
150   inline void PUSH_STACK(UINT16 pc);
151   inline UINT16 POP_STACK();
152   inline INT32 SUB(UINT32 a, UINT32 b);
153   inline INT32 ADD(UINT32 a, UINT32 b);
154   inline void UPDATE_AR(int ar, int step);
155   inline void UPDATE_ARP(int nar);
156   UINT16 GET_ADDRESS();
157   inline int GET_ZLVC_CONDITION(int zlvc, int zlvc_mask);
158   inline int GET_TP_CONDITION(int tp);
159   inline INT32 PREG_PSCALER(INT32 preg);
160   void op_invalid();
161   void op_abs();
162   void op_adcb();
163   void op_add_mem();
164   void op_add_simm();
165   void op_add_limm();
166   void op_add_s16_mem();
167   void op_addb();
168   void op_addc();
169   void op_adds();
170   void op_addt();
171   void op_and_mem();
172   void op_and_limm();
173   void op_and_s16_limm();
174   void op_andb();
175   void op_bsar();
176   void op_cmpl();
177   void op_crgt();
178   void op_crlt();
179   void op_exar();
180   void op_lacb();
181   void op_lacc_mem();
182   void op_lacc_limm();
183   void op_lacc_s16_mem();
184   void op_lacl_simm();
185   void op_lacl_mem();
186   void op_lact();
187   void op_lamm();
188   void op_neg();
189   void op_norm();
190   void op_or_mem();
191   void op_or_limm();
192   void op_or_s16_limm();
193   void op_orb();
194   void op_rol();
195   void op_rolb();
196   void op_ror();
197   void op_rorb();
198   void op_sacb();
199   void op_sach();
200   void op_sacl();
201   void op_samm();
202   void op_sath();
203   void op_satl();
204   void op_sbb();
205   void op_sbbb();
206   void op_sfl();
207   void op_sflb();
208   void op_sfr();
209   void op_sfrb();
210   void op_sub_mem();
211   void op_sub_s16_mem();
212   void op_sub_simm();
213   void op_sub_limm();
214   void op_subb();
215   void op_subc();
216   void op_subs();
217   void op_subt();
218   void op_xor_mem();
219   void op_xor_limm();
220   void op_xor_s16_limm();
221   void op_xorb();
222   void op_zalr();
223   void op_zap();
224   void op_adrk();
225   void op_cmpr();
226   void op_lar_mem();
227   void op_lar_simm();
228   void op_lar_limm();
229   void op_ldp_mem();
230   void op_ldp_imm();
231   void op_mar();
232   void op_sar();
233   void op_sbrk();
234   void op_b();
235   void op_bacc();
236   void op_baccd();
237   void op_banz();
238   void op_banzd();
239   void op_bcnd();
240   void op_bcndd();
241   void op_bd();
242   void op_cala();
243   void op_calad();
244   void op_call();
245   void op_calld();
246   void op_cc();
247   void op_ccd();
248   void op_intr();
249   void op_nmi();
250   void op_retc();
251   void op_retcd();
252   void op_rete();
253   void op_reti();
254   void op_trap();
255   void op_xc();
256   void op_bldd_slimm();
257   void op_bldd_dlimm();
258   void op_bldd_sbmar();
259   void op_bldd_dbmar();
260   void op_bldp();
261   void op_blpd_bmar();
262   void op_blpd_imm();
263   void op_dmov();
264   void op_in();
265   void op_lmmr();
266   void op_out();
267   void op_smmr();
268   void op_tblr();
269   void op_tblw();
270   void op_apl_dbmr();
271   void op_apl_imm();
272   void op_cpl_dbmr();
273   void op_cpl_imm();
274   void op_opl_dbmr();
275   void op_opl_imm();
276   void op_splk();
277   void op_xpl_dbmr();
278   void op_xpl_imm();
279   void op_apac();
280   void op_lph();
281   void op_lt();
282   void op_lta();
283   void op_ltd();
284   void op_ltp();
285   void op_lts();
286   void op_mac();
287   void op_macd();
288   void op_madd();
289   void op_mads();
290   void op_mpy_mem();
291   void op_mpy_simm();
292   void op_mpy_limm();
293   void op_mpya();
294   void op_mpys();
295   void op_mpyu();
296   void op_pac();
297   void op_spac();
298   void op_sph();
299   void op_spl();
300   void op_spm();
301   void op_sqra();
302   void op_sqrs();
303   void op_zpr();
304   void op_bit();
305   void op_bitt();
306   void op_clrc_ov();
307   void op_clrc_ext();
308   void op_clrc_hold();
309   void op_clrc_tc();
310   void op_clrc_carry();
311   void op_clrc_cnf();
312   void op_clrc_intm();
313   void op_clrc_xf();
314   void op_idle();
315   void op_idle2();
316   void op_lst_st0();
317   void op_lst_st1();
318   void op_pop();
319   void op_popd();
320   void op_pshd();
321   void op_push();
322   void op_rpt_mem();
323   void op_rpt_limm();
324   void op_rpt_simm();
325   void op_rptb();
326   void op_rptz();
327   void op_setc_ov();
328   void op_setc_ext();
329   void op_setc_hold();
330   void op_setc_tc();
331   void op_setc_carry();
332   void op_setc_xf();
333   void op_setc_cnf();
334   void op_setc_intm();
335   void op_sst_st0();
336   void op_sst_st1();
337   void op_group_be();
338   void op_group_bf();
339   void delay_slot(UINT16 startpc);
340   void check_interrupts();
341   void save_interrupt_context();
342   void restore_interrupt_context();
343};
344
345
346extern const device_type TMS32051;
347
348
10349#endif /* __TMS32051_H__ */
trunk/src/emu/cpu/tms32051/32051ops.c
r26840r26841
11// stack is LIFO and is 8 levels deep, there is no stackpointer on the real chip
2INLINE void PUSH_STACK(tms32051_state *cpustate, UINT16 pc)
2void tms32051_device::PUSH_STACK(UINT16 pc)
33{
4   cpustate->pcstack_ptr = (cpustate->pcstack_ptr - 1) & 7;
5   cpustate->pcstack[cpustate->pcstack_ptr] = pc;
4   m_pcstack_ptr = (m_pcstack_ptr - 1) & 7;
5   m_pcstack[m_pcstack_ptr] = pc;
66}
77
8INLINE UINT16 POP_STACK(tms32051_state *cpustate)
8UINT16 tms32051_device::POP_STACK()
99{
10   UINT16 pc = cpustate->pcstack[cpustate->pcstack_ptr];
11   cpustate->pcstack_ptr = (cpustate->pcstack_ptr + 1) & 7;
12   cpustate->pcstack[(cpustate->pcstack_ptr + 7) & 7] = cpustate->pcstack[(cpustate->pcstack_ptr + 6) & 7];
10   UINT16 pc = m_pcstack[m_pcstack_ptr];
11   m_pcstack_ptr = (m_pcstack_ptr + 1) & 7;
12   m_pcstack[(m_pcstack_ptr + 7) & 7] = m_pcstack[(m_pcstack_ptr + 6) & 7];
1313   return pc;
1414}
1515
16INLINE INT32 SUB(tms32051_state *cpustate, UINT32 a, UINT32 b)
16INT32 tms32051_device::SUB(UINT32 a, UINT32 b)
1717{
1818   UINT32 res = a - b;
1919
2020   // C is cleared if borrow was generated
21   cpustate->st1.c = (b > a) ? 0 : 1;
21   m_st1.c = (b > a) ? 0 : 1;
2222
2323   // check overflow
2424   if ((a ^ b) & (a ^ res) & 0x80000000)
2525   {
26      if (cpustate->st0.ovm)  // overflow saturation mode
26      if (m_st0.ovm)  // overflow saturation mode
2727      {
2828         res = ((INT32)(res) < 0) ? 0x7fffffff : 0x80000000;
2929      }
3030
3131      // set OV, this is a sticky flag
32      cpustate->st0.ov = 1;
32      m_st0.ov = 1;
3333   }
3434
3535   return (INT32)(res);
3636}
3737
38INLINE INT32 ADD(tms32051_state *cpustate, UINT32 a, UINT32 b)
38INT32 tms32051_device::ADD(UINT32 a, UINT32 b)
3939{
4040   UINT32 res = a + b;
4141
4242   // C is set if carry was generated
43   cpustate->st1.c = (a > res) ? 1 : 0;
43   m_st1.c = (a > res) ? 1 : 0;
4444
4545   // check overflow
4646   if ((a ^ res) & (b ^ res) & 0x80000000)
4747   {
48      if (cpustate->st0.ovm)  // overflow saturation mode
48      if (m_st0.ovm)  // overflow saturation mode
4949      {
5050         res = ((INT32)(res) < 0) ? 0x7fffffff : 0x80000000;
5151      }
5252
5353      // set OV, this is a sticky flag
54      cpustate->st0.ov = 1;
54      m_st0.ov = 1;
5555   }
5656
5757   return (INT32)(res);
5858}
5959
6060
61INLINE void UPDATE_AR(tms32051_state *cpustate, int ar, int step)
61void tms32051_device::UPDATE_AR(int ar, int step)
6262{
63   int cenb1 = (cpustate->cbcr >> 3) & 0x1;
64   int car1 = cpustate->cbcr & 0x7;
65   int cenb2 = (cpustate->cbcr >> 7) & 0x1;
66   int car2 = (cpustate->cbcr >> 4) & 0x7;
63   int cenb1 = (m_cbcr >> 3) & 0x1;
64   int car1 = m_cbcr & 0x7;
65   int cenb2 = (m_cbcr >> 7) & 0x1;
66   int car2 = (m_cbcr >> 4) & 0x7;
6767
6868   if (cenb1 && ar == car1)
6969   {
7070      // update circular buffer 1, note that it only checks ==
71      if (cpustate->ar[ar] == cpustate->cber1)
71      if (m_ar[ar] == m_cber1)
7272      {
73         cpustate->ar[ar] = cpustate->cbsr1;
73         m_ar[ar] = m_cbsr1;
7474      }
7575      else
7676      {
77         cpustate->ar[ar] += step;
77         m_ar[ar] += step;
7878      }
7979   }
8080   else if (cenb2 && ar == car2)
8181   {
8282      // update circular buffer 2, note that it only checks ==
83      if (cpustate->ar[ar] == cpustate->cber2)
83      if (m_ar[ar] == m_cber2)
8484      {
85         cpustate->ar[ar] = cpustate->cbsr2;
85         m_ar[ar] = m_cbsr2;
8686      }
8787      else
8888      {
89         cpustate->ar[ar] += step;
89         m_ar[ar] += step;
9090      }
9191   }
9292   else
9393   {
94      cpustate->ar[ar] += step;
94      m_ar[ar] += step;
9595   }
9696}
9797
98INLINE void UPDATE_ARP(tms32051_state *cpustate, int nar)
98void tms32051_device::UPDATE_ARP(int nar)
9999{
100   cpustate->st1.arb = cpustate->st0.arp;
101   cpustate->st0.arp = nar;
100   m_st1.arb = m_st0.arp;
101   m_st0.arp = nar;
102102}
103103
104static UINT16 GET_ADDRESS(tms32051_state *cpustate)
104UINT16 tms32051_device::GET_ADDRESS()
105105{
106   if (cpustate->op & 0x80)        // Indirect Addressing
106   if (m_op & 0x80)        // Indirect Addressing
107107   {
108108      UINT16 ea;
109      int arp = cpustate->st0.arp;
110      int nar = cpustate->op & 0x7;
109      int arp = m_st0.arp;
110      int nar = m_op & 0x7;
111111
112      ea = cpustate->ar[arp];
112      ea = m_ar[arp];
113113
114      switch ((cpustate->op >> 3) & 0xf)
114      switch ((m_op >> 3) & 0xf)
115115      {
116116         case 0x0:   // *            (no operation)
117117         {
r26840r26841
119119         }
120120         case 0x1:   // *, ARn       (NAR -> ARP)
121121         {
122            UPDATE_ARP(cpustate, nar);
122            UPDATE_ARP(nar);
123123            break;
124124         }
125125         case 0x2:   // *-           ((CurrentAR)-1 -> CurrentAR)
126126         {
127            UPDATE_AR(cpustate, arp, -1);
127            UPDATE_AR(arp, -1);
128128            break;
129129         }
130130         case 0x3:   // *-, ARn      ((CurrentAR)-1 -> CurrentAR, NAR -> ARP)
131131         {
132            UPDATE_AR(cpustate, arp, -1);
133            UPDATE_ARP(cpustate, nar);
132            UPDATE_AR(arp, -1);
133            UPDATE_ARP(nar);
134134            break;
135135         }
136136         case 0x4:   // *+           ((CurrentAR)+1 -> CurrentAR)
137137         {
138            UPDATE_AR(cpustate, arp, 1);
138            UPDATE_AR(arp, 1);
139139            break;
140140         }
141141         case 0x5:   // *+, ARn      ((CurrentAR)+1 -> CurrentAR, NAR -> ARP)
142142         {
143            UPDATE_AR(cpustate, arp, 1);
144            UPDATE_ARP(cpustate, nar);
143            UPDATE_AR(arp, 1);
144            UPDATE_ARP(nar);
145145            break;
146146         }
147147         case 0xa:   // *0-          ((CurrentAR) - INDX)
148148         {
149            UPDATE_AR(cpustate, arp, -cpustate->indx);
149            UPDATE_AR(arp, -m_indx);
150150            break;
151151         }
152152         case 0xb:   // *0-, ARn     ((CurrentAR) - INDX -> CurrentAR, NAR -> ARP)
153153         {
154            UPDATE_AR(cpustate, arp, -cpustate->indx);
155            UPDATE_ARP(cpustate, nar);
154            UPDATE_AR(arp, -m_indx);
155            UPDATE_ARP(nar);
156156            break;
157157         }
158158         case 0xc:   // *0+          ((CurrentAR) + INDX -> CurrentAR)
159159         {
160            UPDATE_AR(cpustate, arp, cpustate->indx);
160            UPDATE_AR(arp, m_indx);
161161            break;
162162         }
163163         case 0xd:   // *0+, ARn     ((CurrentAR) + INDX -> CurrentAR, NAR -> ARP)
164164         {
165            UPDATE_AR(cpustate, arp, cpustate->indx);
166            UPDATE_ARP(cpustate, nar);
165            UPDATE_AR(arp, m_indx);
166            UPDATE_ARP(nar);
167167            break;
168168         }
169169
170         default:    fatalerror("32051: GET_ADDRESS: unimplemented indirect addressing mode %d at %04X (%04X)\n", (cpustate->op >> 3) & 0xf, cpustate->pc, cpustate->op);
170         default:    fatalerror("32051: GET_ADDRESS: unimplemented indirect addressing mode %d at %04X (%04X)\n", (m_op >> 3) & 0xf, m_pc, m_op);
171171      }
172172
173173      return ea;
174174   }
175175   else                    // Direct Addressing
176176   {
177      return cpustate->st0.dp | (cpustate->op & 0x7f);
177      return m_st0.dp | (m_op & 0x7f);
178178   }
179179}
180180
181INLINE int GET_ZLVC_CONDITION(tms32051_state *cpustate, int zlvc, int zlvc_mask)
181int tms32051_device::GET_ZLVC_CONDITION(int zlvc, int zlvc_mask)
182182{
183183   if (zlvc_mask & 0x2)        // OV-bit
184184   {
185      if ((zlvc & 0x2) && cpustate->st0.ov)                           // OV
185      if ((zlvc & 0x2) && m_st0.ov)                           // OV
186186      {
187187         // clear OV
188         cpustate->st0.ov = 0;
188         m_st0.ov = 0;
189189
190190         return 1;
191191      }
192      else if ((zlvc & 0x2) == 0 && cpustate->st0.ov == 0)            // NOV
192      else if ((zlvc & 0x2) == 0 && m_st0.ov == 0)            // NOV
193193         return 1;
194194   }
195195   if (zlvc_mask & 0x1)        // C-bit
196196   {
197      if ((zlvc & 0x1) && cpustate->st1.c)                            // C
197      if ((zlvc & 0x1) && m_st1.c)                            // C
198198         return 1;
199      else if ((zlvc & 0x1) == 0 && cpustate->st1.c == 0)         // NC
199      else if ((zlvc & 0x1) == 0 && m_st1.c == 0)         // NC
200200         return 1;
201201   }
202202   if (zlvc_mask & 0x8)        // Z-bit
203203   {
204      if ((zlvc & 0x8) && (INT32)(cpustate->acc) == 0)                // EQ
204      if ((zlvc & 0x8) && (INT32)(m_acc) == 0)                // EQ
205205         return 1;
206      else if ((zlvc & 0x8) == 0 && (INT32)(cpustate->acc) != 0)  // NEQ
206      else if ((zlvc & 0x8) == 0 && (INT32)(m_acc) != 0)  // NEQ
207207         return 1;
208208   }
209209   if (zlvc_mask & 0x4)        // L-bit
210210   {
211      if ((zlvc & 0x4) && (INT32)(cpustate->acc) < 0)             // LT
211      if ((zlvc & 0x4) && (INT32)(m_acc) < 0)             // LT
212212         return 1;
213      else if ((zlvc & 0x4) == 0 && (INT32)(cpustate->acc) > 0)       // GT
213      else if ((zlvc & 0x4) == 0 && (INT32)(m_acc) > 0)       // GT
214214         return 1;
215215   }
216216   return 0;
217217}
218218
219INLINE int GET_TP_CONDITION(tms32051_state *cpustate, int tp)
219int tms32051_device::GET_TP_CONDITION(int tp)
220220{
221221   switch (tp)
222222   {
r26840r26841
227227      }
228228      case 1:     // TC = 1
229229      {
230         return cpustate->st1.tc;
230         return m_st1.tc;
231231      }
232232      case 2:     // TC = 0
233233      {
234         return cpustate->st1.tc ^ 1;
234         return m_st1.tc ^ 1;
235235      }
236236      case 3:     // always false
237237      {
r26840r26841
241241   return 0;
242242}
243243
244INLINE INT32 PREG_PSCALER(tms32051_state *cpustate, INT32 preg)
244INT32 tms32051_device::PREG_PSCALER(INT32 preg)
245245{
246   switch (cpustate->st1.pm & 3)
246   switch (m_st1.pm & 3)
247247   {
248248      case 0:     // No shift
249249      {
r26840r26841
267267
268268
269269
270static void op_invalid(tms32051_state *cpustate)
270void tms32051_device::op_invalid()
271271{
272   fatalerror("32051: invalid op at %08X\n", cpustate->pc-1);
272   fatalerror("32051: invalid op at %08X\n", m_pc-1);
273273}
274274
275static void op_group_be(tms32051_state *cpustate);
276static void op_group_bf(tms32051_state *cpustate);
277
278275/*****************************************************************************/
279276
280static void op_abs(tms32051_state *cpustate)
277void tms32051_device::op_abs()
281278{
282   fatalerror("32051: unimplemented op abs at %08X\n", cpustate->pc-1);
279   fatalerror("32051: unimplemented op abs at %08X\n", m_pc-1);
283280}
284281
285static void op_adcb(tms32051_state *cpustate)
282void tms32051_device::op_adcb()
286283{
287   fatalerror("32051: unimplemented op adcb at %08X\n", cpustate->pc-1);
284   fatalerror("32051: unimplemented op adcb at %08X\n", m_pc-1);
288285}
289286
290static void op_add_mem(tms32051_state *cpustate)
287void tms32051_device::op_add_mem()
291288{
292289   INT32 d;
293   UINT16 ea = GET_ADDRESS(cpustate);
294   UINT16 data = DM_READ16(cpustate, ea);
295   int shift = (cpustate->op >> 8) & 0xf;
290   UINT16 ea = GET_ADDRESS();
291   UINT16 data = DM_READ16(ea);
292   int shift = (m_op >> 8) & 0xf;
296293
297   if (cpustate->st1.sxm)
294   if (m_st1.sxm)
298295   {
299296      d = (INT32)(INT16)(data) << shift;
300297   }
r26840r26841
303300      d = (UINT32)(UINT16)(data) << shift;
304301   }
305302
306   cpustate->acc = ADD(cpustate, cpustate->acc, d);
303   m_acc = ADD(m_acc, d);
307304
308305   CYCLES(1);
309306}
310307
311static void op_add_simm(tms32051_state *cpustate)
308void tms32051_device::op_add_simm()
312309{
313   UINT16 imm = cpustate->op & 0xff;
310   UINT16 imm = m_op & 0xff;
314311
315   cpustate->acc = ADD(cpustate, cpustate->acc, imm);
312   m_acc = ADD(m_acc, imm);
316313
317314   CYCLES(1);
318315}
319316
320static void op_add_limm(tms32051_state *cpustate)
317void tms32051_device::op_add_limm()
321318{
322319   INT32 d;
323   UINT16 imm = ROPCODE(cpustate);
324   int shift = cpustate->op & 0xf;
320   UINT16 imm = ROPCODE();
321   int shift = m_op & 0xf;
325322
326   if (cpustate->st1.sxm)
323   if (m_st1.sxm)
327324   {
328325      d = (INT32)(INT16)(imm) << shift;
329326   }
r26840r26841
332329      d = (UINT32)(UINT16)(imm) << shift;
333330   }
334331
335   cpustate->acc = ADD(cpustate, cpustate->acc, d);
332   m_acc = ADD(m_acc, d);
336333
337334   CYCLES(2);
338335}
339336
340static void op_add_s16_mem(tms32051_state *cpustate)
337void tms32051_device::op_add_s16_mem()
341338{
342   fatalerror("32051: unimplemented op add s16 mem at %08X\n", cpustate->pc-1);
339   fatalerror("32051: unimplemented op add s16 mem at %08X\n", m_pc-1);
343340}
344341
345static void op_addb(tms32051_state *cpustate)
342void tms32051_device::op_addb()
346343{
347   cpustate->acc = ADD(cpustate, cpustate->acc, cpustate->accb);
344   m_acc = ADD(m_acc, m_accb);
348345
349346   CYCLES(1);
350347}
351348
352static void op_addc(tms32051_state *cpustate)
349void tms32051_device::op_addc()
353350{
354   fatalerror("32051: unimplemented op addc at %08X\n", cpustate->pc-1);
351   fatalerror("32051: unimplemented op addc at %08X\n", m_pc-1);
355352}
356353
357static void op_adds(tms32051_state *cpustate)
354void tms32051_device::op_adds()
358355{
359   fatalerror("32051: unimplemented op adds at %08X\n", cpustate->pc-1);
356   fatalerror("32051: unimplemented op adds at %08X\n", m_pc-1);
360357}
361358
362static void op_addt(tms32051_state *cpustate)
359void tms32051_device::op_addt()
363360{
364   fatalerror("32051: unimplemented op addt at %08X\n", cpustate->pc-1);
361   fatalerror("32051: unimplemented op addt at %08X\n", m_pc-1);
365362}
366363
367static void op_and_mem(tms32051_state *cpustate)
364void tms32051_device::op_and_mem()
368365{
369   fatalerror("32051: unimplemented op and mem at %08X\n", cpustate->pc-1);
366   fatalerror("32051: unimplemented op and mem at %08X\n", m_pc-1);
370367}
371368
372static void op_and_limm(tms32051_state *cpustate)
369void tms32051_device::op_and_limm()
373370{
374   UINT32 imm = ROPCODE(cpustate);
375   int shift = cpustate->op & 0xf;
371   UINT32 imm = ROPCODE();
372   int shift = m_op & 0xf;
376373
377   cpustate->acc &= imm << shift;
374   m_acc &= imm << shift;
378375
379376   CYCLES(2);
380377}
381378
382static void op_and_s16_limm(tms32051_state *cpustate)
379void tms32051_device::op_and_s16_limm()
383380{
384   fatalerror("32051: unimplemented op and s16 limm at %08X\n", cpustate->pc-1);
381   fatalerror("32051: unimplemented op and s16 limm at %08X\n", m_pc-1);
385382}
386383
387static void op_andb(tms32051_state *cpustate)
384void tms32051_device::op_andb()
388385{
389   fatalerror("32051: unimplemented op andb at %08X\n", cpustate->pc-1);
386   fatalerror("32051: unimplemented op andb at %08X\n", m_pc-1);
390387}
391388
392static void op_bsar(tms32051_state *cpustate)
389void tms32051_device::op_bsar()
393390{
394   int shift = (cpustate->op & 0xf) + 1;
391   int shift = (m_op & 0xf) + 1;
395392
396   if (cpustate->st1.sxm)
393   if (m_st1.sxm)
397394   {
398      cpustate->acc = (INT32)(cpustate->acc) >> shift;
395      m_acc = (INT32)(m_acc) >> shift;
399396   }
400397   else
401398   {
402      cpustate->acc = (UINT32)(cpustate->acc) >> shift;
399      m_acc = (UINT32)(m_acc) >> shift;
403400   }
404401
405402   CYCLES(1);
406403}
407404
408static void op_cmpl(tms32051_state *cpustate)
405void tms32051_device::op_cmpl()
409406{
410   cpustate->acc = ~(UINT32)(cpustate->acc);
407   m_acc = ~(UINT32)(m_acc);
411408
412409   CYCLES(1);
413410}
414411
415static void op_crgt(tms32051_state *cpustate)
412void tms32051_device::op_crgt()
416413{
417   if (cpustate->acc >= cpustate->accb)
414   if (m_acc >= m_accb)
418415   {
419      cpustate->accb = cpustate->acc;
420      cpustate->st1.c = 1;
416      m_accb = m_acc;
417      m_st1.c = 1;
421418   }
422419   else
423420   {
424      cpustate->acc = cpustate->accb;
425      cpustate->st1.c = 0;
421      m_acc = m_accb;
422      m_st1.c = 0;
426423   }
427424
428425   CYCLES(1);
429426}
430427
431static void op_crlt(tms32051_state *cpustate)
428void tms32051_device::op_crlt()
432429{
433   if (cpustate->acc >= cpustate->accb)
430   if (m_acc >= m_accb)
434431   {
435      cpustate->acc = cpustate->accb;
436      cpustate->st1.c = 0;
432      m_acc = m_accb;
433      m_st1.c = 0;
437434   }
438435   else
439436   {
440      cpustate->accb = cpustate->acc;
441      cpustate->st1.c = 1;
437      m_accb = m_acc;
438      m_st1.c = 1;
442439   }
443440
444441   CYCLES(1);
445442}
446443
447static void op_exar(tms32051_state *cpustate)
444void tms32051_device::op_exar()
448445{
449   INT32 tmp = cpustate->acc;
450   cpustate->acc = cpustate->accb;
451   cpustate->accb = tmp;
446   INT32 tmp = m_acc;
447   m_acc = m_accb;
448   m_accb = tmp;
452449
453450   CYCLES(1);
454451}
455452
456static void op_lacb(tms32051_state *cpustate)
453void tms32051_device::op_lacb()
457454{
458   cpustate->acc = cpustate->accb;
455   m_acc = m_accb;
459456
460457   CYCLES(1);
461458}
462459
463static void op_lacc_mem(tms32051_state *cpustate)
460void tms32051_device::op_lacc_mem()
464461{
465   int shift = (cpustate->op >> 8) & 0xf;
466   UINT16 ea = GET_ADDRESS(cpustate);
467   UINT16 data = DM_READ16(cpustate, ea);
462   int shift = (m_op >> 8) & 0xf;
463   UINT16 ea = GET_ADDRESS();
464   UINT16 data = DM_READ16(ea);
468465
469   if (cpustate->st1.sxm)
466   if (m_st1.sxm)
470467   {
471      cpustate->acc = (INT32)(INT16)(data) << shift;
468      m_acc = (INT32)(INT16)(data) << shift;
472469   }
473470   else
474471   {
475      cpustate->acc = (UINT32)(UINT16)(data) << shift;
472      m_acc = (UINT32)(UINT16)(data) << shift;
476473   }
477474
478475   CYCLES(1);
479476}
480477
481static void op_lacc_limm(tms32051_state *cpustate)
478void tms32051_device::op_lacc_limm()
482479{
483   UINT16 imm = ROPCODE(cpustate);
484   int shift = cpustate->op & 0xf;
480   UINT16 imm = ROPCODE();
481   int shift = m_op & 0xf;
485482
486   if (cpustate->st1.sxm)
483   if (m_st1.sxm)
487484   {
488      cpustate->acc = (INT32)(INT16)(imm) << shift;
485      m_acc = (INT32)(INT16)(imm) << shift;
489486   }
490487   else
491488   {
492      cpustate->acc = (UINT32)(UINT16)(imm) << shift;
489      m_acc = (UINT32)(UINT16)(imm) << shift;
493490   }
494491
495492   CYCLES(1);
496493}
497494
498static void op_lacc_s16_mem(tms32051_state *cpustate)
495void tms32051_device::op_lacc_s16_mem()
499496{
500   UINT16 ea = GET_ADDRESS(cpustate);
501   cpustate->acc = DM_READ16(cpustate, ea) << 16;
497   UINT16 ea = GET_ADDRESS();
498   m_acc = DM_READ16(ea) << 16;
502499
503500   CYCLES(1);
504501}
505502
506static void op_lacl_simm(tms32051_state *cpustate)
503void tms32051_device::op_lacl_simm()
507504{
508   cpustate->acc = cpustate->op & 0xff;
505   m_acc = m_op & 0xff;
509506
510507   CYCLES(1);
511508}
512509
513static void op_lacl_mem(tms32051_state *cpustate)
510void tms32051_device::op_lacl_mem()
514511{
515   UINT16 ea = GET_ADDRESS(cpustate);
516   cpustate->acc = DM_READ16(cpustate, ea) & 0xffff;
512   UINT16 ea = GET_ADDRESS();
513   m_acc = DM_READ16(ea) & 0xffff;
517514
518515   CYCLES(1);
519516}
520517
521static void op_lact(tms32051_state *cpustate)
518void tms32051_device::op_lact()
522519{
523   fatalerror("32051: unimplemented op lact at %08X\n", cpustate->pc-1);
520   fatalerror("32051: unimplemented op lact at %08X\n", m_pc-1);
524521}
525522
526static void op_lamm(tms32051_state *cpustate)
523void tms32051_device::op_lamm()
527524{
528   UINT16 ea = GET_ADDRESS(cpustate) & 0x7f;
529   cpustate->acc = DM_READ16(cpustate, ea) & 0xffff;
525   UINT16 ea = GET_ADDRESS() & 0x7f;
526   m_acc = DM_READ16(ea) & 0xffff;
530527
531528   CYCLES(1);
532529}
533530
534static void op_neg(tms32051_state *cpustate)
531void tms32051_device::op_neg()
535532{
536   if ((UINT32)(cpustate->acc) == 0x80000000)
533   if ((UINT32)(m_acc) == 0x80000000)
537534   {
538      cpustate->st0.ov = 1;
539      cpustate->st1.c = 0;
540      cpustate->acc = (cpustate->st0.ovm) ? 0x7fffffff : 0x80000000;
535      m_st0.ov = 1;
536      m_st1.c = 0;
537      m_acc = (m_st0.ovm) ? 0x7fffffff : 0x80000000;
541538   }
542539   else
543540   {
544      cpustate->acc = 0 - (UINT32)(cpustate->acc);
545      cpustate->st1.c = (cpustate->acc == 0) ? 1 : 0;
541      m_acc = 0 - (UINT32)(m_acc);
542      m_st1.c = (m_acc == 0) ? 1 : 0;
546543   }
547544
548545   CYCLES(1);
549546}
550547
551static void op_norm(tms32051_state *cpustate)
548void tms32051_device::op_norm()
552549{
553   fatalerror("32051: unimplemented op norm at %08X\n", cpustate->pc-1);
550   fatalerror("32051: unimplemented op norm at %08X\n", m_pc-1);
554551}
555552
556static void op_or_mem(tms32051_state *cpustate)
553void tms32051_device::op_or_mem()
557554{
558   UINT16 ea = GET_ADDRESS(cpustate);
559   UINT16 data = DM_READ16(cpustate, ea);
555   UINT16 ea = GET_ADDRESS();
556   UINT16 data = DM_READ16(ea);
560557
561   cpustate->acc |= (UINT32)(data);
558   m_acc |= (UINT32)(data);
562559
563560   CYCLES(1);
564561}
565562
566static void op_or_limm(tms32051_state *cpustate)
563void tms32051_device::op_or_limm()
567564{
568   UINT32 imm = ROPCODE(cpustate);
569   int shift = cpustate->op & 0xf;
565   UINT32 imm = ROPCODE();
566   int shift = m_op & 0xf;
570567
571   cpustate->acc |= imm << shift;
568   m_acc |= imm << shift;
572569
573570   CYCLES(1);
574571}
575572
576static void op_or_s16_limm(tms32051_state *cpustate)
573void tms32051_device::op_or_s16_limm()
577574{
578   fatalerror("32051: unimplemented op or s16 limm at %08X\n", cpustate->pc-1);
575   fatalerror("32051: unimplemented op or s16 limm at %08X\n", m_pc-1);
579576}
580577
581static void op_orb(tms32051_state *cpustate)
578void tms32051_device::op_orb()
582579{
583   cpustate->acc |= cpustate->accb;
580   m_acc |= m_accb;
584581
585582   CYCLES(1);
586583}
587584
588static void op_rol(tms32051_state *cpustate)
585void tms32051_device::op_rol()
589586{
590   fatalerror("32051: unimplemented op rol at %08X\n", cpustate->pc-1);
587   fatalerror("32051: unimplemented op rol at %08X\n", m_pc-1);
591588}
592589
593static void op_rolb(tms32051_state *cpustate)
590void tms32051_device::op_rolb()
594591{
595   UINT32 acc = cpustate->acc;
596   UINT32 accb = cpustate->accb;
597   UINT32 c = cpustate->st1.c & 1;
592   UINT32 acc = m_acc;
593   UINT32 accb = m_accb;
594   UINT32 c = m_st1.c & 1;
598595
599   cpustate->acc = (acc << 1) | ((accb >> 31) & 1);
600   cpustate->accb = (accb << 1) | c;
601   cpustate->st1.c = (acc >> 31) & 1;
596   m_acc = (acc << 1) | ((accb >> 31) & 1);
597   m_accb = (accb << 1) | c;
598   m_st1.c = (acc >> 31) & 1;
602599
603600   CYCLES(1);
604601}
605602
606static void op_ror(tms32051_state *cpustate)
603void tms32051_device::op_ror()
607604{
608   fatalerror("32051: unimplemented op ror at %08X\n", cpustate->pc-1);
605   fatalerror("32051: unimplemented op ror at %08X\n", m_pc-1);
609606}
610607
611static void op_rorb(tms32051_state *cpustate)
608void tms32051_device::op_rorb()
612609{
613   fatalerror("32051: unimplemented op rorb at %08X\n", cpustate->pc-1);
610   fatalerror("32051: unimplemented op rorb at %08X\n", m_pc-1);
614611}
615612
616static void op_sacb(tms32051_state *cpustate)
613void tms32051_device::op_sacb()
617614{
618   cpustate->accb = cpustate->acc;
615   m_accb = m_acc;
619616
620617   CYCLES(1);
621618}
622619
623static void op_sach(tms32051_state *cpustate)
620void tms32051_device::op_sach()
624621{
625   UINT16 ea = GET_ADDRESS(cpustate);
626   int shift = (cpustate->op >> 8) & 0x7;
622   UINT16 ea = GET_ADDRESS();
623   int shift = (m_op >> 8) & 0x7;
627624
628   DM_WRITE16(cpustate, ea, (UINT16)((cpustate->acc << shift) >> 16));
625   DM_WRITE16(ea, (UINT16)((m_acc << shift) >> 16));
629626   CYCLES(1);
630627}
631628
632static void op_sacl(tms32051_state *cpustate)
629void tms32051_device::op_sacl()
633630{
634   UINT16 ea = GET_ADDRESS(cpustate);
635   int shift = (cpustate->op >> 8) & 0x7;
631   UINT16 ea = GET_ADDRESS();
632   int shift = (m_op >> 8) & 0x7;
636633
637   DM_WRITE16(cpustate, ea, (UINT16)(cpustate->acc << shift));
634   DM_WRITE16(ea, (UINT16)(m_acc << shift));
638635   CYCLES(1);
639636}
640637
641static void op_samm(tms32051_state *cpustate)
638void tms32051_device::op_samm()
642639{
643   UINT16 ea = GET_ADDRESS(cpustate);
640   UINT16 ea = GET_ADDRESS();
644641   ea &= 0x7f;
645642
646   DM_WRITE16(cpustate, ea, (UINT16)(cpustate->acc));
643   DM_WRITE16(ea, (UINT16)(m_acc));
647644   CYCLES(1);
648645}
649646
650static void op_sath(tms32051_state *cpustate)
647void tms32051_device::op_sath()
651648{
652   fatalerror("32051: unimplemented op sath at %08X\n", cpustate->pc-1);
649   fatalerror("32051: unimplemented op sath at %08X\n", m_pc-1);
653650}
654651
655static void op_satl(tms32051_state *cpustate)
652void tms32051_device::op_satl()
656653{
657   fatalerror("32051: unimplemented op satl at %08X\n", cpustate->pc-1);
654   fatalerror("32051: unimplemented op satl at %08X\n", m_pc-1);
658655}
659656
660static void op_sbb(tms32051_state *cpustate)
657void tms32051_device::op_sbb()
661658{
662   cpustate->acc = SUB(cpustate, cpustate->acc, cpustate->accb);
659   m_acc = SUB(m_acc, m_accb);
663660
664661   CYCLES(1);
665662}
666663
667static void op_sbbb(tms32051_state *cpustate)
664void tms32051_device::op_sbbb()
668665{
669   fatalerror("32051: unimplemented op sbbb at %08X\n", cpustate->pc-1);
666   fatalerror("32051: unimplemented op sbbb at %08X\n", m_pc-1);
670667}
671668
672static void op_sfl(tms32051_state *cpustate)
669void tms32051_device::op_sfl()
673670{
674   cpustate->st1.c = (cpustate->acc >> 31) & 1;
675   cpustate->acc = cpustate->acc << 1;
671   m_st1.c = (m_acc >> 31) & 1;
672   m_acc = m_acc << 1;
676673
677674   CYCLES(1);
678675}
679676
680static void op_sflb(tms32051_state *cpustate)
677void tms32051_device::op_sflb()
681678{
682   UINT32 acc = cpustate->acc;
683   UINT32 accb = cpustate->accb;
679   UINT32 acc = m_acc;
680   UINT32 accb = m_accb;
684681
685   cpustate->acc = (acc << 1) | ((accb >> 31) & 1);
686   cpustate->accb = (accb << 1);
687   cpustate->st1.c = (acc >> 31) & 1;
682   m_acc = (acc << 1) | ((accb >> 31) & 1);
683   m_accb = (accb << 1);
684   m_st1.c = (acc >> 31) & 1;
688685
689686   CYCLES(1);
690687}
691688
692static void op_sfr(tms32051_state *cpustate)
689void tms32051_device::op_sfr()
693690{
694   cpustate->st1.c = cpustate->acc & 1;
691   m_st1.c = m_acc & 1;
695692
696   if (cpustate->st1.sxm)
693   if (m_st1.sxm)
697694   {
698      cpustate->acc = (INT32)(cpustate->acc) >> 1;
695      m_acc = (INT32)(m_acc) >> 1;
699696   }
700697   else
701698   {
702      cpustate->acc = (UINT32)(cpustate->acc) >> 1;
699      m_acc = (UINT32)(m_acc) >> 1;
703700   }
704701
705702   CYCLES(1);
706703}
707704
708static void op_sfrb(tms32051_state *cpustate)
705void tms32051_device::op_sfrb()
709706{
710   fatalerror("32051: unimplemented op sfrb at %08X\n", cpustate->pc-1);
707   fatalerror("32051: unimplemented op sfrb at %08X\n", m_pc-1);
711708}
712709
713static void op_sub_mem(tms32051_state *cpustate)
710void tms32051_device::op_sub_mem()
714711{
715712   INT32 d;
716   UINT16 ea = GET_ADDRESS(cpustate);
717   UINT16 data = DM_READ16(cpustate, ea);
718   int shift = (cpustate->op >> 8) & 0xf;
713   UINT16 ea = GET_ADDRESS();
714   UINT16 data = DM_READ16(ea);
715   int shift = (m_op >> 8) & 0xf;
719716
720   if (cpustate->st1.sxm)
717   if (m_st1.sxm)
721718   {
722719      d = (INT32)(INT16)(data) << shift;
723720   }
r26840r26841
726723      d = (UINT32)(UINT16)(data) << shift;
727724   }
728725
729   cpustate->acc = SUB(cpustate, cpustate->acc, d);
726   m_acc = SUB(m_acc, d);
730727
731728   CYCLES(1);
732729}
733730
734static void op_sub_s16_mem(tms32051_state *cpustate)
731void tms32051_device::op_sub_s16_mem()
735732{
736   fatalerror("32051: unimplemented op sub s16 mem at %08X\n", cpustate->pc-1);
733   fatalerror("32051: unimplemented op sub s16 mem at %08X\n", m_pc-1);
737734}
738735
739static void op_sub_simm(tms32051_state *cpustate)
736void tms32051_device::op_sub_simm()
740737{
741   UINT16 imm = cpustate->op & 0xff;
738   UINT16 imm = m_op & 0xff;
742739
743   cpustate->acc = SUB(cpustate, cpustate->acc, imm);
740   m_acc = SUB(m_acc, imm);
744741
745742   CYCLES(1);
746743}
747744
748static void op_sub_limm(tms32051_state *cpustate)
745void tms32051_device::op_sub_limm()
749746{
750747   INT32 d;
751   UINT16 imm = ROPCODE(cpustate);
752   int shift = cpustate->op & 0xf;
748   UINT16 imm = ROPCODE();
749   int shift = m_op & 0xf;
753750
754   if (cpustate->st1.sxm)
751   if (m_st1.sxm)
755752   {
756753      d = (INT32)(INT16)(imm) << shift;
757754   }
r26840r26841
760757      d = (UINT32)(UINT16)(imm) << shift;
761758   }
762759
763   cpustate->acc = SUB(cpustate, cpustate->acc, d);
760   m_acc = SUB(m_acc, d);
764761
765762   CYCLES(2);
766763}
767764
768static void op_subb(tms32051_state *cpustate)
765void tms32051_device::op_subb()
769766{
770   fatalerror("32051: unimplemented op subb at %08X\n", cpustate->pc-1);
767   fatalerror("32051: unimplemented op subb at %08X\n", m_pc-1);
771768}
772769
773static void op_subc(tms32051_state *cpustate)
770void tms32051_device::op_subc()
774771{
775   fatalerror("32051: unimplemented op subc at %08X\n", cpustate->pc-1);
772   fatalerror("32051: unimplemented op subc at %08X\n", m_pc-1);
776773}
777774
778static void op_subs(tms32051_state *cpustate)
775void tms32051_device::op_subs()
779776{
780   fatalerror("32051: unimplemented op subs at %08X\n", cpustate->pc-1);
777   fatalerror("32051: unimplemented op subs at %08X\n", m_pc-1);
781778}
782779
783static void op_subt(tms32051_state *cpustate)
780void tms32051_device::op_subt()
784781{
785   fatalerror("32051: unimplemented op subt at %08X\n", cpustate->pc-1);
782   fatalerror("32051: unimplemented op subt at %08X\n", m_pc-1);
786783}
787784
788static void op_xor_mem(tms32051_state *cpustate)
785void tms32051_device::op_xor_mem()
789786{
790   UINT16 ea = GET_ADDRESS(cpustate);
791   UINT16 data = DM_READ16(cpustate, ea);
787   UINT16 ea = GET_ADDRESS();
788   UINT16 data = DM_READ16(ea);
792789
793   cpustate->acc ^= (UINT32)(data);
790   m_acc ^= (UINT32)(data);
794791
795792   CYCLES(1);
796793}
797794
798static void op_xor_limm(tms32051_state *cpustate)
795void tms32051_device::op_xor_limm()
799796{
800   UINT32 imm = ROPCODE(cpustate);
801   int shift = cpustate->op & 0xf;
797   UINT32 imm = ROPCODE();
798   int shift = m_op & 0xf;
802799
803   cpustate->acc ^= imm << shift;
800   m_acc ^= imm << shift;
804801
805802   CYCLES(1);
806803}
807804
808static void op_xor_s16_limm(tms32051_state *cpustate)
805void tms32051_device::op_xor_s16_limm()
809806{
810   fatalerror("32051: unimplemented op xor s16 limm at %08X\n", cpustate->pc-1);
807   fatalerror("32051: unimplemented op xor s16 limm at %08X\n", m_pc-1);
811808}
812809
813static void op_xorb(tms32051_state *cpustate)
810void tms32051_device::op_xorb()
814811{
815   fatalerror("32051: unimplemented op xorb at %08X\n", cpustate->pc-1);
812   fatalerror("32051: unimplemented op xorb at %08X\n", m_pc-1);
816813}
817814
818static void op_zalr(tms32051_state *cpustate)
815void tms32051_device::op_zalr()
819816{
820   fatalerror("32051: unimplemented op zalr at %08X\n", cpustate->pc-1);
817   fatalerror("32051: unimplemented op zalr at %08X\n", m_pc-1);
821818}
822819
823static void op_zap(tms32051_state *cpustate)
820void tms32051_device::op_zap()
824821{
825   cpustate->acc = 0;
826   cpustate->preg = 0;
822   m_acc = 0;
823   m_preg = 0;
827824
828825   CYCLES(1);
829826}
830827
831828/*****************************************************************************/
832829
833static void op_adrk(tms32051_state *cpustate)
830void tms32051_device::op_adrk()
834831{
835   UINT16 imm = cpustate->op & 0xff;
836   UPDATE_AR(cpustate, cpustate->st0.arp, imm);
832   UINT16 imm = m_op & 0xff;
833   UPDATE_AR(m_st0.arp, imm);
837834
838835   CYCLES(1);
839836}
840837
841static void op_cmpr(tms32051_state *cpustate)
838void tms32051_device::op_cmpr()
842839{
843   cpustate->st1.tc = 0;
840   m_st1.tc = 0;
844841
845   switch (cpustate->op & 0x3)
842   switch (m_op & 0x3)
846843   {
847844      case 0:         // (CurrentAR) == ARCR
848845      {
849         if (cpustate->ar[cpustate->st0.arp] == cpustate->arcr)
846         if (m_ar[m_st0.arp] == m_arcr)
850847         {
851            cpustate->st1.tc = 1;
848            m_st1.tc = 1;
852849         }
853850         break;
854851      }
855852      case 1:         // (CurrentAR) < ARCR
856853      {
857         if (cpustate->ar[cpustate->st0.arp] < cpustate->arcr)
854         if (m_ar[m_st0.arp] < m_arcr)
858855         {
859            cpustate->st1.tc = 1;
856            m_st1.tc = 1;
860857         }
861858         break;
862859      }
863860      case 2:         // (CurrentAR) > ARCR
864861      {
865         if (cpustate->ar[cpustate->st0.arp] > cpustate->arcr)
862         if (m_ar[m_st0.arp] > m_arcr)
866863         {
867            cpustate->st1.tc = 1;
864            m_st1.tc = 1;
868865         }
869866         break;
870867      }
871868      case 3:         // (CurrentAR) != ARCR
872869      {
873         if (cpustate->ar[cpustate->st0.arp] != cpustate->arcr)
870         if (m_ar[m_st0.arp] != m_arcr)
874871         {
875            cpustate->st1.tc = 1;
872            m_st1.tc = 1;
876873         }
877874         break;
878875      }
r26840r26841
881878   CYCLES(1);
882879}
883880
884static void op_lar_mem(tms32051_state *cpustate)
881void tms32051_device::op_lar_mem()
885882{
886   int arx = (cpustate->op >> 8) & 0x7;
887   UINT16 ea = GET_ADDRESS(cpustate);
888   UINT16 data = DM_READ16(cpustate, ea);
883   int arx = (m_op >> 8) & 0x7;
884   UINT16 ea = GET_ADDRESS();
885   UINT16 data = DM_READ16(ea);
889886
890   cpustate->ar[arx] = data;
887   m_ar[arx] = data;
891888
892889   CYCLES(2);
893890}
894891
895static void op_lar_simm(tms32051_state *cpustate)
892void tms32051_device::op_lar_simm()
896893{
897   int arx = (cpustate->op >> 8) & 0x7;
898   cpustate->ar[arx] = cpustate->op & 0xff;
894   int arx = (m_op >> 8) & 0x7;
895   m_ar[arx] = m_op & 0xff;
899896
900897   CYCLES(2);
901898}
902899
903static void op_lar_limm(tms32051_state *cpustate)
900void tms32051_device::op_lar_limm()
904901{
905   int arx = cpustate->op & 0x7;
906   UINT16 imm = ROPCODE(cpustate);
907   cpustate->ar[arx] = imm;
902   int arx = m_op & 0x7;
903   UINT16 imm = ROPCODE();
904   m_ar[arx] = imm;
908905
909906   CYCLES(2);
910907}
911908
912static void op_ldp_mem(tms32051_state *cpustate)
909void tms32051_device::op_ldp_mem()
913910{
914   fatalerror("32051: unimplemented op ldp mem at %08X\n", cpustate->pc-1);
911   fatalerror("32051: unimplemented op ldp mem at %08X\n", m_pc-1);
915912}
916913
917static void op_ldp_imm(tms32051_state *cpustate)
914void tms32051_device::op_ldp_imm()
918915{
919   cpustate->st0.dp = (cpustate->op & 0x1ff) << 7;
916   m_st0.dp = (m_op & 0x1ff) << 7;
920917   CYCLES(2);
921918}
922919
923static void op_mar(tms32051_state *cpustate)
920void tms32051_device::op_mar()
924921{
925922   // direct addressing is NOP
926   if (cpustate->op & 0x80)
923   if (m_op & 0x80)
927924   {
928      GET_ADDRESS(cpustate);
925      GET_ADDRESS();
929926   }
930927   CYCLES(1);
931928}
932929
933static void op_sar(tms32051_state *cpustate)
930void tms32051_device::op_sar()
934931{
935   int arx = (cpustate->op >> 8) & 0x7;
936   UINT16 ar = cpustate->ar[arx];
937   UINT16 ea = GET_ADDRESS(cpustate);
938   DM_WRITE16(cpustate, ea, ar);
932   int arx = (m_op >> 8) & 0x7;
933   UINT16 ar = m_ar[arx];
934   UINT16 ea = GET_ADDRESS();
935   DM_WRITE16(ea, ar);
939936
940937   CYCLES(1);
941938}
942939
943static void op_sbrk(tms32051_state *cpustate)
940void tms32051_device::op_sbrk()
944941{
945   UINT16 imm = cpustate->op & 0xff;
946   UPDATE_AR(cpustate, cpustate->st0.arp, -imm);
942   UINT16 imm = m_op & 0xff;
943   UPDATE_AR(m_st0.arp, -imm);
947944
948945   CYCLES(1);
949946}
950947
951948/*****************************************************************************/
952949
953static void op_b(tms32051_state *cpustate)
950void tms32051_device::op_b()
954951{
955   UINT16 pma = ROPCODE(cpustate);
956   GET_ADDRESS(cpustate);      // update AR/ARP
952   UINT16 pma = ROPCODE();
953   GET_ADDRESS();      // update AR/ARP
957954
958   CHANGE_PC(cpustate, pma);
955   CHANGE_PC(pma);
959956   CYCLES(4);
960957}
961958
962static void op_bacc(tms32051_state *cpustate)
959void tms32051_device::op_bacc()
963960{
964   CHANGE_PC(cpustate, (UINT16)(cpustate->acc));
961   CHANGE_PC((UINT16)(m_acc));
965962
966963   CYCLES(4);
967964}
968965
969static void op_baccd(tms32051_state *cpustate)
966void tms32051_device::op_baccd()
970967{
971   UINT16 pc = (UINT16)(cpustate->acc);
968   UINT16 pc = (UINT16)(m_acc);
972969
973   delay_slot(cpustate, cpustate->pc);
974   CHANGE_PC(cpustate, pc);
970   delay_slot(m_pc);
971   CHANGE_PC(pc);
975972
976973   CYCLES(2);
977974}
978975
979static void op_banz(tms32051_state *cpustate)
976void tms32051_device::op_banz()
980977{
981   UINT16 pma = ROPCODE(cpustate);
978   UINT16 pma = ROPCODE();
982979
983   if (cpustate->ar[cpustate->st0.arp] != 0)
980   if (m_ar[m_st0.arp] != 0)
984981   {
985      CHANGE_PC(cpustate, pma);
982      CHANGE_PC(pma);
986983      CYCLES(4);
987984   }
988985   else
r26840r26841
990987      CYCLES(2);
991988   }
992989
993   GET_ADDRESS(cpustate);      // modify AR/ARP
990   GET_ADDRESS();      // modify AR/ARP
994991}
995992
996static void op_banzd(tms32051_state *cpustate)
993void tms32051_device::op_banzd()
997994{
998   fatalerror("32051: unimplemented op banzd at %08X\n", cpustate->pc-1);
995   fatalerror("32051: unimplemented op banzd at %08X\n", m_pc-1);
999996}
1000997
1001static void op_bcnd(tms32051_state *cpustate)
998void tms32051_device::op_bcnd()
1002999{
1003   UINT16 pma = ROPCODE(cpustate);
1000   UINT16 pma = ROPCODE();
10041001
1005   if (GET_ZLVC_CONDITION(cpustate, (cpustate->op >> 4) & 0xf, cpustate->op & 0xf) || GET_TP_CONDITION(cpustate, (cpustate->op >> 8) & 0x3))
1002   if (GET_ZLVC_CONDITION((m_op >> 4) & 0xf, m_op & 0xf) || GET_TP_CONDITION((m_op >> 8) & 0x3))
10061003   {
1007      CHANGE_PC(cpustate, pma);
1004      CHANGE_PC(pma);
10081005      CYCLES(4);
10091006   }
10101007   else
r26840r26841
10131010   }
10141011}
10151012
1016static void op_bcndd(tms32051_state *cpustate)
1013void tms32051_device::op_bcndd()
10171014{
1018   UINT16 pma = ROPCODE(cpustate);
1015   UINT16 pma = ROPCODE();
10191016
1020   if (GET_ZLVC_CONDITION(cpustate, (cpustate->op >> 4) & 0xf, cpustate->op & 0xf) || GET_TP_CONDITION(cpustate, (cpustate->op >> 8) & 0x3))
1017   if (GET_ZLVC_CONDITION((m_op >> 4) & 0xf, m_op & 0xf) || GET_TP_CONDITION((m_op >> 8) & 0x3))
10211018   {
1022      delay_slot(cpustate, cpustate->pc);
1023      CHANGE_PC(cpustate, pma);
1019      delay_slot(m_pc);
1020      CHANGE_PC(pma);
10241021      CYCLES(4);
10251022   }
10261023   else
r26840r26841
10291026   }
10301027}
10311028
1032static void op_bd(tms32051_state *cpustate)
1029void tms32051_device::op_bd()
10331030{
1034   UINT16 pma = ROPCODE(cpustate);
1035   GET_ADDRESS(cpustate);      // update AR/ARP
1031   UINT16 pma = ROPCODE();
1032   GET_ADDRESS();      // update AR/ARP
10361033
1037   delay_slot(cpustate, cpustate->pc);
1038   CHANGE_PC(cpustate, pma);
1034   delay_slot(m_pc);
1035   CHANGE_PC(pma);
10391036   CYCLES(2);
10401037}
10411038
1042static void op_cala(tms32051_state *cpustate)
1039void tms32051_device::op_cala()
10431040{
1044   PUSH_STACK(cpustate, cpustate->pc);
1041   PUSH_STACK(m_pc);
10451042
1046   CHANGE_PC(cpustate, cpustate->acc);
1043   CHANGE_PC(m_acc);
10471044
10481045   CYCLES(4);
10491046}
10501047
1051static void op_calad(tms32051_state *cpustate)
1048void tms32051_device::op_calad()
10521049{
1053   UINT16 pma = cpustate->acc;
1054   PUSH_STACK(cpustate, cpustate->pc+2);
1050   UINT16 pma = m_acc;
1051   PUSH_STACK(m_pc+2);
10551052
1056   delay_slot(cpustate, cpustate->pc);
1057   CHANGE_PC(cpustate, pma);
1053   delay_slot(m_pc);
1054   CHANGE_PC(pma);
10581055
10591056   CYCLES(4);
10601057}
10611058
1062static void op_call(tms32051_state *cpustate)
1059void tms32051_device::op_call()
10631060{
1064   UINT16 pma = ROPCODE(cpustate);
1065   GET_ADDRESS(cpustate);      // update AR/ARP
1066   PUSH_STACK(cpustate, cpustate->pc);
1061   UINT16 pma = ROPCODE();
1062   GET_ADDRESS();      // update AR/ARP
1063   PUSH_STACK(m_pc);
10671064
1068   CHANGE_PC(cpustate, pma);
1065   CHANGE_PC(pma);
10691066
10701067   CYCLES(4);
10711068}
10721069
1073static void op_calld(tms32051_state *cpustate)
1070void tms32051_device::op_calld()
10741071{
1075   UINT16 pma = ROPCODE(cpustate);
1076   GET_ADDRESS(cpustate);      // update AR/ARP
1077   PUSH_STACK(cpustate, cpustate->pc+2);
1072   UINT16 pma = ROPCODE();
1073   GET_ADDRESS();      // update AR/ARP
1074   PUSH_STACK(m_pc+2);
10781075
1079   delay_slot(cpustate, cpustate->pc);
1080   CHANGE_PC(cpustate, pma);
1076   delay_slot(m_pc);
1077   CHANGE_PC(pma);
10811078
10821079   CYCLES(4);
10831080}
10841081
1085static void op_cc(tms32051_state *cpustate)
1082void tms32051_device::op_cc()
10861083{
1087   fatalerror("32051: unimplemented op cc at %08X\n", cpustate->pc-1);
1084   fatalerror("32051: unimplemented op cc at %08X\n", m_pc-1);
10881085}
10891086
1090static void op_ccd(tms32051_state *cpustate)
1087void tms32051_device::op_ccd()
10911088{
1092   UINT16 pma = ROPCODE(cpustate);
1089   UINT16 pma = ROPCODE();
10931090
1094   if (GET_ZLVC_CONDITION(cpustate, (cpustate->op >> 4) & 0xf, cpustate->op & 0xf) || GET_TP_CONDITION(cpustate, (cpustate->op >> 8) & 0x3))
1091   if (GET_ZLVC_CONDITION((m_op >> 4) & 0xf, m_op & 0xf) || GET_TP_CONDITION((m_op >> 8) & 0x3))
10951092   {
1096      PUSH_STACK(cpustate, cpustate->pc+2);
1093      PUSH_STACK(m_pc+2);
10971094
1098      delay_slot(cpustate, cpustate->pc);
1099      CHANGE_PC(cpustate, pma);
1095      delay_slot(m_pc);
1096      CHANGE_PC(pma);
11001097   }
11011098
11021099   CYCLES(2);
11031100}
11041101
1105static void op_intr(tms32051_state *cpustate)
1102void tms32051_device::op_intr()
11061103{
1107   fatalerror("32051: unimplemented op intr at %08X\n", cpustate->pc-1);
1104   fatalerror("32051: unimplemented op intr at %08X\n", m_pc-1);
11081105}
11091106
1110static void op_nmi(tms32051_state *cpustate)
1107void tms32051_device::op_nmi()
11111108{
1112   fatalerror("32051: unimplemented op nmi at %08X\n", cpustate->pc-1);
1109   fatalerror("32051: unimplemented op nmi at %08X\n", m_pc-1);
11131110}
11141111
1115static void op_retc(tms32051_state *cpustate)
1112void tms32051_device::op_retc()
11161113{
1117   if ((cpustate->op & 0x3ff) == 0x300 || GET_ZLVC_CONDITION(cpustate, (cpustate->op >> 4) & 0xf, cpustate->op & 0xf) || GET_TP_CONDITION(cpustate, (cpustate->op >> 8) & 0x3))
1114   if ((m_op & 0x3ff) == 0x300 || GET_ZLVC_CONDITION((m_op >> 4) & 0xf, m_op & 0xf) || GET_TP_CONDITION((m_op >> 8) & 0x3))
11181115   {
1119      UINT16 pc = POP_STACK(cpustate);
1120      CHANGE_PC(cpustate, pc);
1116      UINT16 pc = POP_STACK();
1117      CHANGE_PC(pc);
11211118      CYCLES(4);
11221119   }
11231120   else
r26840r26841
11261123   }
11271124}
11281125
1129static void op_retcd(tms32051_state *cpustate)
1126void tms32051_device::op_retcd()
11301127{
1131   if ((cpustate->op & 0x3ff) == 0x300 || GET_ZLVC_CONDITION(cpustate, (cpustate->op >> 4) & 0xf, cpustate->op & 0xf) || GET_TP_CONDITION(cpustate, (cpustate->op >> 8) & 0x3))
1128   if ((m_op & 0x3ff) == 0x300 || GET_ZLVC_CONDITION((m_op >> 4) & 0xf, m_op & 0xf) || GET_TP_CONDITION((m_op >> 8) & 0x3))
11321129   {
1133      UINT16 pc = POP_STACK(cpustate);
1134      delay_slot(cpustate, cpustate->pc);
1135      CHANGE_PC(cpustate, pc);
1130      UINT16 pc = POP_STACK();
1131      delay_slot(m_pc);
1132      CHANGE_PC(pc);
11361133      CYCLES(4);
11371134   }
11381135   else
r26840r26841
11411138   }
11421139}
11431140
1144static void op_rete(tms32051_state *cpustate)
1141void tms32051_device::op_rete()
11451142{
1146   UINT16 pc = POP_STACK(cpustate);
1147   CHANGE_PC(cpustate, pc);
1143   UINT16 pc = POP_STACK();
1144   CHANGE_PC(pc);
11481145
1149   cpustate->st0.intm = 0;
1146   m_st0.intm = 0;
11501147
1151   restore_interrupt_context(cpustate);
1148   restore_interrupt_context();
11521149
11531150   CYCLES(4);
11541151}
11551152
1156static void op_reti(tms32051_state *cpustate)
1153void tms32051_device::op_reti()
11571154{
1158   fatalerror("32051: unimplemented op reti at %08X\n", cpustate->pc-1);
1155   fatalerror("32051: unimplemented op reti at %08X\n", m_pc-1);
11591156}
11601157
1161static void op_trap(tms32051_state *cpustate)
1158void tms32051_device::op_trap()
11621159{
1163   fatalerror("32051: unimplemented op trap at %08X\n", cpustate->pc-1);
1160   fatalerror("32051: unimplemented op trap at %08X\n", m_pc-1);
11641161}
11651162
1166static void op_xc(tms32051_state *cpustate)
1163void tms32051_device::op_xc()
11671164{
1168   if (GET_ZLVC_CONDITION(cpustate, (cpustate->op >> 4) & 0xf, cpustate->op & 0xf) || GET_TP_CONDITION(cpustate, (cpustate->op >> 8) & 0x3))
1165   if (GET_ZLVC_CONDITION((m_op >> 4) & 0xf, m_op & 0xf) || GET_TP_CONDITION((m_op >> 8) & 0x3))
11691166   {
11701167      CYCLES(1);
11711168   }
11721169   else
11731170   {
1174      int n = ((cpustate->op >> 12) & 0x1) + 1;
1175      CHANGE_PC(cpustate, cpustate->pc + n);
1171      int n = ((m_op >> 12) & 0x1) + 1;
1172      CHANGE_PC(m_pc + n);
11761173      CYCLES(1 + n);
11771174   }
11781175}
11791176
11801177/*****************************************************************************/
11811178
1182static void op_bldd_slimm(tms32051_state *cpustate)
1179void tms32051_device::op_bldd_slimm()
11831180{
1184   UINT16 pfc = ROPCODE(cpustate);
1181   UINT16 pfc = ROPCODE();
11851182
1186   while (cpustate->rptc > -1)
1183   while (m_rptc > -1)
11871184   {
1188      UINT16 ea = GET_ADDRESS(cpustate);
1189      UINT16 data = DM_READ16(cpustate, pfc);
1190      DM_WRITE16(cpustate, ea, data);
1185      UINT16 ea = GET_ADDRESS();
1186      UINT16 data = DM_READ16(pfc);
1187      DM_WRITE16(ea, data);
11911188      pfc++;
11921189      CYCLES(2);
11931190
1194      cpustate->rptc--;
1191      m_rptc--;
11951192   };
11961193}
11971194
1198static void op_bldd_dlimm(tms32051_state *cpustate)
1195void tms32051_device::op_bldd_dlimm()
11991196{
1200   UINT16 pfc = ROPCODE(cpustate);
1197   UINT16 pfc = ROPCODE();
12011198
1202   while (cpustate->rptc > -1)
1199   while (m_rptc > -1)
12031200   {
1204      UINT16 ea = GET_ADDRESS(cpustate);
1205      UINT16 data = DM_READ16(cpustate, ea);
1206      DM_WRITE16(cpustate, pfc, data);
1201      UINT16 ea = GET_ADDRESS();
1202      UINT16 data = DM_READ16(ea);
1203      DM_WRITE16(pfc, data);
12071204      pfc++;
12081205      CYCLES(2);
12091206
1210      cpustate->rptc--;
1207      m_rptc--;
12111208   };
12121209}
12131210
1214static void op_bldd_sbmar(tms32051_state *cpustate)
1211void tms32051_device::op_bldd_sbmar()
12151212{
1216   fatalerror("32051: unimplemented op bldd sbmar at %08X\n", cpustate->pc-1);
1213   fatalerror("32051: unimplemented op bldd sbmar at %08X\n", m_pc-1);
12171214}
12181215
1219static void op_bldd_dbmar(tms32051_state *cpustate)
1216void tms32051_device::op_bldd_dbmar()
12201217{
1221   UINT16 pfc = cpustate->bmar;
1218   UINT16 pfc = m_bmar;
12221219
1223   while (cpustate->rptc > -1)
1220   while (m_rptc > -1)
12241221   {
1225      UINT16 ea = GET_ADDRESS(cpustate);
1226      UINT16 data = DM_READ16(cpustate, ea);
1227      DM_WRITE16(cpustate, pfc, data);
1222      UINT16 ea = GET_ADDRESS();
1223      UINT16 data = DM_READ16(ea);
1224      DM_WRITE16(pfc, data);
12281225      pfc++;
12291226      CYCLES(2);
12301227
1231      cpustate->rptc--;
1228      m_rptc--;
12321229   };
12331230}
12341231
1235static void op_bldp(tms32051_state *cpustate)
1232void tms32051_device::op_bldp()
12361233{
1237   UINT16 pfc = cpustate->bmar;
1234   UINT16 pfc = m_bmar;
12381235
1239   while (cpustate->rptc > -1)
1236   while (m_rptc > -1)
12401237   {
1241      UINT16 ea = GET_ADDRESS(cpustate);
1242      UINT16 data = DM_READ16(cpustate, ea);
1243      PM_WRITE16(cpustate, pfc, data);
1238      UINT16 ea = GET_ADDRESS();
1239      UINT16 data = DM_READ16(ea);
1240      PM_WRITE16(pfc, data);
12441241      pfc++;
12451242      CYCLES(1);
12461243
1247      cpustate->rptc--;
1244      m_rptc--;
12481245   };
12491246}
12501247
1251static void op_blpd_bmar(tms32051_state *cpustate)
1248void tms32051_device::op_blpd_bmar()
12521249{
1253   fatalerror("32051: unimplemented op bpld bmar at %08X\n", cpustate->pc-1);
1250   fatalerror("32051: unimplemented op bpld bmar at %08X\n", m_pc-1);
12541251}
12551252
1256static void op_blpd_imm(tms32051_state *cpustate)
1253void tms32051_device::op_blpd_imm()
12571254{
1258   UINT16 pfc = ROPCODE(cpustate);
1255   UINT16 pfc = ROPCODE();
12591256
1260   while (cpustate->rptc > -1)
1257   while (m_rptc > -1)
12611258   {
1262      UINT16 ea = GET_ADDRESS(cpustate);
1263      UINT16 data = PM_READ16(cpustate, pfc);
1264      DM_WRITE16(cpustate, ea, data);
1259      UINT16 ea = GET_ADDRESS();
1260      UINT16 data = PM_READ16(pfc);
1261      DM_WRITE16(ea, data);
12651262      pfc++;
12661263      CYCLES(2);
12671264
1268      cpustate->rptc--;
1265      m_rptc--;
12691266   };
12701267}
12711268
12721269/*****************************************************************************/
12731270
1274static void op_dmov(tms32051_state *cpustate)
1271void tms32051_device::op_dmov()
12751272{
1276   fatalerror("32051: unimplemented op dmov at %08X\n", cpustate->pc-1);
1273   fatalerror("32051: unimplemented op dmov at %08X\n", m_pc-1);
12771274}
12781275
1279static void op_in(tms32051_state *cpustate)
1276void tms32051_device::op_in()
12801277{
1281   fatalerror("32051: unimplemented op in at %08X\n", cpustate->pc-1);
1278   fatalerror("32051: unimplemented op in at %08X\n", m_pc-1);
12821279}
12831280
1284static void op_lmmr(tms32051_state *cpustate)
1281void tms32051_device::op_lmmr()
12851282{
1286   UINT16 pfc = ROPCODE(cpustate);
1283   UINT16 pfc = ROPCODE();
12871284
1288   while (cpustate->rptc > -1)
1285   while (m_rptc > -1)
12891286   {
1290      UINT16 ea = GET_ADDRESS(cpustate);
1291      UINT16 data = DM_READ16(cpustate, pfc);
1292      DM_WRITE16(cpustate, ea & 0x7f, data);
1287      UINT16 ea = GET_ADDRESS();
1288      UINT16 data = DM_READ16(pfc);
1289      DM_WRITE16(ea & 0x7f, data);
12931290      pfc++;
12941291      CYCLES(2);
12951292
1296      cpustate->rptc--;
1293      m_rptc--;
12971294   };
12981295}
12991296
1300static void op_out(tms32051_state *cpustate)
1297void tms32051_device::op_out()
13011298{
1302   fatalerror("32051: unimplemented op out at %08X\n", cpustate->pc-1);
1299   fatalerror("32051: unimplemented op out at %08X\n", m_pc-1);
13031300}
13041301
1305static void op_smmr(tms32051_state *cpustate)
1302void tms32051_device::op_smmr()
13061303{
1307   UINT16 pfc = ROPCODE(cpustate);
1304   UINT16 pfc = ROPCODE();
13081305
1309   while (cpustate->rptc > -1)
1306   while (m_rptc > -1)
13101307   {
1311      UINT16 ea = GET_ADDRESS(cpustate);
1312      UINT16 data = DM_READ16(cpustate, ea & 0x7f);
1313      DM_WRITE16(cpustate, pfc, data);
1308      UINT16 ea = GET_ADDRESS();
1309      UINT16 data = DM_READ16(ea & 0x7f);
1310      DM_WRITE16(pfc, data);
13141311      pfc++;
13151312      CYCLES(2);
13161313
1317      cpustate->rptc--;
1314      m_rptc--;
13181315   };
13191316}
13201317
1321static void op_tblr(tms32051_state *cpustate)
1318void tms32051_device::op_tblr()
13221319{
1323   UINT16 pfc = (UINT16)(cpustate->acc);
1320   UINT16 pfc = (UINT16)(m_acc);
13241321
1325   while (cpustate->rptc > -1)
1322   while (m_rptc > -1)
13261323   {
1327      UINT16 ea = GET_ADDRESS(cpustate);
1328      UINT16 data = PM_READ16(cpustate, pfc);
1329      DM_WRITE16(cpustate, ea, data);
1324      UINT16 ea = GET_ADDRESS();
1325      UINT16 data = PM_READ16(pfc);
1326      DM_WRITE16(ea, data);
13301327      pfc++;
13311328      CYCLES(2);
13321329
1333      cpustate->rptc--;
1330      m_rptc--;
13341331   };
13351332}
13361333
1337static void op_tblw(tms32051_state *cpustate)
1334void tms32051_device::op_tblw()
13381335{
1339   UINT16 pfc = (UINT16)(cpustate->acc);
1336   UINT16 pfc = (UINT16)(m_acc);
13401337
1341   while (cpustate->rptc > -1)
1338   while (m_rptc > -1)
13421339   {
1343      UINT16 ea = GET_ADDRESS(cpustate);
1344      UINT16 data = DM_READ16(cpustate, ea);
1345      PM_WRITE16(cpustate, pfc, data);
1340      UINT16 ea = GET_ADDRESS();
1341      UINT16 data = DM_READ16(ea);
1342      PM_WRITE16(pfc, data);
13461343      pfc++;
13471344      CYCLES(2);
13481345
1349      cpustate->rptc--;
1346      m_rptc--;
13501347   };
13511348}
13521349
13531350/*****************************************************************************/
13541351
1355static void op_apl_dbmr(tms32051_state *cpustate)
1352void tms32051_device::op_apl_dbmr()
13561353{
1357   UINT16 ea = GET_ADDRESS(cpustate);
1358   UINT16 data = DM_READ16(cpustate, ea);
1359   data &= cpustate->dbmr;
1360   DM_WRITE16(cpustate, ea, data);
1354   UINT16 ea = GET_ADDRESS();
1355   UINT16 data = DM_READ16(ea);
1356   data &= m_dbmr;
1357   DM_WRITE16(ea, data);
13611358   CYCLES(1);
13621359}
13631360
1364static void op_apl_imm(tms32051_state *cpustate)
1361void tms32051_device::op_apl_imm()
13651362{
1366   UINT16 ea = GET_ADDRESS(cpustate);
1367   UINT16 imm = ROPCODE(cpustate);
1368   UINT16 data = DM_READ16(cpustate, ea);
1363   UINT16 ea = GET_ADDRESS();
1364   UINT16 imm = ROPCODE();
1365   UINT16 data = DM_READ16(ea);
13691366   data &= imm;
1370   DM_WRITE16(cpustate, ea, data);
1367   DM_WRITE16(ea, data);
13711368   CYCLES(1);
13721369}
13731370
1374static void op_cpl_dbmr(tms32051_state *cpustate)
1371void tms32051_device::op_cpl_dbmr()
13751372{
1376   fatalerror("32051: unimplemented op cpl dbmr at %08X\n", cpustate->pc-1);
1373   fatalerror("32051: unimplemented op cpl dbmr at %08X\n", m_pc-1);
13771374}
13781375
1379static void op_cpl_imm(tms32051_state *cpustate)
1376void tms32051_device::op_cpl_imm()
13801377{
1381   UINT16 imm = ROPCODE(cpustate);
1382   UINT16 ea = GET_ADDRESS(cpustate);
1383   UINT16 data = DM_READ16(cpustate, ea);
1378   UINT16 imm = ROPCODE();
1379   UINT16 ea = GET_ADDRESS();
1380   UINT16 data = DM_READ16(ea);
13841381
1385   cpustate->st1.tc = (data == imm) ? 1 : 0;
1382   m_st1.tc = (data == imm) ? 1 : 0;
13861383
13871384   CYCLES(1);
13881385}
13891386
1390static void op_opl_dbmr(tms32051_state *cpustate)
1387void tms32051_device::op_opl_dbmr()
13911388{
1392   UINT16 ea = GET_ADDRESS(cpustate);
1393   UINT16 data = DM_READ16(cpustate, ea);
1394   data |= cpustate->dbmr;
1395   DM_WRITE16(cpustate, ea, data);
1389   UINT16 ea = GET_ADDRESS();
1390   UINT16 data = DM_READ16(ea);
1391   data |= m_dbmr;
1392   DM_WRITE16(ea, data);
13961393   CYCLES(1);
13971394}
13981395
1399static void op_opl_imm(tms32051_state *cpustate)
1396void tms32051_device::op_opl_imm()
14001397{
1401   UINT16 ea = GET_ADDRESS(cpustate);
1402   UINT16 imm = ROPCODE(cpustate);
1403   UINT16 data = DM_READ16(cpustate, ea);
1398   UINT16 ea = GET_ADDRESS();
1399   UINT16 imm = ROPCODE();
1400   UINT16 data = DM_READ16(ea);
14041401   data |= imm;
1405   DM_WRITE16(cpustate, ea, data);
1402   DM_WRITE16(ea, data);
14061403   CYCLES(1);
14071404}
14081405
1409static void op_splk(tms32051_state *cpustate)
1406void tms32051_device::op_splk()
14101407{
1411   UINT16 ea = GET_ADDRESS(cpustate);
1412   UINT16 imm = ROPCODE(cpustate);
1408   UINT16 ea = GET_ADDRESS();
1409   UINT16 imm = ROPCODE();
14131410
1414   DM_WRITE16(cpustate, ea, imm);
1411   DM_WRITE16(ea, imm);
14151412
14161413   CYCLES(2);
14171414}
14181415
1419static void op_xpl_dbmr(tms32051_state *cpustate)
1416void tms32051_device::op_xpl_dbmr()
14201417{
1421   fatalerror("32051: unimplemented op xpl dbmr at %08X\n", cpustate->pc-1);
1418   fatalerror("32051: unimplemented op xpl dbmr at %08X\n", m_pc-1);
14221419}
14231420
1424static void op_xpl_imm(tms32051_state *cpustate)
1421void tms32051_device::op_xpl_imm()
14251422{
1426   fatalerror("32051: unimplemented op xpl imm at %08X\n", cpustate->pc-1);
1423   fatalerror("32051: unimplemented op xpl imm at %08X\n", m_pc-1);
14271424}
14281425
1429static void op_apac(tms32051_state *cpustate)
1426void tms32051_device::op_apac()
14301427{
1431   INT32 spreg = PREG_PSCALER(cpustate, cpustate->preg);
1432   cpustate->acc = ADD(cpustate, cpustate->acc, spreg);
1428   INT32 spreg = PREG_PSCALER(m_preg);
1429   m_acc = ADD(m_acc, spreg);
14331430
14341431   CYCLES(1);
14351432}
14361433
1437static void op_lph(tms32051_state *cpustate)
1434void tms32051_device::op_lph()
14381435{
1439   fatalerror("32051: unimplemented op lph at %08X\n", cpustate->pc-1);
1436   fatalerror("32051: unimplemented op lph at %08X\n", m_pc-1);
14401437}
14411438
1442static void op_lt(tms32051_state *cpustate)
1439void tms32051_device::op_lt()
14431440{
1444   UINT16 ea = GET_ADDRESS(cpustate);
1445   UINT16 data = DM_READ16(cpustate, ea);
1441   UINT16 ea = GET_ADDRESS();
1442   UINT16 data = DM_READ16(ea);
14461443
1447   cpustate->treg0 = data;
1448   if (cpustate->pmst.trm == 0)
1444   m_treg0 = data;
1445   if (m_pmst.trm == 0)
14491446   {
1450      cpustate->treg1 = data;
1451      cpustate->treg2 = data;
1447      m_treg1 = data;
1448      m_treg2 = data;
14521449   }
14531450
14541451   CYCLES(1);
14551452}
14561453
1457static void op_lta(tms32051_state *cpustate)
1454void tms32051_device::op_lta()
14581455{
14591456   INT32 spreg;
1460   UINT16 ea = GET_ADDRESS(cpustate);
1461   UINT16 data = DM_READ16(cpustate, ea);
1457   UINT16 ea = GET_ADDRESS();
1458   UINT16 data = DM_READ16(ea);
14621459
1463   cpustate->treg0 = data;
1464   spreg = PREG_PSCALER(cpustate, cpustate->preg);
1465   cpustate->acc = ADD(cpustate, cpustate->acc, spreg);
1466   if (cpustate->pmst.trm == 0)
1460   m_treg0 = data;
1461   spreg = PREG_PSCALER(m_preg);
1462   m_acc = ADD(m_acc, spreg);
1463   if (m_pmst.trm == 0)
14671464   {
1468      cpustate->treg1 = data;
1469      cpustate->treg2 = data;
1465      m_treg1 = data;
1466      m_treg2 = data;
14701467   }
14711468
14721469   CYCLES(1);
14731470}
14741471
1475static void op_ltd(tms32051_state *cpustate)
1472void tms32051_device::op_ltd()
14761473{
1477   fatalerror("32051: unimplemented op ltd at %08X\n", cpustate->pc-1);
1474   fatalerror("32051: unimplemented op ltd at %08X\n", m_pc-1);
14781475}
14791476
1480static void op_ltp(tms32051_state *cpustate)
1477void tms32051_device::op_ltp()
14811478{
1482   fatalerror("32051: unimplemented op ltp at %08X\n", cpustate->pc-1);
1479   fatalerror("32051: unimplemented op ltp at %08X\n", m_pc-1);
14831480}
14841481
1485static void op_lts(tms32051_state *cpustate)
1482void tms32051_device::op_lts()
14861483{
1487   fatalerror("32051: unimplemented op lts at %08X\n", cpustate->pc-1);
1484   fatalerror("32051: unimplemented op lts at %08X\n", m_pc-1);
14881485}
14891486
1490static void op_mac(tms32051_state *cpustate)
1487void tms32051_device::op_mac()
14911488{
1492   fatalerror("32051: unimplemented op mac at %08X\n", cpustate->pc-1);
1489   fatalerror("32051: unimplemented op mac at %08X\n", m_pc-1);
14931490}
14941491
1495static void op_macd(tms32051_state *cpustate)
1492void tms32051_device::op_macd()
14961493{
1497   fatalerror("32051: unimplemented op macd at %08X\n", cpustate->pc-1);
1494   fatalerror("32051: unimplemented op macd at %08X\n", m_pc-1);
14981495}
14991496
1500static void op_madd(tms32051_state *cpustate)
1497void tms32051_device::op_madd()
15011498{
1502   fatalerror("32051: unimplemented op madd at %08X\n", cpustate->pc-1);
1499   fatalerror("32051: unimplemented op madd at %08X\n", m_pc-1);
15031500}
15041501
1505static void op_mads(tms32051_state *cpustate)
1502void tms32051_device::op_mads()
15061503{
1507   fatalerror("32051: unimplemented op mads at %08X\n", cpustate->pc-1);
1504   fatalerror("32051: unimplemented op mads at %08X\n", m_pc-1);
15081505}
15091506
1510static void op_mpy_mem(tms32051_state *cpustate)
1507void tms32051_device::op_mpy_mem()
15111508{
1512   UINT16 ea = GET_ADDRESS(cpustate);
1513   INT16 data = DM_READ16(cpustate, ea);
1509   UINT16 ea = GET_ADDRESS();
1510   INT16 data = DM_READ16(ea);
15141511
1515   cpustate->preg = (INT32)(data) * (INT32)(INT16)(cpustate->treg0);
1512   m_preg = (INT32)(data) * (INT32)(INT16)(m_treg0);
15161513
15171514   CYCLES(1);
15181515}
15191516
1520static void op_mpy_simm(tms32051_state *cpustate)
1517void tms32051_device::op_mpy_simm()
15211518{
1522   fatalerror("32051: unimplemented op mpy simm at %08X\n", cpustate->pc-1);
1519   fatalerror("32051: unimplemented op mpy simm at %08X\n", m_pc-1);
15231520}
15241521
1525static void op_mpy_limm(tms32051_state *cpustate)
1522void tms32051_device::op_mpy_limm()
15261523{
1527   fatalerror("32051: unimplemented op mpy limm at %08X\n", cpustate->pc-1);
1524   fatalerror("32051: unimplemented op mpy limm at %08X\n", m_pc-1);
15281525}
15291526
1530static void op_mpya(tms32051_state *cpustate)
1527void tms32051_device::op_mpya()
15311528{
1532   fatalerror("32051: unimplemented op mpya at %08X\n", cpustate->pc-1);
1529   fatalerror("32051: unimplemented op mpya at %08X\n", m_pc-1);
15331530}
15341531
1535static void op_mpys(tms32051_state *cpustate)
1532void tms32051_device::op_mpys()
15361533{
1537   fatalerror("32051: unimplemented op mpys at %08X\n", cpustate->pc-1);
1534   fatalerror("32051: unimplemented op mpys at %08X\n", m_pc-1);
15381535}
15391536
1540static void op_mpyu(tms32051_state *cpustate)
1537void tms32051_device::op_mpyu()
15411538{
1542   fatalerror("32051: unimplemented op mpyu at %08X\n", cpustate->pc-1);
1539   fatalerror("32051: unimplemented op mpyu at %08X\n", m_pc-1);
15431540}
15441541
1545static void op_pac(tms32051_state *cpustate)
1542void tms32051_device::op_pac()
15461543{
1547   fatalerror("32051: unimplemented op pac at %08X\n", cpustate->pc-1);
1544   fatalerror("32051: unimplemented op pac at %08X\n", m_pc-1);
15481545}
15491546
1550static void op_spac(tms32051_state *cpustate)
1547void tms32051_device::op_spac()
15511548{
1552   fatalerror("32051: unimplemented op spac at %08X\n", cpustate->pc-1);
1549   fatalerror("32051: unimplemented op spac at %08X\n", m_pc-1);
15531550}
15541551
1555static void op_sph(tms32051_state *cpustate)
1552void tms32051_device::op_sph()
15561553{
1557   UINT16 ea = GET_ADDRESS(cpustate);
1558   UINT16 spreg = (UINT16)(PREG_PSCALER(cpustate, cpustate->preg) >> 16);
1559   DM_WRITE16(cpustate, ea, spreg);
1554   UINT16 ea = GET_ADDRESS();
1555   UINT16 spreg = (UINT16)(PREG_PSCALER(m_preg) >> 16);
1556   DM_WRITE16(ea, spreg);
15601557
15611558   CYCLES(1);
15621559}
15631560
1564static void op_spl(tms32051_state *cpustate)
1561void tms32051_device::op_spl()
15651562{
1566   fatalerror("32051: unimplemented op spl at %08X\n", cpustate->pc-1);
1563   fatalerror("32051: unimplemented op spl at %08X\n", m_pc-1);
15671564}
15681565
1569static void op_spm(tms32051_state *cpustate)
1566void tms32051_device::op_spm()
15701567{
1571   cpustate->st1.pm = cpustate->op & 0x3;
1568   m_st1.pm = m_op & 0x3;
15721569
15731570   CYCLES(1);
15741571}
15751572
1576static void op_sqra(tms32051_state *cpustate)
1573void tms32051_device::op_sqra()
15771574{
1578   fatalerror("32051: unimplemented op sqra at %08X\n", cpustate->pc-1);
1575   fatalerror("32051: unimplemented op sqra at %08X\n", m_pc-1);
15791576}
15801577
1581static void op_sqrs(tms32051_state *cpustate)
1578void tms32051_device::op_sqrs()
15821579{
1583   fatalerror("32051: unimplemented op sqrs at %08X\n", cpustate->pc-1);
1580   fatalerror("32051: unimplemented op sqrs at %08X\n", m_pc-1);
15841581}
15851582
1586static void op_zpr(tms32051_state *cpustate)
1583void tms32051_device::op_zpr()
15871584{
1588   fatalerror("32051: unimplemented op zpr at %08X\n", cpustate->pc-1);
1585   fatalerror("32051: unimplemented op zpr at %08X\n", m_pc-1);
15891586}
15901587
1591static void op_bit(tms32051_state *cpustate)
1588void tms32051_device::op_bit()
15921589{
1593   UINT16 ea = GET_ADDRESS(cpustate);
1594   UINT16 data = DM_READ16(cpustate, ea);
1590   UINT16 ea = GET_ADDRESS();
1591   UINT16 data = DM_READ16(ea);
15951592
1596   cpustate->st1.tc = (data >> (~cpustate->op >> 8 & 0xf)) & 1;
1593   m_st1.tc = (data >> (~m_op >> 8 & 0xf)) & 1;
15971594
15981595   CYCLES(1);
15991596}
16001597
1601static void op_bitt(tms32051_state *cpustate)
1598void tms32051_device::op_bitt()
16021599{
1603   UINT16 ea = GET_ADDRESS(cpustate);
1604   UINT16 data = DM_READ16(cpustate, ea);
1600   UINT16 ea = GET_ADDRESS();
1601   UINT16 data = DM_READ16(ea);
16051602
1606   cpustate->st1.tc = (data >> (~cpustate->treg2 & 0xf)) & 1;
1603   m_st1.tc = (data >> (~m_treg2 & 0xf)) & 1;
16071604
16081605   CYCLES(1);
16091606}
16101607
1611static void op_clrc_ov(tms32051_state *cpustate)
1608void tms32051_device::op_clrc_ov()
16121609{
1613   cpustate->st0.ovm = 0;
1610   m_st0.ovm = 0;
16141611
16151612   CYCLES(1);
16161613}
16171614
1618static void op_clrc_ext(tms32051_state *cpustate)
1615void tms32051_device::op_clrc_ext()
16191616{
1620   cpustate->st1.sxm = 0;
1617   m_st1.sxm = 0;
16211618
16221619   CYCLES(1);
16231620}
16241621
1625static void op_clrc_hold(tms32051_state *cpustate)
1622void tms32051_device::op_clrc_hold()
16261623{
1627   fatalerror("32051: unimplemented op clrc hold at %08X\n", cpustate->pc-1);
1624   fatalerror("32051: unimplemented op clrc hold at %08X\n", m_pc-1);
16281625}
16291626
1630static void op_clrc_tc(tms32051_state *cpustate)
1627void tms32051_device::op_clrc_tc()
16311628{
1632   fatalerror("32051: unimplemented op clrc tc at %08X\n", cpustate->pc-1);
1629   fatalerror("32051: unimplemented op clrc tc at %08X\n", m_pc-1);
16331630}
16341631
1635static void op_clrc_carry(tms32051_state *cpustate)
1632void tms32051_device::op_clrc_carry()
16361633{
1637   fatalerror("32051: unimplemented op clrc carry at %08X\n", cpustate->pc-1);
1634   fatalerror("32051: unimplemented op clrc carry at %08X\n", m_pc-1);
16381635}
16391636
1640static void op_clrc_cnf(tms32051_state *cpustate)
1637void tms32051_device::op_clrc_cnf()
16411638{
1642   cpustate->st1.cnf = 0;
1639   m_st1.cnf = 0;
16431640
16441641   CYCLES(1);
16451642}
16461643
1647static void op_clrc_intm(tms32051_state *cpustate)
1644void tms32051_device::op_clrc_intm()
16481645{
1649   cpustate->st0.intm = 0;
1646   m_st0.intm = 0;
16501647
1651   check_interrupts(cpustate);
1648   check_interrupts();
16521649
16531650   CYCLES(1);
16541651}
16551652
1656static void op_clrc_xf(tms32051_state *cpustate)
1653void tms32051_device::op_clrc_xf()
16571654{
1658   fatalerror("32051: unimplemented op clrc xf at %08X\n", cpustate->pc-1);
1655   fatalerror("32051: unimplemented op clrc xf at %08X\n", m_pc-1);
16591656}
16601657
1661static void op_idle(tms32051_state *cpustate)
1658void tms32051_device::op_idle()
16621659{
1663   fatalerror("32051: unimplemented op idle at %08X\n", cpustate->pc-1);
1660   fatalerror("32051: unimplemented op idle at %08X\n", m_pc-1);
16641661}
16651662
1666static void op_idle2(tms32051_state *cpustate)
1663void tms32051_device::op_idle2()
16671664{
1668   fatalerror("32051: unimplemented op idle2 at %08X\n", cpustate->pc-1);
1665   fatalerror("32051: unimplemented op idle2 at %08X\n", m_pc-1);
16691666}
16701667
1671static void op_lst_st0(tms32051_state *cpustate)
1668void tms32051_device::op_lst_st0()
16721669{
1673   fatalerror("32051: unimplemented op lst st0 at %08X\n", cpustate->pc-1);
1670   fatalerror("32051: unimplemented op lst st0 at %08X\n", m_pc-1);
16741671}
16751672
1676static void op_lst_st1(tms32051_state *cpustate)
1673void tms32051_device::op_lst_st1()
16771674{
1678   fatalerror("32051: unimplemented op lst st1 at %08X\n", cpustate->pc-1);
1675   fatalerror("32051: unimplemented op lst st1 at %08X\n", m_pc-1);
16791676}
16801677
1681static void op_pop(tms32051_state *cpustate)
1678void tms32051_device::op_pop()
16821679{
1683   cpustate->acc = POP_STACK(cpustate);
1680   m_acc = POP_STACK();
16841681
16851682   CYCLES(1);
16861683}
16871684
1688static void op_popd(tms32051_state *cpustate)
1685void tms32051_device::op_popd()
16891686{
1690   fatalerror("32051: unimplemented op popd at %08X\n", cpustate->pc-1);
1687   fatalerror("32051: unimplemented op popd at %08X\n", m_pc-1);
16911688}
16921689
1693static void op_pshd(tms32051_state *cpustate)
1690void tms32051_device::op_pshd()
16941691{
1695   fatalerror("32051: unimplemented op pshd at %08X\n", cpustate->pc-1);
1692   fatalerror("32051: unimplemented op pshd at %08X\n", m_pc-1);
16961693}
16971694
1698static void op_push(tms32051_state *cpustate)
1695void tms32051_device::op_push()
16991696{
1700   fatalerror("32051: unimplemented op push at %08X\n", cpustate->pc-1);
1697   fatalerror("32051: unimplemented op push at %08X\n", m_pc-1);
17011698}
17021699
1703static void op_rpt_mem(tms32051_state *cpustate)
1700void tms32051_device::op_rpt_mem()
17041701{
1705   UINT16 ea = GET_ADDRESS(cpustate);
1706   UINT16 data = DM_READ16(cpustate, ea);
1707   cpustate->rptc = data;
1708   cpustate->rpt_start = cpustate->pc;
1709   cpustate->rpt_end = cpustate->pc;
1702   UINT16 ea = GET_ADDRESS();
1703   UINT16 data = DM_READ16(ea);
1704   m_rptc = data;
1705   m_rpt_start = m_pc;
1706   m_rpt_end = m_pc;
17101707
17111708   CYCLES(1);
17121709}
17131710
1714static void op_rpt_limm(tms32051_state *cpustate)
1711void tms32051_device::op_rpt_limm()
17151712{
1716   cpustate->rptc = (UINT16)ROPCODE(cpustate);
1717   cpustate->rpt_start = cpustate->pc;
1718   cpustate->rpt_end = cpustate->pc;
1713   m_rptc = (UINT16)ROPCODE();
1714   m_rpt_start = m_pc;
1715   m_rpt_end = m_pc;
17191716
17201717   CYCLES(2);
17211718}
17221719
1723static void op_rpt_simm(tms32051_state *cpustate)
1720void tms32051_device::op_rpt_simm()
17241721{
1725   cpustate->rptc = (cpustate->op & 0xff);
1726   cpustate->rpt_start = cpustate->pc;
1727   cpustate->rpt_end = cpustate->pc;
1722   m_rptc = (m_op & 0xff);
1723   m_rpt_start = m_pc;
1724   m_rpt_end = m_pc;
17281725
17291726   CYCLES(1);
17301727}
17311728
1732static void op_rptb(tms32051_state *cpustate)
1729void tms32051_device::op_rptb()
17331730{
1734   UINT16 pma = ROPCODE(cpustate);
1735   cpustate->pmst.braf = 1;
1736   cpustate->pasr = cpustate->pc;
1737   cpustate->paer = pma + 1;
1731   UINT16 pma = ROPCODE();
1732   m_pmst.braf = 1;
1733   m_pasr = m_pc;
1734   m_paer = pma + 1;
17381735
17391736   CYCLES(2);
17401737}
17411738
1742static void op_rptz(tms32051_state *cpustate)
1739void tms32051_device::op_rptz()
17431740{
1744   fatalerror("32051: unimplemented op rptz at %08X\n", cpustate->pc-1);
1741   fatalerror("32051: unimplemented op rptz at %08X\n", m_pc-1);
17451742}
17461743
1747static void op_setc_ov(tms32051_state *cpustate)
1744void tms32051_device::op_setc_ov()
17481745{
1749   cpustate->st0.ovm = 1;
1746   m_st0.ovm = 1;
17501747
17511748   CYCLES(1);
17521749}
17531750
1754static void op_setc_ext(tms32051_state *cpustate)
1751void tms32051_device::op_setc_ext()
17551752{
1756   cpustate->st1.sxm = 1;
1753   m_st1.sxm = 1;
17571754
17581755   CYCLES(1);
17591756}
17601757
1761static void op_setc_hold(tms32051_state *cpustate)
1758void tms32051_device::op_setc_hold()
17621759{
1763   fatalerror("32051: unimplemented op setc hold at %08X\n", cpustate->pc-1);
1760   fatalerror("32051: unimplemented op setc hold at %08X\n", m_pc-1);
17641761}
17651762
1766static void op_setc_tc(tms32051_state *cpustate)
1763void tms32051_device::op_setc_tc()
17671764{
1768   fatalerror("32051: unimplemented op setc tc at %08X\n", cpustate->pc-1);
1765   fatalerror("32051: unimplemented op setc tc at %08X\n", m_pc-1);
17691766}
17701767
1771static void op_setc_carry(tms32051_state *cpustate)
1768void tms32051_device::op_setc_carry()
17721769{
1773   fatalerror("32051: unimplemented op setc carry at %08X\n", cpustate->pc-1);
1770   fatalerror("32051: unimplemented op setc carry at %08X\n", m_pc-1);
17741771}
17751772
1776static void op_setc_xf(tms32051_state *cpustate)
1773void tms32051_device::op_setc_xf()
17771774{
1778   fatalerror("32051: unimplemented op setc xf at %08X\n", cpustate->pc-1);
1775   fatalerror("32051: unimplemented op setc xf at %08X\n", m_pc-1);
17791776}
17801777
1781static void op_setc_cnf(tms32051_state *cpustate)
1778void tms32051_device::op_setc_cnf()
17821779{
1783   cpustate->st1.cnf = 1;
1780   m_st1.cnf = 1;
17841781
17851782   CYCLES(1);
17861783}
17871784
1788static void op_setc_intm(tms32051_state *cpustate)
1785void tms32051_device::op_setc_intm()
17891786{
1790   cpustate->st0.intm = 1;
1787   m_st0.intm = 1;
17911788
1792   check_interrupts(cpustate);
1789   check_interrupts();
17931790
17941791   CYCLES(1);
17951792}
17961793
1797static void op_sst_st0(tms32051_state *cpustate)
1794void tms32051_device::op_sst_st0()
17981795{
1799   fatalerror("32051: unimplemented op sst st0 at %08X\n", cpustate->pc-1);
1796   fatalerror("32051: unimplemented op sst st0 at %08X\n", m_pc-1);
18001797}
18011798
1802static void op_sst_st1(tms32051_state *cpustate)
1799void tms32051_device::op_sst_st1()
18031800{
1804   fatalerror("32051: unimplemented op sst st1 at %08X\n", cpustate->pc-1);
1801   fatalerror("32051: unimplemented op sst st1 at %08X\n", m_pc-1);
18051802}
trunk/src/emu/cpu/tms32051/tms32051.c
r26840r26841
4646   TMS32051_AR7,
4747};
4848
49struct PMST
50{
51   UINT16 iptr;
52   UINT16 avis;
53   UINT16 ovly;
54   UINT16 ram;
55   UINT16 mpmc;
56   UINT16 ndx;
57   UINT16 trm;
58   UINT16 braf;
59};
6049
61struct ST0
62{
63   UINT16 dp;
64   UINT16 intm;
65   UINT16 ovm;
66   UINT16 ov;
67   UINT16 arp;
68};
50const device_type TMS32051 = &device_creator<tms32051_device>;
6951
70struct ST1
71{
72   UINT16 arb;
73   UINT16 cnf;
74   UINT16 tc;
75   UINT16 sxm;
76   UINT16 c;
77   UINT16 hm;
78   UINT16 xf;
79   UINT16 pm;
80};
8152
82struct tms32051_state
83{
84   UINT16 pc;
85   UINT16 op;
86   INT32 acc;
87   INT32 accb;
88   INT32 preg;
89   UINT16 treg0;
90   UINT16 treg1;
91   UINT16 treg2;
92   UINT16 ar[8];
93   INT32 rptc;
53/**************************************************************************
54 * Internal memory map
55 **************************************************************************/
9456
95   UINT16 bmar;
96   INT32 brcr;
97   UINT16 paer;
98   UINT16 pasr;
99   UINT16 indx;
100   UINT16 dbmr;
101   UINT16 arcr;
57static ADDRESS_MAP_START( internal_pgm, AS_PROGRAM, 16, tms32051_device )
58   AM_RANGE(0x0000, 0x1fff) AM_ROM                         // ROM          TODO: is off-chip if MP/_MC = 0
59   AM_RANGE(0x2000, 0x23ff) AM_RAM AM_SHARE("saram")       // SARAM        TODO: is off-chip if RAM bit = 0
60   AM_RANGE(0xfe00, 0xffff) AM_RAM AM_SHARE("daram_b0")    // DARAM B0     TODO: is off-chip if CNF = 0
61ADDRESS_MAP_END
10262
103   ST0 st0;
104   ST1 st1;
105   PMST pmst;
63static ADDRESS_MAP_START( internal_data, AS_DATA, 16, tms32051_device )
64   AM_RANGE(0x0000, 0x005f) AM_READWRITE(cpuregs_r, cpuregs_w)
65   AM_RANGE(0x0060, 0x007f) AM_RAM                         // DARAM B2
66   AM_RANGE(0x0100, 0x02ff) AM_RAM AM_SHARE("daram_b0")    // DARAM B0     TODO: is unconnected if CNF = 1
67   AM_RANGE(0x0300, 0x04ff) AM_RAM                         // DARAM B1
68   AM_RANGE(0x0800, 0x0bff) AM_RAM AM_SHARE("saram")       // SARAM        TODO: is off-chip if OVLY = 0
69ADDRESS_MAP_END
10670
107   UINT16 ifr;
108   UINT16 imr;
10971
110   UINT16 pcstack[8];
111   int pcstack_ptr;
72tms32051_device::tms32051_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
73   : cpu_device(mconfig, TMS32051, "TMS32051", tag, owner, clock, "tms32051", __FILE__)
74   , m_program_config("program", ENDIANNESS_LITTLE, 16, 16, -1, ADDRESS_MAP_NAME(internal_pgm))
75   , m_data_config("data", ENDIANNESS_LITTLE, 16, 16, -1, ADDRESS_MAP_NAME(internal_data))
76{
77}
11278
113   UINT16 rpt_start, rpt_end;
11479
115   UINT16 cbcr;
116   UINT16 cbsr1;
117   UINT16 cber1;
118   UINT16 cbsr2;
119   UINT16 cber2;
120
121   struct
122   {
123      int tddr;
124      int psc;
125      UINT16 tim;
126      UINT16 prd;
127   } timer;
128
129   struct
130   {
131      INT32 acc;
132      INT32 accb;
133      UINT16 arcr;
134      UINT16 indx;
135      PMST pmst;
136      INT32 preg;
137      ST0 st0;
138      ST1 st1;
139      INT32 treg0;
140      INT32 treg1;
141      INT32 treg2;
142   } shadow;
143
144   legacy_cpu_device *device;
145   address_space *program;
146   direct_read_data *direct;
147   address_space *data;
148   int icount;
149};
150
151INLINE tms32051_state *get_safe_token(device_t *device)
80offs_t tms32051_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
15281{
153   assert(device != NULL);
154   assert(device->type() == TMS32051);
155   return (tms32051_state *)downcast<legacy_cpu_device *>(device)->token();
82   extern CPU_DISASSEMBLE( tms32051 );
83   return CPU_DISASSEMBLE_NAME(tms32051)(this, buffer, pc, oprom, opram, options);
15684}
15785
158static void delay_slot(tms32051_state *cpustate, UINT16 startpc);
159static void save_interrupt_context(tms32051_state *cpustate);
160static void restore_interrupt_context(tms32051_state *cpustate);
161static void check_interrupts(tms32051_state *cpustate);
16286
87#define CYCLES(x)       (m_icount -= x)
16388
164#define CYCLES(x)       (cpustate->icount -= x)
89#define ROPCODE()       m_direct->read_decrypted_word((m_pc++) << 1)
16590
166#define ROPCODE(cpustate)       cpustate->direct->read_decrypted_word((cpustate->pc++) << 1)
167
168INLINE void CHANGE_PC(tms32051_state *cpustate, UINT16 new_pc)
91void tms32051_device::CHANGE_PC(UINT16 new_pc)
16992{
170   cpustate->pc = new_pc;
93   m_pc = new_pc;
17194}
17295
173INLINE UINT16 PM_READ16(tms32051_state *cpustate, UINT16 address)
96UINT16 tms32051_device::PM_READ16(UINT16 address)
17497{
175   return cpustate->program->read_word(address << 1);
98   return m_program->read_word(address << 1);
17699}
177100
178INLINE void PM_WRITE16(tms32051_state *cpustate, UINT16 address, UINT16 data)
101void tms32051_device::PM_WRITE16(UINT16 address, UINT16 data)
179102{
180   cpustate->program->write_word(address << 1, data);
103   m_program->write_word(address << 1, data);
181104}
182105
183INLINE UINT16 DM_READ16(tms32051_state *cpustate, UINT16 address)
106UINT16 tms32051_device::DM_READ16(UINT16 address)
184107{
185   return cpustate->data->read_word(address << 1);
108   return m_data->read_word(address << 1);
186109}
187110
188INLINE void DM_WRITE16(tms32051_state *cpustate, UINT16 address, UINT16 data)
111void tms32051_device::DM_WRITE16(UINT16 address, UINT16 data)
189112{
190   cpustate->data->write_word(address << 1, data);
113   m_data->write_word(address << 1, data);
191114}
192115
193116#include "32051ops.c"
194117#include "32051ops.h"
195118
196static void op_group_be(tms32051_state *cpustate)
119void tms32051_device::op_group_be()
197120{
198   tms32051_opcode_table_be[cpustate->op & 0xff](cpustate);
121   (this->*s_opcode_table_be[m_op & 0xff])();
199122}
200123
201static void op_group_bf(tms32051_state *cpustate)
124void tms32051_device::op_group_bf()
202125{
203   tms32051_opcode_table_bf[cpustate->op & 0xff](cpustate);
126   (this->*s_opcode_table_bf[m_op & 0xff])();
204127}
205128
206static void delay_slot(tms32051_state *cpustate, UINT16 startpc)
129void tms32051_device::delay_slot(UINT16 startpc)
207130{
208   cpustate->op = ROPCODE(cpustate);
209   tms32051_opcode_table[cpustate->op >> 8](cpustate);
131   m_op = ROPCODE();
132   (this->*s_opcode_table[m_op >> 8])();
210133
211   while (cpustate->pc - startpc < 2)
134   while (m_pc - startpc < 2)
212135   {
213      cpustate->op = ROPCODE(cpustate);
214      tms32051_opcode_table[cpustate->op >> 8](cpustate);
136      m_op = ROPCODE();
137      (this->*s_opcode_table[m_op >> 8])();
215138   }
216139}
217140
218141/*****************************************************************************/
219142
220static CPU_INIT( tms )
143void tms32051_device::device_start()
221144{
222   tms32051_state *cpustate = get_safe_token(device);
145   m_program = &space(AS_PROGRAM);
146   m_direct = &m_program->direct();
147   m_data = &space(AS_DATA);
223148
224   cpustate->device = device;
225   cpustate->program = &device->space(AS_PROGRAM);
226   cpustate->direct = &cpustate->program->direct();
227   cpustate->data = &device->space(AS_DATA);
149   m_pcstack_ptr = 0;
150   m_op = 0;
151   m_acc = 0;
152   m_accb = 0;
153   m_preg = 0;
154   m_treg0 = 0;
155   m_treg1 = 0;
156   m_treg2 = 0;
157   memset(m_ar, 0, sizeof(m_ar));
158   m_bmar = 0;
159   m_brcr = 0;
160   m_paer = 0;
161   m_pasr = 0;
162   m_indx = 0;
163   m_dbmr = 0;
164   m_arcr = 0;
165   memset(&m_st0, 0, sizeof(m_st0));
166   memset(&m_st1, 0, sizeof(m_st1));
167   memset(&m_pmst, 0, sizeof(m_pmst));
168   memset(m_pcstack, 0, sizeof(m_pcstack));
169   m_imr = 0;
170   m_cbsr1 = 0;
171   m_cber1 = 0;
172   m_cbsr2 = 0;
173   m_cber2 = 0;
174   memset(&m_timer, 0, sizeof(m_timer));
228175
229   cpustate->pcstack_ptr = 0;
176   state_add( TMS32051_PC,    "PC", m_pc).formatstr("%04X");
177   state_add( TMS32051_ACC,   "ACC", m_acc).formatstr("%08X");
178   state_add( TMS32051_ACCB,  "ACCB", m_accb).formatstr("%08X");
179   state_add( TMS32051_PREG,  "PREG", m_preg).formatstr("%08X");
180   state_add( TMS32051_TREG0, "TREG0", m_treg0).formatstr("%04X");
181   state_add( TMS32051_TREG1, "TREG1", m_treg1).formatstr("%04X");
182   state_add( TMS32051_TREG2, "TREG2", m_treg2).formatstr("%04X");
183   state_add( TMS32051_BMAR,  "BMAR", m_bmar).formatstr("%08X");
184   state_add( TMS32051_RPTC,  "RPTC", m_rptc).formatstr("%08X");
185   state_add( TMS32051_BRCR,  "BRCR", m_brcr).formatstr("%08X");
186   state_add( TMS32051_INDX,  "INDX", m_indx).formatstr("%04X");
187   state_add( TMS32051_DBMR,  "DBMR", m_dbmr).formatstr("%04X");
188   state_add( TMS32051_ARCR,  "ARCR", m_arcr).formatstr("%04X");
189   state_add( TMS32051_DP,    "DP", m_st0.dp).formatstr("%04X");
190   state_add( TMS32051_ARP,   "ARP", m_st0.arp).formatstr("%04X");
191   state_add( TMS32051_ARB,   "ARB", m_st1.arb).formatstr("%04X");
192   state_add( TMS32051_AR0,   "AR0", m_ar[0]).formatstr("%04X");
193   state_add( TMS32051_AR1,   "AR1", m_ar[1]).formatstr("%04X");
194   state_add( TMS32051_AR2,   "AR2", m_ar[2]).formatstr("%04X");
195   state_add( TMS32051_AR3,   "AR3", m_ar[3]).formatstr("%04X");
196   state_add( TMS32051_AR4,   "AR4", m_ar[4]).formatstr("%04X");
197   state_add( TMS32051_AR5,   "AR5", m_ar[5]).formatstr("%04X");
198   state_add( TMS32051_AR6,   "AR6", m_ar[6]).formatstr("%04X");
199   state_add( TMS32051_AR7,   "AR7", m_ar[7]).formatstr("%04X");
200
201   state_add(STATE_GENPC, "GENPC", m_pc).formatstr("%04X").noshow();
202
203   m_icountptr = &m_icount;
230204}
231205
232static CPU_RESET( tms )
206void tms32051_device::device_reset()
233207{
234   tms32051_state *cpustate = get_safe_token(device);
235
236208   // reset registers
237   cpustate->st0.intm  = 1;
238   cpustate->st0.ov    = 0;
239   cpustate->st1.c     = 1;
240   cpustate->st1.cnf   = 0;
241   cpustate->st1.hm    = 1;
242   cpustate->st1.pm    = 0;
243   cpustate->st1.sxm   = 1;
244   cpustate->st1.xf    = 1;
245   cpustate->pmst.avis = 0;
246   cpustate->pmst.braf = 0;
247   cpustate->pmst.iptr = 0;
248   cpustate->pmst.ndx  = 0;
249   cpustate->pmst.ovly = 0;
250   cpustate->pmst.ram  = 0;
251   cpustate->pmst.mpmc = 0; // TODO: this is set to logical pin state at reset
252   cpustate->pmst.trm  = 0;
253   cpustate->ifr       = 0;
254   cpustate->cbcr      = 0;
255   cpustate->rptc      = -1;
209   m_st0.intm  = 1;
210   m_st0.ov    = 0;
211   m_st1.c     = 1;
212   m_st1.cnf   = 0;
213   m_st1.hm    = 1;
214   m_st1.pm    = 0;
215   m_st1.sxm   = 1;
216   m_st1.xf    = 1;
217   m_pmst.avis = 0;
218   m_pmst.braf = 0;
219   m_pmst.iptr = 0;
220   m_pmst.ndx  = 0;
221   m_pmst.ovly = 0;
222   m_pmst.ram  = 0;
223   m_pmst.mpmc = 0; // TODO: this is set to logical pin state at reset
224   m_pmst.trm  = 0;
225   m_ifr       = 0;
226   m_cbcr      = 0;
227   m_rptc      = -1;
256228
257229   // simulate internal rom boot loader (can be removed when the dsp rom(s) is dumped)
258   cpustate->st0.intm  = 1;
259   cpustate->st1.cnf   = 1;
260   cpustate->pmst.ram  = 1;
261   cpustate->pmst.ovly = 0;
230   m_st0.intm  = 1;
231   m_st1.cnf   = 1;
232   m_pmst.ram  = 1;
233   m_pmst.ovly = 0;
262234
263235   int i;
264236   UINT16 src, dst, length;
265237
266238   src = 0x7800;
267   dst = DM_READ16(cpustate, src++);
268   length = DM_READ16(cpustate, src++);
239   dst = DM_READ16(src++);
240   length = DM_READ16(src++);
269241
270   CHANGE_PC(cpustate, dst);
242   CHANGE_PC(dst);
271243
272244   /* TODO: if you soft reset on Taito JC it tries to do a 0x7802->0x9007 (0xff00) transfer. */
273245   for (i=0; i < (length & 0x7ff); i++)
274246   {
275      UINT16 data = DM_READ16(cpustate, src++);
276      PM_WRITE16(cpustate, dst++, data);
247      UINT16 data = DM_READ16(src++);
248      PM_WRITE16(dst++, data);
277249   }
278250}
279251
280static void check_interrupts(tms32051_state *cpustate)
252void tms32051_device::check_interrupts()
281253{
282254   int i;
283255
284   if (cpustate->st0.intm == 0 && cpustate->ifr != 0)
256   if (m_st0.intm == 0 && m_ifr != 0)
285257   {
286258      for (i=0; i < 16; i++)
287259      {
288         if (cpustate->ifr & (1 << i))
260         if (m_ifr & (1 << i))
289261         {
290            cpustate->st0.intm = 1;
291            PUSH_STACK(cpustate, cpustate->pc);
262            m_st0.intm = 1;
263            PUSH_STACK(m_pc);
292264
293            cpustate->pc = (cpustate->pmst.iptr << 11) | ((i+1) << 1);
294            cpustate->ifr &= ~(1 << i);
265            m_pc = (m_pmst.iptr << 11) | ((i+1) << 1);
266            m_ifr &= ~(1 << i);
295267
296            save_interrupt_context(cpustate);
268            save_interrupt_context();
297269            break;
298270         }
299271      }
300272   }
301273}
302274
303static void save_interrupt_context(tms32051_state *cpustate)
275void tms32051_device::save_interrupt_context()
304276{
305   cpustate->shadow.acc        = cpustate->acc;
306   cpustate->shadow.accb       = cpustate->accb;
307   cpustate->shadow.arcr       = cpustate->arcr;
308   cpustate->shadow.indx       = cpustate->indx;
309   cpustate->shadow.preg       = cpustate->preg;
310   cpustate->shadow.treg0  = cpustate->treg0;
311   cpustate->shadow.treg1  = cpustate->treg1;
312   cpustate->shadow.treg2  = cpustate->treg2;
313   memcpy(&cpustate->shadow.pmst, &cpustate->pmst, sizeof(PMST));
314   memcpy(&cpustate->shadow.st0, &cpustate->st0, sizeof(ST0));
315   memcpy(&cpustate->shadow.st1, &cpustate->st1, sizeof(ST1));
277   m_shadow.acc        = m_acc;
278   m_shadow.accb       = m_accb;
279   m_shadow.arcr       = m_arcr;
280   m_shadow.indx       = m_indx;
281   m_shadow.preg       = m_preg;
282   m_shadow.treg0  = m_treg0;
283   m_shadow.treg1  = m_treg1;
284   m_shadow.treg2  = m_treg2;
285   memcpy(&m_shadow.pmst, &m_pmst, sizeof(TMS32051_PMST));
286   memcpy(&m_shadow.st0, &m_st0, sizeof(TMS32051_ST0));
287   memcpy(&m_shadow.st1, &m_st1, sizeof(TMS32051_ST1));
316288}
317289
318static void restore_interrupt_context(tms32051_state *cpustate)
290void tms32051_device::restore_interrupt_context()
319291{
320   cpustate->acc               = cpustate->shadow.acc;
321   cpustate->accb          = cpustate->shadow.accb;
322   cpustate->arcr          = cpustate->shadow.arcr;
323   cpustate->indx          = cpustate->shadow.indx;
324   cpustate->preg          = cpustate->shadow.preg;
325   cpustate->treg0         = cpustate->shadow.treg0;
326   cpustate->treg1         = cpustate->shadow.treg1;
327   cpustate->treg2         = cpustate->shadow.treg2;
328   memcpy(&cpustate->pmst, &cpustate->shadow.pmst, sizeof(PMST));
329   memcpy(&cpustate->st0, &cpustate->shadow.st0, sizeof(ST0));
330   memcpy(&cpustate->st1, &cpustate->shadow.st1, sizeof(ST1));
292   m_acc               = m_shadow.acc;
293   m_accb          = m_shadow.accb;
294   m_arcr          = m_shadow.arcr;
295   m_indx          = m_shadow.indx;
296   m_preg          = m_shadow.preg;
297   m_treg0         = m_shadow.treg0;
298   m_treg1         = m_shadow.treg1;
299   m_treg2         = m_shadow.treg2;
300   memcpy(&m_pmst, &m_shadow.pmst, sizeof(TMS32051_PMST));
301   memcpy(&m_st0, &m_shadow.st0, sizeof(TMS32051_ST0));
302   memcpy(&m_st1, &m_shadow.st1, sizeof(TMS32051_ST1));
331303}
332304
333static void tms_interrupt(tms32051_state *cpustate, int irq)
305void tms32051_device::execute_set_input(int irq, int state)
334306{
335   if ((cpustate->imr & (1 << irq)) != 0)
307   if ( state == ASSERT_LINE )
336308   {
337      cpustate->ifr |= 1 << irq;
338   }
309      if ((m_imr & (1 << irq)) != 0)
310      {
311         m_ifr |= 1 << irq;
312      }
339313
340   check_interrupts(cpustate);
314      check_interrupts();
315   }
341316}
342317
343static CPU_EXIT( tms )
344{
345   /* TODO */
346}
347318
348static CPU_EXECUTE( tms )
319void tms32051_device::execute_run()
349320{
350   tms32051_state *cpustate = get_safe_token(device);
351
352   while(cpustate->icount > 0)
321   while(m_icount > 0)
353322   {
354323      UINT16 ppc;
355324
356325      // handle block repeat
357      if (cpustate->pmst.braf)
326      if (m_pmst.braf)
358327      {
359         if (cpustate->pc == cpustate->paer)
328         if (m_pc == m_paer)
360329         {
361            if (cpustate->brcr > 0)
330            if (m_brcr > 0)
362331            {
363               CHANGE_PC(cpustate, cpustate->pasr);
332               CHANGE_PC(m_pasr);
364333            }
365334
366            cpustate->brcr--;
367            if (cpustate->brcr <= 0)
335            m_brcr--;
336            if (m_brcr <= 0)
368337            {
369               cpustate->pmst.braf = 0;
338               m_pmst.braf = 0;
370339            }
371340         }
372341      }
373342
374      ppc = cpustate->pc;
375      debugger_instruction_hook(device, cpustate->pc);
343      ppc = m_pc;
344      debugger_instruction_hook(this, m_pc);
376345
377      cpustate->op = ROPCODE(cpustate);
378      tms32051_opcode_table[cpustate->op >> 8](cpustate);
346      m_op = ROPCODE();
347      (this->*s_opcode_table[m_op >> 8])();
379348
380349      // handle single repeat
381      if (cpustate->rptc > 0)
350      if (m_rptc > 0)
382351      {
383         if (ppc == cpustate->rpt_end)
352         if (ppc == m_rpt_end)
384353         {
385            CHANGE_PC(cpustate, cpustate->rpt_start);
386            cpustate->rptc--;
354            CHANGE_PC(m_rpt_start);
355            m_rptc--;
387356         }
388357      }
389358      else
390359      {
391         cpustate->rptc = 0;
360         m_rptc = 0;
392361      }
393362
394      cpustate->timer.psc--;
395      if (cpustate->timer.psc <= 0)
363      m_timer.psc--;
364      if (m_timer.psc <= 0)
396365      {
397         cpustate->timer.psc = cpustate->timer.tddr;
398         cpustate->timer.tim--;
399         if (cpustate->timer.tim <= 0)
366         m_timer.psc = m_timer.tddr;
367         m_timer.tim--;
368         if (m_timer.tim <= 0)
400369         {
401370            // reset timer
402            cpustate->timer.tim = cpustate->timer.prd;
371            m_timer.tim = m_timer.prd;
403372
404            tms_interrupt(cpustate, INTERRUPT_TINT);
373            execute_set_input(INTERRUPT_TINT, ASSERT_LINE);
405374         }
406375      }
407376   }
r26840r26841
410379
411380/*****************************************************************************/
412381
413static READ16_HANDLER( cpuregs_r )
382READ16_MEMBER( tms32051_device::cpuregs_r )
414383{
415   tms32051_state *cpustate = get_safe_token(&space.device());
416
417384   switch (offset)
418385   {
419      case 0x04:  return cpustate->imr;
420      case 0x06:  return cpustate->ifr;
386      case 0x04:  return m_imr;
387      case 0x06:  return m_ifr;
421388
422389      case 0x07:      // PMST
423390      {
424391         UINT16 r = 0;
425         r |= cpustate->pmst.iptr << 11;
426         r |= cpustate->pmst.avis << 7;
427         r |= cpustate->pmst.ovly << 5;
428         r |= cpustate->pmst.ram << 4;
429         r |= cpustate->pmst.mpmc << 3;
430         r |= cpustate->pmst.ndx << 2;
431         r |= cpustate->pmst.trm << 1;
432         r |= cpustate->pmst.braf << 0;
392         r |= m_pmst.iptr << 11;
393         r |= m_pmst.avis << 7;
394         r |= m_pmst.ovly << 5;
395         r |= m_pmst.ram << 4;
396         r |= m_pmst.mpmc << 3;
397         r |= m_pmst.ndx << 2;
398         r |= m_pmst.trm << 1;
399         r |= m_pmst.braf << 0;
433400         return r;
434401      }
435402
436      case 0x09:  return cpustate->brcr;
437      case 0x10:  return cpustate->ar[0];
438      case 0x11:  return cpustate->ar[1];
439      case 0x12:  return cpustate->ar[2];
440      case 0x13:  return cpustate->ar[3];
441      case 0x14:  return cpustate->ar[4];
442      case 0x15:  return cpustate->ar[5];
443      case 0x16:  return cpustate->ar[6];
444      case 0x17:  return cpustate->ar[7];
445      case 0x1e:  return cpustate->cbcr;
446      case 0x1f:  return cpustate->bmar;
447      case 0x24:  return cpustate->timer.tim;
448      case 0x25:  return cpustate->timer.prd;
403      case 0x09:  return m_brcr;
404      case 0x10:  return m_ar[0];
405      case 0x11:  return m_ar[1];
406      case 0x12:  return m_ar[2];
407      case 0x13:  return m_ar[3];
408      case 0x14:  return m_ar[4];
409      case 0x15:  return m_ar[5];
410      case 0x16:  return m_ar[6];
411      case 0x17:  return m_ar[7];
412      case 0x1e:  return m_cbcr;
413      case 0x1f:  return m_bmar;
414      case 0x24:  return m_timer.tim;
415      case 0x25:  return m_timer.prd;
449416
450417      case 0x26:      // TCR
451418      {
452419         UINT16 r = 0;
453         r |= (cpustate->timer.psc & 0xf) << 6;
454         r |= (cpustate->timer.tddr & 0xf);
420         r |= (m_timer.psc & 0xf) << 6;
421         r |= (m_timer.tddr & 0xf);
455422         return r;
456423      }
457424
458425      case 0x28:  return 0;   // PDWSR
459426      default:
460427      if(!space.debugger_access())
461         fatalerror("32051: cpuregs_r: unimplemented memory-mapped register %02X at %04X\n", offset, cpustate->pc-1);
428         fatalerror("32051: cpuregs_r: unimplemented memory-mapped register %02X at %04X\n", offset, m_pc-1);
462429   }
463430
464431   return 0;
465432}
466433
467static WRITE16_HANDLER( cpuregs_w )
434WRITE16_MEMBER( tms32051_device::cpuregs_w )
468435{
469   tms32051_state *cpustate = get_safe_token(&space.device());
470
471436   switch (offset)
472437   {
473438      case 0x00:  break;
474      case 0x04:  cpustate->imr = data; break;
439      case 0x04:  m_imr = data; break;
475440      case 0x06:      // IFR
476441      {
477442         int i;
r26840r26841
479444         {
480445            if (data & (1 << i))
481446            {
482               cpustate->ifr &= ~(1 << i);
447               m_ifr &= ~(1 << i);
483448            }
484449         }
485450         break;
r26840r26841
487452
488453      case 0x07:      // PMST
489454      {
490         cpustate->pmst.iptr = (data >> 11) & 0x1f;
491         cpustate->pmst.avis = (data & 0x80) ? 1 : 0;
492         cpustate->pmst.ovly = (data & 0x20) ? 1 : 0;
493         cpustate->pmst.ram = (data & 0x10) ? 1 : 0;
494         cpustate->pmst.mpmc = (data & 0x08) ? 1 : 0;
495         cpustate->pmst.ndx = (data & 0x04) ? 1 : 0;
496         cpustate->pmst.trm = (data & 0x02) ? 1 : 0;
497         cpustate->pmst.braf = (data & 0x01) ? 1 : 0;
455         m_pmst.iptr = (data >> 11) & 0x1f;
456         m_pmst.avis = (data & 0x80) ? 1 : 0;
457         m_pmst.ovly = (data & 0x20) ? 1 : 0;
458         m_pmst.ram = (data & 0x10) ? 1 : 0;
459         m_pmst.mpmc = (data & 0x08) ? 1 : 0;
460         m_pmst.ndx = (data & 0x04) ? 1 : 0;
461         m_pmst.trm = (data & 0x02) ? 1 : 0;
462         m_pmst.braf = (data & 0x01) ? 1 : 0;
498463         break;
499464      }
500465
501      case 0x09:  cpustate->brcr = data; break;
502      case 0x0e:  cpustate->treg2 = data; break;
503      case 0x0f:  cpustate->dbmr = data; break;
504      case 0x10:  cpustate->ar[0] = data; break;
505      case 0x11:  cpustate->ar[1] = data; break;
506      case 0x12:  cpustate->ar[2] = data; break;
507      case 0x13:  cpustate->ar[3] = data; break;
508      case 0x14:  cpustate->ar[4] = data; break;
509      case 0x15:  cpustate->ar[5] = data; break;
510      case 0x16:  cpustate->ar[6] = data; break;
511      case 0x17:  cpustate->ar[7] = data; break;
512      case 0x18:  cpustate->indx = data; break;
513      case 0x19:  cpustate->arcr = data; break;
514      case 0x1a:  cpustate->cbsr1 = data; break;
515      case 0x1b:  cpustate->cber1 = data; break;
516      case 0x1c:  cpustate->cbsr2 = data; break;
517      case 0x1d:  cpustate->cber2 = data; break;
518      case 0x1e:  cpustate->cbcr = data; break;
519      case 0x1f:  cpustate->bmar = data; break;
520      case 0x24:  cpustate->timer.tim = data; break;
521      case 0x25:  cpustate->timer.prd = data; break;
466      case 0x09:  m_brcr = data; break;
467      case 0x0e:  m_treg2 = data; break;
468      case 0x0f:  m_dbmr = data; break;
469      case 0x10:  m_ar[0] = data; break;
470      case 0x11:  m_ar[1] = data; break;
471      case 0x12:  m_ar[2] = data; break;
472      case 0x13:  m_ar[3] = data; break;
473      case 0x14:  m_ar[4] = data; break;
474      case 0x15:  m_ar[5] = data; break;
475      case 0x16:  m_ar[6] = data; break;
476      case 0x17:  m_ar[7] = data; break;
477      case 0x18:  m_indx = data; break;
478      case 0x19:  m_arcr = data; break;
479      case 0x1a:  m_cbsr1 = data; break;
480      case 0x1b:  m_cber1 = data; break;
481      case 0x1c:  m_cbsr2 = data; break;
482      case 0x1d:  m_cber2 = data; break;
483      case 0x1e:  m_cbcr = data; break;
484      case 0x1f:  m_bmar = data; break;
485      case 0x24:  m_timer.tim = data; break;
486      case 0x25:  m_timer.prd = data; break;
522487
523488      case 0x26:      // TCR
524489      {
525         cpustate->timer.tddr = data & 0xf;
526         cpustate->timer.psc = (data >> 6) & 0xf;
490         m_timer.tddr = data & 0xf;
491         m_timer.psc = (data >> 6) & 0xf;
527492
528493         if (data & 0x20)
529494         {
530            cpustate->timer.tim = cpustate->timer.prd;
531            cpustate->timer.psc = cpustate->timer.tddr;
495            m_timer.tim = m_timer.prd;
496            m_timer.psc = m_timer.tddr;
532497         }
533498         break;
534499      }
r26840r26841
536501      case 0x28:  break;      // PDWSR
537502      default:
538503      if(!space.debugger_access())
539         fatalerror("32051: cpuregs_w: unimplemented memory-mapped register %02X, data %04X at %04X\n", offset, data, cpustate->pc-1);
504         fatalerror("32051: cpuregs_w: unimplemented memory-mapped register %02X, data %04X at %04X\n", offset, data, m_pc-1);
540505   }
541506}
542507
543/**************************************************************************
544 * Internal memory map
545 **************************************************************************/
546508
547static ADDRESS_MAP_START( internal_pgm, AS_PROGRAM, 16, legacy_cpu_device )
548   AM_RANGE(0x0000, 0x1fff) AM_ROM                         // ROM          TODO: is off-chip if MP/_MC = 0
549   AM_RANGE(0x2000, 0x23ff) AM_RAM AM_SHARE("saram")       // SARAM        TODO: is off-chip if RAM bit = 0
550   AM_RANGE(0xfe00, 0xffff) AM_RAM AM_SHARE("daram_b0")    // DARAM B0     TODO: is off-chip if CNF = 0
551ADDRESS_MAP_END
509bool tms32051_device::memory_read(address_spacenum spacenum, offs_t offset, int size, UINT64 &value)
552510
553static ADDRESS_MAP_START( internal_data, AS_DATA, 16, legacy_cpu_device )
554   AM_RANGE(0x0000, 0x005f) AM_READWRITE_LEGACY(cpuregs_r, cpuregs_w)
555   AM_RANGE(0x0060, 0x007f) AM_RAM                         // DARAM B2
556   AM_RANGE(0x0100, 0x02ff) AM_RAM AM_SHARE("daram_b0")    // DARAM B0     TODO: is unconnected if CNF = 1
557   AM_RANGE(0x0300, 0x04ff) AM_RAM                         // DARAM B1
558   AM_RANGE(0x0800, 0x0bff) AM_RAM AM_SHARE("saram")       // SARAM        TODO: is off-chip if OVLY = 0
559ADDRESS_MAP_END
560
561/**************************************************************************
562 * Generic set_info
563 **************************************************************************/
564
565static CPU_SET_INFO( tms )
566511{
567   tms32051_state *cpustate = get_safe_token(device);
568
569   switch (state)
570   {
571      case CPUINFO_INT_PC:
572      case CPUINFO_INT_REGISTER + TMS32051_PC:        cpustate->pc = info->i;                     break;
573   }
574}
575
576static CPU_READ( tms )
577{
578   tms32051_state *cpustate = get_safe_token(device);
579512   /* TODO: alignment if offset is odd */
580   if (space == AS_PROGRAM)
513   if (spacenum == AS_PROGRAM)
581514   {
582      *value = (PM_READ16(cpustate, offset>>1));
515      value = (PM_READ16(offset>>1));
583516   }
584   else if (space == AS_DATA)
517   else if (spacenum == AS_DATA)
585518   {
586      *value = (DM_READ16(cpustate, offset>>1));
519      value = (DM_READ16(offset>>1));
587520   }
588521   return 1;
589522}
590523
591static CPU_GET_INFO( tms )
592{
593   tms32051_state *cpustate = (device != NULL && device->token() != NULL) ? get_safe_token(device) : NULL;
594
595   switch(state)
596   {
597      /* --- the following bits of info are returned as 64-bit signed integers --- */
598      case CPUINFO_INT_CONTEXT_SIZE:                  info->i = sizeof(tms32051_state);                   break;
599      case CPUINFO_INT_INPUT_LINES:                   info->i = 6;                            break;
600      case CPUINFO_INT_DEFAULT_IRQ_VECTOR:            info->i = 0;                            break;
601      case CPUINFO_INT_ENDIANNESS:                    info->i = ENDIANNESS_LITTLE;                    break;
602      case CPUINFO_INT_CLOCK_MULTIPLIER:              info->i = 1;                            break;
603      case CPUINFO_INT_CLOCK_DIVIDER:                 info->i = 1;                            break;
604      case CPUINFO_INT_MIN_INSTRUCTION_BYTES:         info->i = 2;                            break;
605      case CPUINFO_INT_MAX_INSTRUCTION_BYTES:         info->i = 4;                            break;
606      case CPUINFO_INT_MIN_CYCLES:                    info->i = 1;                            break;
607      case CPUINFO_INT_MAX_CYCLES:                    info->i = 5;                            break;
608
609      case CPUINFO_INT_DATABUS_WIDTH + AS_PROGRAM:    info->i = 16;                   break;
610      case CPUINFO_INT_ADDRBUS_WIDTH + AS_PROGRAM: info->i = 16;                  break;
611      case CPUINFO_INT_ADDRBUS_SHIFT + AS_PROGRAM: info->i = -1;                  break;
612      case CPUINFO_INT_DATABUS_WIDTH + AS_DATA:   info->i = 16;                   break;
613      case CPUINFO_INT_ADDRBUS_WIDTH + AS_DATA:   info->i = 16;                   break;
614      case CPUINFO_INT_ADDRBUS_SHIFT + AS_DATA:   info->i = -1;                   break;
615      case CPUINFO_INT_DATABUS_WIDTH + AS_IO:     info->i = 0;                    break;
616      case CPUINFO_INT_ADDRBUS_WIDTH + AS_IO:     info->i = 0;                    break;
617      case CPUINFO_INT_ADDRBUS_SHIFT + AS_IO:     info->i = 0;                    break;
618
619      case CPUINFO_INT_INPUT_STATE:                   info->i = CLEAR_LINE;                   break;
620
621      case CPUINFO_INT_PREVIOUSPC:                    /* not implemented */                   break;
622
623      case CPUINFO_INT_PC:
624      case CPUINFO_INT_REGISTER + TMS32051_PC:        info->i = cpustate->pc;                     break;
625      case CPUINFO_INT_REGISTER + TMS32051_ACC:       info->i = cpustate->acc;                        break;
626      case CPUINFO_INT_REGISTER + TMS32051_ACCB:      info->i = cpustate->accb;                       break;
627      case CPUINFO_INT_REGISTER + TMS32051_PREG:      info->i = cpustate->preg;                       break;
628      case CPUINFO_INT_REGISTER + TMS32051_TREG0:     info->i = cpustate->treg0;                  break;
629      case CPUINFO_INT_REGISTER + TMS32051_TREG1:     info->i = cpustate->treg1;                  break;
630      case CPUINFO_INT_REGISTER + TMS32051_TREG2:     info->i = cpustate->treg2;                  break;
631      case CPUINFO_INT_REGISTER + TMS32051_BMAR:      info->i = cpustate->bmar;                       break;
632      case CPUINFO_INT_REGISTER + TMS32051_RPTC:      info->i = cpustate->rptc;                       break;
633      case CPUINFO_INT_REGISTER + TMS32051_BRCR:      info->i = cpustate->brcr;                       break;
634      case CPUINFO_INT_REGISTER + TMS32051_INDX:      info->i = cpustate->indx;                       break;
635      case CPUINFO_INT_REGISTER + TMS32051_DBMR:      info->i = cpustate->dbmr;                       break;
636      case CPUINFO_INT_REGISTER + TMS32051_ARCR:      info->i = cpustate->arcr;                       break;
637      case CPUINFO_INT_REGISTER + TMS32051_DP:        info->i = cpustate->st0.dp;                 break;
638      case CPUINFO_INT_REGISTER + TMS32051_ARP:       info->i = cpustate->st0.arp;                    break;
639      case CPUINFO_INT_REGISTER + TMS32051_ARB:       info->i = cpustate->st1.arb;                    break;
640      case CPUINFO_INT_REGISTER + TMS32051_AR0:       info->i = cpustate->ar[0];                  break;
641      case CPUINFO_INT_REGISTER + TMS32051_AR1:       info->i = cpustate->ar[1];                  break;
642      case CPUINFO_INT_REGISTER + TMS32051_AR2:       info->i = cpustate->ar[2];                  break;
643      case CPUINFO_INT_REGISTER + TMS32051_AR3:       info->i = cpustate->ar[3];                  break;
644      case CPUINFO_INT_REGISTER + TMS32051_AR4:       info->i = cpustate->ar[4];                  break;
645      case CPUINFO_INT_REGISTER + TMS32051_AR5:       info->i = cpustate->ar[5];                  break;
646      case CPUINFO_INT_REGISTER + TMS32051_AR6:       info->i = cpustate->ar[6];                  break;
647      case CPUINFO_INT_REGISTER + TMS32051_AR7:       info->i = cpustate->ar[7];                  break;
648
649      /* --- the following bits of info are returned as pointers to data or functions --- */
650      case CPUINFO_FCT_INIT:                          info->init = CPU_INIT_NAME(tms);                    break;
651      case CPUINFO_FCT_RESET:                         info->reset = CPU_RESET_NAME(tms);              break;
652      case CPUINFO_FCT_EXIT:                          info->exit = CPU_EXIT_NAME(tms);                    break;
653      case CPUINFO_FCT_EXECUTE:                       info->execute = CPU_EXECUTE_NAME(tms);          break;
654      case CPUINFO_FCT_BURN:                          info->burn = NULL;                      break;
655      case CPUINFO_FCT_DISASSEMBLE:                   info->disassemble = CPU_DISASSEMBLE_NAME(tms32051);     break;
656      case CPUINFO_FCT_READ:                          info->read = CPU_READ_NAME(tms);            break;
657      case CPUINFO_PTR_INSTRUCTION_COUNTER:           info->icount = &cpustate->icount;               break;
658      case CPUINFO_PTR_INTERNAL_MEMORY_MAP + AS_PROGRAM: info->internal_map16 = ADDRESS_MAP_NAME(internal_pgm); break;
659      case CPUINFO_PTR_INTERNAL_MEMORY_MAP + AS_DATA: info->internal_map16 = ADDRESS_MAP_NAME(internal_data); break;
660
661      /* --- the following bits of info are returned as NULL-terminated strings --- */
662      case CPUINFO_STR_FAMILY:                    strcpy(info->s, "TMS3205x");            break;
663      case CPUINFO_STR_VERSION:                   strcpy(info->s, "1.0");                 break;
664      case CPUINFO_STR_SOURCE_FILE:                       strcpy(info->s, __FILE__);              break;
665      case CPUINFO_STR_CREDITS:                   strcpy(info->s, "Copyright Ville Linde"); break;
666
667      case CPUINFO_STR_FLAGS:                         strcpy(info->s, " ");                   break;
668
669      case CPUINFO_STR_REGISTER + TMS32051_PC:        sprintf(info->s, "PC: %04X", cpustate->pc); break;
670      case CPUINFO_STR_REGISTER + TMS32051_ACC:       sprintf(info->s, "ACC: %08X", cpustate->acc); break;
671      case CPUINFO_STR_REGISTER + TMS32051_ACCB:      sprintf(info->s, "ACCB: %08X", cpustate->accb); break;
672      case CPUINFO_STR_REGISTER + TMS32051_PREG:      sprintf(info->s, "PREG: %08X", cpustate->preg); break;
673      case CPUINFO_STR_REGISTER + TMS32051_TREG0:     sprintf(info->s, "TREG0: %04X", cpustate->treg0); break;
674      case CPUINFO_STR_REGISTER + TMS32051_TREG1:     sprintf(info->s, "TREG1: %04X", cpustate->treg1); break;
675      case CPUINFO_STR_REGISTER + TMS32051_TREG2:     sprintf(info->s, "TREG2: %04X", cpustate->treg2); break;
676      case CPUINFO_STR_REGISTER + TMS32051_BMAR:      sprintf(info->s, "BMAR: %08X", cpustate->bmar); break;
677      case CPUINFO_STR_REGISTER + TMS32051_RPTC:      sprintf(info->s, "RPTC: %08X", cpustate->rptc); break;
678      case CPUINFO_STR_REGISTER + TMS32051_BRCR:      sprintf(info->s, "BRCR: %08X", cpustate->brcr); break;
679      case CPUINFO_STR_REGISTER + TMS32051_INDX:      sprintf(info->s, "INDX: %04X", cpustate->indx); break;
680      case CPUINFO_STR_REGISTER + TMS32051_DBMR:      sprintf(info->s, "DBMR: %04X", cpustate->dbmr); break;
681      case CPUINFO_STR_REGISTER + TMS32051_ARCR:      sprintf(info->s, "ARCR: %04X", cpustate->arcr); break;
682      case CPUINFO_STR_REGISTER + TMS32051_DP:        sprintf(info->s, "DP: %04X", cpustate->st0.dp); break;
683      case CPUINFO_STR_REGISTER + TMS32051_ARP:       sprintf(info->s, "ARP: %04X", cpustate->st0.arp); break;
684      case CPUINFO_STR_REGISTER + TMS32051_ARB:       sprintf(info->s, "ARB: %04X", cpustate->st1.arb); break;
685      case CPUINFO_STR_REGISTER + TMS32051_AR0:       sprintf(info->s, "AR0: %04X", cpustate->ar[0]); break;
686      case CPUINFO_STR_REGISTER + TMS32051_AR1:       sprintf(info->s, "AR1: %04X", cpustate->ar[1]); break;
687      case CPUINFO_STR_REGISTER + TMS32051_AR2:       sprintf(info->s, "AR2: %04X", cpustate->ar[2]); break;
688      case CPUINFO_STR_REGISTER + TMS32051_AR3:       sprintf(info->s, "AR3: %04X", cpustate->ar[3]); break;
689      case CPUINFO_STR_REGISTER + TMS32051_AR4:       sprintf(info->s, "AR4: %04X", cpustate->ar[4]); break;
690      case CPUINFO_STR_REGISTER + TMS32051_AR5:       sprintf(info->s, "AR5: %04X", cpustate->ar[5]); break;
691      case CPUINFO_STR_REGISTER + TMS32051_AR6:       sprintf(info->s, "AR6: %04X", cpustate->ar[6]); break;
692      case CPUINFO_STR_REGISTER + TMS32051_AR7:       sprintf(info->s, "AR7: %04X", cpustate->ar[7]); break;
693   }
694}
695
696static CPU_SET_INFO( tms32051 )
697{
698   tms32051_state *cpustate = get_safe_token(device);
699
700   if (state >= CPUINFO_INT_INPUT_STATE && state <= CPUINFO_INT_INPUT_STATE + 5)
701   {
702      return;
703   }
704   switch(state)
705   {
706      case CPUINFO_INT_PC:
707      case CPUINFO_INT_REGISTER + TMS32051_PC:        cpustate->pc = info->i;                         break;
708      case CPUINFO_INT_REGISTER + TMS32051_ACC:       cpustate->acc = info->i;                        break;
709      case CPUINFO_INT_REGISTER + TMS32051_ACCB:      cpustate->accb = info->i;                       break;
710      case CPUINFO_INT_REGISTER + TMS32051_PREG:      cpustate->preg = info->i;                       break;
711      case CPUINFO_INT_REGISTER + TMS32051_TREG0:     cpustate->treg0 = info->i;                  break;
712      case CPUINFO_INT_REGISTER + TMS32051_TREG1:     cpustate->treg1 = info->i;                  break;
713      case CPUINFO_INT_REGISTER + TMS32051_TREG2:     cpustate->treg2 = info->i;                  break;
714      case CPUINFO_INT_REGISTER + TMS32051_BMAR:      cpustate->bmar = info->i;                       break;
715      case CPUINFO_INT_REGISTER + TMS32051_BRCR:      cpustate->brcr = info->i;                       break;
716      case CPUINFO_INT_REGISTER + TMS32051_INDX:      cpustate->indx = info->i;                       break;
717      case CPUINFO_INT_REGISTER + TMS32051_DBMR:      cpustate->dbmr = info->i;                       break;
718      case CPUINFO_INT_REGISTER + TMS32051_ARCR:      cpustate->arcr = info->i;                       break;
719      case CPUINFO_INT_REGISTER + TMS32051_DP:        cpustate->st0.dp = info->i;                 break;
720      case CPUINFO_INT_REGISTER + TMS32051_ARP:       cpustate->st0.arp = info->i;                    break;
721      case CPUINFO_INT_REGISTER + TMS32051_ARB:       cpustate->st1.arb = info->i;                    break;
722      case CPUINFO_INT_REGISTER + TMS32051_AR0:       cpustate->ar[0] = info->i;                  break;
723      case CPUINFO_INT_REGISTER + TMS32051_AR1:       cpustate->ar[1] = info->i;                  break;
724      case CPUINFO_INT_REGISTER + TMS32051_AR2:       cpustate->ar[2] = info->i;                  break;
725      case CPUINFO_INT_REGISTER + TMS32051_AR3:       cpustate->ar[3] = info->i;                  break;
726      case CPUINFO_INT_REGISTER + TMS32051_AR4:       cpustate->ar[4] = info->i;                  break;
727      case CPUINFO_INT_REGISTER + TMS32051_AR5:       cpustate->ar[5] = info->i;                  break;
728      case CPUINFO_INT_REGISTER + TMS32051_AR6:       cpustate->ar[6] = info->i;                  break;
729      case CPUINFO_INT_REGISTER + TMS32051_AR7:       cpustate->ar[7] = info->i;                  break;
730
731      default:                                        CPU_SET_INFO_CALL(tms);             break;
732   }
733}
734
735CPU_GET_INFO( tms32051 )
736{
737   switch(state)
738   {
739      /* --- the following bits of info are returned as pointers to data or functions --- */
740      case CPUINFO_FCT_SET_INFO:                      info->setinfo = CPU_SET_INFO_NAME(tms32051);        break;
741
742      /* --- the following bits of info are returned as NULL-terminated strings --- */
743      case CPUINFO_STR_NAME:                          strcpy(info->s, "TMS32051");            break;
744      case CPUINFO_STR_SHORTNAME:                     strcpy(info->s, "tms32051");            break;
745
746      default:                                        CPU_GET_INFO_CALL(tms);             break;
747   }
748}
749
750DEFINE_LEGACY_CPU_DEVICE(TMS32051, tms32051);
trunk/src/emu/cpu/tms32051/32051ops.h
r26840r26841
1static void (*const tms32051_opcode_table[256])(tms32051_state *cpustate) =
1const tms32051_device::opcode_func tms32051_device::s_opcode_table[256] =
22{
33   /* 0x00 - 0x0f */
4   op_lar_mem,     op_lar_mem,     op_lar_mem,     op_lar_mem,
5   op_lar_mem,     op_lar_mem,     op_lar_mem,     op_lar_mem,
6   op_lamm,        op_smmr,        op_subc,        op_rpt_mem,
7   op_out,         op_ldp_mem,     op_lst_st0,     op_lst_st1,
4   &tms32051_device::op_lar_mem,     &tms32051_device::op_lar_mem,     &tms32051_device::op_lar_mem,     &tms32051_device::op_lar_mem,
5   &tms32051_device::op_lar_mem,     &tms32051_device::op_lar_mem,     &tms32051_device::op_lar_mem,     &tms32051_device::op_lar_mem,
6   &tms32051_device::op_lamm,        &tms32051_device::op_smmr,        &tms32051_device::op_subc,        &tms32051_device::op_rpt_mem,
7   &tms32051_device::op_out,         &tms32051_device::op_ldp_mem,     &tms32051_device::op_lst_st0,     &tms32051_device::op_lst_st1,
88   /* 0x10 - 0x1f */
9   op_lacc_mem,    op_lacc_mem,    op_lacc_mem,    op_lacc_mem,
10   op_lacc_mem,    op_lacc_mem,    op_lacc_mem,    op_lacc_mem,
11   op_lacc_mem,    op_lacc_mem,    op_lacc_mem,    op_lacc_mem,
12   op_lacc_mem,    op_lacc_mem,    op_lacc_mem,    op_lacc_mem,
9   &tms32051_device::op_lacc_mem,    &tms32051_device::op_lacc_mem,    &tms32051_device::op_lacc_mem,    &tms32051_device::op_lacc_mem,
10   &tms32051_device::op_lacc_mem,    &tms32051_device::op_lacc_mem,    &tms32051_device::op_lacc_mem,    &tms32051_device::op_lacc_mem,
11   &tms32051_device::op_lacc_mem,    &tms32051_device::op_lacc_mem,    &tms32051_device::op_lacc_mem,    &tms32051_device::op_lacc_mem,
12   &tms32051_device::op_lacc_mem,    &tms32051_device::op_lacc_mem,    &tms32051_device::op_lacc_mem,    &tms32051_device::op_lacc_mem,
1313   /* 0x20 - 0x2f */
14   op_add_mem,     op_add_mem,     op_add_mem,     op_add_mem,
15   op_add_mem,     op_add_mem,     op_add_mem,     op_add_mem,
16   op_add_mem,     op_add_mem,     op_add_mem,     op_add_mem,
17   op_add_mem,     op_add_mem,     op_add_mem,     op_add_mem,
14   &tms32051_device::op_add_mem,     &tms32051_device::op_add_mem,     &tms32051_device::op_add_mem,     &tms32051_device::op_add_mem,
15   &tms32051_device::op_add_mem,     &tms32051_device::op_add_mem,     &tms32051_device::op_add_mem,     &tms32051_device::op_add_mem,
16   &tms32051_device::op_add_mem,     &tms32051_device::op_add_mem,     &tms32051_device::op_add_mem,     &tms32051_device::op_add_mem,
17   &tms32051_device::op_add_mem,     &tms32051_device::op_add_mem,     &tms32051_device::op_add_mem,     &tms32051_device::op_add_mem,
1818   /* 0x30 - 0x3f */
19   op_sub_mem,     op_sub_mem,     op_sub_mem,     op_sub_mem,
20   op_sub_mem,     op_sub_mem,     op_sub_mem,     op_sub_mem,
21   op_sub_mem,     op_sub_mem,     op_sub_mem,     op_sub_mem,
22   op_sub_mem,     op_sub_mem,     op_sub_mem,     op_sub_mem,
19   &tms32051_device::op_sub_mem,     &tms32051_device::op_sub_mem,     &tms32051_device::op_sub_mem,     &tms32051_device::op_sub_mem,
20   &tms32051_device::op_sub_mem,     &tms32051_device::op_sub_mem,     &tms32051_device::op_sub_mem,     &tms32051_device::op_sub_mem,
21   &tms32051_device::op_sub_mem,     &tms32051_device::op_sub_mem,     &tms32051_device::op_sub_mem,     &tms32051_device::op_sub_mem,
22   &tms32051_device::op_sub_mem,     &tms32051_device::op_sub_mem,     &tms32051_device::op_sub_mem,     &tms32051_device::op_sub_mem,
2323   /* 0x40 - 0x4f */
24   op_bit,         op_bit,         op_bit,         op_bit,
25   op_bit,         op_bit,         op_bit,         op_bit,
26   op_bit,         op_bit,         op_bit,         op_bit,
27   op_bit,         op_bit,         op_bit,         op_bit,
24   &tms32051_device::op_bit,         &tms32051_device::op_bit,         &tms32051_device::op_bit,         &tms32051_device::op_bit,
25   &tms32051_device::op_bit,         &tms32051_device::op_bit,         &tms32051_device::op_bit,         &tms32051_device::op_bit,
26   &tms32051_device::op_bit,         &tms32051_device::op_bit,         &tms32051_device::op_bit,         &tms32051_device::op_bit,
27   &tms32051_device::op_bit,         &tms32051_device::op_bit,         &tms32051_device::op_bit,         &tms32051_device::op_bit,
2828   /* 0x50 - 0x5f */
29   op_mpya,        op_mpys,        op_sqra,        op_sqrs,
30   op_mpy_mem,     op_mpyu,        op_invalid,     op_bldp,
31   op_xpl_dbmr,    op_opl_dbmr,    op_apl_dbmr,    op_cpl_dbmr,
32   op_xpl_imm,     op_opl_imm,     op_apl_imm,     op_cpl_imm,
29   &tms32051_device::op_mpya,        &tms32051_device::op_mpys,        &tms32051_device::op_sqra,        &tms32051_device::op_sqrs,
30   &tms32051_device::op_mpy_mem,     &tms32051_device::op_mpyu,        &tms32051_device::op_invalid,     &tms32051_device::op_bldp,
31   &tms32051_device::op_xpl_dbmr,    &tms32051_device::op_opl_dbmr,    &tms32051_device::op_apl_dbmr,    &tms32051_device::op_cpl_dbmr,
32   &tms32051_device::op_xpl_imm,     &tms32051_device::op_opl_imm,     &tms32051_device::op_apl_imm,     &tms32051_device::op_cpl_imm,
3333   /* 0x60 - 0x6f */
34   op_addc,        op_add_s16_mem, op_adds,        op_addt,
35   op_subb,        op_sub_s16_mem, op_subs,        op_subt,
36   op_zalr,        op_lacl_mem,    op_lacc_s16_mem,op_lact,
37   op_xor_mem,     op_or_mem,      op_and_mem,     op_bitt,
34   &tms32051_device::op_addc,        &tms32051_device::op_add_s16_mem, &tms32051_device::op_adds,        &tms32051_device::op_addt,
35   &tms32051_device::op_subb,        &tms32051_device::op_sub_s16_mem, &tms32051_device::op_subs,        &tms32051_device::op_subt,
36   &tms32051_device::op_zalr,        &tms32051_device::op_lacl_mem,    &tms32051_device::op_lacc_s16_mem,&tms32051_device::op_lact,
37   &tms32051_device::op_xor_mem,     &tms32051_device::op_or_mem,      &tms32051_device::op_and_mem,     &tms32051_device::op_bitt,
3838   /* 0x70 - 0x7f */
39   op_lta,         op_ltp,         op_ltd,         op_lt,
40   op_lts,         op_lph,         op_pshd,        op_dmov,
41   op_adrk,        op_b,           op_call,        op_banz,
42   op_sbrk,        op_bd,          op_calld,       op_banzd,
39   &tms32051_device::op_lta,         &tms32051_device::op_ltp,         &tms32051_device::op_ltd,         &tms32051_device::op_lt,
40   &tms32051_device::op_lts,         &tms32051_device::op_lph,         &tms32051_device::op_pshd,        &tms32051_device::op_dmov,
41   &tms32051_device::op_adrk,        &tms32051_device::op_b,           &tms32051_device::op_call,        &tms32051_device::op_banz,
42   &tms32051_device::op_sbrk,        &tms32051_device::op_bd,          &tms32051_device::op_calld,       &tms32051_device::op_banzd,
4343   /* 0x80 - 0x8f */
44   op_sar,         op_sar,         op_sar,         op_sar,
45   op_sar,         op_sar,         op_sar,         op_sar,
46   op_samm,        op_lmmr,        op_popd,        op_mar,
47   op_spl,         op_sph,         op_sst_st0,     op_sst_st1,
44   &tms32051_device::op_sar,         &tms32051_device::op_sar,         &tms32051_device::op_sar,         &tms32051_device::op_sar,
45   &tms32051_device::op_sar,         &tms32051_device::op_sar,         &tms32051_device::op_sar,         &tms32051_device::op_sar,
46   &tms32051_device::op_samm,        &tms32051_device::op_lmmr,        &tms32051_device::op_popd,        &tms32051_device::op_mar,
47   &tms32051_device::op_spl,         &tms32051_device::op_sph,         &tms32051_device::op_sst_st0,     &tms32051_device::op_sst_st1,
4848   /* 0x90 - 0x9f */
49   op_sacl,        op_sacl,        op_sacl,        op_sacl,
50   op_sacl,        op_sacl,        op_sacl,        op_sacl,
51   op_sach,        op_sach,        op_sach,        op_sach,
52   op_sach,        op_sach,        op_sach,        op_sach,
49   &tms32051_device::op_sacl,        &tms32051_device::op_sacl,        &tms32051_device::op_sacl,        &tms32051_device::op_sacl,
50   &tms32051_device::op_sacl,        &tms32051_device::op_sacl,        &tms32051_device::op_sacl,        &tms32051_device::op_sacl,
51   &tms32051_device::op_sach,        &tms32051_device::op_sach,        &tms32051_device::op_sach,        &tms32051_device::op_sach,
52   &tms32051_device::op_sach,        &tms32051_device::op_sach,        &tms32051_device::op_sach,        &tms32051_device::op_sach,
5353   /* 0xa0 - 0xaf */
54   op_norm,        op_invalid,     op_mac,         op_macd,
55   op_blpd_bmar,   op_blpd_imm,    op_tblr,        op_tblw,
56   op_bldd_slimm,  op_bldd_dlimm,  op_mads,        op_madd,
57   op_bldd_sbmar,  op_bldd_dbmar,  op_splk,        op_in,
54   &tms32051_device::op_norm,        &tms32051_device::op_invalid,     &tms32051_device::op_mac,         &tms32051_device::op_macd,
55   &tms32051_device::op_blpd_bmar,   &tms32051_device::op_blpd_imm,    &tms32051_device::op_tblr,        &tms32051_device::op_tblw,
56   &tms32051_device::op_bldd_slimm,  &tms32051_device::op_bldd_dlimm,  &tms32051_device::op_mads,        &tms32051_device::op_madd,
57   &tms32051_device::op_bldd_sbmar,  &tms32051_device::op_bldd_dbmar,  &tms32051_device::op_splk,        &tms32051_device::op_in,
5858   /* 0xb0 - 0xbf */
59   op_lar_simm,    op_lar_simm,    op_lar_simm,    op_lar_simm,
60   op_lar_simm,    op_lar_simm,    op_lar_simm,    op_lar_simm,
61   op_add_simm,    op_lacl_simm,   op_sub_simm,    op_rpt_simm,
62   op_ldp_imm,     op_ldp_imm,     op_group_be,    op_group_bf,
59   &tms32051_device::op_lar_simm,    &tms32051_device::op_lar_simm,    &tms32051_device::op_lar_simm,    &tms32051_device::op_lar_simm,
60   &tms32051_device::op_lar_simm,    &tms32051_device::op_lar_simm,    &tms32051_device::op_lar_simm,    &tms32051_device::op_lar_simm,
61   &tms32051_device::op_add_simm,    &tms32051_device::op_lacl_simm,   &tms32051_device::op_sub_simm,    &tms32051_device::op_rpt_simm,
62   &tms32051_device::op_ldp_imm,     &tms32051_device::op_ldp_imm,     &tms32051_device::op_group_be,    &tms32051_device::op_group_bf,
6363   /* 0xc0 - 0xcf */
64   op_mpy_simm,    op_mpy_simm,    op_mpy_simm,    op_mpy_simm,
65   op_mpy_simm,    op_mpy_simm,    op_mpy_simm,    op_mpy_simm,
66   op_mpy_simm,    op_mpy_simm,    op_mpy_simm,    op_mpy_simm,
67   op_mpy_simm,    op_mpy_simm,    op_mpy_simm,    op_mpy_simm,
64   &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,
65   &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,
66   &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,
67   &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,
6868   /* 0xd0 - 0xdf */
69   op_mpy_simm,    op_mpy_simm,    op_mpy_simm,    op_mpy_simm,
70   op_mpy_simm,    op_mpy_simm,    op_mpy_simm,    op_mpy_simm,
71   op_mpy_simm,    op_mpy_simm,    op_mpy_simm,    op_mpy_simm,
72   op_mpy_simm,    op_mpy_simm,    op_mpy_simm,    op_mpy_simm,
69   &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,
70   &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,
71   &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,
72   &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,    &tms32051_device::op_mpy_simm,
7373   /* 0xe0 - 0xef */
74   op_bcnd,        op_bcnd,        op_bcnd,        op_bcnd,
75   op_xc,          op_xc,          op_xc,          op_xc,
76   op_cc,          op_cc,          op_cc,          op_cc,
77   op_retc,        op_retc,        op_retc,        op_retc,
74   &tms32051_device::op_bcnd,        &tms32051_device::op_bcnd,        &tms32051_device::op_bcnd,        &tms32051_device::op_bcnd,
75   &tms32051_device::op_xc,          &tms32051_device::op_xc,          &tms32051_device::op_xc,          &tms32051_device::op_xc,
76   &tms32051_device::op_cc,          &tms32051_device::op_cc,          &tms32051_device::op_cc,          &tms32051_device::op_cc,
77   &tms32051_device::op_retc,        &tms32051_device::op_retc,        &tms32051_device::op_retc,        &tms32051_device::op_retc,
7878   /* 0xf0 - 0xff */
79   op_bcndd,       op_bcndd,       op_bcndd,       op_bcndd,
80   op_xc,          op_xc,          op_xc,          op_xc,
81   op_ccd,         op_ccd,         op_ccd,         op_ccd,
82   op_retcd,       op_retcd,       op_retcd,       op_retcd
79   &tms32051_device::op_bcndd,       &tms32051_device::op_bcndd,       &tms32051_device::op_bcndd,       &tms32051_device::op_bcndd,
80   &tms32051_device::op_xc,          &tms32051_device::op_xc,          &tms32051_device::op_xc,          &tms32051_device::op_xc,
81   &tms32051_device::op_ccd,         &tms32051_device::op_ccd,         &tms32051_device::op_ccd,         &tms32051_device::op_ccd,
82   &tms32051_device::op_retcd,       &tms32051_device::op_retcd,       &tms32051_device::op_retcd,       &tms32051_device::op_retcd
8383};
8484
85static void (*const tms32051_opcode_table_be[256])(tms32051_state *cpustate) =
85const tms32051_device::opcode_func tms32051_device::s_opcode_table_be[256] =
8686{
8787   /* 0x00 - 0x0f */
88   op_abs,         op_cmpl,        op_neg,         op_pac,
89   op_apac,        op_spac,        op_invalid,     op_invalid,
90   op_invalid,     op_sfl,         op_sfr,         op_invalid,
91   op_rol,         op_ror,         op_invalid,     op_invalid,
88   &tms32051_device::op_abs,         &tms32051_device::op_cmpl,        &tms32051_device::op_neg,         &tms32051_device::op_pac,
89   &tms32051_device::op_apac,        &tms32051_device::op_spac,        &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
90   &tms32051_device::op_invalid,     &tms32051_device::op_sfl,         &tms32051_device::op_sfr,         &tms32051_device::op_invalid,
91   &tms32051_device::op_rol,         &tms32051_device::op_ror,         &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
9292   /* 0x10 - 0x1f */
93   op_addb,        op_adcb,        op_andb,        op_orb,
94   op_rolb,        op_rorb,        op_sflb,        op_sfrb,
95   op_sbb,         op_sbbb,        op_xorb,        op_crgt,
96   op_crlt,        op_exar,        op_sacb,        op_lacb,
93   &tms32051_device::op_addb,        &tms32051_device::op_adcb,        &tms32051_device::op_andb,        &tms32051_device::op_orb,
94   &tms32051_device::op_rolb,        &tms32051_device::op_rorb,        &tms32051_device::op_sflb,        &tms32051_device::op_sfrb,
95   &tms32051_device::op_sbb,         &tms32051_device::op_sbbb,        &tms32051_device::op_xorb,        &tms32051_device::op_crgt,
96   &tms32051_device::op_crlt,        &tms32051_device::op_exar,        &tms32051_device::op_sacb,        &tms32051_device::op_lacb,
9797   /* 0x20 - 0x2f */
98   op_bacc,        op_baccd,       op_idle,        op_idle2,
99   op_invalid,     op_invalid,     op_invalid,     op_invalid,
100   op_invalid,     op_invalid,     op_invalid,     op_invalid,
101   op_invalid,     op_invalid,     op_invalid,     op_invalid,
98   &tms32051_device::op_bacc,        &tms32051_device::op_baccd,       &tms32051_device::op_idle,        &tms32051_device::op_idle2,
99   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
100   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
101   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
102102   /* 0x30 - 0x3f */
103   op_cala,        op_invalid,     op_pop,         op_invalid,
104   op_invalid,     op_invalid,     op_invalid,     op_invalid,
105   op_reti,        op_invalid,     op_rete,        op_invalid,
106   op_push,        op_calad,       op_invalid,     op_invalid,
103   &tms32051_device::op_cala,        &tms32051_device::op_invalid,     &tms32051_device::op_pop,         &tms32051_device::op_invalid,
104   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
105   &tms32051_device::op_reti,        &tms32051_device::op_invalid,     &tms32051_device::op_rete,        &tms32051_device::op_invalid,
106   &tms32051_device::op_push,        &tms32051_device::op_calad,       &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
107107   /* 0x40 - 0x4f */
108   op_clrc_intm,   op_setc_intm,   op_clrc_ov,     op_setc_ov,
109   op_clrc_cnf,    op_setc_cnf,    op_clrc_ext,    op_setc_ext,
110   op_clrc_hold,   op_setc_hold,   op_clrc_tc,     op_setc_tc,
111   op_clrc_xf,     op_setc_xf,     op_clrc_carry,  op_setc_carry,
108   &tms32051_device::op_clrc_intm,   &tms32051_device::op_setc_intm,   &tms32051_device::op_clrc_ov,     &tms32051_device::op_setc_ov,
109   &tms32051_device::op_clrc_cnf,    &tms32051_device::op_setc_cnf,    &tms32051_device::op_clrc_ext,    &tms32051_device::op_setc_ext,
110   &tms32051_device::op_clrc_hold,   &tms32051_device::op_setc_hold,   &tms32051_device::op_clrc_tc,     &tms32051_device::op_setc_tc,
111   &tms32051_device::op_clrc_xf,     &tms32051_device::op_setc_xf,     &tms32051_device::op_clrc_carry,  &tms32051_device::op_setc_carry,
112112   /* 0x50 - 0x5f */
113   op_invalid,     op_trap,        op_nmi,         op_invalid,
114   op_invalid,     op_invalid,     op_invalid,     op_invalid,
115   op_zpr,         op_zap,         op_sath,        op_satl,
116   op_invalid,     op_invalid,     op_invalid,     op_invalid,
113   &tms32051_device::op_invalid,     &tms32051_device::op_trap,        &tms32051_device::op_nmi,         &tms32051_device::op_invalid,
114   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
115   &tms32051_device::op_zpr,         &tms32051_device::op_zap,         &tms32051_device::op_sath,        &tms32051_device::op_satl,
116   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
117117   /* 0x60 - 0x6f */
118   op_intr,        op_intr,        op_intr,        op_intr,
119   op_intr,        op_intr,        op_intr,        op_intr,
120   op_intr,        op_intr,        op_intr,        op_intr,
121   op_intr,        op_intr,        op_intr,        op_intr,
118   &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,
119   &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,
120   &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,
121   &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,
122122   /* 0x70 - 0x7f */
123   op_intr,        op_intr,        op_intr,        op_intr,
124   op_intr,        op_intr,        op_intr,        op_intr,
125   op_intr,        op_intr,        op_intr,        op_intr,
126   op_intr,        op_intr,        op_intr,        op_intr,
123   &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,
124   &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,
125   &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,
126   &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,        &tms32051_device::op_intr,
127127   /* 0x80 - 0x8f */
128   op_mpy_limm,    op_and_s16_limm,op_or_s16_limm, op_xor_s16_limm,
129   op_invalid,     op_invalid,     op_invalid,     op_invalid,
130   op_invalid,     op_invalid,     op_invalid,     op_invalid,
131   op_invalid,     op_invalid,     op_invalid,     op_invalid,
128   &tms32051_device::op_mpy_limm,    &tms32051_device::op_and_s16_limm,&tms32051_device::op_or_s16_limm, &tms32051_device::op_xor_s16_limm,
129   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
130   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
131   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
132132   /* 0x90 - 0x9f */
133   op_invalid,     op_invalid,     op_invalid,     op_invalid,
134   op_invalid,     op_invalid,     op_invalid,     op_invalid,
135   op_invalid,     op_invalid,     op_invalid,     op_invalid,
136   op_invalid,     op_invalid,     op_invalid,     op_invalid,
133   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
134   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
135   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
136   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
137137   /* 0xa0 - 0xaf */
138   op_invalid,     op_invalid,     op_invalid,     op_invalid,
139   op_invalid,     op_invalid,     op_invalid,     op_invalid,
140   op_invalid,     op_invalid,     op_invalid,     op_invalid,
141   op_invalid,     op_invalid,     op_invalid,     op_invalid,
138   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
139   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
140   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
141   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
142142   /* 0xb0 - 0xbf */
143   op_invalid,     op_invalid,     op_invalid,     op_invalid,
144   op_invalid,     op_invalid,     op_invalid,     op_invalid,
145   op_invalid,     op_invalid,     op_invalid,     op_invalid,
146   op_invalid,     op_invalid,     op_invalid,     op_invalid,
143   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
144   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
145   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
146   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
147147   /* 0xc0 - 0xcf */
148   op_invalid,     op_invalid,     op_invalid,     op_invalid,
149   op_rpt_limm,    op_rptz,        op_rptb,        op_invalid,
150   op_invalid,     op_invalid,     op_invalid,     op_invalid,
151   op_invalid,     op_invalid,     op_invalid,     op_invalid,
148   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
149   &tms32051_device::op_rpt_limm,    &tms32051_device::op_rptz,        &tms32051_device::op_rptb,        &tms32051_device::op_invalid,
150   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
151   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
152152   /* 0xd0 - 0xdf */
153   op_invalid,     op_invalid,     op_invalid,     op_invalid,
154   op_invalid,     op_invalid,     op_invalid,     op_invalid,
155   op_invalid,     op_invalid,     op_invalid,     op_invalid,
156   op_invalid,     op_invalid,     op_invalid,     op_invalid,
153   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
154   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
155   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
156   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
157157   /* 0xe0 - 0xef */
158   op_invalid,     op_invalid,     op_invalid,     op_invalid,
159   op_invalid,     op_invalid,     op_invalid,     op_invalid,
160   op_invalid,     op_invalid,     op_invalid,     op_invalid,
161   op_invalid,     op_invalid,     op_invalid,     op_invalid,
158   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
159   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
160   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
161   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
162162   /* 0xf0 - 0xff */
163   op_invalid,     op_invalid,     op_invalid,     op_invalid,
164   op_invalid,     op_invalid,     op_invalid,     op_invalid,
165   op_invalid,     op_invalid,     op_invalid,     op_invalid,
166   op_invalid,     op_invalid,     op_invalid,     op_invalid,
163   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
164   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
165   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
166   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
167167};
168168
169static void (*const tms32051_opcode_table_bf[256])(tms32051_state *cpustate) =
169const tms32051_device::opcode_func tms32051_device::s_opcode_table_bf[256] =
170170{
171171   /* 0x00 - 0x0f */
172   op_spm,         op_spm,         op_spm,         op_spm,
173   op_invalid,     op_invalid,     op_invalid,     op_invalid,
174   op_lar_limm,    op_lar_limm,    op_lar_limm,    op_lar_limm,
175   op_lar_limm,    op_lar_limm,    op_lar_limm,    op_lar_limm,
172   &tms32051_device::op_spm,         &tms32051_device::op_spm,         &tms32051_device::op_spm,         &tms32051_device::op_spm,
173   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
174   &tms32051_device::op_lar_limm,    &tms32051_device::op_lar_limm,    &tms32051_device::op_lar_limm,    &tms32051_device::op_lar_limm,
175   &tms32051_device::op_lar_limm,    &tms32051_device::op_lar_limm,    &tms32051_device::op_lar_limm,    &tms32051_device::op_lar_limm,
176176   /* 0x10 - 0x1f */
177   op_invalid,     op_invalid,     op_invalid,     op_invalid,
178   op_invalid,     op_invalid,     op_invalid,     op_invalid,
179   op_invalid,     op_invalid,     op_invalid,     op_invalid,
180   op_invalid,     op_invalid,     op_invalid,     op_invalid,
177   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
178   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
179   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
180   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
181181   /* 0x20 - 0x2f */
182   op_invalid,     op_invalid,     op_invalid,     op_invalid,
183   op_invalid,     op_invalid,     op_invalid,     op_invalid,
184   op_invalid,     op_invalid,     op_invalid,     op_invalid,
185   op_invalid,     op_invalid,     op_invalid,     op_invalid,
182   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
183   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
184   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
185   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
186186   /* 0x30 - 0x3f */
187   op_invalid,     op_invalid,     op_invalid,     op_invalid,
188   op_invalid,     op_invalid,     op_invalid,     op_invalid,
189   op_invalid,     op_invalid,     op_invalid,     op_invalid,
190   op_invalid,     op_invalid,     op_invalid,     op_invalid,
187   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
188   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
189   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
190   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
191191   /* 0x40 - 0x4f */
192   op_invalid,     op_invalid,     op_invalid,     op_invalid,
193   op_cmpr,        op_cmpr,        op_cmpr,        op_cmpr,
194   op_invalid,     op_invalid,     op_invalid,     op_invalid,
195   op_invalid,     op_invalid,     op_invalid,     op_invalid,
192   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
193   &tms32051_device::op_cmpr,        &tms32051_device::op_cmpr,        &tms32051_device::op_cmpr,        &tms32051_device::op_cmpr,
194   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
195   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
196196   /* 0x50 - 0x5f */
197   op_invalid,     op_invalid,     op_invalid,     op_invalid,
198   op_invalid,     op_invalid,     op_invalid,     op_invalid,
199   op_invalid,     op_invalid,     op_invalid,     op_invalid,
200   op_invalid,     op_invalid,     op_invalid,     op_invalid,
197   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
198   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
199   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
200   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
201201   /* 0x60 - 0x6f */
202   op_invalid,     op_invalid,     op_invalid,     op_invalid,
203   op_invalid,     op_invalid,     op_invalid,     op_invalid,
204   op_invalid,     op_invalid,     op_invalid,     op_invalid,
205   op_invalid,     op_invalid,     op_invalid,     op_invalid,
202   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
203   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
204   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
205   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
206206   /* 0x70 - 0x7f */
207   op_invalid,     op_invalid,     op_invalid,     op_invalid,
208   op_invalid,     op_invalid,     op_invalid,     op_invalid,
209   op_invalid,     op_invalid,     op_invalid,     op_invalid,
210   op_invalid,     op_invalid,     op_invalid,     op_invalid,
207   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
208   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
209   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
210   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
211211   /* 0x80 - 0x8f */
212   op_lacc_limm,   op_lacc_limm,   op_lacc_limm,   op_lacc_limm,
213   op_lacc_limm,   op_lacc_limm,   op_lacc_limm,   op_lacc_limm,
214   op_lacc_limm,   op_lacc_limm,   op_lacc_limm,   op_lacc_limm,
215   op_lacc_limm,   op_lacc_limm,   op_lacc_limm,   op_lacc_limm,
212   &tms32051_device::op_lacc_limm,   &tms32051_device::op_lacc_limm,   &tms32051_device::op_lacc_limm,   &tms32051_device::op_lacc_limm,
213   &tms32051_device::op_lacc_limm,   &tms32051_device::op_lacc_limm,   &tms32051_device::op_lacc_limm,   &tms32051_device::op_lacc_limm,
214   &tms32051_device::op_lacc_limm,   &tms32051_device::op_lacc_limm,   &tms32051_device::op_lacc_limm,   &tms32051_device::op_lacc_limm,
215   &tms32051_device::op_lacc_limm,   &tms32051_device::op_lacc_limm,   &tms32051_device::op_lacc_limm,   &tms32051_device::op_lacc_limm,
216216   /* 0x90 - 0x9f */
217   op_add_limm,    op_add_limm,    op_add_limm,    op_add_limm,
218   op_add_limm,    op_add_limm,    op_add_limm,    op_add_limm,
219   op_add_limm,    op_add_limm,    op_add_limm,    op_add_limm,
220   op_add_limm,    op_add_limm,    op_add_limm,    op_add_limm,
217   &tms32051_device::op_add_limm,    &tms32051_device::op_add_limm,    &tms32051_device::op_add_limm,    &tms32051_device::op_add_limm,
218   &tms32051_device::op_add_limm,    &tms32051_device::op_add_limm,    &tms32051_device::op_add_limm,    &tms32051_device::op_add_limm,
219   &tms32051_device::op_add_limm,    &tms32051_device::op_add_limm,    &tms32051_device::op_add_limm,    &tms32051_device::op_add_limm,
220   &tms32051_device::op_add_limm,    &tms32051_device::op_add_limm,    &tms32051_device::op_add_limm,    &tms32051_device::op_add_limm,
221221   /* 0xa0 - 0xaf */
222   op_sub_limm,    op_sub_limm,    op_sub_limm,    op_sub_limm,
223   op_sub_limm,    op_sub_limm,    op_sub_limm,    op_sub_limm,
224   op_sub_limm,    op_sub_limm,    op_sub_limm,    op_sub_limm,
225   op_sub_limm,    op_sub_limm,    op_sub_limm,    op_sub_limm,
222   &tms32051_device::op_sub_limm,    &tms32051_device::op_sub_limm,    &tms32051_device::op_sub_limm,    &tms32051_device::op_sub_limm,
223   &tms32051_device::op_sub_limm,    &tms32051_device::op_sub_limm,    &tms32051_device::op_sub_limm,    &tms32051_device::op_sub_limm,
224   &tms32051_device::op_sub_limm,    &tms32051_device::op_sub_limm,    &tms32051_device::op_sub_limm,    &tms32051_device::op_sub_limm,
225   &tms32051_device::op_sub_limm,    &tms32051_device::op_sub_limm,    &tms32051_device::op_sub_limm,    &tms32051_device::op_sub_limm,
226226   /* 0xb0 - 0xbf */
227   op_and_limm,    op_and_limm,    op_and_limm,    op_and_limm,
228   op_and_limm,    op_and_limm,    op_and_limm,    op_and_limm,
229   op_and_limm,    op_and_limm,    op_and_limm,    op_and_limm,
230   op_and_limm,    op_and_limm,    op_and_limm,    op_and_limm,
227   &tms32051_device::op_and_limm,    &tms32051_device::op_and_limm,    &tms32051_device::op_and_limm,    &tms32051_device::op_and_limm,
228   &tms32051_device::op_and_limm,    &tms32051_device::op_and_limm,    &tms32051_device::op_and_limm,    &tms32051_device::op_and_limm,
229   &tms32051_device::op_and_limm,    &tms32051_device::op_and_limm,    &tms32051_device::op_and_limm,    &tms32051_device::op_and_limm,
230   &tms32051_device::op_and_limm,    &tms32051_device::op_and_limm,    &tms32051_device::op_and_limm,    &tms32051_device::op_and_limm,
231231   /* 0xc0 - 0xcf */
232   op_or_limm,     op_or_limm,     op_or_limm,     op_or_limm,
233   op_or_limm,     op_or_limm,     op_or_limm,     op_or_limm,
234   op_or_limm,     op_or_limm,     op_or_limm,     op_or_limm,
235   op_or_limm,     op_or_limm,     op_or_limm,     op_or_limm,
232   &tms32051_device::op_or_limm,     &tms32051_device::op_or_limm,     &tms32051_device::op_or_limm,     &tms32051_device::op_or_limm,
233   &tms32051_device::op_or_limm,     &tms32051_device::op_or_limm,     &tms32051_device::op_or_limm,     &tms32051_device::op_or_limm,
234   &tms32051_device::op_or_limm,     &tms32051_device::op_or_limm,     &tms32051_device::op_or_limm,     &tms32051_device::op_or_limm,
235   &tms32051_device::op_or_limm,     &tms32051_device::op_or_limm,     &tms32051_device::op_or_limm,     &tms32051_device::op_or_limm,
236236   /* 0xd0 - 0xdf */
237   op_xor_limm,    op_xor_limm,    op_xor_limm,    op_xor_limm,
238   op_xor_limm,    op_xor_limm,    op_xor_limm,    op_xor_limm,
239   op_xor_limm,    op_xor_limm,    op_xor_limm,    op_xor_limm,
240   op_xor_limm,    op_xor_limm,    op_xor_limm,    op_xor_limm,
237   &tms32051_device::op_xor_limm,    &tms32051_device::op_xor_limm,    &tms32051_device::op_xor_limm,    &tms32051_device::op_xor_limm,
238   &tms32051_device::op_xor_limm,    &tms32051_device::op_xor_limm,    &tms32051_device::op_xor_limm,    &tms32051_device::op_xor_limm,
239   &tms32051_device::op_xor_limm,    &tms32051_device::op_xor_limm,    &tms32051_device::op_xor_limm,    &tms32051_device::op_xor_limm,
240   &tms32051_device::op_xor_limm,    &tms32051_device::op_xor_limm,    &tms32051_device::op_xor_limm,    &tms32051_device::op_xor_limm,
241241   /* 0xe0 - 0xef */
242   op_bsar,        op_bsar,        op_bsar,        op_bsar,
243   op_bsar,        op_bsar,        op_bsar,        op_bsar,
244   op_bsar,        op_bsar,        op_bsar,        op_bsar,
245   op_bsar,        op_bsar,        op_bsar,        op_bsar,
242   &tms32051_device::op_bsar,        &tms32051_device::op_bsar,        &tms32051_device::op_bsar,        &tms32051_device::op_bsar,
243   &tms32051_device::op_bsar,        &tms32051_device::op_bsar,        &tms32051_device::op_bsar,        &tms32051_device::op_bsar,
244   &tms32051_device::op_bsar,        &tms32051_device::op_bsar,        &tms32051_device::op_bsar,        &tms32051_device::op_bsar,
245   &tms32051_device::op_bsar,        &tms32051_device::op_bsar,        &tms32051_device::op_bsar,        &tms32051_device::op_bsar,
246246   /* 0xf0 - 0xff */
247   op_invalid,     op_invalid,     op_invalid,     op_invalid,
248   op_invalid,     op_invalid,     op_invalid,     op_invalid,
249   op_invalid,     op_invalid,     op_invalid,     op_invalid,
250   op_invalid,     op_invalid,     op_invalid,     op_invalid,
247   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
248   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
249   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
250   &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,     &tms32051_device::op_invalid,
251251};

Previous 199869 Revisions Next


© 1997-2024 The MAME Team