summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/includes/electron.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/includes/electron.h')
-rw-r--r--src/mame/includes/electron.h58
1 files changed, 52 insertions, 6 deletions
diff --git a/src/mame/includes/electron.h b/src/mame/includes/electron.h
index 9dd9bb30eca..1bf29e0440c 100644
--- a/src/mame/includes/electron.h
+++ b/src/mame/includes/electron.h
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Wilbert Pol
+// copyright-holders:Wilbert Pol, Nigel Barnes
/*****************************************************************************
*
* includes/electron.h
@@ -15,11 +15,16 @@
#pragma once
#include "machine/ram.h"
+#include "machine/6522via.h"
+#include "machine/input_merger.h"
#include "imagedev/cassette.h"
#include "sound/beep.h"
#include "emupal.h"
#include "bus/electron/exp.h"
+#include "bus/bbc/userport/userport.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
/* Interrupts */
#define INT_HIGH_TONE 0x40
@@ -36,6 +41,7 @@ public:
electron_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_irqs(*this, "irqs")
, m_screen(*this, "screen")
, m_cassette(*this, "cassette")
, m_beeper(*this, "beeper")
@@ -54,7 +60,7 @@ public:
DECLARE_INPUT_CHANGED_MEMBER( trigger_reset );
-private:
+protected:
enum
{
TIMER_TAPE_HANDLER,
@@ -69,12 +75,12 @@ private:
DECLARE_READ8_MEMBER(electron64_fetch_r);
DECLARE_READ8_MEMBER(electron_mem_r);
DECLARE_WRITE8_MEMBER(electron_mem_w);
- DECLARE_READ8_MEMBER(electron_paged_r);
- DECLARE_WRITE8_MEMBER(electron_paged_w);
+ virtual DECLARE_READ8_MEMBER(electron_paged_r);
+ virtual DECLARE_WRITE8_MEMBER(electron_paged_w);
DECLARE_READ8_MEMBER(electron_mos_r);
DECLARE_WRITE8_MEMBER(electron_mos_w);
- DECLARE_READ8_MEMBER(electron_fred_r);
- DECLARE_WRITE8_MEMBER(electron_fred_w);
+ virtual DECLARE_READ8_MEMBER(electron_fred_r);
+ virtual DECLARE_WRITE8_MEMBER(electron_fred_w);
DECLARE_READ8_MEMBER(electron_jim_r);
DECLARE_WRITE8_MEMBER(electron_jim_w);
DECLARE_READ8_MEMBER(electron_sheila_r);
@@ -101,6 +107,7 @@ private:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
required_device<cpu_device> m_maincpu;
+ required_device<input_merger_device> m_irqs;
required_device<screen_device> m_screen;
required_device<cassette_image_device> m_cassette;
required_device<beep_device> m_beeper;
@@ -147,4 +154,43 @@ private:
bool m_vdu_drivers;
};
+
+class electronsp_state : public electron_state
+{
+public:
+ electronsp_state(const machine_config &mconfig, device_type type, const char *tag)
+ : electron_state(mconfig, type, tag)
+ , m_region_sp64(*this, "sp64")
+ , m_via(*this, "via6522")
+ , m_userport(*this, "userport")
+ , m_romi(*this, "romi%u", 1)
+ , m_rompages(*this, "ROMPAGES")
+ { }
+
+ void electronsp(machine_config &config);
+
+protected:
+ virtual DECLARE_READ8_MEMBER(electron_paged_r) override;
+ virtual DECLARE_WRITE8_MEMBER(electron_paged_w) override;
+ virtual DECLARE_READ8_MEMBER(electron_fred_r) override;
+ virtual DECLARE_WRITE8_MEMBER(electron_fred_w) override;
+
+ virtual void machine_start() override;
+
+private:
+ required_memory_region m_region_sp64;
+ required_device<via6522_device> m_via;
+ required_device<bbc_userport_slot_device> m_userport;
+ required_device_array<generic_slot_device, 2> m_romi;
+ required_ioport m_rompages;
+
+ uint8_t m_sp64_bank;
+ std::unique_ptr<uint8_t[]> m_sp64_ram;
+
+ image_init_result load_rom(device_image_interface &image, generic_slot_device *slot);
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom1_load) { return load_rom(image, m_romi[0]); }
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom2_load) { return load_rom(image, m_romi[1]); }
+};
+
+
#endif // MAME_INCLUDES_ELECTRON_H