diff options
Diffstat (limited to 'src/devices/cpu/m6800/m6801.h')
-rw-r--r-- | src/devices/cpu/m6800/m6801.h | 138 |
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) |