summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/includes/ql.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/includes/ql.h')
-rw-r--r--src/mess/includes/ql.h128
1 files changed, 99 insertions, 29 deletions
diff --git a/src/mess/includes/ql.h b/src/mess/includes/ql.h
index 4cf92bd8214..e3248037467 100644
--- a/src/mess/includes/ql.h
+++ b/src/mess/includes/ql.h
@@ -8,6 +8,8 @@
#include "bus/rs232/rs232.h"
#include "machine/ram.h"
#include "machine/wd17xx.h"
+#include "bus/centronics/ctronics.h"
+
#define SCREEN_TAG "screen"
@@ -30,32 +32,40 @@
#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 0x14000
-#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 0x1c000
-#define SANDY_IO_BASE 0xc3fc0
-#define SANDY_IO_LEN 0x00040
-#define SANDY_IO_END (SANDY_IO_BASE+(SANDY_IO_LEN-1))
+#define QL_CONFIG_PORT "config"
+#define QIMI_PORT_MASK 0x01
+#define QIMI_NONE 0x00
+#define QIMI_MOUSE 0x01
+#define DISK_TYPE_MASK 0x06
+#define DISK_TYPE_NONE 0x00
+#define DISK_TYPE_TRUMP 0x02
+#define DISK_TYPE_SANDY_SD 0x04
+#define DISK_TYPE_SANDY_SQB 0x06
+#define IS_SANDY_DISK(__dtype__) ((__dtype__ == DISK_TYPE_SANDY_SD) || (__dtype__ == DISK_TYPE_SANDY_SQB))
+
+#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_MBASE 0x10000
+#define TRUMP_ROM_BASE 0x14000
+#define TRUMP_ROM_LEN 0x08000
+#define TRUMP_ROM_END (TRUMP_ROM_MBASE+(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_SD 0x1c000
+#define SANDY_ROM_BASE_SQB 0x20000
+#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
@@ -66,11 +76,43 @@
#define SANDY_DDEN_MASK (1 << SANDY_DDEN_SHIFT)
#define SANDY_PRINTER_STROBE 0x20
#define SANDY_PRINTER_INTMASK 0x40
+#define SANDY_MOUSE_INTMASK 0x80
+
+#define MOUSEX_TAG "MOUSEX"
+#define MOUSEY_TAG "MOUSEY"
+#define MOUSEB_TAG "MOUSEB"
+
+// Mouse bits in Sandy port order
+#define MOUSE_MIDDLE 0x02
+#define MOUSE_RIGHT 0x04
+#define MOUSE_LEFT 0x08
+#define MOUSE_DIRY 0x10
+#define MOUSE_DIRX 0x20
+#define MOUSE_INTY 0x40
+#define MOUSE_INTX 0x80
+#define MOUSE_INT_MASK (MOUSE_INTX | MOUSE_INTY)
+
+#define QIMI_IO_BASE 0x1bf9c
+#define QIMI_IO_LEN 0x22
+#define QIMI_IO_END (QIMI_IO_BASE + QIMI_IO_LEN )
+
+#define QIMI_INTX 0x04
+#define QIMI_INTY 0x20
+#define QIMI_DIRX 0x10
+#define QIMI_DIRY 0x01
+#define QIMI_LEFT 0x20
+#define QIMI_RIGHT 0x10
+#define QIMI_INT_MASK (QIMI_INTX | QIMI_INTY)
class ql_state : public driver_device
{
public:
+ enum
+ {
+ TIMER_MOUSE_TICK,
+ };
+
ql_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, M68008_TAG),
@@ -94,7 +136,11 @@ public:
m_y6(*this, "Y6"),
m_y7(*this, "Y7"),
m_joy0(*this, "JOY0"),
- m_joy1(*this, "JOY1")
+ m_joy1(*this, "JOY1"),
+ m_config(*this, QL_CONFIG_PORT),
+ m_mousex(*this, MOUSEX_TAG),
+ m_mousey(*this, MOUSEY_TAG),
+ m_mouseb(*this, MOUSEB_TAG)
{ }
required_device<cpu_device> m_maincpu;
@@ -119,6 +165,10 @@ public:
required_ioport m_y7;
required_ioport m_joy0;
required_ioport m_joy1;
+ optional_ioport m_config;
+ optional_ioport m_mousex;
+ optional_ioport m_mousey;
+ optional_ioport m_mouseb;
virtual void machine_start();
virtual void machine_reset();
@@ -155,14 +205,34 @@ public:
void trump_card_set_control(UINT8 data);
void sandy_set_control(UINT8 data);
-
- int m_disk_type;
+ void sandy_print_char(UINT8 data);
+
+ UINT8 m_disk_type;
int m_disk_io_base;
UINT8 m_disk_io_byte;
UINT8 m_printer_char;
DECLARE_READ_LINE_MEMBER(disk_io_dden_r);
DECLARE_WRITE_LINE_MEMBER(disk_io_intrq_w);
DECLARE_WRITE_LINE_MEMBER(disk_io_drq_w);
+
+ DECLARE_WRITE_LINE_MEMBER( sandy_printer_busy );
+
+ // QIMI or Sandy mouse
+ void mouse_tick();
+
+ DECLARE_READ8_MEMBER( qimi_io_r );
+ DECLARE_WRITE8_MEMBER( qimi_io_w );
+
+ UINT8 m_mouse_int;
+
+ emu_timer *m_mouse_timer;
+
+ UINT8 m_ql_mouse_x;
+ UINT8 m_ql_mouse_y;
+
+protected:
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
+
};
#endif