#pragma once #ifndef __V1050__ #define __V1050__ #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/m6502/m6502.h" #include "imagedev/flopdrv.h" #include "formats/basicdsk.h" #include "machine/ctronics.h" #include "machine/i8214.h" #include "machine/i8251.h" #include "machine/i8255.h" #include "machine/msm58321.h" #include "machine/ram.h" #include "machine/scsibus.h" #include "machine/v1050kb.h" #include "machine/wd17xx.h" #include "video/mc6845.h" #define SCREEN_TAG "screen" #define Z80_TAG "u80" #define UPB8214_TAG "u38" #define I8255A_DISP_TAG "u79" #define I8255A_MISC_TAG "u10" #define I8255A_RTC_TAG "u36" #define I8251A_KB_TAG "u85" #define I8251A_SIO_TAG "u8" #define MSM58321RS_TAG "u26" #define MB8877_TAG "u13" #define FDC9216_TAG "u25" #define M6502_TAG "u76" #define I8255A_M6502_TAG "u101" #define H46505_TAG "u75" #define CENTRONICS_TAG "centronics" #define TIMER_KB_TAG "timer_kb" #define TIMER_SIO_TAG "timer_sio" #define TIMER_ACK_TAG "timer_ack" #define TIMER_RST_TAG "timer_rst" #define SASIBUS_TAG "sasi" #define V1050_VIDEORAM_SIZE 0x8000 #define V1050_VIDEORAM_MASK 0x7fff #define INT_RS_232 0x01 #define INT_WINCHESTER 0x02 #define INT_KEYBOARD 0x04 #define INT_FLOPPY 0x08 #define INT_VSYNC 0x10 #define INT_DISPLAY 0x20 #define INT_EXPANSION_B 0x40 #define INT_EXPANSION_A 0x80 class v1050_state : public driver_device { public: v1050_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, Z80_TAG), m_subcpu(*this, M6502_TAG), m_pic(*this, UPB8214_TAG), m_rtc(*this, MSM58321RS_TAG), m_uart_kb(*this, I8251A_KB_TAG), m_uart_sio(*this, I8251A_SIO_TAG), m_fdc(*this, MB8877_TAG), m_crtc(*this, H46505_TAG), m_centronics(*this, CENTRONICS_TAG), m_ram(*this, RAM_TAG), m_floppy0(*this, FLOPPY_0), m_floppy1(*this, FLOPPY_1), m_timer_sio(*this, TIMER_SIO_TAG), m_timer_ack(*this, TIMER_ACK_TAG), m_timer_rst(*this, TIMER_RST_TAG), m_sasibus(*this, SASIBUS_TAG) , m_video_ram(*this, "video_ram"){ } required_device m_maincpu; required_device m_subcpu; required_device m_pic; required_device m_rtc; required_device m_uart_kb; required_device m_uart_sio; required_device m_fdc; required_device m_crtc; required_device m_centronics; required_device m_ram; required_device m_floppy0; required_device m_floppy1; required_device m_timer_sio; required_device m_timer_ack; required_device m_timer_rst; required_device m_sasibus; virtual void machine_start(); virtual void machine_reset(); virtual void video_start(); DECLARE_READ8_MEMBER( kb_data_r ); DECLARE_READ8_MEMBER( kb_status_r ); DECLARE_WRITE8_MEMBER( v1050_i8214_w ); DECLARE_READ8_MEMBER( vint_clr_r ); DECLARE_WRITE8_MEMBER( vint_clr_w ); DECLARE_READ8_MEMBER( dint_clr_r ); DECLARE_WRITE8_MEMBER( dint_clr_w ); DECLARE_WRITE8_MEMBER( bank_w ); DECLARE_WRITE8_MEMBER( dint_w ); DECLARE_WRITE8_MEMBER( dvint_clr_w ); DECLARE_READ8_MEMBER( keyboard_r ); DECLARE_WRITE8_MEMBER( keyboard_w ); DECLARE_WRITE8_MEMBER( p2_w ); DECLARE_WRITE8_MEMBER( misc_ppi_pa_w ); DECLARE_WRITE8_MEMBER( misc_ppi_pc_w ); DECLARE_WRITE8_MEMBER( rtc_ppi_pb_w ); DECLARE_READ8_MEMBER( rtc_ppi_pc_r ); DECLARE_WRITE8_MEMBER( rtc_ppi_pc_w ); DECLARE_WRITE_LINE_MEMBER( kb_rxrdy_w ); DECLARE_WRITE_LINE_MEMBER( sio_rxrdy_w ); DECLARE_WRITE_LINE_MEMBER( sio_txrdy_w ); DECLARE_WRITE_LINE_MEMBER( fdc_intrq_w ); DECLARE_WRITE_LINE_MEMBER( fdc_drq_w ); DECLARE_READ8_MEMBER( attr_r ); DECLARE_WRITE8_MEMBER( attr_w ); DECLARE_READ8_MEMBER( videoram_r ); DECLARE_WRITE8_MEMBER( videoram_w ); DECLARE_WRITE_LINE_MEMBER( crtc_vs_w ); DECLARE_READ8_MEMBER( sasi_status_r ); DECLARE_WRITE8_MEMBER( sasi_ctrl_w ); void bankswitch(); void set_interrupt(UINT8 mask, int state); void scan_keyboard(); // interrupt state UINT8 m_int_mask; // interrupt mask UINT8 m_int_state; // interrupt status int m_f_int_enb; // floppy interrupt enable // keyboard state UINT8 m_keylatch; // keyboard row select UINT8 m_keydata; int m_keyavail; // serial state int m_rxrdy; // receiver ready int m_txrdy; // transmitter ready int m_baud_sel; // baud select // memory state UINT8 m_bank; // bank register // video state required_shared_ptr m_video_ram; // video RAM UINT8 *m_attr_ram; // attribute RAM UINT8 m_attr; // attribute latch }; //----------- defined in video/v1050.c ----------- MACHINE_CONFIG_EXTERN( v1050_video ); #endif