// license:GPL-2.0+ // copyright-holders:Kevin Thacker, Dirk Best, Phill Harvey-Smith /*************************************************************************** Tatung Einstein ***************************************************************************/ #ifndef EINSTEIN_H_ #define EINSTEIN_H_ #include "emu.h" #include "video/mc6845.h" #include "cpu/z80/z80daisy.h" #include "machine/wd_fdc.h" #include "machine/z80ctc.h" #include "video/tms9928a.h" #include "machine/ram.h" #include "machine/i8251.h" #include "bus/centronics/ctronics.h" /*************************************************************************** CONSTANTS ***************************************************************************/ /* xtals */ #define XTAL_X001 XTAL_10_738635MHz #define XTAL_X002 XTAL_8MHz /* integrated circuits */ #define IC_I001 "i001" /* Z8400A */ #define IC_I030 "i030" /* AY-3-8910 */ #define IC_I038 "i038" /* TMM9129 */ #define IC_I042 "i042" /* WD1770-PH */ #define IC_I050 "i050" /* ADC0844CCN */ #define IC_I058 "i058" /* Z8430A */ #define IC_I060 "i060" /* uPD8251A */ #define IC_I063 "i063" /* Z8420A */ /* interrupt sources */ #define EINSTEIN_KEY_INT (1<<0) #define EINSTEIN_ADC_INT (1<<1) #define EINSTEIN_FIRE_INT (1<<2) /*************************************************************************** TYPE DEFINITIONS ***************************************************************************/ class einstein_state : public driver_device { public: einstein_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_fdc(*this, IC_I042), m_color_screen(*this, "screen"), m_ctc(*this, IC_I058), m_tms9929a(*this, "tms9929a"), m_region_gfx1(*this, "gfx1"), m_mc6845(*this, "crtc"), m_crtc_screen(*this, "80column"), m_uart(*this, IC_I060), m_ram(*this, RAM_TAG), m_centronics(*this, "centronics"), m_region_bios(*this, "bios"), m_bank1(*this, "bank1"), m_bank2(*this, "bank2"), m_bank3(*this, "bank3"), m_line0(*this, "LINE0"), m_line1(*this, "LINE1"), m_line2(*this, "LINE2"), m_line3(*this, "LINE3"), m_line4(*this, "LINE4"), m_line5(*this, "LINE5"), m_line6(*this, "LINE6"), m_line7(*this, "LINE7"), m_extra(*this, "EXTRA"), m_buttons(*this, "BUTTONS"), m_config(*this, "config"), m_80column_dips(*this, "80column_dips"), m_palette(*this, "palette") { } required_device m_fdc; required_device m_color_screen; required_device m_ctc; required_device m_tms9929a; optional_memory_region m_region_gfx1; int m_rom_enabled; int m_interrupt; int m_interrupt_mask; int m_ctc_trigger; /* keyboard */ UINT8 m_keyboard_line; UINT8 m_keyboard_data; /* 80 column device */ optional_device m_mc6845; optional_device m_crtc_screen; UINT8 *m_crtc_ram; UINT8 m_de; int m_centronics_busy; int m_centronics_perror; int m_centronics_fault; DECLARE_FLOPPY_FORMATS( floppy_formats ); DECLARE_WRITE8_MEMBER(einstein_80col_ram_w); DECLARE_READ8_MEMBER(einstein_80col_ram_r); DECLARE_READ8_MEMBER(einstein_80col_state_r); DECLARE_WRITE8_MEMBER(einstein_keyboard_line_write); DECLARE_READ8_MEMBER(einstein_keyboard_data_read); DECLARE_WRITE8_MEMBER(einstein_rom_w); DECLARE_READ8_MEMBER(einstein_kybintmsk_r); DECLARE_WRITE8_MEMBER(einstein_kybintmsk_w); DECLARE_WRITE8_MEMBER(einstein_adcintmsk_w); DECLARE_WRITE8_MEMBER(einstein_fire_int_w); DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); DECLARE_WRITE_LINE_MEMBER(write_centronics_perror); DECLARE_WRITE_LINE_MEMBER(write_centronics_fault); virtual void machine_start(); virtual void machine_reset(); DECLARE_MACHINE_START(einstein2); DECLARE_MACHINE_RESET(einstein2); UINT32 screen_update_einstein2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); TIMER_DEVICE_CALLBACK_MEMBER(einstein_keyboard_timer_callback); TIMER_DEVICE_CALLBACK_MEMBER(einstein_ctc_trigger_callback); DECLARE_WRITE_LINE_MEMBER(einstein_6845_de_changed); DECLARE_WRITE8_MEMBER(einstein_drsel_w); DECLARE_WRITE_LINE_MEMBER(einstein_serial_transmit_clock); DECLARE_WRITE_LINE_MEMBER(einstein_serial_receive_clock); MC6845_UPDATE_ROW(crtc_update_row); protected: required_device m_uart; required_device m_ram; required_device m_centronics; required_memory_region m_region_bios; required_memory_bank m_bank1; required_memory_bank m_bank2; required_memory_bank m_bank3; required_ioport m_line0; required_ioport m_line1; required_ioport m_line2; required_ioport m_line3; required_ioport m_line4; required_ioport m_line5; required_ioport m_line6; required_ioport m_line7; required_ioport m_extra; required_ioport m_buttons; required_ioport m_config; optional_ioport m_80column_dips; public: optional_device m_palette; void einstein_scan_keyboard(); void einstein_page_rom(); }; // ======================> einstein_keyboard_daisy_device class einstein_keyboard_daisy_device : public device_t, public device_z80daisy_interface { public: // construction/destruction einstein_keyboard_daisy_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); private: virtual void device_start(); // z80daisy_interface overrides virtual int z80daisy_irq_state(); virtual int z80daisy_irq_ack(); virtual void z80daisy_irq_reti(); }; extern const device_type EINSTEIN_KEYBOARD_DAISY; // ======================> einstein_adc_daisy_device class einstein_adc_daisy_device : public device_t, public device_z80daisy_interface { public: // construction/destruction einstein_adc_daisy_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); private: virtual void device_start(); // z80daisy_interface overrides virtual int z80daisy_irq_state(); virtual int z80daisy_irq_ack(); virtual void z80daisy_irq_reti(); }; extern const device_type EINSTEIN_ADC_DAISY; // ======================> einstein_fire_daisy_device class einstein_fire_daisy_device : public device_t, public device_z80daisy_interface { public: // construction/destruction einstein_fire_daisy_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); private: virtual void device_start(); // z80daisy_interface overrides virtual int z80daisy_irq_state(); virtual int z80daisy_irq_ack(); virtual void z80daisy_irq_reti(); }; extern const device_type EINSTEIN_FIRE_DAISY; #endif /* EINSTEIN_H_ */