summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/i386/i386.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/i386/i386.h')
-rw-r--r--src/devices/cpu/i386/i386.h160
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