Previous 199869 Revisions Next

r30838 Wednesday 4th June, 2014 at 21:29:13 UTC by Curt Coder
(MESS) ql: Added slot interfaces for the expansion and ROM cartridge ports. Modernized the Sandy Super Disk, Sandy SuperQBoard, and Miracle Trump Card floppy interfaces. Added a device for the QIMI (not working yet). Created skeletons for several expansion cards. [Curt Coder]
[src/mess/drivers]ql.c
[src/mess/includes]ql.h

trunk/src/mess/includes/ql.h
r30837r30838
11// license:BSD-3-Clause
2// copyright-holders:Curt Coder
2// copyright-holders:Curt Coder, Phill Harvey-Smith
33#pragma once
44
55#ifndef __QL__
66#define __QL__
77
88#include "emu.h"
9#include "bus/centronics/ctronics.h"
109#include "bus/ql/exp.h"
1110#include "bus/ql/rom.h"
1211#include "bus/rs232/rs232.h"
1312#include "cpu/m68000/m68000.h"
1413#include "cpu/mcs48/mcs48.h"
15#include "cpu/mcs51/mcs51.h"
16#include "formats/basicdsk.h"
17#include "imagedev/cartslot.h"
18#include "imagedev/flopdrv.h"
19#include "imagedev/printer.h"
20#include "machine/ram.h"
2114#include "machine/microdrv.h"
22#include "machine/wd17xx.h"
15#include "machine/qimi.h"
16#include "machine/ram.h"
2317#include "machine/zx8302.h"
2418#include "sound/speaker.h"
2519#include "video/zx8301.h"
r30837r30838
3125#define I8051_TAG   "i8051"
3226#define ZX8301_TAG  "ic22"
3327#define ZX8302_TAG  "ic23"
34#define WD1772_TAG  "wd1772"
3528#define RS232_A_TAG "ser1"
3629#define RS232_B_TAG "ser2"
30#define QIMI_TAG   "qimi"
3731
38#define ROMBANK_TAG "rombank"
39#define RAMBANK_TAG "rambank"
40
41#define PRINTER_TAG "printer"
42
4332#define X1 XTAL_15MHz
4433#define X2 XTAL_32_768kHz
4534#define X3 XTAL_4_436MHz
4635#define X4 XTAL_11MHz
4736
48#define QL_CONFIG_PORT          "config"
49#define QIMI_PORT_MASK          0x01
50#define QIMI_NONE               0x00
51#define QIMI_MOUSE              0x01
52#define DISK_TYPE_MASK          0x06
53#define DISK_TYPE_NONE          0x00
54#define DISK_TYPE_TRUMP         0x02
55#define DISK_TYPE_SANDY_SD      0x04
56#define DISK_TYPE_SANDY_SQB     0x06
57#define IS_SANDY_DISK(__dtype__)    ((__dtype__ == DISK_TYPE_SANDY_SD) || (__dtype__ == DISK_TYPE_SANDY_SQB))
58
59#define TRUMP_DRIVE1_MASK       0x01
60#define TRUMP_DRIVE0_MASK       0x02
61#define TRUMP_MOTOR_MASK        0x04
62#define TRUMP_SIDE_SHIFT        3
63#define TRUMP_SIDE_MASK         (1 << TRUMP_SIDE_SHIFT)
64
65#define CART_ROM_BASE           0x0c000
66#define CART_ROM_END            0x0ffff
67
68#define TRUMP_ROM_MBASE         0x10000
69#define TRUMP_ROM_BASE          0x14000
70#define TRUMP_ROM_LEN           0x08000
71#define TRUMP_ROM_END           (TRUMP_ROM_MBASE+(TRUMP_ROM_LEN-1))
72
73#define TRUMP_IO_BASE           0x1c000
74#define TRUMP_IO_LEN            0x04000
75#define TRUMP_IO_END            (TRUMP_IO_BASE+(TRUMP_IO_LEN-1))
76
77#define SANDY_ROM_BASE_SD       0x1c000
78#define SANDY_ROM_BASE_SQB      0x20000
79#define SANDY_IO_BASE           0xc3fc0
80#define SANDY_IO_LEN            0x00040
81#define SANDY_IO_END            (SANDY_IO_BASE+(SANDY_IO_LEN-1))
82
83#define SANDY_DRIVE0_MASK       0x02
84#define SANDY_DRIVE1_MASK       0x04
85#define SANDY_MOTOR_MASK        0x08
86#define SANDY_SIDE_SHIFT        0
87#define SANDY_SIDE_MASK         (1 << SANDY_SIDE_SHIFT)
88#define SANDY_DDEN_SHIFT        4
89#define SANDY_DDEN_MASK         (1 << SANDY_DDEN_SHIFT)
90#define SANDY_PRINTER_STROBE    0x20
91#define SANDY_PRINTER_INTMASK   0x40
92#define SANDY_MOUSE_INTMASK     0x80
93
94#define MOUSEX_TAG              "MOUSEX"
95#define MOUSEY_TAG              "MOUSEY"
96#define MOUSEB_TAG              "MOUSEB"
97
98// Mouse bits in Sandy port order
99#define MOUSE_MIDDLE            0x02
100#define MOUSE_RIGHT             0x04
101#define MOUSE_LEFT              0x08
102#define MOUSE_DIRY              0x10
103#define MOUSE_DIRX              0x20
104#define MOUSE_INTY              0x40
105#define MOUSE_INTX              0x80
106#define MOUSE_INT_MASK          (MOUSE_INTX | MOUSE_INTY)
107
108#define QIMI_IO_BASE            0x1bf9c
109#define QIMI_IO_LEN             0x22
110#define QIMI_IO_END             (QIMI_IO_BASE + QIMI_IO_LEN )
111
112#define QIMI_INTX               0x04
113#define QIMI_INTY               0x20
114#define QIMI_DIRX               0x10
115#define QIMI_DIRY               0x01
116#define QIMI_LEFT               0x20
117#define QIMI_RIGHT              0x10
118#define QIMI_INT_MASK           (QIMI_INTX | QIMI_INTY)
119
120
12137class ql_state : public driver_device
12238{
12339public:
124   enum
125   {
126      TIMER_MOUSE_TICK,
127   };
128
129   ql_state(const machine_config &mconfig, device_type type, const char *tag)
130      : driver_device(mconfig, type, tag),
131         m_maincpu(*this, M68008_TAG),
132         m_ipc(*this, I8749_TAG),
133         m_zx8301(*this, ZX8301_TAG),
134         m_zx8302(*this, ZX8302_TAG),
135         m_speaker(*this, "speaker"),
136         m_mdv1(*this, MDV_1),
137         m_mdv2(*this, MDV_2),
138         m_ser1(*this, RS232_A_TAG),
139         m_ser2(*this, RS232_A_TAG),
140         m_ram(*this, RAM_TAG),
141         m_fdc(*this, WD1772_TAG),
142         m_printer(*this, PRINTER_TAG),
143         m_y0(*this, "Y0"),
144         m_y1(*this, "Y1"),
145         m_y2(*this, "Y2"),
146         m_y3(*this, "Y3"),
147         m_y4(*this, "Y4"),
148         m_y5(*this, "Y5"),
149         m_y6(*this, "Y6"),
150         m_y7(*this, "Y7"),
151         m_joy0(*this, "JOY0"),
152         m_joy1(*this, "JOY1"),
153         m_config(*this, QL_CONFIG_PORT),
154         m_mousex(*this, MOUSEX_TAG),
155         m_mousey(*this, MOUSEY_TAG),
156         m_mouseb(*this, MOUSEB_TAG)
40   ql_state(const machine_config &mconfig, device_type type, const char *tag) :
41      driver_device(mconfig, type, tag),
42      m_maincpu(*this, M68008_TAG),
43      m_ipc(*this, I8749_TAG),
44      m_zx8301(*this, ZX8301_TAG),
45      m_zx8302(*this, ZX8302_TAG),
46      m_speaker(*this, "speaker"),
47      m_mdv1(*this, MDV_1),
48      m_mdv2(*this, MDV_2),
49      m_ser1(*this, RS232_A_TAG),
50      m_ser2(*this, RS232_A_TAG),
51      m_ram(*this, RAM_TAG),
52      m_exp(*this, "exp"),
53      m_cart(*this, "rom"),
54      m_qimi(*this, QIMI_TAG),
55      m_rom(*this, M68008_TAG),
56      m_y0(*this, "Y0"),
57      m_y1(*this, "Y1"),
58      m_y2(*this, "Y2"),
59      m_y3(*this, "Y3"),
60      m_y4(*this, "Y4"),
61      m_y5(*this, "Y5"),
62      m_y6(*this, "Y6"),
63      m_y7(*this, "Y7"),
64      m_joy0(*this, "JOY0"),
65      m_joy1(*this, "JOY1"),
66      m_config(*this, "config")
15767   { }
15868
15969   required_device<cpu_device> m_maincpu;
r30837r30838
16676   required_device<rs232_port_device> m_ser1;
16777   required_device<rs232_port_device> m_ser2;
16878   required_device<ram_device> m_ram;
169   required_device<wd1772_device> m_fdc;
170   required_device<printer_image_device> m_printer;
79   required_device<ql_expansion_slot_t> m_exp;
80   required_device<ql_rom_cartridge_slot_t> m_cart;
81   optional_device<qimi_t> m_qimi;
82   required_memory_region m_rom;
17183   required_ioport m_y0;
17284   required_ioport m_y1;
17385   required_ioport m_y2;
r30837r30838
17890   required_ioport m_y7;
17991   required_ioport m_joy0;
18092   required_ioport m_joy1;
181   optional_ioport m_config;
182   optional_ioport m_mousex;
183   optional_ioport m_mousey;
184   optional_ioport m_mouseb;
93   required_ioport m_config;
18594
18695   virtual void machine_start();
18796   virtual void machine_reset();
18897
98   DECLARE_READ8_MEMBER( read );
99   DECLARE_WRITE8_MEMBER( write );
100
189101   DECLARE_WRITE8_MEMBER( ipc_w );
190102   DECLARE_WRITE8_MEMBER( ipc_port1_w );
191103   DECLARE_WRITE8_MEMBER( ipc_port2_w );
r30837r30838
204116   DECLARE_WRITE_LINE_MEMBER( zx8302_raw2_w );
205117   DECLARE_READ_LINE_MEMBER( zx8302_raw2_r );
206118
207   /* IPC state */
119   // IPC
208120   UINT8 m_keylatch;
209121   int m_ipl;
210122   int m_comdata_to_ipc;
211123   int m_baudx4;
212124
213   // Trump card & Sandy superdisk
214   DECLARE_READ8_MEMBER( disk_io_r );
215   DECLARE_WRITE8_MEMBER( disk_io_w );
216   DECLARE_READ8_MEMBER( trump_card_rom_r );
217   DECLARE_READ8_MEMBER( cart_rom_r );
218
219   void trump_card_set_control(UINT8 data);
220   void sandy_set_control(UINT8 data);
221   void sandy_print_char(UINT8 data);
222
223   UINT8   m_disk_type;
224   int     m_disk_io_base;
225   UINT8   m_disk_io_byte;
226   UINT8   m_printer_char;
227   DECLARE_READ_LINE_MEMBER(disk_io_dden_r);
228   DECLARE_WRITE_LINE_MEMBER(disk_io_intrq_w);
229   DECLARE_WRITE_LINE_MEMBER(disk_io_drq_w);
230
231   DECLARE_WRITE_LINE_MEMBER( sandy_printer_busy );
232
233   // QIMI or Sandy mouse
234   void mouse_tick();
235
236   DECLARE_READ8_MEMBER( qimi_io_r );
237   DECLARE_WRITE8_MEMBER( qimi_io_w );
238
239   UINT8   m_mouse_int;
240
241   emu_timer *m_mouse_timer;
242
243   UINT8 m_ql_mouse_x;
244   UINT8 m_ql_mouse_y;
245
246protected:
247   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
248
125   // QIMI
126   bool m_qimi_enabled;
249127};
250128
251129#endif
trunk/src/mess/drivers/ql.c
r30837r30838
11// license:BSD-3-Clause
2// copyright-holders:Curt Coder
2// copyright-holders:Curt Coder, Phill Harvey-Smith
33/*
44
55    Sinclair QL
r30837r30838
1212
1313    TODO:
1414
15    - slotify cartridges
15   - QIMI/Sandy mice
1616    - microdrive
1717    - ZX8301 memory access slowdown
1818    - use resnet.h to create palette
r30837r30838
4646
4747        The trump card has some interesting memory mapping and re-mapping during initialisation which goes like this
4848
49        On rest the card ram is mapped into the entire $40000-$fffff area, this is the official 512K expansion ram area
49        On reset the card ram is mapped into the entire $40000-$fffff area, this is the official 512K expansion ram area
5050        plus the area set aside for addon card roms. The trump card onboard rom is also mapped in at $10000-$17fff.
5151
5252        The main bios then performs a series of loops that initialise and size the ram, this will find either
r30837r30838
7474
7575*/
7676
77
7877#include "includes/ql.h"
79#include "debugger.h"
8078
81#define LOG_DISK_WRITE  0
82#define LOG_DISK_READ   0
8379
84void ql_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
80
81//**************************************************************************
82//  ADDRESS DECODING
83//**************************************************************************
84
85//-------------------------------------------------
86//  read -
87//-------------------------------------------------
88
89READ8_MEMBER( ql_state::read )
8590{
86   switch (id)
91   UINT8 data = 0;
92   int cart_romoeh = 0;
93   int exp_romoeh = 0;
94
95   if (offset < 0xc000)
8796   {
88      case TIMER_MOUSE_TICK:
89         mouse_tick();
90         break;
91      default:
92         assert_always(FALSE, "Unknown id in ql_state::device_timer");
97      data = m_rom->base()[offset];
9398   }
99   if (offset >= 0xc000 && offset < 0x10000)
100   {
101      cart_romoeh = 1;
102   }
103   if (offset >= 0x18000 && offset <= 0x18003)
104   {
105      data = m_zx8302->rtc_r(space, offset & 0x03);
106   }
107   if (offset == 0x18020)
108   {
109      data = m_zx8302->status_r(space, 0);
110   }
111   if (offset == 0x18021)
112   {
113      data = m_zx8302->irq_status_r(space, 0);
114   }
115   if (offset >= 0x18022 && offset <= 0x18023)
116   {
117      data = m_zx8302->mdv_track_r(space, offset & 0x01);
118   }
119   if (offset >= 0x20000 && offset < 0x40000)
120   {
121      data = m_zx8301->data_r(space, offset & 0x1ffff);
122   }
123   if (offset >= 0xc0000)
124   {
125      exp_romoeh = 1;
126   }
127   if (m_qimi_enabled && offset >= QIMI_IO_BASE && offset <= QIMI_IO_END)
128   {
129      data = m_qimi->read(space, offset - QIMI_IO_BASE);
130   }
131
132   m_cart->romoeh_w(cart_romoeh);
133   data = m_cart->read(space, offset & 0x7fff, data);
134   m_cart->romoeh_w(0);
135
136   m_exp->romoeh_w(exp_romoeh);
137   data = m_exp->read(space, offset, data);
138   m_exp->romoeh_w(0);
139
140   return data;
94141}
95142
143
144//-------------------------------------------------
145//  write -
146//-------------------------------------------------
147
148WRITE8_MEMBER( ql_state::write )
149{
150   if (offset >= 0x18000 && offset <= 0x18001)
151   {
152      m_zx8302->rtc_w(space, offset & 0x01, data);
153   }
154   if (offset == 0x18002)
155   {
156      m_zx8302->control_w(space, 0, data);
157   }
158   if (offset == 0x18003)
159   {
160      m_zx8302->ipc_command_w(space, 0, data);
161   }
162   if (offset == 0x18020)
163   {
164      m_zx8302->mdv_control_w(space, 0, data);
165   }
166   if (offset == 0x18021)
167   {
168      m_zx8302->irq_acknowledge_w(space, 0, data);
169   }
170   if (offset == 0x18022)
171   {
172      m_zx8302->data_w(space, 0, data);
173   }
174   if (offset == 0x18063)
175   {
176      m_zx8301->control_w(space, 0, data);
177   }
178   if (offset >= 0x20000 && offset < 0x40000)
179   {
180       m_zx8301->data_w(space, offset & 0x1ffff, data);
181   }
182   if (m_qimi_enabled && offset >= QIMI_IO_BASE && offset <= QIMI_IO_END)
183   {
184      m_qimi->write(space, offset - QIMI_IO_BASE, data);
185   }
186
187   m_cart->romoeh_w(0);
188   m_cart->write(space, offset & 0x7fff, data);
189
190   m_exp->romoeh_w(0);
191   m_exp->write(space, offset, data);
192}
193
194
195
96196//**************************************************************************
97197//  INTELLIGENT PERIPHERAL CONTROLLER
98198//**************************************************************************
r30837r30838
261361   return data;
262362}
263363
264READ8_MEMBER( ql_state::disk_io_r )
265{
266   UINT8   result = 0;
267364
268   if(LOG_DISK_READ)
269      logerror("%s DiskIO:Read of %08X\n",machine().describe_context(),m_disk_io_base+offset);
270365
271   switch (offset)
272   {
273      case 0x0000 : result=m_fdc->read(space, offset); break;
274      case 0x0001 : result=m_fdc->read(space, offset); break;
275      case 0x0002 : result=m_fdc->read(space, offset); break;
276      case 0x0003 : result=m_fdc->read(space, offset); break;
277      case 0x000C : if(IS_SANDY_DISK(m_disk_type))
278                  result = (m_mouse_int ^ MOUSE_DIRX) | m_mouseb->read() | 0x01; break;
279      case 0x0010 : if(IS_SANDY_DISK(m_disk_type))
280                  m_mouse_int &= ~MOUSE_INT_MASK; break;
281      default     : logerror("%s DiskIO undefined read : from %08X\n",machine().describe_context(),m_disk_io_base+offset); break;
282   }
283366
284   return result;
285}
286
287WRITE8_MEMBER( ql_state::disk_io_w )
288{
289   if(LOG_DISK_WRITE)
290      logerror("%s DiskIO:Write %02X to %08X\n",machine().describe_context(),data,m_disk_io_base+offset);
291
292   switch (offset)
293   {
294      case 0x0000 : m_fdc->write(space, offset, data); break;
295      case 0x0001 : m_fdc->write(space, offset, data); break;
296      case 0x0002 : m_fdc->write(space, offset, data); break;
297      case 0x0003 : m_fdc->write(space, offset, data); break;
298      case 0x0004 : if(IS_SANDY_DISK(m_disk_type))
299                  sandy_set_control(data);break;
300      case 0x0008 : if(IS_SANDY_DISK(m_disk_type))
301                  sandy_print_char(data); break;
302      case 0x0010 : if(IS_SANDY_DISK(m_disk_type))
303                  m_mouse_int &= ~MOUSE_INT_MASK; break;
304      case 0x2000 : if(m_disk_type==DISK_TYPE_TRUMP)
305                  trump_card_set_control(data);break;
306      default     : logerror("%s DiskIO undefined write : %02X to %08X\n",machine().describe_context(),data,m_disk_io_base+offset); break;
307   }
308}
309
310READ8_MEMBER( ql_state::trump_card_rom_r )
311{
312   // If we have more than 640K them map extra ram into top 256K
313   // else just map to unmap.
314   if (m_ram->size()>(640*1024))
315      space.install_ram(0x0c0000, 0x0fffff, NULL);
316   else
317      space.unmap_readwrite(0x0c0000, 0x0fffff);
318
319   // Setup trumcard rom mapped to rom so unlink us
320   space.install_rom(0x010000, 0x018000, &memregion(M68008_TAG)->base()[TRUMP_ROM_BASE]);
321
322   return memregion(M68008_TAG)->base()[TRUMP_ROM_BASE+offset];
323}
324
325READ8_MEMBER( ql_state::cart_rom_r )
326{
327   // Setup trumcard rom mapped in at $c0000
328   space.install_rom(0x0c0000, 0x0c8000, &memregion(M68008_TAG)->base()[TRUMP_ROM_BASE]);
329
330   // Setup cart rom to rom handler, so unlink us
331   space.install_rom(0x0c000, 0x0ffff, &memregion(M68008_TAG)->base()[CART_ROM_BASE]);
332
333   return memregion(M68008_TAG)->base()[CART_ROM_BASE+offset];
334}
335
336void ql_state::trump_card_set_control(UINT8 data)
337{
338   if(data & TRUMP_DRIVE0_MASK)
339      m_fdc->set_drive(0);
340
341   if(data & TRUMP_DRIVE1_MASK)
342      m_fdc->set_drive(1);
343
344   m_fdc->set_side((data & TRUMP_SIDE_MASK) >> TRUMP_SIDE_SHIFT);
345}
346
347void ql_state::sandy_set_control(UINT8 data)
348{
349   //logerror("sandy_set_control:%02X\n",data);
350
351   if(data & SANDY_DRIVE0_MASK)
352      m_fdc->set_drive(0);
353
354   if(data & SANDY_DRIVE1_MASK)
355      m_fdc->set_drive(1);
356
357   m_fdc->set_side((data & SANDY_SIDE_MASK) >> SANDY_SIDE_SHIFT);
358   if ((data & SANDY_SIDE_MASK) && (LOG_DISK_READ | LOG_DISK_WRITE))
359   {
360      logerror("Accessing side 1\n");
361   }
362
363   if (m_printer->is_ready())
364   {
365      if(data & SANDY_PRINTER_STROBE)
366         m_printer->output(m_printer_char);
367
368      if(data & SANDY_PRINTER_INTMASK)
369         m_zx8302->extint_w(ASSERT_LINE);
370   }
371
372   m_disk_io_byte=data;
373}
374
375void ql_state::sandy_print_char(UINT8 data)
376{
377   // latch the data until it's  strobed out
378   m_printer_char=data;
379
380//  m_centronics->write(data);
381}
382
383WRITE_LINE_MEMBER( ql_state::sandy_printer_busy )
384{
385   if ((state == ASSERT_LINE) && (m_disk_io_byte & SANDY_PRINTER_INTMASK))
386   {
387      logerror("sandy_print_char : triggering extint\n");
388      m_zx8302->extint_w(ASSERT_LINE);
389   }
390}
391
392READ_LINE_MEMBER(ql_state::disk_io_dden_r)
393{
394   if(IS_SANDY_DISK(m_disk_type))
395      return ((m_disk_io_byte & SANDY_DDEN_MASK) >> SANDY_DDEN_SHIFT);
396   else
397      return 0;
398}
399
400WRITE_LINE_MEMBER(ql_state::disk_io_intrq_w)
401{
402   //logerror("DiskIO:intrq = %d\n",state);
403}
404
405WRITE_LINE_MEMBER(ql_state::disk_io_drq_w)
406{
407   //logerror("DiskIO:drq = %d\n",state);
408}
409
410void ql_state::mouse_tick()
411{
412   UINT8 x         = m_mousex->read();
413   UINT8 y         = m_mousey->read();
414   UINT8 do_int    = 0;
415
416   //m_mouse_int = 0;
417
418   // Set X interupt flag and direction if x has changed
419   if (x > m_ql_mouse_x)
420   {
421      m_mouse_int |= MOUSE_INTX;
422      m_mouse_int |= MOUSE_DIRX;
423   }
424   else if (x < m_ql_mouse_x)
425   {
426      m_mouse_int |= MOUSE_INTX;
427      m_mouse_int &= ~MOUSE_DIRX;
428   }
429
430   // Set Y interupt flag and direction if y has changed
431   if (y > m_ql_mouse_y)
432   {
433      m_mouse_int |= MOUSE_INTY;
434      m_mouse_int &= ~MOUSE_DIRY;
435   }
436   else if (y < m_ql_mouse_y)
437   {
438      m_mouse_int |= MOUSE_INTY;
439      m_mouse_int |= MOUSE_DIRY;
440   }
441
442   // Update saved location
443   m_ql_mouse_x = x;
444   m_ql_mouse_y = y;
445
446   // if it is a QIMI, then always do int if triggered.
447   // if this is a Sandy mouse, only trigger an int if it is enabled in the mask register
448   if (m_config->read() & QIMI_MOUSE)
449      do_int = 1;
450   else
451      do_int = IS_SANDY_DISK(m_disk_type) && (m_disk_io_byte & SANDY_MOUSE_INTMASK);
452
453   //logerror("m_mouse_int=%02X, MOUSE_INT_MASK=%02X, m_disk_io_byte=%02X, (m_disk_io_byte & SANDY_MOUSE_INTMASK)=%02x\n",m_mouse_int,MOUSE_INT_MASK,m_disk_io_byte,(m_disk_io_byte & SANDY_MOUSE_INTMASK));
454
455   // if mouse moved trigger external int
456   if((m_mouse_int & MOUSE_INT_MASK) && do_int)
457   {
458      m_zx8302->extint_w(ASSERT_LINE);
459   }
460}
461
462READ8_MEMBER( ql_state::qimi_io_r )
463{
464   UINT8 result = 0;
465   UINT8 buttons;
466
467   switch (offset)
468   {
469      // 0x1bf9c, button status
470      case 0x00   :
471         buttons = m_mouseb->read();
472         result = ((buttons & MOUSE_RIGHT) << 2) | ((buttons & MOUSE_LEFT) << 2);
473         break;
474
475      // 0x1bfbc, direction status
476      case 0x20   :
477         result = ((m_mouse_int & MOUSE_INTX) >> 5) | ((m_mouse_int & MOUSE_INTY) >> 1) |
478                  ((m_mouse_int & MOUSE_DIRX) >> 1) | ((m_mouse_int & MOUSE_DIRY) >> 4);
479         break;
480      case 0x22   :
481         m_mouse_int &= ~MOUSE_INT_MASK;
482         break;
483   }
484
485   return result;
486}
487
488WRITE8_MEMBER( ql_state::qimi_io_w )
489{
490   // write to 0x1bfbe resets int status
491   if (offset == 0x22)
492   {
493      m_mouse_int = 0;
494   }
495}
496
497367//**************************************************************************
498368//  ADDRESS MAPS
499369//**************************************************************************
r30837r30838
503373//-------------------------------------------------
504374
505375static ADDRESS_MAP_START( ql_mem, AS_PROGRAM, 8, ql_state )
506   AM_RANGE(0x000000, 0x00bfff) AM_ROM // 48K System ROM
507   AM_RANGE(0x00c000, 0x00ffff) AM_ROM AM_WRITENOP                         // 16K Cartridge ROM
508   AM_RANGE(0x010000, 0x017fff) AM_UNMAP                                   // Trump card ROM is mapped in here
509   AM_RANGE(0x018000, 0x018003) AM_DEVREAD(ZX8302_TAG, zx8302_device, rtc_r)
510   AM_RANGE(0x018000, 0x018001) AM_DEVWRITE(ZX8302_TAG, zx8302_device, rtc_w)
511   AM_RANGE(0x018002, 0x018002) AM_DEVWRITE(ZX8302_TAG, zx8302_device, control_w)
512   AM_RANGE(0x018003, 0x018003) AM_DEVWRITE(ZX8302_TAG, zx8302_device, ipc_command_w)
513   AM_RANGE(0x018020, 0x018020) AM_DEVREADWRITE(ZX8302_TAG, zx8302_device, status_r, mdv_control_w)
514   AM_RANGE(0x018021, 0x018021) AM_DEVREADWRITE(ZX8302_TAG, zx8302_device, irq_status_r, irq_acknowledge_w)
515   AM_RANGE(0x018022, 0x018022) AM_DEVREADWRITE(ZX8302_TAG, zx8302_device, mdv_track_r, data_w)
516   AM_RANGE(0x018023, 0x018023) AM_DEVREAD(ZX8302_TAG, zx8302_device, mdv_track_r) AM_WRITENOP
517   AM_RANGE(0x018063, 0x018063) AM_DEVWRITE(ZX8301_TAG, zx8301_device, control_w)
518   AM_RANGE(0x01c000, 0x01ffff) AM_UNMAP                                   // 16K Expansion I/O
519   AM_RANGE(0x020000, 0x03ffff) AM_DEVREADWRITE(ZX8301_TAG, zx8301_device, data_r, data_w)
520   AM_RANGE(0x040000, 0x0fffff) AM_RAM
376   AM_RANGE(0x000000, 0x0fffff) AM_READWRITE(read, write)
521377ADDRESS_MAP_END
522378
523379
r30837r30838
645501   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 )       PORT_PLAYER(2) PORT_CODE(KEYCODE_SPACE)
646502   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_8WAY PORT_CODE(KEYCODE_DOWN)
647503
648
649   PORT_START(QL_CONFIG_PORT)
650   PORT_CONFNAME( QIMI_PORT_MASK, QIMI_NONE, "QIMI enabled")
651   PORT_CONFSETTING( QIMI_NONE, "No" )
652   PORT_CONFSETTING( QIMI_MOUSE, "Yes" )
653
654   PORT_CONFNAME( DISK_TYPE_MASK, DISK_TYPE_NONE, "Disk interface select" )
655   PORT_CONFSETTING(DISK_TYPE_NONE,     DEF_STR( None ))
656   PORT_CONFSETTING(DISK_TYPE_TRUMP,    "Miracle Trump card")
657   PORT_CONFSETTING(DISK_TYPE_SANDY_SD, "Sandy Superdisk")
658   PORT_CONFSETTING(DISK_TYPE_SANDY_SQB,"Sandy SuperQBoard")
659
660
661   PORT_START(MOUSEX_TAG)
662   PORT_BIT( 0xff, 0x00, IPT_MOUSE_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1)
663
664   PORT_START(MOUSEY_TAG)
665   PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1)
666
667   PORT_START(MOUSEB_TAG)  /* Mouse buttons */
668   PORT_BIT( MOUSE_RIGHT, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Mouse Button 1") PORT_CODE(MOUSECODE_BUTTON1)
669   PORT_BIT( MOUSE_LEFT,  IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("Mouse Button 2") PORT_CODE(MOUSECODE_BUTTON2)
670   PORT_BIT( MOUSE_MIDDLE, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_NAME("Mouse Button 3") PORT_CODE(MOUSECODE_BUTTON3)
671
504   PORT_START("config")
505   PORT_CONFNAME( 0x01, 0x00, "QL Internal Mouse Interface (QIMI)")
506   PORT_CONFSETTING( 0x00, DEF_STR( Off ) )
507   PORT_CONFSETTING( 0x01, DEF_STR( On ) )
672508INPUT_PORTS_END
673509
674510
r30837r30838
886722   return m_mdv1->data2_r() | m_mdv2->data2_r();
887723}
888724
889//-------------------------------------------------
890//  floppy_interface ql_floppy_interface
891//-------------------------------------------------
892725
893static LEGACY_FLOPPY_OPTIONS_START( ql )
894   LEGACY_FLOPPY_OPTION(ql, "dsk", "SSDD 40 track disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
895      HEADS([1])
896      TRACKS([40])
897      SECTORS([9])
898      SECTOR_LENGTH([512])
899      FIRST_SECTOR_ID([1]))
900   LEGACY_FLOPPY_OPTION(ql, "dsk", "DSDD 40 track disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
901      HEADS([2])
902      TRACKS([40])
903      SECTORS([9])
904      SECTOR_LENGTH([512])
905      FIRST_SECTOR_ID([1]))
906   LEGACY_FLOPPY_OPTION(ql, "dsk", "DSDD 80 track disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
907      HEADS([2])
908      TRACKS([80])
909      SECTORS([9])
910      SECTOR_LENGTH([512])
911      FIRST_SECTOR_ID([1]))
912   LEGACY_FLOPPY_OPTION(ql, "dsk", "DSHD 80 track disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
913      HEADS([2])
914      TRACKS([80])
915      SECTORS([18])
916      SECTOR_LENGTH([512])
917      FIRST_SECTOR_ID([1]))
918   LEGACY_FLOPPY_OPTION(ql, "dsk", "DSED disk 80 track image", basicdsk_identify_default, basicdsk_construct_default, NULL,
919      HEADS([2])
920      TRACKS([80])
921      SECTORS([40])
922      SECTOR_LENGTH([512])
923      FIRST_SECTOR_ID([1]))
924   LEGACY_FLOPPY_OPTION(ql, "img", "QDOS 800KB disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
925      HEADS([2])
926      TRACKS([80])
927      SECTORS([5])
928      SECTOR_LENGTH([1024])
929      FIRST_SECTOR_ID([1]))
930LEGACY_FLOPPY_OPTIONS_END
931726
932static const floppy_interface ql_floppy_interface =
933{
934   FLOPPY_STANDARD_5_25_DSHD,
935   LEGACY_FLOPPY_OPTIONS_NAME(ql),
936   NULL
937};
938
939727//**************************************************************************
940728//  MACHINE INITIALIZATION
941729//**************************************************************************
942730
943//-------------------------------------------------
944//  MACHINE_START( ql )
945//-------------------------------------------------
946
947//
948// The 896K option is dealt with once the machine is up and running as
949// the Trump Card ROM is initally mapped in at $C0000-$C8000, as this is
950// officially the expansion card rom area. Once the Trump Card has initialised
951// it maps the last 256K of ram into this area (asuming that it has 768K
952// onboard).
953//
954
955731void ql_state::machine_start()
956732{
957733   // register for state saving
r30837r30838
959735   save_item(NAME(m_ipl));
960736   save_item(NAME(m_comdata_to_ipc));
961737   save_item(NAME(m_baudx4));
962   save_item(NAME(m_printer_char));
963   save_item(NAME(m_disk_io_byte));
964
965   // QIMI QL Internal Mouse Interface
966   if (m_mousex)
967   {
968      m_mouse_timer = timer_alloc(TIMER_MOUSE_TICK);
969      m_mouse_timer->adjust(attotime::zero, 0, attotime::from_hz(500));
970   }
971738}
972739
973740void ql_state::machine_reset()
974741{
975   address_space   &program    = m_maincpu->space(AS_PROGRAM);
742   // QIMI
743   m_qimi_enabled = (m_config->read() & 0x01) ? true : false;
744}
976745
977   m_disk_type=m_config->read() & DISK_TYPE_MASK;
978   logerror("disktype=%d\n",m_disk_type);
979746
980   m_printer_char=0;
981   m_disk_io_byte=0;
982   m_mouse_int = 0;
983747
984   logerror("Configuring RAM %d\n",m_ram->size() / 1024);
985
986   // configure RAM
987   switch (m_ram->size())
988   {
989      case 128*1024:
990         program.unmap_readwrite(0x040000, 0x0fffff);
991         break;
992
993      case 192*1024:
994         program.unmap_readwrite(0x050000, 0x0fffff);
995         break;
996
997      case 256*1024:
998         program.unmap_readwrite(0x060000, 0x0fffff);
999         break;
1000
1001      case 384*1024:
1002         program.unmap_readwrite(0x080000, 0x0fffff);
1003         break;
1004
1005      case 640*1024:
1006         program.unmap_readwrite(0x0c0000, 0x0fffff);
1007         break;
1008   }
1009
1010   switch (m_disk_type)
1011   {
1012      case DISK_TYPE_SANDY_SD :
1013         logerror("Configuring Sandy SuperDisk\n");
1014         program.install_rom(0x0c0000, 0x0c3fff, &memregion(M68008_TAG)->base()[SANDY_ROM_BASE_SD]);
1015         program.install_read_handler(SANDY_IO_BASE, SANDY_IO_END, 0, 0, read8_delegate(FUNC(ql_state::disk_io_r), this));
1016         program.install_write_handler(SANDY_IO_BASE, SANDY_IO_END, 0, 0, write8_delegate(FUNC(ql_state::disk_io_w), this));
1017         m_disk_io_base=SANDY_IO_BASE;
1018         break;
1019
1020      case DISK_TYPE_SANDY_SQB :
1021         logerror("Configuring Sandy SuperQBoard\n");
1022         program.install_rom(0x0c0000, 0x0c7fff, &memregion(M68008_TAG)->base()[SANDY_ROM_BASE_SQB]);
1023         program.install_read_handler(SANDY_IO_BASE, SANDY_IO_END, 0, 0, read8_delegate(FUNC(ql_state::disk_io_r), this));
1024         program.install_write_handler(SANDY_IO_BASE, SANDY_IO_END, 0, 0, write8_delegate(FUNC(ql_state::disk_io_w), this));
1025         m_disk_io_base=SANDY_IO_BASE;
1026         break;
1027
1028      case DISK_TYPE_TRUMP :
1029         logerror("Configuring TrumpCard\n");
1030         program.install_read_handler(CART_ROM_BASE, CART_ROM_END, 0, 0, read8_delegate(FUNC(ql_state::cart_rom_r), this));
1031         program.install_read_handler(TRUMP_ROM_MBASE, TRUMP_ROM_END, 0, 0, read8_delegate(FUNC(ql_state::trump_card_rom_r), this));
1032         program.install_read_handler(TRUMP_IO_BASE, TRUMP_IO_END, 0, 0, read8_delegate(FUNC(ql_state::disk_io_r), this));
1033         program.install_write_handler(TRUMP_IO_BASE, TRUMP_IO_END, 0, 0, write8_delegate(FUNC(ql_state::disk_io_w), this));
1034         m_disk_io_base=TRUMP_IO_BASE;
1035         break;
1036   }
1037
1038
1039   // QIMI QL Internal Mouse Interface
1040   if (m_config->read() & QIMI_MOUSE)
1041   {
1042      logerror("QIMI enabled\n");
1043      program.install_read_handler(QIMI_IO_BASE, QIMI_IO_END, 0, 0, read8_delegate(FUNC(ql_state::qimi_io_r), this));
1044      program.install_write_handler(QIMI_IO_BASE, QIMI_IO_END, 0, 0, write8_delegate(FUNC(ql_state::qimi_io_w), this));
1045   }
1046}
1047
1048748//**************************************************************************
1049749//  MACHINE CONFIGURATION
1050750//**************************************************************************
r30837r30838
1098798   MCFG_ZX8302_OUT_RAW2_CB(WRITELINE(ql_state, zx8302_raw2_w))
1099799   MCFG_ZX8302_IN_RAW2_CB(READLINE(ql_state, zx8302_raw2_r))
1100800
1101   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(ql_floppy_interface)
1102
1103   MCFG_DEVICE_ADD(WD1772_TAG, WD1772, 0)
1104   MCFG_WD17XX_DEFAULT_DRIVE2_TAGS
1105   MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(ql_state, disk_io_intrq_w))
1106   MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(ql_state, disk_io_drq_w))
1107   MCFG_WD17XX_DDEN_CALLBACK(READLINE(ql_state, disk_io_dden_r))
1108
1109801   MCFG_MICRODRIVE_ADD(MDV_1)
1110802   MCFG_MICRODRIVE_COMMS_OUT_CALLBACK(DEVWRITELINE(MDV_2, microdrive_image_device, comms_in_w))
1111803   MCFG_MICRODRIVE_ADD(MDV_2)
804
1112805   MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL) // wired as DCE
1113806   MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL) // wired as DTE
1114807   MCFG_RS232_CTS_HANDLER(DEVWRITELINE(ZX8302_TAG, zx8302_device, write_cts2))
r30837r30838
1121814
1122815   MCFG_QL_ROM_CARTRIDGE_SLOT_ADD("rom", ql_rom_cartridge_cards, NULL)
1123816
1124   // cartridge
1125   MCFG_CARTSLOT_ADD("cart")
1126   MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
1127   MCFG_CARTSLOT_NOT_MANDATORY
1128   MCFG_CARTSLOT_INTERFACE("ql_cart")
817   MCFG_DEVICE_ADD(QIMI_TAG, QIMI, 0)
1129818
1130819   // software lists
1131820   MCFG_SOFTWARE_LIST_ADD("cart_list", "ql_cart")
r30837r30838
1135824   // internal ram
1136825   MCFG_RAM_ADD(RAM_TAG)
1137826   MCFG_RAM_DEFAULT_SIZE("128K")
1138   MCFG_RAM_EXTRA_OPTIONS("192K,256K,384K,640K,896K")
1139
1140   // Parallel printer port on Sandy disk interface
1141   MCFG_DEVICE_ADD(PRINTER_TAG, PRINTER, 0)
1142827MACHINE_CONFIG_END
1143828
1144829
r30837r30838
1189874//-------------------------------------------------
1190875
1191876ROM_START( ql )
1192   ROM_REGION( 0x28000, M68008_TAG, 0 )
877   ROM_REGION( 0x10000, M68008_TAG, 0 )
1193878   ROM_DEFAULT_BIOS("js")
1194879   ROM_SYSTEM_BIOS( 0, "fb", "v1.00 (FB)" )
1195880   ROMX_LOAD( "fb.ic33", 0x0000, 0x8000, NO_DUMP, ROM_BIOS(1) )
r30837r30838
1214899   ROMX_LOAD( "tyche.rom", 0x0000, 0x010000, CRC(8724b495) SHA1(5f33a1bc3f23fd09c31844b65bc3aca7616f180a), ROM_BIOS(7) )
1215900   ROM_SYSTEM_BIOS( 7, "min189", "Minerva v1.89" )
1216901   ROMX_LOAD( "minerva.rom", 0x0000, 0x00c000, BAD_DUMP CRC(930befe3) SHA1(84a99c4df13b97f90baf1ec8cb6c2e52e3e1bb4d), ROM_BIOS(8) )
1217   ROM_CART_LOAD("cart", 0xc000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
1218902
1219   ROM_LOAD( "trumpcard-125.rom", TRUMP_ROM_BASE, 0x08000, CRC(938eaa46) SHA1(9b3458cf3a279ed86ba395dc45c8f26939d6c44d))
1220   ROM_LOAD( "sandysuperdisk.rom", SANDY_ROM_BASE_SD, 0x04000, CRC(b52077da) SHA1(bf531758145ffd083e01c1cf9c45d0e9264a3b53))
1221   ROM_LOAD( "sandy_disk_controller_v1.18y_1984.rom", SANDY_ROM_BASE_SQB, 0x08000, CRC(d02425be) SHA1(e730576e3e0c6a1acad042c09e15fc62a32d8fbd))
1222
1223903   ROM_REGION( 0x800, I8749_TAG, 0 )
1224904   ROM_LOAD( "ipc8049.ic24", 0x000, 0x800, CRC(6a0d1f20) SHA1(fcb1c97ee7c66e5b6d8fbb57c06fd2f6509f2e1b) )
1225905
r30837r30838
1236916//-------------------------------------------------
1237917
1238918ROM_START( ql_us )
1239   ROM_REGION( 0x20000, M68008_TAG, 0 )
919   ROM_REGION( 0xc000, M68008_TAG, 0 )
1240920   ROM_LOAD( "jsu.ic33", 0x0000, 0x8000, BAD_DUMP CRC(e397f49f) SHA1(c06f92eabaf3e6dd298c51cb7f7535d8ef0ef9c5) )
1241921   ROM_LOAD( "jsu.ic34", 0x8000, 0x4000, BAD_DUMP CRC(3debbacc) SHA1(9fbc3e42ec463fa42f9c535d63780ff53a9313ec) )
1242   ROM_CART_LOAD("cart", 0xc000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
1243922
1244923   ROM_REGION( 0x800, I8749_TAG, 0 )
1245924   ROM_LOAD( "ipc8049.ic24", 0x000, 0x800, CRC(6a0d1f20) SHA1(fcb1c97ee7c66e5b6d8fbb57c06fd2f6509f2e1b) )
r30837r30838
1254933//-------------------------------------------------
1255934
1256935ROM_START( ql_es )
1257   ROM_REGION( 0x20000, M68008_TAG, 0 )
936   ROM_REGION( 0xc000, M68008_TAG, 0 )
1258937   ROM_LOAD( "mge.ic33", 0x0000, 0x8000, BAD_DUMP CRC(d5293bde) SHA1(bf5af7e53a472d4e9871f182210787d601db0634) )
1259938   ROM_LOAD( "mge.ic34", 0x8000, 0x4000, BAD_DUMP CRC(a694f8d7) SHA1(bd2868656008de85d7c191598588017ae8aa3339) )
1260   ROM_CART_LOAD("cart", 0xc000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
1261939
1262940   ROM_REGION( 0x800, I8749_TAG, 0 )
1263941   ROM_LOAD( "ipc8049.ic24", 0x000, 0x800, CRC(6a0d1f20) SHA1(fcb1c97ee7c66e5b6d8fbb57c06fd2f6509f2e1b) )
r30837r30838
1272950//-------------------------------------------------
1273951
1274952ROM_START( ql_fr )
1275   ROM_REGION( 0x20000, M68008_TAG, 0 )
953   ROM_REGION( 0xc000, M68008_TAG, 0 )
1276954   ROM_LOAD( "mgf.ic33", 0x0000, 0x8000, NO_DUMP )
1277955   ROM_LOAD( "mgf.ic34", 0x8000, 0x4000, NO_DUMP )
1278   ROM_CART_LOAD("cart", 0xc000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
1279956
1280957   ROM_REGION( 0x800, I8749_TAG, 0 )
1281958   ROM_LOAD( "ipc8049.ic24", 0x000, 0x800, CRC(6a0d1f20) SHA1(fcb1c97ee7c66e5b6d8fbb57c06fd2f6509f2e1b) )
r30837r30838
1290967//-------------------------------------------------
1291968
1292969ROM_START( ql_de )
1293   ROM_REGION( 0x20000, M68008_TAG, 0 )
970   ROM_REGION( 0xc000, M68008_TAG, 0 )
1294971   ROM_SYSTEM_BIOS( 0, "mg", "v1.10 (MG)" )
1295972   ROMX_LOAD( "mgg.ic33", 0x0000, 0x8000, BAD_DUMP CRC(b4e468fd) SHA1(cd02a3cd79af90d48b65077d0571efc2f12f146e), ROM_BIOS(1) )
1296973   ROMX_LOAD( "mgg.ic34", 0x8000, 0x4000, BAD_DUMP CRC(54959d40) SHA1(ffc0be9649f26019d7be82925c18dc699259877f), ROM_BIOS(1) )
r30837r30838
1299976   ROMX_LOAD( "mf.ic34", 0x8000, 0x4000, BAD_DUMP CRC(5974616b) SHA1(c3603768c08535c25f077eed02fb80128aff13d9), ROM_BIOS(2) )
1300977   ROM_SYSTEM_BIOS( 2, "ultramg", "Ultrasoft" )
1301978   ROMX_LOAD( "ultramg.rom", 0x0000, 0x00c000, BAD_DUMP CRC(ad12463b) SHA1(0561b3bc7ce090f3101b2142ee957c18c250eefa), ROM_BIOS(3) )
1302   ROM_CART_LOAD("cart", 0xc000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
1303979
1304980   ROM_REGION( 0x800, I8749_TAG, 0 )
1305981   ROM_LOAD( "ipc8049.ic24", 0x000, 0x800, CRC(6a0d1f20) SHA1(fcb1c97ee7c66e5b6d8fbb57c06fd2f6509f2e1b) )
r30837r30838
1314990//-------------------------------------------------
1315991
1316992ROM_START( ql_it )
1317   ROM_REGION( 0x20000, M68008_TAG, 0 )
993   ROM_REGION( 0xc000, M68008_TAG, 0 )
1318994   ROM_LOAD( "mgi.ic33", 0x0000, 0x8000, BAD_DUMP CRC(d5293bde) SHA1(bf5af7e53a472d4e9871f182210787d601db0634) )
1319995   ROM_LOAD( "mgi.ic34", 0x8000, 0x4000, BAD_DUMP CRC(a2fdfb83) SHA1(162b1052737500f3c13497cdf0f813ba006bdae9) )
1320   ROM_CART_LOAD("cart", 0xc000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
1321996
1322997   ROM_REGION( 0x800, I8749_TAG, 0 )
1323998   ROM_LOAD( "ipc8049.ic24", 0x000, 0x800, CRC(6a0d1f20) SHA1(fcb1c97ee7c66e5b6d8fbb57c06fd2f6509f2e1b) )
r30837r30838
13321007//-------------------------------------------------
13331008
13341009ROM_START( ql_se )
1335   ROM_REGION( 0x20000, M68008_TAG, 0 )
1010   ROM_REGION( 0xc000, M68008_TAG, 0 )
13361011   ROM_LOAD( "mgs.ic33", 0x0000, 0x8000, NO_DUMP )
13371012   ROM_LOAD( "mgs.ic34", 0x8000, 0x4000, NO_DUMP )
1338   ROM_CART_LOAD("cart", 0xc000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
13391013
13401014   ROM_REGION( 0x800, I8749_TAG, 0 )
13411015   ROM_LOAD( "ipc8049.ic24", 0x000, 0x800, CRC(6a0d1f20) SHA1(fcb1c97ee7c66e5b6d8fbb57c06fd2f6509f2e1b) )
r30837r30838
13501024//-------------------------------------------------
13511025
13521026ROM_START( ql_gr )
1353   ROM_REGION( 0x20000, M68008_TAG, 0 )
1027   ROM_REGION( 0xc000, M68008_TAG, 0 )
13541028   ROM_LOAD( "efp.ic33", 0x0000, 0x8000, BAD_DUMP CRC(eb181641) SHA1(43c1e0215cf540cbbda240b1048910ff55681059) )
13551029   ROM_LOAD( "efp.ic34", 0x8000, 0x4000, BAD_DUMP CRC(4c3b34b7) SHA1(f9dc571d2d4f68520b306ecc7516acaeea69ec0d) )
1356   ROM_CART_LOAD("cart", 0xc000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
13571030
13581031   ROM_REGION( 0x800, I8749_TAG, 0 )
13591032   ROM_LOAD( "ipc8049.ic24", 0x000, 0x800, CRC(6a0d1f20) SHA1(fcb1c97ee7c66e5b6d8fbb57c06fd2f6509f2e1b) )
r30837r30838
13681041//-------------------------------------------------
13691042
13701043ROM_START( ql_dk )
1371   ROM_REGION( 0x20000, M68008_TAG, 0 )
1044   ROM_REGION( 0xc000, M68008_TAG, 0 )
13721045   ROM_LOAD( "mgd.ic33",  0x0000, 0x8000, BAD_DUMP CRC(f57755eb) SHA1(dc57939ffb8741e17967a1d2479c339750ec7ff6) )
13731046   ROM_LOAD( "mgd.ic34",  0x8000, 0x4000, BAD_DUMP CRC(1892465a) SHA1(0ff3046b5276da6639d3fe79b22ae25cc265d540) )
1374   ROM_CART_LOAD("cart", 0xc000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
13751047
13761048   ROM_REGION( 0x4000, "extra", 0 )
13771049   ROM_LOAD( "extra.rom", 0x0000, 0x4000, NO_DUMP ) // located at 0x1c000 in M68008 memory map
r30837r30838
13891061//-------------------------------------------------
13901062
13911063ROM_START( tonto )
1392   ROM_REGION( 0x400000, M68008_TAG, 0 )
1064   ROM_REGION( 0x20000, M68008_TAG, 0 )
13931065   ROM_LOAD( "xbaa02.ic4", 0x000000, 0x008000, CRC(86e7915b) SHA1(a4d8369052eaea93d2174cfd3b14e6cf777f54b4) )
13941066   ROM_LOAD( "xbab03.ic5", 0x008000, 0x008000, CRC(97ef393c) SHA1(450c708e8dfbd42d939a9af6a72ef2a33a3dd3b5) )
13951067   ROM_LOAD( "xbac02.ic6", 0x010000, 0x008000, CRC(a7950897) SHA1(7cd4d6e33a350420a9ebd5c1b32708c29cb20799) )
r30837r30838
14191091//-------------------------------------------------
14201092
14211093ROM_START( megaopd )
1422   ROM_REGION( 0x400000, M68008_TAG, 0 )
1094   ROM_REGION( 0x20000, M68008_TAG, 0 )
14231095   ROM_LOAD( "bios-1.rom", 0x000000, 0x008000, NO_DUMP )
14241096   ROM_LOAD( "bios-2.rom", 0x008000, 0x008000, NO_DUMP )
14251097   ROM_LOAD( "bios-3.rom", 0x010000, 0x008000, NO_DUMP )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team