summaryrefslogblamecommitdiffstatshomepage
path: root/src/mess/includes/ql.h
blob: 98b785a351a34832de2a68abb6d346fafd04edd5 (plain) (tree)









































































































































                                                                                                     
#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<cpu_device> m_maincpu;
	required_device<cpu_device> m_ipc;
	required_device<zx8301_device> m_zx8301;
	required_device<zx8302_device> m_zx8302;
	required_device<device_t> m_speaker;
	required_device<microdrive_image_device> m_mdv1;
	required_device<microdrive_image_device> m_mdv2;
	required_device<ram_device> m_ram;
	required_device<device_t> m_fdc;
	required_device<printer_image_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