summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/tms32031/tms32031.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/tms32031/tms32031.h')
-rw-r--r--src/devices/cpu/tms32031/tms32031.h75
1 files changed, 46 insertions, 29 deletions
diff --git a/src/devices/cpu/tms32031/tms32031.h b/src/devices/cpu/tms32031/tms32031.h
index b8f8c212a56..282ac81b7d2 100644
--- a/src/devices/cpu/tms32031/tms32031.h
+++ b/src/devices/cpu/tms32031/tms32031.h
@@ -4,7 +4,7 @@
tms32031.h
- TMS32031/2 emulator
+ TMS320C3x family 32-bit floating point DSP emulator
***************************************************************************/
@@ -31,15 +31,14 @@ const int TMS3203X_IRQ0 = 0; // IRQ0
const int TMS3203X_IRQ1 = 1; // IRQ1
const int TMS3203X_IRQ2 = 2; // IRQ2
const int TMS3203X_IRQ3 = 3; // IRQ3
-const int TMS3203X_XINT0 = 4; // serial 0 transmit interrupt
-const int TMS3203X_RINT0 = 5; // serial 0 receive interrupt
-const int TMS3203X_XINT1 = 6; // serial 1 transmit interrupt
-const int TMS3203X_RINT1 = 7; // serial 1 receive interrupt
+const int TMS3203X_XINT0 = 4; // serial (0) transmit interrupt
+const int TMS3203X_RINT0 = 5; // serial (0) receive interrupt
+const int TMS3203X_XINT1 = 6; // serial 1 transmit interrupt (TMS320C30 only)
+const int TMS3203X_RINT1 = 7; // serial 1 receive interrupt (TMS320C30 only)
const int TMS3203X_TINT0 = 8; // timer 0 interrupt
const int TMS3203X_TINT1 = 9; // timer 1 interrupt
-const int TMS3203X_DINT = 10; // DMA interrupt
-const int TMS3203X_DINT0 = 10; // DMA 0 interrupt (32032 only)
-const int TMS3203X_DINT1 = 11; // DMA 1 interrupt (32032 only)
+const int TMS3203X_DINT0 = 10; // DMA (0) interrupt
+const int TMS3203X_DINT1 = 11; // DMA 1 interrupt (TMS320C32 only)
const int TMS3203X_MCBL = 12; // Microcomputer/boot loader mode
const int TMS3203X_HOLD = 13; // Primary bus interface hold signal
@@ -138,25 +137,26 @@ public:
protected:
enum
{
- CHIP_TYPE_TMS32030,
- CHIP_TYPE_TMS32031,
- CHIP_TYPE_TMS32032
+ CHIP_TYPE_TMS32030, // 'C30
+ CHIP_TYPE_TMS32031, // 'C31/'VC33
+ CHIP_TYPE_TMS32032 // 'C32
};
// construction/destruction
- tms3203x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t chiptype, address_map_constructor internal_map);
- void common_3203x(address_map &map);
+ tms3203x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t chiptype, int clock_per_inst, address_map_constructor internal_map);
+ void common_3203x(address_map &map) ATTR_COLD;
// device-level overrides
- virtual void device_start() override;
- virtual void device_reset() override;
+ virtual void device_start() override ATTR_COLD;
+ virtual void device_reset() override ATTR_COLD;
- virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
// device_execute_interface overrides
- virtual uint32_t execute_min_cycles() const override;
- virtual uint32_t execute_max_cycles() const override;
- virtual uint32_t execute_input_lines() const override;
+ virtual uint32_t execute_min_cycles() const noexcept override;
+ virtual uint32_t execute_max_cycles() const noexcept override;
+ virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override;
+ virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override;
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;
@@ -172,8 +172,8 @@ protected:
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
// internal peripheral device handlers
- DECLARE_READ32_MEMBER(primary_bus_control_r) { return m_primary_bus_control; }
- DECLARE_WRITE32_MEMBER(primary_bus_control_w);
+ uint32_t primary_bus_control_r() { return m_primary_bus_control; }
+ void primary_bus_control_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
// memory helpers
uint32_t ROPCODE(offs_t pc);
@@ -184,6 +184,7 @@ protected:
void check_irqs();
void execute_one();
void update_special(int dreg);
+ void burn_cycle(int cycle);
bool condition(int which);
// floating point helpers
@@ -732,7 +733,7 @@ protected:
// configuration
const address_space_config m_program_config;
- uint32_t m_chip_type;
+ uint32_t m_chip_type;
union int_double
{
@@ -742,9 +743,9 @@ protected:
};
// core registers
- uint32_t m_pc;
+ uint32_t m_pc;
tmsreg m_r[36];
- uint32_t m_bkmask;
+ uint32_t m_bkmask;
// internal peripheral registers
enum primary_bus_control_mask : uint32_t
@@ -766,13 +767,17 @@ protected:
bool m_irq_pending;
bool m_is_idling;
int m_icount;
+ int m_clock_per_inst; // clock per instruction cycle
uint32_t m_iotemp;
- address_space * m_program;
- memory_access_cache<2, -2, ENDIANNESS_LITTLE> *m_cache;
+ memory_access<24, 2, -2, ENDIANNESS_LITTLE>::cache m_cache;
+ memory_access<24, 2, -2, ENDIANNESS_LITTLE>::specific m_program;
+
+ optional_memory_region m_internal_rom;
bool m_mcbl_mode;
bool m_hold_state;
+ bool m_is_lopower;
devcb_write8 m_xf0_cb;
devcb_write8 m_xf1_cb;
@@ -798,7 +803,7 @@ class tms32030_device : public tms3203x_device
public:
// construction/destruction
tms32030_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- void internal_32030(address_map &map);
+ void internal_32030(address_map &map) ATTR_COLD;
};
@@ -809,7 +814,7 @@ class tms32031_device : public tms3203x_device
public:
// construction/destruction
tms32031_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- void internal_32031(address_map &map);
+ void internal_32031(address_map &map) ATTR_COLD;
};
@@ -820,7 +825,18 @@ class tms32032_device : public tms3203x_device
public:
// construction/destruction
tms32032_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- void internal_32032(address_map &map);
+ void internal_32032(address_map &map) ATTR_COLD;
+};
+
+
+// ======================> tms32033_device
+
+class tms32033_device : public tms3203x_device
+{
+public:
+ // construction/destruction
+ tms32033_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ void internal_32033(address_map &map) ATTR_COLD;
};
@@ -828,5 +844,6 @@ public:
DECLARE_DEVICE_TYPE(TMS32030, tms32030_device)
DECLARE_DEVICE_TYPE(TMS32031, tms32031_device)
DECLARE_DEVICE_TYPE(TMS32032, tms32032_device)
+DECLARE_DEVICE_TYPE(TMS32033, tms32033_device)
#endif // MAME_CPU_TMS32031_TMS32031_H