summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/tms32010/tms32010.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/tms32010/tms32010.h')
-rw-r--r--src/devices/cpu/tms32010/tms32010.h92
1 files changed, 47 insertions, 45 deletions
diff --git a/src/devices/cpu/tms32010/tms32010.h b/src/devices/cpu/tms32010/tms32010.h
index 2b290a3945e..b240c0b3ab8 100644
--- a/src/devices/cpu/tms32010/tms32010.h
+++ b/src/devices/cpu/tms32010/tms32010.h
@@ -1,14 +1,12 @@
// license:BSD-3-Clause
// copyright-holders:Tony La Porta
- /**************************************************************************\
- * Texas Instruments TMS32010 DSP Emulator *
- * *
- * Copyright Tony La Porta *
- * *
- * Note : This is a word based microcontroller, with addressing *
- * architecture based on the Harvard addressing scheme. *
- * *
- \**************************************************************************/
+/**************************************************************************
+
+ Texas Instruments TMS32010 DSP Emulator
+
+ Copyright Tony La Porta
+
+**************************************************************************/
#ifndef MAME_CPU_TMS32010_TMS32010_H
#define MAME_CPU_TMS32010_TMS32010_H
@@ -30,43 +28,40 @@ enum
* Public Functions
*/
-
-class tms32010_device : public cpu_device
+template <int HighBits>
+class tms3201x_base_device : public cpu_device
{
public:
- // construction/destruction
- tms32010_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
// configuration helpers
auto bio() { return m_bio_in.bind(); }
- void tms32010_ram(address_map &map);
- void tms32015_ram(address_map &map);
protected:
- tms32010_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor data_map, int addr_mask);
+ tms3201x_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor data_map);
- // device-level overrides
- virtual void device_start() override;
- virtual void device_reset() override;
+ // device_t implementation
+ virtual void device_start() override ATTR_COLD;
+ virtual void device_reset() override ATTR_COLD;
- // device_execute_interface overrides
- virtual uint32_t execute_min_cycles() const override { return 1; }
- virtual uint32_t execute_max_cycles() const override { return 3; }
- virtual uint32_t execute_input_lines() const override { return 1; }
+ // device_execute_interface implementation
+ virtual uint32_t execute_min_cycles() const noexcept override { return 1; }
+ virtual uint32_t execute_max_cycles() const noexcept override { return 3; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;
- virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const override { return (clocks + 4 - 1) / 4; }
- virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const override { return (cycles * 4); }
+ virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return (clocks + 4 - 1) / 4; }
+ virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return (cycles * 4); }
- // device_memory_interface overrides
+ // device_memory_interface implementation
virtual space_config_vector memory_space_config() const override;
- // device_state_interface overrides
+ // device_state_interface implementation
virtual void state_string_export(const device_state_entry &entry, std::string &str) const override;
- // device_disasm_interface overrides
+ // device_disasm_interface implementation
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
+ void tms32010_ram(address_map &map) ATTR_COLD;
+ void tms32015_ram(address_map &map) ATTR_COLD;
+
private:
address_space_config m_program_config;
address_space_config m_data_config;
@@ -74,7 +69,7 @@ private:
devcb_read_line m_bio_in;
- typedef void ( tms32010_device::*opcode_func ) ();
+ using opcode_func = void (tms3201x_base_device::*)();
struct tms32010_opcode
{
uint8_t cycles;
@@ -87,24 +82,24 @@ private:
uint16_t m_PC;
uint16_t m_PREVPC; /* previous program counter */
uint16_t m_STR;
- PAIR m_ACC;
- PAIR m_ALU;
- PAIR m_Preg;
+ PAIR m_ACC;
+ PAIR m_ALU;
+ PAIR m_Preg;
uint16_t m_Treg;
uint16_t m_AR[2];
uint16_t m_STACK[4];
- PAIR m_opcode;
- int m_INTF; /* Pending Interrupt flag */
- int m_icount;
- PAIR m_oldacc;
+ PAIR m_opcode;
+ int m_INTF; /* Pending Interrupt flag */
+ int m_icount;
+ PAIR m_oldacc;
uint16_t m_memaccess;
- int m_addr_mask;
+ int m_addr_mask;
- address_space *m_program;
- memory_access_cache<1, -1, ENDIANNESS_BIG> *m_cache;
- address_space *m_data;
- address_space *m_io;
+ typename memory_access<HighBits, 1, -1, ENDIANNESS_BIG>::cache m_cache;
+ typename memory_access<HighBits, 1, -1, ENDIANNESS_BIG>::specific m_program;
+ memory_access<8, 1, -1, ENDIANNESS_BIG>::specific m_data;
+ memory_access<4, 1, -1, ENDIANNESS_BIG>::specific m_io;
inline void CLR(uint16_t flag);
inline void SET_FLAG(uint16_t flag);
@@ -187,7 +182,15 @@ private:
};
-class tms32015_device : public tms32010_device
+class tms32010_device : public tms3201x_base_device<12>
+{
+public:
+ // construction/destruction
+ tms32010_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+
+class tms32015_device : public tms3201x_base_device<12>
{
public:
// construction/destruction
@@ -195,7 +198,7 @@ public:
};
-class tms32016_device : public tms32010_device
+class tms32016_device : public tms3201x_base_device<16>
{
public:
// construction/destruction
@@ -207,5 +210,4 @@ DECLARE_DEVICE_TYPE(TMS32010, tms32010_device)
DECLARE_DEVICE_TYPE(TMS32015, tms32015_device)
DECLARE_DEVICE_TYPE(TMS32016, tms32016_device)
-
#endif // MAME_CPU_TMS32010_TMS32010_H