m68000: split the header to make future semi-indenpendant implementations sane

This commit is contained in:
Olivier Galibert 2022-09-30 10:58:31 +02:00
parent 5c4e076cc7
commit 71f1f480fd
128 changed files with 1341 additions and 1145 deletions

View File

@ -1874,6 +1874,14 @@ end
--------------------------------------------------
-- Motorola 68000 series
--@src/devices/cpu/m68000/m68000.h,CPUS["M680X0"] = true
--@src/devices/cpu/m68000/m68008.h,CPUS["M680X0"] = true
--@src/devices/cpu/m68000/m68010.h,CPUS["M680X0"] = true
--@src/devices/cpu/m68000/m68020.h,CPUS["M680X0"] = true
--@src/devices/cpu/m68000/m68030.h,CPUS["M680X0"] = true
--@src/devices/cpu/m68000/m68040.h,CPUS["M680X0"] = true
--@src/devices/cpu/m68000/scc68070.h,CPUS["M680X0"] = true
--@src/devices/cpu/m68000/fscpu32.h,CPUS["M680X0"] = true
--@src/devices/cpu/m68000/mcf5206e.h,CPUS["M680X0"] = true
--------------------------------------------------
if CPUS["M680X0"] then
@ -1882,9 +1890,27 @@ if CPUS["M680X0"] then
MAME_DIR .. "src/devices/cpu/m68000/m68kcpu.h",
MAME_DIR .. "src/devices/cpu/m68000/m68kops.cpp",
MAME_DIR .. "src/devices/cpu/m68000/m68kops.h",
MAME_DIR .. "src/devices/cpu/m68000/m68000.h",
MAME_DIR .. "src/devices/cpu/m68000/m68kfpu.cpp",
MAME_DIR .. "src/devices/cpu/m68000/m68kmmu.h",
MAME_DIR .. "src/devices/cpu/m68000/m68kcommon.h",
MAME_DIR .. "src/devices/cpu/m68000/m68000.h",
MAME_DIR .. "src/devices/cpu/m68000/m68000.cpp",
MAME_DIR .. "src/devices/cpu/m68000/m68008.h",
MAME_DIR .. "src/devices/cpu/m68000/m68008.cpp",
MAME_DIR .. "src/devices/cpu/m68000/m68010.h",
MAME_DIR .. "src/devices/cpu/m68000/m68010.cpp",
MAME_DIR .. "src/devices/cpu/m68000/m68020.h",
MAME_DIR .. "src/devices/cpu/m68000/m68020.cpp",
MAME_DIR .. "src/devices/cpu/m68000/m68030.h",
MAME_DIR .. "src/devices/cpu/m68000/m68030.cpp",
MAME_DIR .. "src/devices/cpu/m68000/m68040.h",
MAME_DIR .. "src/devices/cpu/m68000/m68040.cpp",
MAME_DIR .. "src/devices/cpu/m68000/scc68070.h",
MAME_DIR .. "src/devices/cpu/m68000/scc68070.cpp",
MAME_DIR .. "src/devices/cpu/m68000/fscpu32.h",
MAME_DIR .. "src/devices/cpu/m68000/fscpu32.cpp",
MAME_DIR .. "src/devices/cpu/m68000/mcf5206e.h",
MAME_DIR .. "src/devices/cpu/m68000/mcf5206e.cpp",
}
end

View File

@ -41,7 +41,7 @@
#include "emu.h"
#include "q68.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68008.h"
/***************************************************************************

View File

@ -13,7 +13,7 @@
#define MAME_BUS_BBC_INTERNAL_CUMANA68K_H
#include "internal.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68008.h"
#include "machine/6821pia.h"
#include "machine/input_merger.h"
#include "machine/mc146818.h"

View File

@ -10,7 +10,7 @@
#include "cpu/i86/i86.h"
// K234
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68008.h"
// K235
#include "cpu/nec/nec.h"

View File

@ -10,7 +10,7 @@
#include "ultra14f.h"
#include "bus/nscsi/devices.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68008.h"
#include "machine/ncr5390.h"
#include "machine/nscsi_bus.h"

View File

@ -20,7 +20,7 @@ Other: LED, 20MHz crystal. Next to the MC68901P is another chip just as large (4
#include "bus/nscsi/devices.h"
#include "bus/rs232/rs232.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68008.h"
#include "machine/74259.h"
#include "machine/eepromser.h"

View File

@ -8,7 +8,7 @@
#include "vme.h"
#include "bus/rs232/rs232.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68030.h"
#include "machine/68153bim.h"
#include "machine/68230pit.h"
#include "machine/68561mpcc.h"

View File

@ -185,7 +185,7 @@
#include "emu.h"
#include "vme_fccpu20.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "bus/rs232/rs232.h"
#include "machine/68230pit.h"
#include "machine/68153bim.h"

View File

@ -127,7 +127,7 @@
#include "emu.h"
#include "vme_fcisio.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "machine/scnxx562.h"
#include "machine/68230pit.h"
#include "machine/68153bim.h"

View File

@ -145,7 +145,7 @@
#include "emu.h"
#include "vme_fcscsi.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "machine/68230pit.h"
#include "machine/wd_fdc.h"
#include "machine/hd63450.h" // compatible with MC68450

View File

@ -10,7 +10,8 @@
#include "bus/centronics/ctronics.h"
#include "bus/nscsi/hd.h"
#include "bus/rs232/rs232.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/m68000/m68030.h"
#include "imagedev/floppy.h"
#include "machine/clock.h"
#include "machine/msm6242.h"

View File

@ -5,7 +5,7 @@
#pragma once
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "bus/vme/vme.h"
#include "bus/rs232/rs232.h"
#include "machine/clock.h"

View File

@ -130,7 +130,7 @@
#include "emu.h"
#include "vme_mvme350.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "machine/68230pit.h"
#define LOG_GENERAL 0x01

View File

@ -0,0 +1,31 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#include "emu.h"
#include "fscpu32.h"
#include "m68kdasm.h"
DEFINE_DEVICE_TYPE(FSCPU32, fscpu32_device, "fscpu32", "Freescale CPU32 Core")
std::unique_ptr<util::disasm_interface> fscpu32_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68340);
}
fscpu32_device::fscpu32_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, FSCPU32, 32,32)
{
}
fscpu32_device::fscpu32_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock,
const device_type type, u32 prg_data_width, u32 prg_address_bits, address_map_constructor internal_map)
: m68000_base_device(mconfig, tag, owner, clock, type, prg_data_width, prg_address_bits, internal_map)
{
}
void fscpu32_device::device_start()
{
m68000_base_device::device_start();
init_cpu_fscpu32();
}

View File

@ -0,0 +1,31 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#ifndef MAME_CPU_M68000_FSCPU32_H
#define MAME_CPU_M68000_FSCPU32_H
#pragma once
#include "m68kcommon.h"
class fscpu32_device : public m68000_base_device
{
public:
// construction/destruction
fscpu32_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
protected:
fscpu32_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock,
const device_type type, u32 prg_data_width, u32 prg_address_bits, address_map_constructor internal_map);
};
DECLARE_DEVICE_TYPE(FSCPU32, fscpu32_device)
#endif

View File

@ -0,0 +1,35 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#include "emu.h"
#include "m68000.h"
#include "m68kdasm.h"
DEFINE_DEVICE_TYPE(M68000, m68000_device, "m68000", "Motorola MC68000")
std::unique_ptr<util::disasm_interface> m68000_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68000);
}
m68000_device::m68000_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_device(mconfig, M68000, tag, owner, clock)
{
}
m68000_device::m68000_device(const machine_config &mconfig, const device_type type, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, type, 16,24)
{
}
void m68000_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68000();
}
m68000_device::m68000_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock,
const device_type type, u32 prg_data_width, u32 prg_address_bits, address_map_constructor internal_map)
: m68000_base_device(mconfig, tag, owner, clock, type, prg_data_width, prg_address_bits, internal_map)
{
}

View File

@ -5,442 +5,7 @@
#pragma once
// SoftFloat 2 lacks an include guard
#ifndef softfloat_h
#define softfloat_h 1
#include "softfloat/milieu.h"
#include "softfloat/softfloat.h"
#endif
extern flag floatx80_is_nan(floatx80 a);
/* MMU constants */
constexpr int MMU_ATC_ENTRIES = (22); // 68851 has 64, 030 has 22
/* instruction cache constants */
constexpr int M68K_IC_SIZE = 128;
/* There are 7 levels of interrupt to the 68K.
* A transition from < 7 to 7 will cause a non-maskable interrupt (NMI).
*
* If disable_interrupt_mixer() has been called, the 3 interrupt lines
* are modeled instead, as numbers 0-2.
*/
constexpr int M68K_IRQ_NONE = 0;
constexpr int M68K_IRQ_1 = 1;
constexpr int M68K_IRQ_2 = 2;
constexpr int M68K_IRQ_3 = 3;
constexpr int M68K_IRQ_4 = 4;
constexpr int M68K_IRQ_5 = 5;
constexpr int M68K_IRQ_6 = 6;
constexpr int M68K_IRQ_7 = 7;
constexpr int M68K_IRQ_IPL0 = 0;
constexpr int M68K_IRQ_IPL1 = 1;
constexpr int M68K_IRQ_IPL2 = 2;
constexpr int M68K_SZ_LONG = 0;
constexpr int M68K_SZ_BYTE = 1;
constexpr int M68K_SZ_WORD = 2;
// special input lines
constexpr int M68K_LINE_BUSERROR = 16;
/* CPU types for use in m68k_set_cpu_type() */
enum
{
M68K_CPU_TYPE_INVALID,
M68K_CPU_TYPE_68000,
M68K_CPU_TYPE_68008,
M68K_CPU_TYPE_68010,
M68K_CPU_TYPE_68EC020,
M68K_CPU_TYPE_68020,
M68K_CPU_TYPE_68EC030,
M68K_CPU_TYPE_68030,
M68K_CPU_TYPE_68EC040,
M68K_CPU_TYPE_68LC040,
M68K_CPU_TYPE_68040,
M68K_CPU_TYPE_SCC68070,
M68K_CPU_TYPE_FSCPU32,
M68K_CPU_TYPE_COLDFIRE
};
// function codes
enum
{
M68K_FC_USER_DATA = 1,
M68K_FC_USER_PROGRAM = 2,
M68K_FC_SUPERVISOR_DATA = 5,
M68K_FC_SUPERVISOR_PROGRAM = 6,
M68K_FC_INTERRUPT = 7
};
/* HMMU enable types for use with m68k_set_hmmu_enable() */
constexpr int M68K_HMMU_DISABLE = 0; /* no translation */
constexpr int M68K_HMMU_ENABLE_II = 1; /* Mac II style fixed translation */
constexpr int M68K_HMMU_ENABLE_LC = 2; /* Mac LC style fixed translation */
enum
{
/* NOTE: M68K_SP fetches the current SP, be it USP, ISP, or MSP */
M68K_PC = STATE_GENPC, M68K_SP = 1, M68K_ISP, M68K_USP, M68K_MSP, M68K_SR, M68K_VBR,
M68K_SFC, M68K_DFC, M68K_CACR, M68K_CAAR, M68K_IR, M68K_PREF_ADDR, M68K_PREF_DATA,
M68K_D0, M68K_D1, M68K_D2, M68K_D3, M68K_D4, M68K_D5, M68K_D6, M68K_D7,
M68K_A0, M68K_A1, M68K_A2, M68K_A3, M68K_A4, M68K_A5, M68K_A6, M68K_A7,
M68K_FP0, M68K_FP1, M68K_FP2, M68K_FP3, M68K_FP4, M68K_FP5, M68K_FP6, M68K_FP7,
M68K_FPSR, M68K_FPCR, M68K_CRP_LIMIT, M68K_CRP_APTR, M68K_SRP_LIMIT, M68K_SRP_APTR,
M68K_MMU_TC, M68K_TT0, M68K_TT1, M68K_MMU_SR, M68K_ITT0, M68K_ITT1,
M68K_DTT0, M68K_DTT1, M68K_URP_APTR
};
class m68000_base_device : public cpu_device
{
public:
enum {
AS_CPU_SPACE = 4
};
// construction/destruction
m68000_base_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
static constexpr u8 autovector(int level) { return 0x18 + level; }
void autovectors_map(address_map &map);
protected:
static constexpr int NUM_CPU_TYPES = 8;
typedef void (m68000_base_device::*opcode_handler_ptr)();
static u16 m68ki_instruction_state_table[NUM_CPU_TYPES][0x10000]; /* opcode handler state numbers */
static unsigned char m68ki_cycles[NUM_CPU_TYPES][0x10000]; /* Cycles used by CPU type */
/* This is used to generate the opcode handler state table */
struct opcode_handler_struct
{
unsigned int match; /* what to match after masking */
unsigned int mask; /* mask on opcode */
unsigned char cycles[NUM_CPU_TYPES]; /* cycles each cpu type takes */
};
static const opcode_handler_ptr m68k_handler_table[];
static const opcode_handler_struct m68k_opcode_table[];
static const u16 m68k_state_illegal;
static void m68ki_set_one(unsigned short opcode, u16 state, const opcode_handler_struct &s);
static void m68ki_build_opcode_table(void);
void clear_all(void);
// device_disasm_interface overrides
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
// device_execute_interface overrides
virtual u32 execute_min_cycles() const noexcept override { return 4; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
virtual u32 execute_input_lines() const noexcept override { return m_interrupt_mixer ? 8 : 3; } // number of input lines
virtual bool execute_input_edge_triggered(int inputnum) const noexcept override { return m_interrupt_mixer ? inputnum == M68K_IRQ_7 : false; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_stop() override;
virtual void device_pre_save() override;
virtual void device_post_load() override;
// device_memory_interface overrides
virtual space_config_vector memory_space_config() const override;
// address spaces
const address_space_config m_program_config, m_oprogram_config;
address_space_config m_cpu_space_config;
void define_state(void);
public:
template <typename... T> void set_reset_callback(T &&... args) { m_reset_instr_callback.set(std::forward<T>(args)...); }
template <typename... T> void set_cmpild_callback(T &&... args) { m_cmpild_instr_callback.set(std::forward<T>(args)...); }
template <typename... T> void set_rte_callback(T &&... args) { m_rte_instr_callback.set(std::forward<T>(args)...); }
template <typename... T> void set_tas_write_callback(T &&... args) { m_tas_write_callback.set(std::forward<T>(args)...); }
u16 get_fc();
void set_hmmu_enable(int enable);
void set_emmu_enable(int enable);
int get_pmmu_enable() const {return m_pmmu_enabled;}
void set_fpu_enable(int enable);
void set_buserror_details(u32 fault_addr, u8 rw, u8 fc, bool rerun = false);
void disable_interrupt_mixer() { m_interrupt_mixer = false; }
void set_cpu_space(int space_id) { m_cpu_space_id = space_id; }
protected:
m68000_base_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock,
const device_type type, u32 prg_data_width, u32 prg_address_bits);
m68000_base_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock,
const device_type type, u32 prg_data_width, u32 prg_address_bits, address_map_constructor internal_map);
int m_has_fpu; /* Indicates if a FPU is available (yes on 030, 040, may be on 020) */
bool m_interrupt_mixer; /* Indicates whether to put a virtual 8->3 priority mixer on the input lines (default true) */
int m_cpu_space_id; /* CPU space address space id (default AS_CPU_SPACE) */
u32 m_cpu_type; /* CPU Type: 68000, 68008, 68010, 68EC020, 68020, 68EC030, 68030, 68EC040, or 68040 */
//
u32 m_dar[16]; /* Data and Address Registers */
u32 m_ppc; /* Previous program counter */
u32 m_pc; /* Program Counter */
u32 m_sp[7]; /* User, Interrupt, and Master Stack Pointers */
u32 m_vbr; /* Vector Base Register (m68010+) */
u32 m_sfc; /* Source Function Code Register (m68010+) */
u32 m_dfc; /* Destination Function Code Register (m68010+) */
u32 m_cacr; /* Cache Control Register (m68020, unemulated) */
u32 m_caar; /* Cache Address Register (m68020, unemulated) */
u32 m_ir; /* Instruction Register */
floatx80 m_fpr[8]; /* FPU Data Register (m68030/040) */
u32 m_fpiar; /* FPU Instruction Address Register (m68040) */
u32 m_fpsr; /* FPU Status Register (m68040) */
u32 m_fpcr; /* FPU Control Register (m68040) */
u32 m_t1_flag; /* Trace 1 */
u32 m_t0_flag; /* Trace 0 */
u32 m_s_flag; /* Supervisor */
u32 m_m_flag; /* Master/Interrupt state */
u32 m_x_flag; /* Extend */
u32 m_n_flag; /* Negative */
u32 m_not_z_flag; /* Zero, inverted for speedups */
u32 m_v_flag; /* Overflow */
u32 m_c_flag; /* Carry */
u32 m_int_mask; /* I0-I2 */
u32 m_int_level; /* State of interrupt pins IPL0-IPL2 -- ASG: changed from ints_pending */
u32 m_stopped; /* Stopped state */
u32 m_pref_addr; /* Last prefetch address */
u32 m_pref_data; /* Data in the prefetch queue */
u32 m_sr_mask; /* Implemented status register bits */
u32 m_instr_mode; /* Stores whether we are in instruction mode or group 0/1 exception mode */
u32 m_run_mode; /* Stores whether we are processing a reset, bus error, address error, or something else */
int m_has_pmmu; /* Indicates if a PMMU available (yes on 030, 040, no on EC030) */
int m_has_hmmu; /* Indicates if an Apple HMMU is available in place of the 68851 (020 only) */
int m_pmmu_enabled; /* Indicates if the PMMU is enabled */
int m_hmmu_enabled; /* Indicates if the HMMU is enabled */
int m_emmu_enabled; /* Indicates if external MMU is enabled */
int m_instruction_restart; /* Save DA regs for potential instruction restart */
int m_fpu_just_reset; /* Indicates the FPU was just reset */
/* Clocks required for instructions / exceptions */
u32 m_cyc_bcc_notake_b;
u32 m_cyc_bcc_notake_w;
u32 m_cyc_dbcc_f_noexp;
u32 m_cyc_dbcc_f_exp;
u32 m_cyc_scc_r_true;
u32 m_cyc_movem_w;
u32 m_cyc_movem_l;
u32 m_cyc_shift;
u32 m_cyc_reset;
int m_initial_cycles;
int m_icount; /* Number of clocks remaining */
int m_reset_cycles;
u32 m_tracing;
int m_address_error;
u32 m_aerr_address;
u32 m_aerr_write_mode;
u32 m_aerr_fc;
/* Virtual IRQ lines state */
u32 m_virq_state;
u32 m_nmi_pending;
const u16 *m_state_table;
const u8* m_cyc_instruction;
const u8* m_cyc_exception;
/* Callbacks to host */
write_line_delegate m_reset_instr_callback; /* Called when a RESET instruction is encountered */
write32sm_delegate m_cmpild_instr_callback; /* Called when a CMPI.L #v, Dn instruction is encountered */
write_line_delegate m_rte_instr_callback; /* Called when a RTE instruction is encountered */
write8sm_delegate m_tas_write_callback; /* Called instead of normal write8 by the TAS instruction,
allowing writeback to be disabled globally or selectively
or other side effects to be implemented */
address_space *m_program, *m_oprogram, *m_cpu_space;
memory_access<24, 0, 0, ENDIANNESS_BIG>::cache m_oprogram8;
memory_access<24, 1, 0, ENDIANNESS_BIG>::cache m_oprogram16;
memory_access<32, 2, 0, ENDIANNESS_BIG>::cache m_oprogram32;
memory_access<24, 0, 0, ENDIANNESS_BIG>::specific m_program8;
memory_access<24, 1, 0, ENDIANNESS_BIG>::specific m_program16;
memory_access<32, 2, 0, ENDIANNESS_BIG>::specific m_program32;
/* Redirect memory calls */
void init8(address_space &space, address_space &ospace);
void init16(address_space &space, address_space &ospace);
void init32(address_space &space, address_space &ospace);
void init32mmu(address_space &space, address_space &ospace);
void init32hmmu(address_space &space, address_space &ospace);
std::function<u16 (offs_t)> m_readimm16; // Immediate read 16 bit
std::function<u8 (offs_t)> m_read8;
std::function<u16 (offs_t)> m_read16;
std::function<u32 (offs_t)> m_read32;
std::function<void (offs_t, u8 )> m_write8;
std::function<void (offs_t, u16)> m_write16;
std::function<void (offs_t, u32)> m_write32;
address_space *m_space, *m_ospace;
u32 m_iotemp;
/* save state data */
u16 m_save_sr;
u8 m_save_stopped;
u8 m_save_halted;
/* PMMU registers */
u32 m_mmu_crp_aptr, m_mmu_crp_limit;
u32 m_mmu_srp_aptr, m_mmu_srp_limit;
u32 m_mmu_urp_aptr; /* 040 only */
u32 m_mmu_tc;
u16 m_mmu_sr;
u32 m_mmu_sr_040;
u32 m_mmu_atc_tag[MMU_ATC_ENTRIES], m_mmu_atc_data[MMU_ATC_ENTRIES];
u32 m_mmu_atc_rr;
u32 m_mmu_tt0, m_mmu_tt1;
u32 m_mmu_itt0, m_mmu_itt1, m_mmu_dtt0, m_mmu_dtt1;
u32 m_mmu_acr0, m_mmu_acr1, m_mmu_acr2, m_mmu_acr3;
u32 m_mmu_last_page_entry, m_mmu_last_page_entry_addr;
u16 m_mmu_tmp_sr; /* temporary hack: status code for ptest and to handle write protection */
u16 m_mmu_tmp_fc; /* temporary hack: function code for the mmu (moves) */
u16 m_mmu_tmp_rw; /* temporary hack: read/write (1/0) for the mmu */
u8 m_mmu_tmp_sz; /* temporary hack: size for mmu */
u32 m_mmu_tmp_buserror_address; /* temporary hack: (first) bus error address */
u16 m_mmu_tmp_buserror_occurred; /* temporary hack: flag that bus error has occurred from mmu */
u16 m_mmu_tmp_buserror_fc; /* temporary hack: (first) bus error fc */
u16 m_mmu_tmp_buserror_rw; /* temporary hack: (first) bus error rw */
u16 m_mmu_tmp_buserror_sz; /* temporary hack: (first) bus error size` */
bool m_mmu_tablewalk; /* set when MMU walks page tables */
u32 m_mmu_last_logical_addr;
u32 m_ic_address[M68K_IC_SIZE]; /* instruction cache address data */
u32 m_ic_data[M68K_IC_SIZE]; /* instruction cache content data */
bool m_ic_valid[M68K_IC_SIZE]; /* instruction cache valid flags */
/* 68307 / 68340 internal address map */
address_space *m_internal;
void init_cpu_common(void);
void init_cpu_m68000(void);
void init_cpu_m68008(void);
void init_cpu_m68010(void);
void init_cpu_m68020(void);
void init_cpu_m68020fpu(void);
void init_cpu_m68020pmmu(void);
void init_cpu_m68020hmmu(void);
void init_cpu_m68ec020(void);
void init_cpu_m68030(void);
void init_cpu_m68ec030(void);
void init_cpu_m68040(void);
void init_cpu_m68ec040(void);
void init_cpu_m68lc040(void);
void init_cpu_fscpu32(void);
void init_cpu_scc68070(void);
void init_cpu_coldfire(void);
void default_autovectors_map(address_map &map);
void m68ki_exception_interrupt(u32 int_level);
inline void m68ki_check_address_error(u32 ADDR, u32 WRITE_MODE, u32 FC)
{
if((ADDR)&1)
{
m_aerr_address = ADDR;
m_aerr_write_mode = WRITE_MODE;
m_aerr_fc = FC;
throw 10;
}
}
// device_state_interface overrides
virtual void state_import(const device_state_entry &entry) override;
virtual void state_export(const device_state_entry &entry) override;
virtual void state_string_export(const device_state_entry &entry, std::string &str) const override;
// device_memory_interface overrides
virtual bool memory_translate(int space, int intention, offs_t &address) override;
#include "m68kcpu.h"
#include "m68kops.h"
#include "m68kmmu.h"
virtual void m68k_reset_peripherals() { }
static double fx80_to_double(floatx80 fx)
{
u64 d;
double *foo;
foo = (double *)&d;
d = floatx80_to_float64(fx);
return *foo;
}
static floatx80 double_to_fx80(double in)
{
u64 *d;
d = (u64 *)&in;
return float64_to_floatx80(*d);
}
// defined in m68kfpu.cpp
static const u32 pkmask2[18];
static const u32 pkmask3[18];
inline floatx80 load_extended_float80(u32 ea);
inline void store_extended_float80(u32 ea, floatx80 fpr);
inline floatx80 load_pack_float80(u32 ea);
inline void store_pack_float80(u32 ea, int k, floatx80 fpr);
inline void SET_CONDITION_CODES(floatx80 reg);
inline int TEST_CONDITION(int condition);
u8 READ_EA_8(int ea);
u16 READ_EA_16(int ea);
u32 READ_EA_32(int ea);
u64 READ_EA_64(int ea);
floatx80 READ_EA_FPE(int mode, int reg, uint32 di_mode_ea);
floatx80 READ_EA_PACK(int ea);
void WRITE_EA_8(int ea, u8 data);
void WRITE_EA_16(int ea, u16 data);
void WRITE_EA_32(int ea, u32 data);
void WRITE_EA_64(int ea, u64 data);
void WRITE_EA_FPE(int mode, int reg, floatx80 fpr, uint32 di_mode_ea);
void WRITE_EA_PACK(int ea, int k, floatx80 fpr);
void fpgen_rm_reg(u16 w2);
void fmove_reg_mem(u16 w2);
void fmove_fpcr(u16 w2);
void fmovem(u16 w2);
void fscc();
void fbcc16();
void fbcc32();
void m68040_fpu_op0();
int perform_fsave(u32 addr, int inc);
void do_frestore_null();
void m68040_do_fsave(u32 addr, int reg, int inc);
void m68040_do_frestore(u32 addr, int reg);
void m68040_fpu_op1();
void m68881_ftrap();
};
#include "m68kcommon.h"
class m68000_device : public m68000_base_device
{
@ -464,278 +29,6 @@ protected:
const device_type type, u32 prg_data_width, u32 prg_address_bits, address_map_constructor internal_map);
};
class m68008_device : public m68000_base_device
{
public:
// construction/destruction
m68008_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 4; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68008fn_device : public m68000_base_device
{
public:
// construction/destruction
m68008fn_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 4; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68010_device : public m68000_base_device
{
public:
// construction/destruction
m68010_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 4; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68ec020_device : public m68000_base_device
{
public:
// construction/destruction
m68ec020_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68020_device : public m68000_base_device
{
public:
// construction/destruction
m68020_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68020fpu_device : public m68000_base_device
{
public:
// construction/destruction
m68020fpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68020pmmu_device : public m68000_base_device
{
public:
// construction/destruction
m68020pmmu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68020hmmu_device : public m68000_base_device
{
public:
// construction/destruction
m68020hmmu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
virtual bool memory_translate(int space, int intention, offs_t &address) override;
// device-level overrides
virtual void device_start() override;
};
class m68ec030_device : public m68000_base_device
{
public:
// construction/destruction
m68ec030_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68030_device : public m68000_base_device
{
public:
// construction/destruction
m68030_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68ec040_device : public m68000_base_device
{
public:
// construction/destruction
m68ec040_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68lc040_device : public m68000_base_device
{
public:
// construction/destruction
m68lc040_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68040_device : public m68000_base_device
{
public:
// construction/destruction
m68040_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class scc68070_base_device : public m68000_base_device
{
protected:
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 4; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
scc68070_base_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock,
const device_type type, address_map_constructor internal_map);
};
class fscpu32_device : public m68000_base_device
{
public:
// construction/destruction
fscpu32_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
protected:
fscpu32_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock,
const device_type type, u32 prg_data_width, u32 prg_address_bits, address_map_constructor internal_map);
};
class mcf5206e_device : public m68000_base_device
{
public:
// construction/destruction
mcf5206e_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
DECLARE_DEVICE_TYPE(M68000, m68000_device)
DECLARE_DEVICE_TYPE(M68008, m68008_device)
DECLARE_DEVICE_TYPE(M68008FN, m68008fn_device)
DECLARE_DEVICE_TYPE(M68010, m68010_device)
DECLARE_DEVICE_TYPE(M68EC020, m68ec020_device)
DECLARE_DEVICE_TYPE(M68020, m68020_device)
DECLARE_DEVICE_TYPE(M68020FPU, m68020fpu_device)
DECLARE_DEVICE_TYPE(M68020PMMU, m68020pmmu_device)
DECLARE_DEVICE_TYPE(M68020HMMU, m68020hmmu_device)
DECLARE_DEVICE_TYPE(M68EC030, m68ec030_device)
DECLARE_DEVICE_TYPE(M68030, m68030_device)
DECLARE_DEVICE_TYPE(M68EC040, m68ec040_device)
DECLARE_DEVICE_TYPE(M68LC040, m68lc040_device)
DECLARE_DEVICE_TYPE(M68040, m68040_device)
DECLARE_DEVICE_TYPE(FSCPU32, fscpu32_device)
DECLARE_DEVICE_TYPE(MCF5206E, mcf5206e_device)
#endif // MAME_CPU_M68000_M68000_H
#endif

View File

@ -0,0 +1,42 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#include "emu.h"
#include "m68008.h"
#include "m68kdasm.h"
DEFINE_DEVICE_TYPE(M68008, m68008_device, "m68008", "Motorola MC68008") // 48-pin plastic or ceramic DIP
DEFINE_DEVICE_TYPE(M68008FN, m68008fn_device, "m68008fn", "Motorola MC68008FN") // 52-pin PLCC
std::unique_ptr<util::disasm_interface> m68008_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68008);
}
std::unique_ptr<util::disasm_interface> m68008fn_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68008);
}
m68008_device::m68008_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68008, 8,20)
{
}
void m68008_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68008();
}
m68008fn_device::m68008fn_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68008FN, 8,22)
{
}
void m68008fn_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68008();
}

View File

@ -0,0 +1,43 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#ifndef MAME_CPU_M68000_M68008_H
#define MAME_CPU_M68000_M68008_H
#pragma once
#include "m68kcommon.h"
class m68008_device : public m68000_base_device
{
public:
// construction/destruction
m68008_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 4; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68008fn_device : public m68000_base_device
{
public:
// construction/destruction
m68008fn_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 4; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
DECLARE_DEVICE_TYPE(M68008, m68008_device)
DECLARE_DEVICE_TYPE(M68008FN, m68008fn_device)
#endif

View File

@ -0,0 +1,25 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#include "emu.h"
#include "m68010.h"
#include "m68kdasm.h"
DEFINE_DEVICE_TYPE(M68010, m68010_device, "m68010", "Motorola MC68010")
std::unique_ptr<util::disasm_interface> m68010_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68010);
}
m68010_device::m68010_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68010, 16,24)
{
}
void m68010_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68010();
}

View File

@ -0,0 +1,27 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#ifndef MAME_CPU_M68000_M68010_H
#define MAME_CPU_M68000_M68010_H
#pragma once
#include "m68kcommon.h"
class m68010_device : public m68000_base_device
{
public:
// construction/destruction
m68010_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 4; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
DECLARE_DEVICE_TYPE(M68010, m68010_device)
#endif

View File

@ -0,0 +1,111 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#include "emu.h"
#include "m68020.h"
#include "m68kdasm.h"
DEFINE_DEVICE_TYPE(M68EC020, m68ec020_device, "m68ec020", "Motorola MC68EC020")
DEFINE_DEVICE_TYPE(M68020, m68020_device, "m68020", "Motorola MC68020")
DEFINE_DEVICE_TYPE(M68020FPU, m68020fpu_device, "m68020fpu", "Motorola MC68020FPU")
DEFINE_DEVICE_TYPE(M68020PMMU, m68020pmmu_device, "m68020pmmu", "Motorola MC68020PMMU")
DEFINE_DEVICE_TYPE(M68020HMMU, m68020hmmu_device, "m68020hmmu", "Motorola MC68020HMMU")
std::unique_ptr<util::disasm_interface> m68ec020_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68020);
}
std::unique_ptr<util::disasm_interface> m68020_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68020);
}
std::unique_ptr<util::disasm_interface> m68020fpu_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68020);
}
std::unique_ptr<util::disasm_interface> m68020pmmu_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68020);
}
std::unique_ptr<util::disasm_interface> m68020hmmu_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68020);
}
m68020_device::m68020_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68020, 32,32)
{
}
void m68020_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68020();
}
m68020fpu_device::m68020fpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68020FPU, 32,32)
{
}
void m68020fpu_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68020fpu();
}
// 68020 with 68851 PMMU
m68020pmmu_device::m68020pmmu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68020PMMU, 32,32)
{
}
void m68020pmmu_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68020pmmu();
}
bool m68020hmmu_device::memory_translate(int space, int intention, offs_t &address)
{
/* only applies to the program address space and only does something if the MMU's enabled */
{
if ((space == AS_PROGRAM) && (m_hmmu_enabled))
{
address = hmmu_translate_addr(address);
}
}
return true;
}
// 68020 with Apple HMMU & 68881 FPU
// case CPUINFO_FCT_TRANSLATE: info->translate = CPU_TRANSLATE_NAME(m68khmmu); break;
m68020hmmu_device::m68020hmmu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68020HMMU, 32,32)
{
}
void m68020hmmu_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68020hmmu();
}
m68ec020_device::m68ec020_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68EC020, 32,24)
{
}
void m68ec020_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68ec020();
}

View File

@ -0,0 +1,93 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#ifndef MAME_CPU_M68000_M68020_H
#define MAME_CPU_M68000_M68020_H
#pragma once
#include "m68kcommon.h"
class m68ec020_device : public m68000_base_device
{
public:
// construction/destruction
m68ec020_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68020_device : public m68000_base_device
{
public:
// construction/destruction
m68020_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68020fpu_device : public m68000_base_device
{
public:
// construction/destruction
m68020fpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68020pmmu_device : public m68000_base_device
{
public:
// construction/destruction
m68020pmmu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68020hmmu_device : public m68000_base_device
{
public:
// construction/destruction
m68020hmmu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
virtual bool memory_translate(int space, int intention, offs_t &address) override;
// device-level overrides
virtual void device_start() override;
};
DECLARE_DEVICE_TYPE(M68EC020, m68ec020_device)
DECLARE_DEVICE_TYPE(M68020, m68020_device)
DECLARE_DEVICE_TYPE(M68020FPU, m68020fpu_device)
DECLARE_DEVICE_TYPE(M68020PMMU, m68020pmmu_device)
DECLARE_DEVICE_TYPE(M68020HMMU, m68020hmmu_device)
#endif

View File

@ -0,0 +1,41 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#include "emu.h"
#include "m68030.h"
#include "m68kdasm.h"
DEFINE_DEVICE_TYPE(M68EC030, m68ec030_device, "m68ec030", "Motorola MC68EC030")
DEFINE_DEVICE_TYPE(M68030, m68030_device, "m68030", "Motorola MC68030")
std::unique_ptr<util::disasm_interface> m68ec030_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68030);
}
std::unique_ptr<util::disasm_interface> m68030_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68030);
}
m68030_device::m68030_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68030, 32,32)
{
}
void m68030_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68030();
}
m68ec030_device::m68ec030_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68EC030, 32,32)
{
}
void m68ec030_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68ec030();
}

View File

@ -0,0 +1,43 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#ifndef MAME_CPU_M68000_M68030_H
#define MAME_CPU_M68000_M68030_H
#pragma once
#include "m68kcommon.h"
class m68ec030_device : public m68000_base_device
{
public:
// construction/destruction
m68ec030_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68030_device : public m68000_base_device
{
public:
// construction/destruction
m68030_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
DECLARE_DEVICE_TYPE(M68EC030, m68ec030_device)
DECLARE_DEVICE_TYPE(M68030, m68030_device)
#endif

View File

@ -0,0 +1,63 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#include "emu.h"
#include "m68040.h"
#include "m68kdasm.h"
DEFINE_DEVICE_TYPE(M68EC040, m68ec040_device, "m68ec040", "Motorola MC68EC040")
DEFINE_DEVICE_TYPE(M68LC040, m68lc040_device, "m68lc040", "Motorola MC68LC040")
DEFINE_DEVICE_TYPE(M68040, m68040_device, "m68040", "Motorola MC68040")
std::unique_ptr<util::disasm_interface> m68ec040_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68040);
}
std::unique_ptr<util::disasm_interface> m68lc040_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68040);
}
std::unique_ptr<util::disasm_interface> m68040_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68040);
}
m68040_device::m68040_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68040, 32,32)
{
}
void m68040_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68040();
}
m68ec040_device::m68ec040_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68EC040, 32,32)
{
}
void m68ec040_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68ec040();
}
m68lc040_device::m68lc040_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68LC040, 32,32)
{
}
void m68lc040_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68lc040();
}

View File

@ -0,0 +1,59 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#ifndef MAME_CPU_M68000_M68040_H
#define MAME_CPU_M68000_M68040_H
#pragma once
#include "m68kcommon.h"
class m68ec040_device : public m68000_base_device
{
public:
// construction/destruction
m68ec040_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68lc040_device : public m68000_base_device
{
public:
// construction/destruction
m68lc040_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
class m68040_device : public m68000_base_device
{
public:
// construction/destruction
m68040_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
DECLARE_DEVICE_TYPE(M68EC040, m68ec040_device)
DECLARE_DEVICE_TYPE(M68LC040, m68lc040_device)
DECLARE_DEVICE_TYPE(M68040, m68040_device)
#endif

View File

@ -0,0 +1,443 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#ifndef MAME_CPU_M68000_M68KCOMMON_H
#define MAME_CPU_M68000_M68KCOMMON_H
#pragma once
// SoftFloat 2 lacks an include guard
#ifndef softfloat_h
#define softfloat_h 1
#include "softfloat/milieu.h"
#include "softfloat/softfloat.h"
#endif
extern flag floatx80_is_nan(floatx80 a);
/* MMU constants */
constexpr int MMU_ATC_ENTRIES = (22); // 68851 has 64, 030 has 22
/* instruction cache constants */
constexpr int M68K_IC_SIZE = 128;
/* There are 7 levels of interrupt to the 68K.
* A transition from < 7 to 7 will cause a non-maskable interrupt (NMI).
*
* If disable_interrupt_mixer() has been called, the 3 interrupt lines
* are modeled instead, as numbers 0-2.
*/
constexpr int M68K_IRQ_NONE = 0;
constexpr int M68K_IRQ_1 = 1;
constexpr int M68K_IRQ_2 = 2;
constexpr int M68K_IRQ_3 = 3;
constexpr int M68K_IRQ_4 = 4;
constexpr int M68K_IRQ_5 = 5;
constexpr int M68K_IRQ_6 = 6;
constexpr int M68K_IRQ_7 = 7;
constexpr int M68K_IRQ_IPL0 = 0;
constexpr int M68K_IRQ_IPL1 = 1;
constexpr int M68K_IRQ_IPL2 = 2;
constexpr int M68K_SZ_LONG = 0;
constexpr int M68K_SZ_BYTE = 1;
constexpr int M68K_SZ_WORD = 2;
// special input lines
constexpr int M68K_LINE_BUSERROR = 16;
/* CPU types for use in m68k_set_cpu_type() */
enum
{
M68K_CPU_TYPE_INVALID,
M68K_CPU_TYPE_68000,
M68K_CPU_TYPE_68008,
M68K_CPU_TYPE_68010,
M68K_CPU_TYPE_68EC020,
M68K_CPU_TYPE_68020,
M68K_CPU_TYPE_68EC030,
M68K_CPU_TYPE_68030,
M68K_CPU_TYPE_68EC040,
M68K_CPU_TYPE_68LC040,
M68K_CPU_TYPE_68040,
M68K_CPU_TYPE_SCC68070,
M68K_CPU_TYPE_FSCPU32,
M68K_CPU_TYPE_COLDFIRE
};
// function codes
enum
{
M68K_FC_USER_DATA = 1,
M68K_FC_USER_PROGRAM = 2,
M68K_FC_SUPERVISOR_DATA = 5,
M68K_FC_SUPERVISOR_PROGRAM = 6,
M68K_FC_INTERRUPT = 7
};
/* HMMU enable types for use with m68k_set_hmmu_enable() */
constexpr int M68K_HMMU_DISABLE = 0; /* no translation */
constexpr int M68K_HMMU_ENABLE_II = 1; /* Mac II style fixed translation */
constexpr int M68K_HMMU_ENABLE_LC = 2; /* Mac LC style fixed translation */
enum
{
/* NOTE: M68K_SP fetches the current SP, be it USP, ISP, or MSP */
M68K_PC = STATE_GENPC, M68K_SP = 1, M68K_ISP, M68K_USP, M68K_MSP, M68K_SR, M68K_VBR,
M68K_SFC, M68K_DFC, M68K_CACR, M68K_CAAR, M68K_IR, M68K_PREF_ADDR, M68K_PREF_DATA,
M68K_D0, M68K_D1, M68K_D2, M68K_D3, M68K_D4, M68K_D5, M68K_D6, M68K_D7,
M68K_A0, M68K_A1, M68K_A2, M68K_A3, M68K_A4, M68K_A5, M68K_A6, M68K_A7,
M68K_FP0, M68K_FP1, M68K_FP2, M68K_FP3, M68K_FP4, M68K_FP5, M68K_FP6, M68K_FP7,
M68K_FPSR, M68K_FPCR, M68K_CRP_LIMIT, M68K_CRP_APTR, M68K_SRP_LIMIT, M68K_SRP_APTR,
M68K_MMU_TC, M68K_TT0, M68K_TT1, M68K_MMU_SR, M68K_ITT0, M68K_ITT1,
M68K_DTT0, M68K_DTT1, M68K_URP_APTR
};
class m68000_base_device : public cpu_device
{
public:
enum {
AS_CPU_SPACE = 4
};
// construction/destruction
m68000_base_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
static constexpr u8 autovector(int level) { return 0x18 + level; }
void autovectors_map(address_map &map);
protected:
static constexpr int NUM_CPU_TYPES = 8;
typedef void (m68000_base_device::*opcode_handler_ptr)();
static u16 m68ki_instruction_state_table[NUM_CPU_TYPES][0x10000]; /* opcode handler state numbers */
static unsigned char m68ki_cycles[NUM_CPU_TYPES][0x10000]; /* Cycles used by CPU type */
/* This is used to generate the opcode handler state table */
struct opcode_handler_struct
{
unsigned int match; /* what to match after masking */
unsigned int mask; /* mask on opcode */
unsigned char cycles[NUM_CPU_TYPES]; /* cycles each cpu type takes */
};
static const opcode_handler_ptr m68k_handler_table[];
static const opcode_handler_struct m68k_opcode_table[];
static const u16 m68k_state_illegal;
static void m68ki_set_one(unsigned short opcode, u16 state, const opcode_handler_struct &s);
static void m68ki_build_opcode_table(void);
void clear_all(void);
// device_disasm_interface overrides
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
// device_execute_interface overrides
virtual u32 execute_min_cycles() const noexcept override { return 4; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
virtual u32 execute_input_lines() const noexcept override { return m_interrupt_mixer ? 8 : 3; } // number of input lines
virtual bool execute_input_edge_triggered(int inputnum) const noexcept override { return m_interrupt_mixer ? inputnum == M68K_IRQ_7 : false; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_stop() override;
virtual void device_pre_save() override;
virtual void device_post_load() override;
// device_memory_interface overrides
virtual space_config_vector memory_space_config() const override;
// address spaces
const address_space_config m_program_config, m_oprogram_config;
address_space_config m_cpu_space_config;
void define_state(void);
public:
template <typename... T> void set_reset_callback(T &&... args) { m_reset_instr_callback.set(std::forward<T>(args)...); }
template <typename... T> void set_cmpild_callback(T &&... args) { m_cmpild_instr_callback.set(std::forward<T>(args)...); }
template <typename... T> void set_rte_callback(T &&... args) { m_rte_instr_callback.set(std::forward<T>(args)...); }
template <typename... T> void set_tas_write_callback(T &&... args) { m_tas_write_callback.set(std::forward<T>(args)...); }
u16 get_fc();
void set_hmmu_enable(int enable);
void set_emmu_enable(int enable);
int get_pmmu_enable() const {return m_pmmu_enabled;}
void set_fpu_enable(int enable);
void set_buserror_details(u32 fault_addr, u8 rw, u8 fc, bool rerun = false);
void disable_interrupt_mixer() { m_interrupt_mixer = false; }
void set_cpu_space(int space_id) { m_cpu_space_id = space_id; }
protected:
m68000_base_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock,
const device_type type, u32 prg_data_width, u32 prg_address_bits);
m68000_base_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock,
const device_type type, u32 prg_data_width, u32 prg_address_bits, address_map_constructor internal_map);
int m_has_fpu; /* Indicates if a FPU is available (yes on 030, 040, may be on 020) */
bool m_interrupt_mixer; /* Indicates whether to put a virtual 8->3 priority mixer on the input lines (default true) */
int m_cpu_space_id; /* CPU space address space id (default AS_CPU_SPACE) */
u32 m_cpu_type; /* CPU Type: 68000, 68008, 68010, 68EC020, 68020, 68EC030, 68030, 68EC040, or 68040 */
//
u32 m_dar[16]; /* Data and Address Registers */
u32 m_ppc; /* Previous program counter */
u32 m_pc; /* Program Counter */
u32 m_sp[7]; /* User, Interrupt, and Master Stack Pointers */
u32 m_vbr; /* Vector Base Register (m68010+) */
u32 m_sfc; /* Source Function Code Register (m68010+) */
u32 m_dfc; /* Destination Function Code Register (m68010+) */
u32 m_cacr; /* Cache Control Register (m68020, unemulated) */
u32 m_caar; /* Cache Address Register (m68020, unemulated) */
u32 m_ir; /* Instruction Register */
floatx80 m_fpr[8]; /* FPU Data Register (m68030/040) */
u32 m_fpiar; /* FPU Instruction Address Register (m68040) */
u32 m_fpsr; /* FPU Status Register (m68040) */
u32 m_fpcr; /* FPU Control Register (m68040) */
u32 m_t1_flag; /* Trace 1 */
u32 m_t0_flag; /* Trace 0 */
u32 m_s_flag; /* Supervisor */
u32 m_m_flag; /* Master/Interrupt state */
u32 m_x_flag; /* Extend */
u32 m_n_flag; /* Negative */
u32 m_not_z_flag; /* Zero, inverted for speedups */
u32 m_v_flag; /* Overflow */
u32 m_c_flag; /* Carry */
u32 m_int_mask; /* I0-I2 */
u32 m_int_level; /* State of interrupt pins IPL0-IPL2 -- ASG: changed from ints_pending */
u32 m_stopped; /* Stopped state */
u32 m_pref_addr; /* Last prefetch address */
u32 m_pref_data; /* Data in the prefetch queue */
u32 m_sr_mask; /* Implemented status register bits */
u32 m_instr_mode; /* Stores whether we are in instruction mode or group 0/1 exception mode */
u32 m_run_mode; /* Stores whether we are processing a reset, bus error, address error, or something else */
int m_has_pmmu; /* Indicates if a PMMU available (yes on 030, 040, no on EC030) */
int m_has_hmmu; /* Indicates if an Apple HMMU is available in place of the 68851 (020 only) */
int m_pmmu_enabled; /* Indicates if the PMMU is enabled */
int m_hmmu_enabled; /* Indicates if the HMMU is enabled */
int m_emmu_enabled; /* Indicates if external MMU is enabled */
int m_instruction_restart; /* Save DA regs for potential instruction restart */
int m_fpu_just_reset; /* Indicates the FPU was just reset */
/* Clocks required for instructions / exceptions */
u32 m_cyc_bcc_notake_b;
u32 m_cyc_bcc_notake_w;
u32 m_cyc_dbcc_f_noexp;
u32 m_cyc_dbcc_f_exp;
u32 m_cyc_scc_r_true;
u32 m_cyc_movem_w;
u32 m_cyc_movem_l;
u32 m_cyc_shift;
u32 m_cyc_reset;
int m_initial_cycles;
int m_icount; /* Number of clocks remaining */
int m_reset_cycles;
u32 m_tracing;
int m_address_error;
u32 m_aerr_address;
u32 m_aerr_write_mode;
u32 m_aerr_fc;
/* Virtual IRQ lines state */
u32 m_virq_state;
u32 m_nmi_pending;
const u16 *m_state_table;
const u8* m_cyc_instruction;
const u8* m_cyc_exception;
/* Callbacks to host */
write_line_delegate m_reset_instr_callback; /* Called when a RESET instruction is encountered */
write32sm_delegate m_cmpild_instr_callback; /* Called when a CMPI.L #v, Dn instruction is encountered */
write_line_delegate m_rte_instr_callback; /* Called when a RTE instruction is encountered */
write8sm_delegate m_tas_write_callback; /* Called instead of normal write8 by the TAS instruction,
allowing writeback to be disabled globally or selectively
or other side effects to be implemented */
address_space *m_program, *m_oprogram, *m_cpu_space;
memory_access<24, 0, 0, ENDIANNESS_BIG>::cache m_oprogram8;
memory_access<24, 1, 0, ENDIANNESS_BIG>::cache m_oprogram16;
memory_access<32, 2, 0, ENDIANNESS_BIG>::cache m_oprogram32;
memory_access<24, 0, 0, ENDIANNESS_BIG>::specific m_program8;
memory_access<24, 1, 0, ENDIANNESS_BIG>::specific m_program16;
memory_access<32, 2, 0, ENDIANNESS_BIG>::specific m_program32;
/* Redirect memory calls */
void init8(address_space &space, address_space &ospace);
void init16(address_space &space, address_space &ospace);
void init32(address_space &space, address_space &ospace);
void init32mmu(address_space &space, address_space &ospace);
void init32hmmu(address_space &space, address_space &ospace);
std::function<u16 (offs_t)> m_readimm16; // Immediate read 16 bit
std::function<u8 (offs_t)> m_read8;
std::function<u16 (offs_t)> m_read16;
std::function<u32 (offs_t)> m_read32;
std::function<void (offs_t, u8 )> m_write8;
std::function<void (offs_t, u16)> m_write16;
std::function<void (offs_t, u32)> m_write32;
address_space *m_space, *m_ospace;
u32 m_iotemp;
/* save state data */
u16 m_save_sr;
u8 m_save_stopped;
u8 m_save_halted;
/* PMMU registers */
u32 m_mmu_crp_aptr, m_mmu_crp_limit;
u32 m_mmu_srp_aptr, m_mmu_srp_limit;
u32 m_mmu_urp_aptr; /* 040 only */
u32 m_mmu_tc;
u16 m_mmu_sr;
u32 m_mmu_sr_040;
u32 m_mmu_atc_tag[MMU_ATC_ENTRIES], m_mmu_atc_data[MMU_ATC_ENTRIES];
u32 m_mmu_atc_rr;
u32 m_mmu_tt0, m_mmu_tt1;
u32 m_mmu_itt0, m_mmu_itt1, m_mmu_dtt0, m_mmu_dtt1;
u32 m_mmu_acr0, m_mmu_acr1, m_mmu_acr2, m_mmu_acr3;
u32 m_mmu_last_page_entry, m_mmu_last_page_entry_addr;
u16 m_mmu_tmp_sr; /* temporary hack: status code for ptest and to handle write protection */
u16 m_mmu_tmp_fc; /* temporary hack: function code for the mmu (moves) */
u16 m_mmu_tmp_rw; /* temporary hack: read/write (1/0) for the mmu */
u8 m_mmu_tmp_sz; /* temporary hack: size for mmu */
u32 m_mmu_tmp_buserror_address; /* temporary hack: (first) bus error address */
u16 m_mmu_tmp_buserror_occurred; /* temporary hack: flag that bus error has occurred from mmu */
u16 m_mmu_tmp_buserror_fc; /* temporary hack: (first) bus error fc */
u16 m_mmu_tmp_buserror_rw; /* temporary hack: (first) bus error rw */
u16 m_mmu_tmp_buserror_sz; /* temporary hack: (first) bus error size` */
bool m_mmu_tablewalk; /* set when MMU walks page tables */
u32 m_mmu_last_logical_addr;
u32 m_ic_address[M68K_IC_SIZE]; /* instruction cache address data */
u32 m_ic_data[M68K_IC_SIZE]; /* instruction cache content data */
bool m_ic_valid[M68K_IC_SIZE]; /* instruction cache valid flags */
/* 68307 / 68340 internal address map */
address_space *m_internal;
void init_cpu_common(void);
void init_cpu_m68000(void);
void init_cpu_m68008(void);
void init_cpu_m68010(void);
void init_cpu_m68020(void);
void init_cpu_m68020fpu(void);
void init_cpu_m68020pmmu(void);
void init_cpu_m68020hmmu(void);
void init_cpu_m68ec020(void);
void init_cpu_m68030(void);
void init_cpu_m68ec030(void);
void init_cpu_m68040(void);
void init_cpu_m68ec040(void);
void init_cpu_m68lc040(void);
void init_cpu_fscpu32(void);
void init_cpu_scc68070(void);
void init_cpu_coldfire(void);
void default_autovectors_map(address_map &map);
void m68ki_exception_interrupt(u32 int_level);
inline void m68ki_check_address_error(u32 ADDR, u32 WRITE_MODE, u32 FC)
{
if((ADDR)&1)
{
m_aerr_address = ADDR;
m_aerr_write_mode = WRITE_MODE;
m_aerr_fc = FC;
throw 10;
}
}
// device_state_interface overrides
virtual void state_import(const device_state_entry &entry) override;
virtual void state_export(const device_state_entry &entry) override;
virtual void state_string_export(const device_state_entry &entry, std::string &str) const override;
// device_memory_interface overrides
virtual bool memory_translate(int space, int intention, offs_t &address) override;
#include "m68kcpu.h"
#include "m68kops.h"
#include "m68kmmu.h"
virtual void m68k_reset_peripherals() { }
static double fx80_to_double(floatx80 fx)
{
u64 d;
double *foo;
foo = (double *)&d;
d = floatx80_to_float64(fx);
return *foo;
}
static floatx80 double_to_fx80(double in)
{
u64 *d;
d = (u64 *)&in;
return float64_to_floatx80(*d);
}
// defined in m68kfpu.cpp
static const u32 pkmask2[18];
static const u32 pkmask3[18];
inline floatx80 load_extended_float80(u32 ea);
inline void store_extended_float80(u32 ea, floatx80 fpr);
inline floatx80 load_pack_float80(u32 ea);
inline void store_pack_float80(u32 ea, int k, floatx80 fpr);
inline void SET_CONDITION_CODES(floatx80 reg);
inline int TEST_CONDITION(int condition);
u8 READ_EA_8(int ea);
u16 READ_EA_16(int ea);
u32 READ_EA_32(int ea);
u64 READ_EA_64(int ea);
floatx80 READ_EA_FPE(int mode, int reg, uint32 di_mode_ea);
floatx80 READ_EA_PACK(int ea);
void WRITE_EA_8(int ea, u8 data);
void WRITE_EA_16(int ea, u16 data);
void WRITE_EA_32(int ea, u32 data);
void WRITE_EA_64(int ea, u64 data);
void WRITE_EA_FPE(int mode, int reg, floatx80 fpr, uint32 di_mode_ea);
void WRITE_EA_PACK(int ea, int k, floatx80 fpr);
void fpgen_rm_reg(u16 w2);
void fmove_reg_mem(u16 w2);
void fmove_fpcr(u16 w2);
void fmovem(u16 w2);
void fscc();
void fbcc16();
void fbcc32();
void m68040_fpu_op0();
int perform_fsave(u32 addr, int inc);
void do_frestore_null();
void m68040_do_fsave(u32 addr, int reg, int inc);
void m68040_do_frestore(u32 addr, int reg);
void m68040_fpu_op1();
void m68881_ftrap();
};
#endif // MAME_CPU_M68000_M68KCOMMON_H

View File

@ -25,7 +25,7 @@ static const char copyright_notice[] =
/* ======================================================================== */
#include "emu.h"
#include "m68000.h"
#include "m68kcommon.h"
#include "m68kdasm.h"
// Generated data
@ -2184,91 +2184,6 @@ std::unique_ptr<util::disasm_interface> m68000_base_device::create_disassembler(
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68000);
}
std::unique_ptr<util::disasm_interface> m68000_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68000);
}
std::unique_ptr<util::disasm_interface> m68008_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68008);
}
std::unique_ptr<util::disasm_interface> m68008fn_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68008);
}
std::unique_ptr<util::disasm_interface> m68010_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68010);
}
std::unique_ptr<util::disasm_interface> m68ec020_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68020);
}
std::unique_ptr<util::disasm_interface> m68020_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68020);
}
std::unique_ptr<util::disasm_interface> m68020fpu_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68020);
}
std::unique_ptr<util::disasm_interface> m68020pmmu_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68020);
}
std::unique_ptr<util::disasm_interface> m68020hmmu_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68020);
}
std::unique_ptr<util::disasm_interface> m68ec030_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68030);
}
std::unique_ptr<util::disasm_interface> m68030_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68030);
}
std::unique_ptr<util::disasm_interface> m68ec040_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68040);
}
std::unique_ptr<util::disasm_interface> m68lc040_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68040);
}
std::unique_ptr<util::disasm_interface> m68040_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68040);
}
std::unique_ptr<util::disasm_interface> scc68070_base_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68000);
}
std::unique_ptr<util::disasm_interface> fscpu32_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68340);
}
std::unique_ptr<util::disasm_interface> mcf5206e_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_COLDFIRE);
}
/* Service an interrupt request and start exception processing */
void m68000_base_device::m68ki_exception_interrupt(u32 int_level)
@ -2582,270 +2497,6 @@ device_memory_interface::space_config_vector m68000_base_device::memory_space_co
};
}
DEFINE_DEVICE_TYPE(M68000, m68000_device, "m68000", "Motorola MC68000")
DEFINE_DEVICE_TYPE(M68008, m68008_device, "m68008", "Motorola MC68008") // 48-pin plastic or ceramic DIP
DEFINE_DEVICE_TYPE(M68008FN, m68008fn_device, "m68008fn", "Motorola MC68008FN") // 52-pin PLCC
DEFINE_DEVICE_TYPE(M68010, m68010_device, "m68010", "Motorola MC68010")
DEFINE_DEVICE_TYPE(M68EC020, m68ec020_device, "m68ec020", "Motorola MC68EC020")
DEFINE_DEVICE_TYPE(M68020, m68020_device, "m68020", "Motorola MC68020")
DEFINE_DEVICE_TYPE(M68020FPU, m68020fpu_device, "m68020fpu", "Motorola MC68020FPU")
DEFINE_DEVICE_TYPE(M68020PMMU, m68020pmmu_device, "m68020pmmu", "Motorola MC68020PMMU")
DEFINE_DEVICE_TYPE(M68020HMMU, m68020hmmu_device, "m68020hmmu", "Motorola MC68020HMMU")
DEFINE_DEVICE_TYPE(M68EC030, m68ec030_device, "m68ec030", "Motorola MC68EC030")
DEFINE_DEVICE_TYPE(M68030, m68030_device, "m68030", "Motorola MC68030")
DEFINE_DEVICE_TYPE(M68EC040, m68ec040_device, "m68ec040", "Motorola MC68EC040")
DEFINE_DEVICE_TYPE(M68LC040, m68lc040_device, "m68lc040", "Motorola MC68LC040")
DEFINE_DEVICE_TYPE(M68040, m68040_device, "m68040", "Motorola MC68040")
DEFINE_DEVICE_TYPE(FSCPU32, fscpu32_device, "fscpu32", "Freescale CPU32 Core")
DEFINE_DEVICE_TYPE(MCF5206E, mcf5206e_device, "mcf5206e", "Freescale MCF5206E")
m68000_device::m68000_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_device(mconfig, M68000, tag, owner, clock)
{
}
m68000_device::m68000_device(const machine_config &mconfig, const device_type type, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, type, 16,24)
{
}
void m68000_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68000();
}
m68000_device::m68000_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock,
const device_type type, u32 prg_data_width, u32 prg_address_bits, address_map_constructor internal_map)
: m68000_base_device(mconfig, tag, owner, clock, type, prg_data_width, prg_address_bits, internal_map)
{
}
/* m68008_device */
m68008_device::m68008_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68008, 8,20)
{
}
void m68008_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68008();
}
m68008fn_device::m68008fn_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68008FN, 8,22)
{
}
void m68008fn_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68008();
}
m68010_device::m68010_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68010, 16,24)
{
}
void m68010_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68010();
}
m68020_device::m68020_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68020, 32,32)
{
}
void m68020_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68020();
}
m68020fpu_device::m68020fpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68020FPU, 32,32)
{
}
void m68020fpu_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68020fpu();
}
// 68020 with 68851 PMMU
m68020pmmu_device::m68020pmmu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68020PMMU, 32,32)
{
}
void m68020pmmu_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68020pmmu();
}
bool m68020hmmu_device::memory_translate(int space, int intention, offs_t &address)
{
/* only applies to the program address space and only does something if the MMU's enabled */
{
if ((space == AS_PROGRAM) && (m_hmmu_enabled))
{
address = hmmu_translate_addr(address);
}
}
return true;
}
// 68020 with Apple HMMU & 68881 FPU
// case CPUINFO_FCT_TRANSLATE: info->translate = CPU_TRANSLATE_NAME(m68khmmu); break;
m68020hmmu_device::m68020hmmu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68020HMMU, 32,32)
{
}
void m68020hmmu_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68020hmmu();
}
m68ec020_device::m68ec020_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68EC020, 32,24)
{
}
void m68ec020_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68ec020();
}
m68030_device::m68030_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68030, 32,32)
{
}
void m68030_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68030();
}
m68ec030_device::m68ec030_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68EC030, 32,32)
{
}
void m68ec030_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68ec030();
}
m68040_device::m68040_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68040, 32,32)
{
}
void m68040_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68040();
}
m68ec040_device::m68ec040_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68EC040, 32,32)
{
}
void m68ec040_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68ec040();
}
m68lc040_device::m68lc040_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, M68LC040, 32,32)
{
}
void m68lc040_device::device_start()
{
m68000_base_device::device_start();
init_cpu_m68lc040();
}
scc68070_base_device::scc68070_base_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock,
const device_type type, address_map_constructor internal_map)
: m68000_base_device(mconfig, tag, owner, clock, type, 16,32, internal_map)
{
}
void scc68070_base_device::device_start()
{
m68000_base_device::device_start();
init_cpu_scc68070();
}
fscpu32_device::fscpu32_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, FSCPU32, 32,32)
{
}
fscpu32_device::fscpu32_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock,
const device_type type, u32 prg_data_width, u32 prg_address_bits, address_map_constructor internal_map)
: m68000_base_device(mconfig, tag, owner, clock, type, prg_data_width, prg_address_bits, internal_map)
{
}
void fscpu32_device::device_start()
{
m68000_base_device::device_start();
init_cpu_fscpu32();
}
mcf5206e_device::mcf5206e_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, MCF5206E, 32,32)
{
}
void mcf5206e_device::device_start()
{
m68000_base_device::device_start();
init_cpu_coldfire();
}
void m68000_base_device::m68ki_set_one(unsigned short opcode, u16 state, const opcode_handler_struct &s)
{
for(int i=0; i<NUM_CPU_TYPES; i++)

View File

@ -0,0 +1,24 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#include "emu.h"
#include "mcf5206e.h"
#include "m68kdasm.h"
DEFINE_DEVICE_TYPE(MCF5206E, mcf5206e_device, "mcf5206e", "Freescale MCF5206E")
std::unique_ptr<util::disasm_interface> mcf5206e_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_COLDFIRE);
}
mcf5206e_device::mcf5206e_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: m68000_base_device(mconfig, tag, owner, clock, MCF5206E, 32,32)
{
}
void mcf5206e_device::device_start()
{
m68000_base_device::device_start();
init_cpu_coldfire();
}

View File

@ -0,0 +1,28 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#ifndef MAME_CPU_M68000_MCF5206E_H
#define MAME_CPU_M68000_MCF5206E_H
#pragma once
#include "m68kcommon.h"
class mcf5206e_device : public m68000_base_device
{
public:
// construction/destruction
mcf5206e_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 2; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
};
DECLARE_DEVICE_TYPE(MCF5206E, mcf5206e_device)
#endif

View File

@ -0,0 +1,24 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#include "emu.h"
#include "scc68070.h"
#include "m68kdasm.h"
std::unique_ptr<util::disasm_interface> scc68070_base_device::create_disassembler()
{
return std::make_unique<m68k_disassembler>(m68k_disassembler::TYPE_68000);
}
scc68070_base_device::scc68070_base_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock,
const device_type type, address_map_constructor internal_map)
: m68000_base_device(mconfig, tag, owner, clock, type, 16,32, internal_map)
{
}
void scc68070_base_device::device_start()
{
m68000_base_device::device_start();
init_cpu_scc68070();
}

View File

@ -0,0 +1,26 @@
// license:BSD-3-Clause
// copyright-holders:Karl Stenerud
#ifndef MAME_CPU_M68000_SCC68070_H
#define MAME_CPU_M68000_SCC68070_H
#pragma once
#include "m68kcommon.h"
class scc68070_base_device : public m68000_base_device
{
protected:
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual u32 execute_min_cycles() const noexcept override { return 4; }
virtual u32 execute_max_cycles() const noexcept override { return 158; }
// device-level overrides
virtual void device_start() override;
scc68070_base_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock,
const device_type type, address_map_constructor internal_map);
};
#endif

View File

@ -6,7 +6,7 @@
#pragma once
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/fscpu32.h"
#include "68340sim.h"
#include "68340dma.h"

View File

@ -26,7 +26,7 @@ TODO:
#pragma once
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/scc68070.h"
//**************************************************************************
// TYPE DEFINITIONS

View File

@ -15,6 +15,9 @@ Ernesto Corvi & Mariusz Wojcieszek
#pragma once
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/m68000/m68030.h"
#include "cpu/m68000/m68040.h"
#include "machine/bankdev.h"
#include "bus/rs232/rs232.h"
#include "bus/centronics/ctronics.h"

View File

@ -56,7 +56,7 @@
***************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "cpu/mcs51/mcs51.h"
#include "machine/gen_latch.h"
#include "machine/icm7170.h"

View File

@ -16,7 +16,9 @@
#include "apollo_kbd.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/m68000/m68030.h"
#include "cpu/m68000/m68040.h"
#include "machine/6840ptm.h"
#include "machine/am9517a.h"

View File

@ -20,7 +20,8 @@
#include "bus/nscsi/devices.h"
#include "bus/nubus/cards.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/m68000/m68030.h"
#include "cpu/m6805/m6805.h"
#include "machine/applepic.h"
#include "machine/iwm.h"

View File

@ -23,7 +23,7 @@
#include "bus/nubus/nubus.h"
#include "bus/nubus/cards.h"
#include "bus/rs232/rs232.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68030.h"
#include "machine/applefdintf.h"
#include "machine/ncr5380.h"
#include "machine/nscsi_bus.h"

View File

@ -22,7 +22,8 @@
#include "bus/nscsi/devices.h"
#include "bus/rs232/rs232.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/m68000/m68030.h"
#include "machine/applefdintf.h"
#include "machine/ncr5380.h"
#include "machine/nscsi_bus.h"

View File

@ -19,7 +19,7 @@
#include "bus/nscsi/devices.h"
#include "bus/rs232/rs232.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68030.h"
#include "machine/ram.h"
#include "machine/timer.h"
#include "machine/z80scc.h"

View File

@ -105,7 +105,7 @@
#include "emu.h"
#include "macrtc.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68030.h"
#include "cpu/m6502/m5074x.h"
#include "machine/6522via.h"
#include "machine/ram.h"

View File

@ -19,7 +19,7 @@
#include "bus/nscsi/devices.h"
#include "bus/nubus/cards.h"
#include "bus/nubus/nubus.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68040.h"
#include "machine/6522via.h"
#include "machine/applefdintf.h"
#include "machine/dp83932c.h"

View File

@ -56,7 +56,7 @@
#include "emu.h"
#include "atarigt.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "machine/eeprompar.h"
#include "speaker.h"

View File

@ -28,7 +28,7 @@
#include "emu.h"
#include "atarigx2.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "machine/eeprompar.h"
#include "emupal.h"
#include "speaker.h"

View File

@ -195,7 +195,7 @@ RoadBlasters (aka Future Vette):005*
#include "emu.h"
#include "atarisy1.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "cpu/m6502/m6502.h"
#include "machine/eeprompar.h"
#include "machine/watchdog.h"

View File

@ -20,7 +20,7 @@
#include "emu.h"
#include "cybstorm.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "machine/eeprompar.h"
#include "machine/watchdog.h"
#include "emupal.h"

View File

@ -122,7 +122,7 @@
#include "emu.h"
#include "gauntlet.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "cpu/m6502/m6502.h"
#include "machine/eeprompar.h"
#include "machine/watchdog.h"

View File

@ -18,6 +18,7 @@
#include "cpu/adsp2100/adsp2100.h"
#include "cpu/dsp32/dsp32.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "cpu/tms32010/tms32010.h"
#include "cpu/tms34010/tms34010.h"

View File

@ -341,6 +341,7 @@ Notes:
#include "bus/generic/carts.h"
#include "bus/ata/idehd.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/mips/mips1.h"
#include "cpu/jaguar/jaguar.h"
#include "imagedev/chd_cd.h"

View File

@ -8,7 +8,7 @@
#include "cage.h"
#include "cpu/adsp2100/adsp2100.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/tms34010/tms34010.h"
#include "cpu/dsp32/dsp32.h"

View File

@ -26,7 +26,7 @@
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "cpu/tms32010/tms32010.h"
#include "cpu/m6502/m6502.h"
#include "video/avgdvg.h"

View File

@ -25,7 +25,7 @@
#include "emu.h"
#include "toobin.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "machine/eeprompar.h"
#include "machine/watchdog.h"
#include "speaker.h"

View File

@ -22,7 +22,7 @@
#include "emu.h"
#include "vindictr.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "machine/eeprompar.h"
#include "machine/watchdog.h"
#include "speaker.h"

View File

@ -16,7 +16,7 @@
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "bus/centronics/ctronics.h"
#include "bus/rs232/rs232.h"
#include "imagedev/floppy.h"

View File

@ -5,7 +5,7 @@
#pragma once
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/mcf5206e.h"
class adder5_state : public driver_device

View File

@ -6,7 +6,7 @@
#pragma once
#include "bfm_sc4.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/mcf5206e.h"
class bfm_sc5_state : public bfm_sc45_state
{

View File

@ -37,7 +37,7 @@
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
// memory
#include "machine/ram.h"

View File

@ -109,7 +109,7 @@
***************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/mcf5206e.h"
#include "machine/mcf5206e.h"
#include "machine/intelfsh.h"
#include "speaker.h"

View File

@ -40,6 +40,7 @@
#include "emu.h"
#include "cpu/es5510/es5510.h"
#include "cpu/m68000/m68000.h"
#include "machine/68340.h"
#include "esqvfd.h"
#include "machine/upd765.h"

View File

@ -96,6 +96,7 @@
#include "bus/midi/midi.h"
#include "cpu/es5510/es5510.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "machine/mc68681.h"
#include "sound/es5506.h"
#include "sound/esqpump.h"

View File

@ -40,6 +40,7 @@ Designer Mach IV Master 2325 (model 6129) overview:
#include "cpu/m6502/r65c02.h"
#include "cpu/m6502/m65sc02.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "machine/clock.h"
#include "machine/sensorboard.h"
#include "sound/dac.h"

View File

@ -168,6 +168,9 @@ B0000x-xxxxxx: see V7, -800000
#include "bus/generic/carts.h"
#include "bus/generic/slot.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/m68000/m68030.h"
#include "cpu/m68000/m68040.h"
#include "machine/clock.h"
#include "machine/gen_latch.h"
#include "machine/ram.h"

View File

@ -195,7 +195,7 @@
****************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68030.h"
#include "bus/vme/vme.h"
#include "bus/vme/vme_fcisio.h"
#include "bus/vme/vme_fcscsi.h"

View File

@ -167,7 +167,7 @@ There is an Asura Buster known to exist on a FG3-SUB-EP containing all EPROMs
#include "fuukifg3.h"
#include "cpu/z80/z80.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "sound/ymopl.h"
#include "speaker.h"

View File

@ -149,6 +149,7 @@ REF. 970429
#include "gaelco3d.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "emupal.h"
#include "speaker.h"

View File

@ -15,6 +15,7 @@ TODO:
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "mmboard.h"
#include "sound/dac.h"
#include "mmdisplay1.h"

View File

@ -17,6 +17,7 @@ TODO:
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "machine/nvram.h"
#include "mmboard.h"
#include "mmdisplay2.h"

View File

@ -86,6 +86,8 @@ Reminder: unsupported on Almeria and Portorose 1.01, this is not a bug.
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/m68000/m68030.h"
#include "machine/nvram.h"
#include "machine/timer.h"
#include "mmboard.h"

View File

@ -42,7 +42,7 @@ After boot, it copies ROM to RAM, probably to circumvent waitstates on slow ROM.
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68030.h"
#include "machine/nvram.h"
#include "machine/timer.h"
#include "mmboard.h"

View File

@ -165,7 +165,7 @@
****************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "bus/vme/vme.h"
#include "machine/z80scc.h"
#include "machine/z8536.h"

View File

@ -49,6 +49,7 @@
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68030.h"
#include "machine/ds1386.h"
#include "machine/scn_pci.h"
#include "bus/hp_hil/hp_hil.h"

View File

@ -60,7 +60,10 @@
#include "emu.h"
#include "logmacro.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "cpu/m68000/m68020.h"
#include "cpu/m68000/m68030.h"
#include "cpu/m68000/m68040.h"
#include "machine/6840ptm.h"
#include "bus/hp_dio/hp_dio.h"

View File

@ -394,6 +394,7 @@ Notes:
#include "cpu/m6800/m6801.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/m6809/m6809.h"
#include "cpu/tms32031/tms32031.h"
#include "machine/input_merger.h"

View File

@ -20,7 +20,7 @@ Pluto 8: ColdFire 5475
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/mcf5206e.h"
#include "machine/mcf5206e.h"
#include "speaker.h"

View File

@ -70,7 +70,7 @@ hard drive 3.5 adapter long 3.5 IDE cable 3.5 adapter PCB
#include "bus/ata/ataintf.h"
#include "bus/ata/idehd.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "sound/k054539.h"
#include "screen.h"

View File

@ -100,6 +100,7 @@
#include "konamigx.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/tms57002/tms57002.h"
#include "cpu/z80/z80.h"
#include "machine/eepromser.h"

View File

@ -18,7 +18,7 @@
***************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "machine/eepromser.h"
#include "machine/gen_latch.h"
#include "machine/nvram.h"

View File

@ -65,7 +65,7 @@
#include "emu.h"
#include "cpu/dsp56156/dsp56156.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/z80/z80.h"
#include "machine/eepromser.h"
#include "machine/k054321.h"

View File

@ -23,6 +23,7 @@
#include "emu.h"
#include "konami_helper.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "machine/k053252.h"
#include "machine/timer.h"
#include "k053246_k053247_k055673.h"

View File

@ -8,7 +8,7 @@
#include "bus/abcbus/abcbus.h"
#include "bus/abckb/abckb.h"
#include "bus/rs232/rs232.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68008.h"
#include "formats/abc1600_dsk.h"
#include "imagedev/floppy.h"
#include "abc1600mac.h"

View File

@ -12,7 +12,7 @@
#include "emu.h"
#include "softlist_dev.h"
#include "bus/nscsi/devices.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "formats/abc1600_dsk.h"
#include "imagedev/floppy.h"
#include "machine/e0516.h"

View File

@ -80,7 +80,7 @@ Custom: Imagetek I5000 (2ch video & 2ch sound)
*/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "machine/eepromser.h"
#include "sound/i5000.h"
#include "emupal.h"

View File

@ -27,7 +27,7 @@
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "machine/eepromser.h"
#include "machine/timer.h"
#include "sound/i5000.h"

View File

@ -104,7 +104,7 @@ Stephh's notes (based on the game M68EC020 code and some tests) :
*/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/mcs51/mcs51.h"
#include "sound/okim6295.h"
#include "emupal.h"

View File

@ -27,7 +27,7 @@
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/mcf5206e.h"
#include "machine/mcf5206e.h"
#include "video/pc_vga.h"
#include "speaker.h"

View File

@ -37,7 +37,7 @@
*****************************************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68030.h"
#include "cpu/tms34010/tms34010.h"
#include "sound/okim6295.h"
#include "emupal.h"

View File

@ -153,7 +153,7 @@
****************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68030.h"
#include "bus/vme/vme.h"
#include "bus/vme/vme_mvme350.h"
#include "machine/z80scc.h"

View File

@ -154,7 +154,7 @@
****************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68040.h"
#include "machine/z80scc.h"
#include "bus/rs232/rs232.h"
#include "machine/clock.h"

View File

@ -129,6 +129,7 @@ better notes (complete chip lists) for each board still needed
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/tms32025/tms32025.h"
#include "machine/nvram.h"
#include "sound/c140.h"

View File

@ -274,7 +274,7 @@ GFX: Custom 145 ( 80 pin PQFP)
#include "emu.h"
#include "namconb1.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "sound/c352.h"
#include "speaker.h"

View File

@ -1083,7 +1083,7 @@ Notes:
#include "emu.h"
#include "namcos22.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/tms32025/tms32025.h"
#include "speaker.h"

View File

@ -58,6 +58,7 @@
// processors
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/m6805/m68705.h"
// devices

View File

@ -5,7 +5,8 @@
#ifndef MAME_INCLUDES_NEXT_H
#define MAME_INCLUDES_NEXT_H
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68030.h"
#include "cpu/m68000/m68040.h"
#include "imagedev/floppy.h"
#include "machine/nscsi_bus.h"
#include "machine/mccs1850.h"

View File

@ -287,6 +287,7 @@ Notes:
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "machine/gen_latch.h"
#include "sound/es5506.h"

View File

@ -26,7 +26,7 @@
*/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68030.h"
// memory
#include "machine/ram.h"

View File

@ -82,7 +82,7 @@ This was pointed out by Bart Puype
#include "cpu/z80/z80.h"
#include "cpu/z80/lz8420m.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/pic16c5x/pic16c5x.h"
#include "sound/okim6295.h"
#include "sound/ymopl.h"

View File

@ -8,7 +8,7 @@
#include "emu.h"
#include "bus/rs232/rs232.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68010.h"
#include "machine/hd63450.h"
//#include "machine/imsc012.h"
#include "machine/mc68681.h"

View File

@ -49,7 +49,7 @@
/* Core includes */
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68030.h"
#include "machine/terminal.h"
#include "machine/nscsi_bus.h"

Some files were not shown because too many files have changed in this diff Show More