summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/spectrum/beta.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/spectrum/beta.h')
-rw-r--r--src/devices/bus/spectrum/beta.h91
1 files changed, 83 insertions, 8 deletions
diff --git a/src/devices/bus/spectrum/beta.h b/src/devices/bus/spectrum/beta.h
index 7fed611a49b..3dac22f95d3 100644
--- a/src/devices/bus/spectrum/beta.h
+++ b/src/devices/bus/spectrum/beta.h
@@ -11,8 +11,10 @@
#include "exp.h"
#include "softlist.h"
#include "imagedev/floppy.h"
+#include "bus/centronics/ctronics.h"
#include "machine/wd_fdc.h"
-#include "formats/trd_dsk.h"
+#include "machine/i8255.h"
+#include "machine/6850acia.h"
//**************************************************************************
// TYPE DEFINITIONS
@@ -28,7 +30,7 @@ public:
spectrum_betav2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
spectrum_betav2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_FLOPPY_FORMATS(floppy_formats);
+ static void floppy_formats(format_registration &fr);
protected:
// device-level overrides
@@ -43,21 +45,28 @@ protected:
virtual void pre_opcode_fetch(offs_t offset) override;
virtual void pre_data_fetch(offs_t offset) override;
virtual uint8_t mreq_r(offs_t offset) override;
- virtual void mreq_w(offs_t offset, uint8_t data) override;
virtual uint8_t iorq_r(offs_t offset) override;
virtual void iorq_w(offs_t offset, uint8_t data) override;
- virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+ virtual bool romcs() override;
+
+ // passthru
+ virtual void post_opcode_fetch(offs_t offset) override { m_exp->post_opcode_fetch(offset); }
+ virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); }
+ virtual void mreq_w(offs_t offset, uint8_t data) override { if (m_exp->romcs()) m_exp->mreq_w(offset, data); }
required_memory_region m_rom;
required_device<wd_fdc_device_base> m_fdc;
required_device_array<floppy_connector, 4> m_floppy;
required_device<spectrum_expansion_slot_device> m_exp;
- int m_romcs;
- int m_romlatch;
-// int m_masterportdisable;
+ bool m_romcs;
+ u8 m_masterdisable;
+ u8 m_control;
+ bool m_motor_active;
+ void fdc_hld_w(int state);
+ virtual void motors_control();
- void fetch(offs_t offset);
+ virtual void fetch(offs_t offset);
};
class spectrum_betav3_device :
@@ -71,6 +80,8 @@ public:
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
+ virtual void motors_control() override;
};
@@ -90,9 +101,73 @@ protected:
};
+class spectrum_betaclone_device :
+ public spectrum_betaplus_device
+{
+public:
+ // construction/destruction
+ spectrum_betaclone_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+ spectrum_betaclone_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+};
+
+class spectrum_betacbi_device :
+ public spectrum_betaclone_device
+{
+public:
+ // construction/destruction
+ spectrum_betacbi_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+ spectrum_betacbi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual void device_start() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void fetch(offs_t offset) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ required_device<centronics_device> m_centronics;
+
+ int m_centronics_busy;
+};
+
+class spectrum_gamma_device :
+ public spectrum_betaplus_device
+{
+public:
+ // construction/destruction
+ spectrum_gamma_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+ spectrum_gamma_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ DECLARE_CUSTOM_INPUT_MEMBER(busy_r) { return !m_centronics_busy; }
+protected:
+ virtual void device_start() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
+ virtual bool romcs() override { return 1; }
+
+ required_device<i8255_device> m_ppi;
+ required_device<acia6850_device> m_acia;
+ required_device<centronics_device> m_centronics;
+
+ int m_centronics_busy;
+};
+
// device type definition
DECLARE_DEVICE_TYPE(SPECTRUM_BETAV2, spectrum_betav2_device)
DECLARE_DEVICE_TYPE(SPECTRUM_BETAV3, spectrum_betav3_device)
DECLARE_DEVICE_TYPE(SPECTRUM_BETAPLUS, spectrum_betaplus_device)
+DECLARE_DEVICE_TYPE(SPECTRUM_BETACLONE, spectrum_betaclone_device)
+DECLARE_DEVICE_TYPE(SPECTRUM_BETACBI, spectrum_betacbi_device)
+DECLARE_DEVICE_TYPE(SPECTRUM_GAMMA, spectrum_gamma_device)
#endif // MAME_BUS_SPECTRUM_BETA_H