diff options
Diffstat (limited to 'src/mess/machine/mface2.h')
-rw-r--r-- | src/mess/machine/mface2.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/mess/machine/mface2.h b/src/mess/machine/mface2.h new file mode 100644 index 00000000000..6b613774a9c --- /dev/null +++ b/src/mess/machine/mface2.h @@ -0,0 +1,70 @@ +/* + * mface2.h -- Romantic Robot Multiface II expansion device for the Amstrad CPC/CPC+ + * + * Created on: 31/07/2011 + * + * I/O Ports: + * - FEE8: Enables Multiface ROM and RAM + * - FEEA: Disables Multiface ROM and RAM + * + * When enabled, Multiface ROM is mapped to &0000, and RAM to &2000 + * + * When the Stop button is pressed, the Multiface II will generate an NMI + * (I guess the ROM/RAM is enabled when you do this also?) + * + * It also monitors all I/O port writes, so that it can restore them when resuming the current application. + */ + +#ifndef MFACE2_H_ +#define MFACE2_H_ + +#include "emu.h" +#include "machine/cpcexp.h" + +/* stop button has been pressed */ +#define MULTIFACE_STOP_BUTTON_PRESSED 0x0001 +/* ram/rom is paged into memory space */ +#define MULTIFACE_RAM_ROM_ENABLED 0x0002 +/* when visible OUT commands are performed! */ +#define MULTIFACE_VISIBLE 0x0004 + + +class cpc_multiface2_device : public device_t, + public device_cpc_expansion_card_interface +{ +public: + // construction/destruction + cpc_multiface2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // optional information overrides + virtual const rom_entry *device_rom_region() const; + virtual ioport_constructor device_input_ports() const; + virtual machine_config_constructor device_mconfig_additions() const; + + int multiface_hardware_enabled(); + void multiface_rethink_memory(); + void multiface_stop(); + int multiface_io_write(UINT16 offset, UINT8 data); + void check_button_state(); +protected: + // device-level overrides + virtual void device_start(); + virtual void device_reset(); + virtual void device_config_complete() { m_shortname = "cpc_mf2"; } + +private: + cpc_expansion_slot_device *m_slot; + + DIRECT_UPDATE_MEMBER( amstrad_default ); + DIRECT_UPDATE_MEMBER( amstrad_multiface_directoverride ); + + unsigned char *m_multiface_ram; + unsigned long m_multiface_flags; + + UINT8 m_romdis; +}; + +// device type definition +extern const device_type CPC_MFACE2; + +#endif /* MFACE2_H_ */ |