summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/c64/exp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/c64/exp.h')
-rw-r--r--src/devices/bus/c64/exp.h43
1 files changed, 19 insertions, 24 deletions
diff --git a/src/devices/bus/c64/exp.h b/src/devices/bus/c64/exp.h
index 2507227d724..68974431d56 100644
--- a/src/devices/bus/c64/exp.h
+++ b/src/devices/bus/c64/exp.h
@@ -36,8 +36,7 @@
#pragma once
-#include "softlist_dev.h"
-#include "formats/cbm_crt.h"
+#include "imagedev/cartrom.h"
@@ -51,7 +50,7 @@ class device_c64_expansion_card_interface;
class c64_expansion_slot_device : public device_t,
public device_single_card_slot_interface<device_c64_expansion_card_interface>,
- public device_image_interface
+ public device_cartrom_image_interface
{
public:
// construction/destruction
@@ -83,10 +82,10 @@ public:
// cartridge interface
uint8_t dma_cd_r(offs_t offset) { return m_read_dma_cd(offset); }
void dma_cd_w(offs_t offset, uint8_t data) { m_write_dma_cd(offset, data); }
- DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_write_irq(state); }
- DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_write_nmi(state); }
- DECLARE_WRITE_LINE_MEMBER( dma_w ) { m_write_dma(state); }
- DECLARE_WRITE_LINE_MEMBER( reset_w ) { m_write_reset(state); }
+ void irq_w(int state) { m_write_irq(state); }
+ void nmi_w(int state) { m_write_nmi(state); }
+ void dma_w(int state) { m_write_dma(state); }
+ void reset_w(int state) { m_write_reset(state); }
int phi2() { return clock(); }
int dotclock() { return phi2() * 8; }
int hiram() { return m_hiram; }
@@ -95,25 +94,18 @@ public:
void set_passthrough();
protected:
- // device-level overrides
+ // device_t implementation
virtual void device_start() override;
virtual void device_reset() override;
- // image-level overrides
- virtual image_init_result call_load() override;
- virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); }
+ // device_image_interface implementation
+ virtual std::pair<std::error_condition, std::string> call_load() override;
- virtual iodevice_t image_type() const noexcept override { return IO_CARTSLOT; }
-
- virtual bool is_readable() const noexcept override { return true; }
- virtual bool is_writeable() const noexcept override { return false; }
- virtual bool is_creatable() const noexcept override { return false; }
- virtual bool must_be_loaded() const noexcept override { return false; }
virtual bool is_reset_on_load() const noexcept override { return true; }
virtual const char *image_interface() const noexcept override { return "c64_cart,vic10_cart"; }
virtual const char *file_extensions() const noexcept override { return "80,a0,e0,crt"; }
- // slot interface overrides
+ // device_slot_interface implementation
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
devcb_read8 m_read_dma_cd;
@@ -140,18 +132,21 @@ public:
// construction/destruction
virtual ~device_c64_expansion_card_interface();
- virtual uint8_t c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) { return data; };
- virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) { };
+ virtual uint8_t c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) { return data; }
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) { }
virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) { return m_game; }
virtual int c64_exrom_r(offs_t offset, int sphi2, int ba, int rw) { return m_exrom; }
protected:
device_c64_expansion_card_interface(const machine_config &mconfig, device_t &device);
- optional_shared_ptr<uint8_t> m_roml;
- optional_shared_ptr<uint8_t> m_romh;
- optional_shared_ptr<uint8_t> m_romx;
- optional_shared_ptr<uint8_t> m_nvram;
+ std::unique_ptr<uint8_t[]> m_roml;
+ std::unique_ptr<uint8_t[]> m_romh;
+ std::unique_ptr<uint8_t[]> m_romx;
+ std::unique_ptr<uint8_t[]> m_nvram;
+
+ size_t m_roml_size;
+ size_t m_romh_size;
int m_game;
int m_exrom;