diff options
Diffstat (limited to 'src/devices/cpu/tms32031/tms32031.h')
-rw-r--r-- | src/devices/cpu/tms32031/tms32031.h | 75 |
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 |