diff options
Diffstat (limited to 'src/mame/includes/einstein.h')
-rw-r--r-- | src/mame/includes/einstein.h | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/src/mame/includes/einstein.h b/src/mame/includes/einstein.h new file mode 100644 index 00000000000..c027a36701e --- /dev/null +++ b/src/mame/includes/einstein.h @@ -0,0 +1,221 @@ +// 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<wd1770_t> m_fdc; + required_device<screen_device> m_color_screen; + required_device<z80ctc_device> m_ctc; + required_device<tms9929a_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<mc6845_device> m_mc6845; + optional_device<screen_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<i8251_device> m_uart; + required_device<ram_device> m_ram; + required_device<centronics_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<palette_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_ */ |