#pragma once #ifndef __QL__ #define __QL__ #include "machine/ram.h" #include "machine/wd17xx.h" #define SCREEN_TAG "screen" #define M68008_TAG "ic18" #define I8749_TAG "ic24" #define I8051_TAG "i8051" #define ZX8301_TAG "ic22" #define ZX8302_TAG "ic23" #define WD1772_TAG "wd1772" #define ROMBANK_TAG "rombank" #define RAMBANK_TAG "rambank" #define PRINTER_TAG "printer" #define X1 XTAL_15MHz #define X2 XTAL_32_768kHz #define X3 XTAL_4_436MHz #define X4 XTAL_11MHz #define QL_CONFIG_PORT "QLCONFIG" #define DISK_TYPE_MASK 0x03 #define DISK_TYPE_NONE 0x00 #define DISK_TYPE_TRUMP 0x01 #define DISK_TYPE_SANDY 0x02 #define TRUMP_DRIVE1_MASK 0x01 #define TRUMP_DRIVE0_MASK 0x02 #define TRUMP_MOTOR_MASK 0x04 #define TRUMP_SIDE_SHIFT 3 #define TRUMP_SIDE_MASK (1 << TRUMP_SIDE_SHIFT) #define CART_ROM_BASE 0x0c000 #define CART_ROM_END 0x0ffff #define TRUMP_ROM_BASE 0x10000 #define TRUMP_ROM_LEN 0x08000 #define TRUMP_ROM_END (TRUMP_ROM_BASE+(TRUMP_ROM_LEN-1)) #define TRUMP_IO_BASE 0x1c000 #define TRUMP_IO_LEN 0x04000 #define TRUMP_IO_END (TRUMP_IO_BASE+(TRUMP_IO_LEN-1)) #define SANDY_ROM_BASE 0x18000 #define SANDY_IO_BASE 0xc3fc0 #define SANDY_IO_LEN 0x00040 #define SANDY_IO_END (SANDY_IO_BASE+(SANDY_IO_LEN-1)) #define SANDY_DRIVE0_MASK 0x02 #define SANDY_DRIVE1_MASK 0x04 #define SANDY_MOTOR_MASK 0x08 #define SANDY_SIDE_SHIFT 0 #define SANDY_SIDE_MASK (1 << SANDY_SIDE_SHIFT) #define SANDY_DDEN_SHIFT 4 #define SANDY_DDEN_MASK (1 << SANDY_DDEN_SHIFT) #define SANDY_PRINTER_STROBE 0x20 #define SANDY_PRINTER_INTMASK 0x40 class ql_state : public driver_device { public: ql_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, M68008_TAG), m_ipc(*this, I8749_TAG), m_zx8301(*this, ZX8301_TAG), m_zx8302(*this, ZX8302_TAG), m_speaker(*this, SPEAKER_TAG), m_mdv1(*this, MDV_1), m_mdv2(*this, MDV_2), m_ram(*this, RAM_TAG), m_fdc(*this, WD1772_TAG), m_printer(*this, PRINTER_TAG) { } required_device m_maincpu; required_device m_ipc; required_device m_zx8301; required_device m_zx8302; required_device m_speaker; required_device m_mdv1; required_device m_mdv2; required_device m_ram; required_device m_fdc; required_device m_printer; virtual void machine_start(); virtual void machine_reset(); UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE8_MEMBER( ipc_w ); DECLARE_WRITE8_MEMBER( ipc_port1_w ); DECLARE_WRITE8_MEMBER( ipc_port2_w ); DECLARE_READ8_MEMBER( ipc_port2_r ); DECLARE_READ8_MEMBER( ipc_t1_r ); DECLARE_READ8_MEMBER( ipc_bus_r ); DECLARE_READ8_MEMBER( ql_ram_r ); DECLARE_WRITE8_MEMBER( ql_ram_w ); DECLARE_WRITE_LINE_MEMBER( ql_baudx4_w ); DECLARE_WRITE_LINE_MEMBER( ql_comdata_w ); DECLARE_WRITE_LINE_MEMBER( zx8302_mdselck_w ); DECLARE_WRITE_LINE_MEMBER( zx8302_mdrdw_w ); DECLARE_WRITE_LINE_MEMBER( zx8302_erase_w ); DECLARE_WRITE_LINE_MEMBER( zx8302_raw1_w ); DECLARE_READ_LINE_MEMBER( zx8302_raw1_r ); DECLARE_WRITE_LINE_MEMBER( zx8302_raw2_w ); DECLARE_READ_LINE_MEMBER( zx8302_raw2_r ); /* IPC state */ UINT8 m_keylatch; int m_ipl; int m_comdata; int m_baudx4; // Trump card & Sandy superdisk DECLARE_READ8_MEMBER( disk_io_r ); DECLARE_WRITE8_MEMBER( disk_io_w ); DECLARE_READ8_MEMBER( trump_card_rom_r ); DECLARE_READ8_MEMBER( cart_rom_r ); void trump_card_set_control(UINT8 data); void sandy_set_control(UINT8 data); int m_disk_type; int m_disk_io_base; UINT8 m_disk_io_byte; UINT8 m_printer_char; }; #endif