Previous 199869 Revisions Next

r32029 Tuesday 9th September, 2014 at 18:31:51 UTC by hap
poking around with taitojc dangcurv
[src/emu/cpu/tms32051]tms32051.c tms32051.h
[src/mame/drivers]taitojc.c

trunk/src/mame/drivers/taitojc.c
r32028r32029
893893}
894894
895895static ADDRESS_MAP_START( tms_program_map, AS_PROGRAM, 16, taitojc_state )
896   AM_RANGE(0x4000, 0x7fff) AM_RAM
896   AM_RANGE(0x0000, 0x1fff) AM_RAM AM_MIRROR(0x4000)
897   AM_RANGE(0x6000, 0x7fff) AM_RAM
897898ADDRESS_MAP_END
898899
899900static ADDRESS_MAP_START( tms_data_map, AS_DATA, 16, taitojc_state )
trunk/src/emu/cpu/tms32051/tms32051.c
r32028r32029
88#include "debugger.h"
99#include "tms32051.h"
1010
11#define INTERRUPT_INT1      0
12#define INTERRUPT_INT2      1
13#define INTERRUPT_INT3      2
14#define INTERRUPT_TINT      3
15#define INTERRUPT_RINT      4
16#define INTERRUPT_XINT      5
17#define INTERRUPT_TRNT      6
18#define INTERRUPT_TXNT      7
19#define INTERRUPT_INT4      8
20
2111enum
2212{
2313   TMS32051_PC = 1,
r32028r32029
5545 **************************************************************************/
5646
5747static 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
48//   AM_RANGE(0x0000, 0x1fff) AM_ROM                         // ROM          TODO: is off-chip if MP/_MC = 0
5949   AM_RANGE(0x2000, 0x23ff) AM_RAM AM_SHARE("saram")       // SARAM        TODO: is off-chip if RAM bit = 0
6050   AM_RANGE(0xfe00, 0xffff) AM_RAM AM_SHARE("daram_b0")    // DARAM B0     TODO: is off-chip if CNF = 0
6151ADDRESS_MAP_END
r32028r32029
251241
252242void tms32051_device::check_interrupts()
253243{
254   int i;
255
256244   if (m_st0.intm == 0 && m_ifr != 0)
257245   {
258      for (i=0; i < 16; i++)
246      for (int i = 0; i < 16; i++)
259247      {
260248         if (m_ifr & (1 << i))
261249         {
r32028r32029
274262
275263void tms32051_device::save_interrupt_context()
276264{
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;
265   m_shadow.acc = m_acc;
266   m_shadow.accb = m_accb;
267   m_shadow.arcr = m_arcr;
268   m_shadow.indx = m_indx;
269   m_shadow.preg = m_preg;
270   m_shadow.treg0 = m_treg0;
271   m_shadow.treg1 = m_treg1;
272   m_shadow.treg2 = m_treg2;
285273   memcpy(&m_shadow.pmst, &m_pmst, sizeof(TMS32051_PMST));
286274   memcpy(&m_shadow.st0, &m_st0, sizeof(TMS32051_ST0));
287275   memcpy(&m_shadow.st1, &m_st1, sizeof(TMS32051_ST1));
r32028r32029
289277
290278void tms32051_device::restore_interrupt_context()
291279{
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;
280   m_acc = m_shadow.acc;
281   m_accb = m_shadow.accb;
282   m_arcr = m_shadow.arcr;
283   m_indx = m_shadow.indx;
284   m_preg = m_shadow.preg;
285   m_treg0 = m_shadow.treg0;
286   m_treg1 = m_shadow.treg1;
287   m_treg2 = m_shadow.treg2;
300288   memcpy(&m_pmst, &m_shadow.pmst, sizeof(TMS32051_PMST));
301289   memcpy(&m_st0, &m_shadow.st0, sizeof(TMS32051_ST0));
302290   memcpy(&m_st1, &m_shadow.st1, sizeof(TMS32051_ST1));
r32028r32029
304292
305293void tms32051_device::execute_set_input(int irq, int state)
306294{
307   if ( state == ASSERT_LINE )
295   if (state == ASSERT_LINE)
308296   {
309297      if ((m_imr & (1 << irq)) != 0)
310298      {
r32028r32029
318306
319307void tms32051_device::execute_run()
320308{
321   while(m_icount > 0)
309   while (m_icount > 0)
322310   {
323311      UINT16 ppc;
324312
r32028r32029
370358            // reset timer
371359            m_timer.tim = m_timer.prd;
372360
373            execute_set_input(INTERRUPT_TINT, ASSERT_LINE);
361            execute_set_input(TMS32051_TINT, ASSERT_LINE);
374362         }
375363      }
376364   }
r32028r32029
409397      case 0x15:  return m_ar[5];
410398      case 0x16:  return m_ar[6];
411399      case 0x17:  return m_ar[7];
400      case 0x18:  return m_indx;
401      case 0x19:  return m_arcr;
402      case 0x1a:  return m_cbsr1;
403      case 0x1b:  return m_cber1;
404      case 0x1c:  return m_cbsr2;
405      case 0x1d:  return m_cber2;
412406      case 0x1e:  return m_cbcr;
413407      case 0x1f:  return m_bmar;
414408      case 0x24:  return m_timer.tim;
r32028r32029
423417      }
424418
425419      case 0x28:  return 0;   // PDWSR
420
426421      default:
427      if(!space.debugger_access())
428         fatalerror("32051: cpuregs_r: unimplemented memory-mapped register %02X at %04X\n", offset, m_pc-1);
422         if (!space.debugger_access())
423            fatalerror("32051: cpuregs_r: unimplemented memory-mapped register %02X at %04X\n", offset, m_pc-1);
429424   }
430425
431426   return 0;
r32028r32029
439434      case 0x04:  m_imr = data; break;
440435      case 0x06:      // IFR
441436      {
442         int i;
443         for (i=0; i < 16; i++)
437         for (int i = 0; i < 16; i++)
444438         {
445439            if (data & (1 << i))
446440            {
r32028r32029
499493      }
500494
501495      case 0x28:  break;      // PDWSR
496
502497      default:
503      if(!space.debugger_access())
504         fatalerror("32051: cpuregs_w: unimplemented memory-mapped register %02X, data %04X at %04X\n", offset, data, m_pc-1);
498         if (!space.debugger_access())
499            fatalerror("32051: cpuregs_w: unimplemented memory-mapped register %02X, data %04X at %04X\n", offset, data, m_pc-1);
505500   }
506501}
507502
508503
509504bool tms32051_device::memory_read(address_spacenum spacenum, offs_t offset, int size, UINT64 &value)
510
511505{
512506   /* TODO: alignment if offset is odd */
513507   if (spacenum == AS_PROGRAM)
trunk/src/emu/cpu/tms32051/tms32051.h
r32028r32029
44#define __TMS32051_H__
55
66
7enum
8{
9   TMS32051_INT1 = 0,
10   TMS32051_INT2,
11   TMS32051_INT3,
12   TMS32051_TINT,
13   TMS32051_RINT,
14   TMS32051_XINT,
15   TMS32051_TRNT,
16   TMS32051_TXNT,
17   TMS32051_INT4
18};
19
720struct TMS32051_PMST
821{
922   UINT16 iptr;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team