summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/bbc/tube/tube_6502.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/bbc/tube/tube_6502.h')
-rw-r--r--src/devices/bus/bbc/tube/tube_6502.h60
1 files changed, 50 insertions, 10 deletions
diff --git a/src/devices/bus/bbc/tube/tube_6502.h b/src/devices/bus/bbc/tube/tube_6502.h
index abb907ef3bd..f2b12a5c3f0 100644
--- a/src/devices/bus/bbc/tube/tube_6502.h
+++ b/src/devices/bus/bbc/tube/tube_6502.h
@@ -17,8 +17,7 @@
#define MAME_BUS_BBC_TUBE_6502_H
#include "tube.h"
-#include "cpu/m6502/m65c02.h"
-#include "machine/bankdev.h"
+#include "cpu/m6502/m65sc02.h"
#include "machine/ram.h"
#include "machine/tube.h"
@@ -28,9 +27,9 @@
// ======================> bbc_tube_6502_device
-class bbc_tube_6502_device :
- public device_t,
- public device_bbc_tube_interface
+class bbc_tube_6502_device
+ : public device_t
+ , public device_bbc_tube_interface
{
public:
// construction/destruction
@@ -47,22 +46,61 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- void tube_6502_bank(address_map &map);
void tube_6502_mem(address_map &map);
- void add_common_devices(machine_config &config);
-
virtual uint8_t host_r(offs_t offset) override;
virtual void host_w(offs_t offset, uint8_t data) override;
virtual uint8_t tube_r(offs_t offset);
virtual void tube_w(offs_t offset, uint8_t data);
- required_device<cpu_device> m_maincpu;
- required_device<address_map_bank_device> m_bankdev;
+ required_device<m6502_device> m_maincpu;
+ memory_view m_view;
required_device<tube_device> m_ula;
required_device<ram_device> m_ram;
required_memory_region m_rom;
+
+ void prst_w(int state);
+};
+
+
+class bbc_tube_6502p_device : public bbc_tube_6502_device
+{
+public:
+ bbc_tube_6502p_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry* device_rom_region() const override;
+
+private:
+ void tube_6502p_mem(address_map& map);
+};
+
+
+class bbc_tube_6502e_device : public bbc_tube_6502_device
+{
+public:
+ bbc_tube_6502e_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ void tube_6502e_mem(address_map &map);
+
+ uint8_t ram_r(offs_t offset);
+ void ram_w(offs_t offset, uint8_t data);
+
+ bool m_opcode_ind_y;
+ uint8_t m_page;
+ uint64_t m_cycles;
};
@@ -80,6 +118,8 @@ protected:
// device type definition
DECLARE_DEVICE_TYPE(BBC_TUBE_6502, bbc_tube_6502_device)
+DECLARE_DEVICE_TYPE(BBC_TUBE_6502P, bbc_tube_6502p_device)
+DECLARE_DEVICE_TYPE(BBC_TUBE_6502E, bbc_tube_6502e_device)
DECLARE_DEVICE_TYPE(BBC_TUBE_65C102, bbc_tube_65c102_device)