summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m6800/m6801.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/m6800/m6801.h')
-rw-r--r--src/devices/cpu/m6800/m6801.h138
1 files changed, 121 insertions, 17 deletions
diff --git a/src/devices/cpu/m6800/m6801.h b/src/devices/cpu/m6800/m6801.h
index c406eefd092..0e64db57981 100644
--- a/src/devices/cpu/m6800/m6801.h
+++ b/src/devices/cpu/m6800/m6801.h
@@ -56,10 +56,10 @@ public:
auto out_sc2_cb() { return m_out_sc2_func.bind(); }
auto out_ser_tx_cb() { return m_out_sertx_func.bind(); }
- DECLARE_READ8_MEMBER( m6801_io_r );
- DECLARE_WRITE8_MEMBER( m6801_io_w );
+ void m6801_io(address_map &map); // FIXME: privatize this
void m6801_clock_serial();
+
protected:
m6801_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const m6800_cpu_device::op_func *insn, const uint8_t *cycles, address_map_constructor internal = address_map_constructor());
@@ -76,6 +76,49 @@ protected:
// device_disasm_interface overrides
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
+ void p1_ddr_w(uint8_t data);
+ uint8_t p1_data_r();
+ void p1_data_w(uint8_t data);
+ void p2_ddr_w(uint8_t data);
+ uint8_t p2_data_r();
+ void p2_data_w(uint8_t data);
+ void p3_ddr_w(uint8_t data);
+ uint8_t p3_data_r();
+ void p3_data_w(uint8_t data);
+ uint8_t p3_csr_r();
+ void p3_csr_w(uint8_t data);
+ void p4_ddr_w(uint8_t data);
+ uint8_t p4_data_r();
+ void p4_data_w(uint8_t data);
+
+public: // FIXME: psion.cpp accesses this
+ uint8_t tcsr_r();
+ void tcsr_w(uint8_t data);
+protected:
+ uint8_t ch_r();
+ uint8_t cl_r();
+ void ch_w(uint8_t data);
+ void cl_w(uint8_t data);
+ uint8_t ocrh_r();
+ uint8_t ocrl_r();
+ void ocrh_w(uint8_t data);
+ void ocrl_w(uint8_t data);
+ uint8_t icrh_r();
+ uint8_t icrl_r();
+
+ uint8_t sci_rmcr_r();
+ void sci_rmcr_w(uint8_t data);
+ uint8_t sci_trcsr_r();
+ void sci_trcsr_w(uint8_t data);
+ uint8_t sci_rdr_r();
+ void sci_tdr_w(uint8_t data);
+
+public: // FIXME: psion.cpp accesses this
+ uint8_t rcr_r();
+protected:
+ void rcr_w(uint8_t data);
+ uint8_t ff_r();
+
void m6803_mem(address_map &map);
devcb_read8::array<4> m_in_port_func;
@@ -159,31 +202,40 @@ protected:
class hd6301_cpu_device : public m6801_cpu_device
{
-public:
- hd6301_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
protected:
hd6301_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
+
+ virtual void TAKE_TRAP() override;
};
-class hd63701_cpu_device : public m6801_cpu_device
+// DP-40 package: HD6301V1P, HD63A01V1P, HD63B01V1P
+// FP-54 package: HD6301V1F, HD63A01V1F, HD63B01V1F
+// CG-40 package: HD6301V1CG, HD63A01V1CG, HD63B01V1CG
+// CP-52 package: HD6301V1CP, HD63A01V1CP, HD63B01V1CP
+// CP-44 package: HD6301V1L, HD63A01V1L, HD63B01V1L
+// Not fully emulated yet
+class hd6301v1_cpu_device : public hd6301_cpu_device
{
public:
- hd63701_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ hd6301v1_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
-protected:
- virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
- virtual void TAKE_TRAP() override;
+// DC-40 package: HD63701V0C, HD63A701V0C, HD63B701V0C
+// Not fully emulated yet
+class hd63701v0_cpu_device : public hd6301_cpu_device
+{
+public:
+ hd63701v0_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
};
-// DP-40 package: HD6303RP, HD63A03RP, HD63B03RP,
-// FP-54 package: HD6303RF, HD63A03RF, HD63B03RF,
-// CG-40 package: HD6303RCG, HD63A03RCG, HD63B03RCG,
+// DP-40 package: HD6303RP, HD63A03RP, HD63B03RP
+// FP-54 package: HD6303RF, HD63A03RF, HD63B03RF
+// CG-40 package: HD6303RCG, HD63A03RCG, HD63B03RCG
// Not fully emulated yet
class hd6303r_cpu_device : public hd6301_cpu_device
{
@@ -192,23 +244,71 @@ public:
};
+class hd6301x_cpu_device : public hd6301_cpu_device
+{
+protected:
+ hd6301x_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+};
+
+
+// DP-64S package: HD6301X0P, HD63A01X0P, HD63B01X0P
+// FP-80 package: HD6301X0F, HD63A01X0F, HD63B01X0F
+// CP-68 package: HD6301X0CP, HD63A01X0CP, HD63B01X0CP
+// Not fully emulated yet
+class hd6301x0_cpu_device : public hd6301x_cpu_device
+{
+public:
+ hd6301x0_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+
+// DC-64S package: HD63701X0C, HD63A701X0C, HD63B701X0C
+// Not fully emulated yet
+class hd63701x0_cpu_device : public hd6301x_cpu_device
+{
+public:
+ hd63701x0_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+
// DP-64S package: HD6303XP, HD63A03XP, HD63B03XP
// FP-80 package: HD6303XF, HD63A03XF, HD63B03XF
// CP-68 package: HD6303XCP, HD63A03XCP, HD63B03XCP
// Not fully emulated yet
-class hd6303x_cpu_device : public hd6301_cpu_device
+class hd6303x_cpu_device : public hd6301x_cpu_device
{
public:
hd6303x_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
};
+// DP-64S package: HD6301Y0P, HD63A01Y0P, HD63B01Y0P, HD63C01Y0P
+// FP-64 package: HD6301Y0F, HD63A01Y0F, HD63B01Y0F, HD63C01Y0F
+// FP-64A package: HD6301Y0H, HD63A01Y0H, HD63B01Y0H, HD63C01Y0H
+// CP-68 package: HD6301Y0CP, HD63A01Y0CP, HD63B01Y0CP, HD63C01Y0CP
+// Not fully emulated yet
+class hd6301y0_cpu_device : public hd6301x_cpu_device
+{
+public:
+ hd6301y0_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+
+// DC-64S package: HD63701Y0C, HD63A701Y0C, HD63B701Y0C, HD63C701Y0C
+// Not fully emulated yet
+class hd63701y0_cpu_device : public hd6301x_cpu_device
+{
+public:
+ hd63701y0_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+
// DP-64S package: HD6303YP, HD63A03YP, HD63B03YP, HD63C03YP
// FP-64 package: HD6303YF, HD63A03YF, HD63B03YF, HD63C03YF
// FP-64A package: HD6303YH, HD63A03YH, HD63B03YH, HD63C03YH
// CP-68 package: HD6303YCP, HD63A03YCP, HD63B03YCP, HD63C03YCP
// Not fully emulated yet
-class hd6303y_cpu_device : public hd6301_cpu_device
+class hd6303y_cpu_device : public hd6301x_cpu_device
{
public:
hd6303y_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
@@ -218,8 +318,12 @@ public:
DECLARE_DEVICE_TYPE(M6801, m6801_cpu_device)
DECLARE_DEVICE_TYPE(M6803, m6803_cpu_device)
DECLARE_DEVICE_TYPE(M6803E, m6803e_cpu_device)
-DECLARE_DEVICE_TYPE(HD6301, hd6301_cpu_device)
-DECLARE_DEVICE_TYPE(HD63701, hd63701_cpu_device)
+DECLARE_DEVICE_TYPE(HD6301V1, hd6301v1_cpu_device)
+DECLARE_DEVICE_TYPE(HD6301X0, hd6301x0_cpu_device)
+DECLARE_DEVICE_TYPE(HD6301Y0, hd6301y0_cpu_device)
+DECLARE_DEVICE_TYPE(HD63701V0, hd63701v0_cpu_device)
+DECLARE_DEVICE_TYPE(HD63701X0, hd63701x0_cpu_device)
+DECLARE_DEVICE_TYPE(HD63701Y0, hd63701y0_cpu_device)
DECLARE_DEVICE_TYPE(HD6303R, hd6303r_cpu_device)
DECLARE_DEVICE_TYPE(HD6303X, hd6303x_cpu_device)
DECLARE_DEVICE_TYPE(HD6303Y, hd6303y_cpu_device)