/* * 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(); 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_ */