diff options
Diffstat (limited to 'src/devices/cpu/i386/i386.h')
-rw-r--r-- | src/devices/cpu/i386/i386.h | 160 |
1 files changed, 81 insertions, 79 deletions
diff --git a/src/devices/cpu/i386/i386.h b/src/devices/cpu/i386/i386.h index 6f2397a6f38..401619e9602 100644 --- a/src/devices/cpu/i386/i386.h +++ b/src/devices/cpu/i386/i386.h @@ -1,9 +1,9 @@ // license:BSD-3-Clause // copyright-holders:Ville Linde, Barry Rodewald, Carl, Philip Bennett -#pragma once +#ifndef MAME_CPU_I386_I386_H +#define MAME_CPU_I386_I386_H -#ifndef __I386INTF_H__ -#define __I386INTF_H__ +#pragma once // SoftFloat 2 lacks an include guard #ifndef softfloat_h @@ -34,10 +34,9 @@ class i386_device : public cpu_device, public device_vtlb_interface public: // construction/destruction i386_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - i386_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source, int program_data_width=32, int program_addr_width=32, int io_data_width=32); // static configuration helpers - template<class _Object> static devcb_base &set_smiact(device_t &device, _Object object) { return downcast<i386_device &>(device).m_smiact.set_callback(object); } + template <class Object> static devcb_base &set_smiact(device_t &device, Object &&cb) { return downcast<i386_device &>(device).m_smiact.set_callback(std::forward<Object>(cb)); } uint64_t debug_segbase(symbol_table &table, int params, const uint64_t *param); uint64_t debug_seglimit(symbol_table &table, int params, const uint64_t *param); @@ -45,6 +44,8 @@ public: uint64_t debug_virttophys(symbol_table &table, int params, const uint64_t *param); protected: + i386_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int program_data_width, int program_addr_width, int io_data_width); + // device-level overrides virtual void device_start() override; virtual void device_reset() override; @@ -58,7 +59,7 @@ protected: virtual void execute_set_input(int inputnum, int state) override; // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override { return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : nullptr ); } + virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override { return (spacenum == AS_PROGRAM) ? &m_program_config : (spacenum == AS_IO) ? &m_io_config : nullptr; } virtual bool memory_translate(address_spacenum spacenum, int intention, offs_t &address) override; // device_state_interface overrides @@ -78,68 +79,68 @@ protected: std::unique_ptr<uint8_t[]> cycle_table_pm[X86_NUM_CPUS]; -union I386_GPR { - uint32_t d[8]; - uint16_t w[16]; - uint8_t b[32]; -}; + union I386_GPR { + uint32_t d[8]; + uint16_t w[16]; + uint8_t b[32]; + }; -struct I386_SREG { - uint16_t selector; - uint16_t flags; - uint32_t base; - uint32_t limit; - int d; // Operand size - bool valid; -}; + struct I386_SREG { + uint16_t selector; + uint16_t flags; + uint32_t base; + uint32_t limit; + int d; // Operand size + bool valid; + }; -struct I386_SYS_TABLE { - uint32_t base; - uint16_t limit; -}; + struct I386_SYS_TABLE { + uint32_t base; + uint16_t limit; + }; -struct I386_SEG_DESC { - uint16_t segment; - uint16_t flags; - uint32_t base; - uint32_t limit; -}; + struct I386_SEG_DESC { + uint16_t segment; + uint16_t flags; + uint32_t base; + uint32_t limit; + }; -union XMM_REG { - uint8_t b[16]; - uint16_t w[8]; - uint32_t d[4]; - uint64_t q[2]; - int8_t c[16]; - int16_t s[8]; - int32_t i[4]; - int64_t l[2]; - float f[4]; - double f64[2]; -}; + union XMM_REG { + uint8_t b[16]; + uint16_t w[8]; + uint32_t d[4]; + uint64_t q[2]; + int8_t c[16]; + int16_t s[8]; + int32_t i[4]; + int64_t l[2]; + float f[4]; + double f64[2]; + }; -union MMX_REG { - uint32_t d[2]; - int32_t i[2]; - uint16_t w[4]; - int16_t s[4]; - uint8_t b[8]; - int8_t c[8]; - float f[2]; - uint64_t q; - int64_t l; -}; + union MMX_REG { + uint32_t d[2]; + int32_t i[2]; + uint16_t w[4]; + int16_t s[4]; + uint8_t b[8]; + int8_t c[8]; + float f[2]; + uint64_t q; + int64_t l; + }; -struct I386_CALL_GATE -{ - uint16_t segment; - uint16_t selector; - uint32_t offset; - uint8_t ar; // access rights - uint8_t dpl; - uint8_t dword_count; - uint8_t present; -}; + struct I386_CALL_GATE + { + uint16_t segment; + uint16_t selector; + uint32_t offset; + uint8_t ar; // access rights + uint8_t dpl; + uint8_t dword_count; + uint8_t present; + }; typedef void (i386_device::*i386_modrm_func)(uint8_t modrm); typedef void (i386_device::*i386_op_func)(); @@ -1424,11 +1425,11 @@ struct I386_CALL_GATE }; -class i386SX_device : public i386_device +class i386sx_device : public i386_device { public: // construction/destruction - i386SX_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + i386sx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); }; @@ -1437,9 +1438,10 @@ class i486_device : public i386_device public: // construction/destruction i486_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - i486_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source); protected: + i486_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + virtual void device_start() override; virtual void device_reset() override; }; @@ -1460,9 +1462,10 @@ class pentium_device : public i386_device public: // construction/destruction pentium_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - pentium_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source); protected: + pentium_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + virtual void execute_set_input(int inputnum, int state) override; virtual void device_start() override; virtual void device_reset() override; @@ -1541,17 +1544,16 @@ protected: }; -extern const device_type I386; -extern const device_type I386SX; -extern const device_type I486; -extern const device_type I486DX4; -extern const device_type PENTIUM; -extern const device_type MEDIAGX; -extern const device_type PENTIUM_PRO; -extern const device_type PENTIUM_MMX; -extern const device_type PENTIUM2; -extern const device_type PENTIUM3; -extern const device_type PENTIUM4; - +DECLARE_DEVICE_TYPE(I386, i386_device) +DECLARE_DEVICE_TYPE(I386SX, i386sx_device) +DECLARE_DEVICE_TYPE(I486, i486_device) +DECLARE_DEVICE_TYPE(I486DX4, i486dx4_device) +DECLARE_DEVICE_TYPE(PENTIUM, pentium_device) +DECLARE_DEVICE_TYPE(MEDIAGX, mediagx_device) +DECLARE_DEVICE_TYPE(PENTIUM_PRO, pentium_pro_device) +DECLARE_DEVICE_TYPE(PENTIUM_MMX, pentium_mmx_device) +DECLARE_DEVICE_TYPE(PENTIUM2, pentium2_device) +DECLARE_DEVICE_TYPE(PENTIUM3, pentium3_device) +DECLARE_DEVICE_TYPE(PENTIUM4, pentium4_device) -#endif /* __I386INTF_H__ */ +#endif // MAME_CPU_I386_I386_H |