guab: Updated driver to use the standard wd floppy controller.

This also means that it now uses the software list system instead of
loading the floppy disk image into a memory region. To run the driver
use: "mame guab -flop guab3" now. You may also just start the driver,
then choose a floppy disk image from the builtin file manager.
This commit is contained in:
Dirk Best 2015-07-09 12:57:52 +02:00
parent 58ad8c28fe
commit 08c7ed6ffb
6 changed files with 261 additions and 434 deletions

127
hash/guab.xml Normal file
View File

@ -0,0 +1,127 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="guab" description="JPM Give us a Break floppy disks">
<software name="guab3">
<description>Give us a Break (3rd edition)</description>
<year>1986</year>
<publisher>JPM</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="737280">
<rom name="guab3.dsk" size="737280" crc="ecb41e06" sha1="2900a95046b38312c6035ea394b04b62c1d29f42" offset="0" />
</dataarea>
</part>
</software>
<software name="guab3a">
<description>Give us a Break (3rd edition alt?)</description>
<year>1986</year>
<publisher>JPM</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="737280">
<rom name="guab7c.dsk" size="737280" crc="f5f10f87" sha1="80e540339efbfe59b656d6cd4f466a17df84c123" offset="0" />
</dataarea>
</part>
</software>
<software name="guab4">
<description>Give us a Break (4th edition)</description>
<year>1986</year>
<publisher>JPM</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="737280">
<rom name="guab8d.dsk" size="737280" crc="b87c55ce" sha1="20debbefae194276b0813518634cf52bed093e73" offset="0" />
</dataarea>
</part>
</software>
<software name="guab6">
<description>Give us a Break (6th edition)</description>
<year>1986</year>
<publisher>JPM</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="737280">
<rom name="guabf6.dsk" size="737280" crc="08804c28" sha1="608d89d598b7acb133814540dba98cea29c6cad6" offset="0" />
</dataarea>
</part>
</software>
<software name="guab6a">
<description>Give us a Break (6th edition alt?)</description>
<year>1986</year>
<publisher>JPM</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="737280">
<rom name="guab9f.dsk" size="737280" crc="85329fe9" sha1="f5ca1956c37b786fa0a4f8f0607a0a2b19d3fbb0" offset="0" />
</dataarea>
</part>
</software>
<software name="guab7">
<description>Give us a Break (7th edition)</description>
<year>1986</year>
<publisher>JPM</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="737280">
<rom name="guab9g.dsk" size="737280" crc="6b8c36f9" sha1="1d9f4d943f2962603bbe39e5b58befe15954a6d6" offset="0" />
</dataarea>
</part>
</software>
<software name="guab21">
<description>Give us a Break (21st edition)</description>
<year>1986</year>
<publisher>JPM</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="737280">
<rom name="guab21.dsk" size="737280" crc="558ee009" sha1="d2a02662216e10f80a215044f1929df7255b6136" offset="0" />
</dataarea>
</part>
</software>
<software name="guab43">
<description>Give us a Break (43rd edition)</description>
<year>1986</year>
<publisher>JPM</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="737280">
<rom name="guab43.dsk" size="737280" crc="1fd8f614" sha1="656ce33c93a9d0e81ec7fcdd8f4e4b2f9ad1e485" offset="0" />
</dataarea>
</part>
</software>
<software name="crisscrs">
<description>Criss Cross (Sweden)</description>
<year>1986</year>
<publisher>JPM</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="737280">
<rom name="crisscrs.dsk" size="737280" status="nodump" offset="0" />
</dataarea>
</part>
</software>
<software name="tenup">
<description>Ten Up (compendium 17)</description>
<year>1988</year>
<publisher>JPM</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="737280">
<rom name="10up17.dsk" size="737280" crc="7bc328df" sha1="5f8e40d8ffc370fb19be9e386befa5fcd1f35a75" offset="0" />
</dataarea>
</part>
</software>
<software name="tenup3">
<description>Ten Up (compendium 3)</description>
<year>1988</year>
<publisher>JPM</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="737280">
<rom name="10up3.dsk" size="737280" crc="2767f017" sha1="1c6551b089c3e3df48e0c03bd502b91fd88f0e94" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -258,6 +258,8 @@ project "formats"
MAME_DIR .. "src/lib/formats/g64_dsk.h",
MAME_DIR .. "src/lib/formats/gtp_cas.c",
MAME_DIR .. "src/lib/formats/gtp_cas.h",
MAME_DIR .. "src/lib/formats/guab_dsk.c",
MAME_DIR .. "src/lib/formats/guab_dsk.h",
MAME_DIR .. "src/lib/formats/hect_dsk.c",
MAME_DIR .. "src/lib/formats/hect_dsk.h",
MAME_DIR .. "src/lib/formats/hect_tap.c",

View File

@ -0,0 +1,42 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
/***************************************************************************
JPM Give us a Break
Disk image format
***************************************************************************/
#include "guab_dsk.h"
guab_format::guab_format() : wd177x_format(formats)
{
}
const char *guab_format::name() const
{
return "guab";
}
const char *guab_format::description() const
{
return "JPM Give us a Break disk image";
}
const char *guab_format::extensions() const
{
return "dsk";
}
// gap sizes unverified
const guab_format::format guab_format::formats[] =
{
{
floppy_image::FF_35, floppy_image::DSDD, floppy_image::MFM,
2000, 18, 80, 2, 256, {}, 0, {}, 80, 22, 24
},
{}
};
const floppy_format_type FLOPPY_GUAB_FORMAT = &floppy_image_format_creator<guab_format>;

View File

@ -0,0 +1,33 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
/***************************************************************************
JPM Give us a Break
Disk image format
***************************************************************************/
#pragma once
#ifndef __GUAB_DSK_H__
#define __GUAB_DSK_H__
#include "wd177x_dsk.h"
class guab_format : public wd177x_format
{
public:
guab_format();
virtual const char *name() const;
virtual const char *description() const;
virtual const char *extensions() const;
private:
static const format formats[];
};
extern const floppy_format_type FLOPPY_GUAB_FORMAT;
#endif // __GUAB_DSK_H__

View File

@ -13465,16 +13465,8 @@ j2sset
// JPM Give us a Break hardware
guab // (c) 1986
guab3a // (c) 1986
guab4 // (c) 1986
guab6 // (c) 1986
guab6a // (c) 1986
guab7 // (c) 1986
guab21 // (c) 1986
guab43 // (c) 1986
crisscrs // (c) 1986
tenup // (c) 1988
tenup3 // (c) 1988
// JPM System 5

View File

@ -22,6 +22,7 @@
count gets updated in the code. Each game requires a unique
security PAL - maybe this is related? I'm poking the coin values
directly into RAM for now.
* Verify WD FDC type
***************************************************************************/
@ -30,6 +31,8 @@
#include "machine/6840ptm.h"
#include "video/tms34061.h"
#include "sound/sn76496.h"
#include "machine/wd_fdc.h"
#include "formats/guab_dsk.h"
/*************************************
@ -38,9 +41,6 @@
*
*************************************/
#define LOG_FDC_COMMANDS 0
#define FDC_LOG(x) do { if (LOG_FDC_COMMANDS) osd_printf_debug x; } while(0)
enum int_levels
{
@ -61,19 +61,6 @@ struct ef9369
};
struct wd1770
{
UINT32 status;
UINT8 cmd;
UINT8 data;
UINT32 side;
INT32 track;
INT32 sector;
UINT32 sptr;
};
class guab_state : public driver_device
{
public:
@ -82,32 +69,37 @@ public:
m_maincpu(*this, "maincpu"),
m_tms34061(*this, "tms34061"),
m_sn(*this, "snsnd"),
m_fdc(*this, "fdc"),
m_floppy(*this, "fdc:0"),
m_palette(*this, "palette") { }
/* devices */
required_device<cpu_device> m_maincpu;
required_device<tms34061_device> m_tms34061;
required_device<sn76489_device> m_sn;
required_device<palette_device> m_palette;
struct ef9369 m_pal;
emu_timer *m_fdc_timer;
struct wd1770 m_fdc;
DECLARE_WRITE_LINE_MEMBER(generate_tms34061_interrupt);
DECLARE_WRITE16_MEMBER(guab_tms34061_w);
DECLARE_READ16_MEMBER(guab_tms34061_r);
DECLARE_WRITE16_MEMBER(ef9369_w);
DECLARE_READ16_MEMBER(ef9369_r);
DECLARE_WRITE16_MEMBER(wd1770_w);
DECLARE_READ16_MEMBER(wd1770_r);
DECLARE_READ16_MEMBER(wd1773_r);
DECLARE_WRITE16_MEMBER(wd1773_w);
DECLARE_READ16_MEMBER(io_r);
DECLARE_WRITE16_MEMBER(io_w);
DECLARE_INPUT_CHANGED_MEMBER(coin_inserted);
DECLARE_WRITE_LINE_MEMBER(ptm_irq);
virtual void machine_start();
virtual void machine_reset();
UINT32 screen_update_guab(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_CALLBACK_MEMBER(fdc_data_callback);
DECLARE_FLOPPY_FORMATS(floppy_formats);
protected:
virtual void machine_start();
private:
required_device<cpu_device> m_maincpu;
required_device<tms34061_device> m_tms34061;
required_device<sn76489_device> m_sn;
required_device<wd1773_t> m_fdc;
required_device<floppy_connector> m_floppy;
required_device<palette_device> m_palette;
struct ef9369 m_pal;
};
@ -275,285 +267,6 @@ UINT32 guab_state::screen_update_guab(screen_device &screen, bitmap_ind16 &bitma
}
/*************************************
*
* WD1770 floppy disk controller
* (just enough to get by...)
*
*************************************/
#define USEC_DELAY 40
#define DISK_SIDES 2
#define DISK_TRACKS 80
#define DISK_SECTORS 18
#define DISK_SECTOR_SIZE 256
#define DISK_TRACK_SIZE (DISK_SECTOR_SIZE * DISK_SECTORS)
#define DISK_SIDE_SIZE (DISK_TRACK_SIZE * DISK_TRACKS)
enum wd1770_status
{
BUSY = 1 << 0,
DATA_REQUEST = 1 << 1,
INDEX = 1 << 1,
LOST_DATA = 1 << 2,
TRACK_00 = 1 << 2,
CRC_ERROR = 1 << 3,
RECORD_NOT_FOUND = 1 << 4,
RECORD_TYPE = 1 << 5,
SPIN_UP = 1 << 5,
WRITE_PROTECT = 1 << 6,
MOTOR_ON = 1 << 7
};
TIMER_CALLBACK_MEMBER(guab_state::fdc_data_callback)
{
struct wd1770 &fdc = m_fdc;
UINT8* disk = (UINT8*)memregion("user1")->base();
int more_data = 0;
/*
Disk dumps are organised as:
Side 0, Track 0: Sectors 0 - 17
Side 1, Track 0: Sectors 0 - 17
Side 0, Track 1: Sectors 0 - 17
Side 1, Track 1: Sectors 0 - 17
etc.
*/
int idx = 2 * fdc.track * (DISK_TRACK_SIZE) + (fdc.side ? DISK_TRACK_SIZE : 0)+
fdc.sector * (DISK_SECTOR_SIZE) +
fdc.sptr;
/* Write or read? */
if (fdc.cmd & 0x20)
disk[idx] = fdc.data;
else
fdc.data = disk[idx];
fdc.sptr++;
if (fdc.sptr < DISK_SECTOR_SIZE)
{
more_data = 1;
}
else
{
fdc.sptr = 0;
/* Multi-sector read */
if (fdc.cmd & 0x10)
{
++fdc.sector;
/* Keep going */
if (fdc.sector < DISK_SECTORS)
more_data = 1;
}
}
if (more_data)
{
m_fdc_timer->adjust(attotime::from_usec(USEC_DELAY));
}
else
{
/* Hack!*/
fdc.cmd = 0;
fdc.status &= ~BUSY;
}
fdc.status |= DATA_REQUEST;
m_maincpu->set_input_line(INT_FLOPPYCTRL, ASSERT_LINE);
}
WRITE16_MEMBER(guab_state::wd1770_w)
{
struct wd1770 &fdc = m_fdc;
data &= 0xff;
switch (offset)
{
case 0:
{
UINT8 cmd = (data >> 4) & 0xf;
FDC_LOG(("Command: %x:: ", data));
switch (cmd)
{
/**** Type I ****/
case 0:
{
FDC_LOG(("Restore\n"));
fdc.track = 0;
break;
}
case 1:
{
FDC_LOG(("Seek to track %d\n", fdc.data));
fdc.track = fdc.data;
break;
}
/* Step */
case 2:
case 3:
{
FDC_LOG(("Step (not implemented)\n"));
break;
}
case 4: case 5:
{
if (++fdc.track >= DISK_TRACKS)
fdc.track = DISK_TRACKS - 1;
FDC_LOG(("Step-in to track %d\n", fdc.track));
break;
}
case 6: case 7:
{
if (--fdc.track > 0)
fdc.track = 0;
FDC_LOG(("Step-out to track %d\n", fdc.track));
break;
}
/**** Type II ****/
case 8:
case 9:
{
fdc.cmd = data;
fdc.status |= BUSY;
if (data & 0x10)
FDC_LOG(("Multi "));
FDC_LOG(("Sector read: H%d T%d S%d\n", fdc.side,
fdc.track,
fdc.sector));
/* Set the data read timer */
m_fdc_timer->adjust(attotime::from_usec(USEC_DELAY));
break;
}
case 10:
case 11:
{
fdc.cmd = data;
fdc.status |= BUSY;
if (data & 0x10)
FDC_LOG(("Multi "));
FDC_LOG(("Sector write: H%d T%d S%d\n", fdc.side,
fdc.track,
fdc.sector));
/* Trigger a DRQ interrupt on the CPU */
m_maincpu->set_input_line(INT_FLOPPYCTRL, ASSERT_LINE);
fdc.status |= DATA_REQUEST;
break;
}
/**** Type III ****/
case 12: /* Read address */
case 14: /* Read track */
case 15: /* Write track */
{
FDC_LOG(("Unsupported TYPE III operation\n"));
break;
}
/**** Type IV ****/
case 13:
{
/* Stop any operation in progress */
m_fdc_timer->reset();
fdc.status &= ~BUSY;
FDC_LOG(("Force Interrupt\n"));
break;
}
}
break;
}
case 1:
{
FDC_LOG(("Set track: %d\n", data));
fdc.track = data;
break;
}
case 2:
{
FDC_LOG(("Set sector: %d\n", data));
fdc.sector = data;
fdc.sptr = 0;
break;
}
case 3:
{
fdc.data = data;
/* Clear the DRQ */
m_maincpu->set_input_line(INT_FLOPPYCTRL, CLEAR_LINE);
/* Queue an event to write the data if write command was specified */
if (fdc.cmd & 0x20)
m_fdc_timer->adjust(attotime::from_usec(USEC_DELAY));
break;
}
}
}
READ16_MEMBER(guab_state::wd1770_r)
{
struct wd1770 &fdc = m_fdc;
UINT16 retval = 0;
switch (offset)
{
case 0:
{
retval = fdc.status;
break;
}
case 1:
{
retval = fdc.track;
break;
}
case 2:
{
retval = fdc.sector;
break;
}
case 3:
{
retval = fdc.data;
/* Clear the DRQ */
m_maincpu->set_input_line(INT_FLOPPYCTRL, CLEAR_LINE);
fdc.status &= ~DATA_REQUEST;
break;
}
}
return retval;
}
/****************************************
*
* Hardware inputs (coins, buttons etc)
@ -604,9 +317,18 @@ INPUT_CHANGED_MEMBER(guab_state::coin_inserted)
*
****************************************/
READ16_MEMBER( guab_state::wd1773_r )
{
return m_fdc->read(space, offset);
}
WRITE16_MEMBER( guab_state::wd1773_w )
{
m_fdc->write(space, offset, data & 0xff);
}
WRITE16_MEMBER(guab_state::io_w)
{
struct wd1770 &fdc = m_fdc;
switch (offset)
{
case 0x10:
@ -647,7 +369,10 @@ WRITE16_MEMBER(guab_state::io_w)
case 0x31:
{
/* Only JPM knows about the other bits... */
fdc.side = (data >> 3) & 1;
m_floppy->get_device()->ss_w(BIT(data, 3));
// one of those bits will probably control the motor, we just let it run all the time for now
m_floppy->get_device()->mon_w(0);
break;
}
case 0x32:
@ -681,7 +406,7 @@ static ADDRESS_MAP_START( guab_map, AS_PROGRAM, 16, guab_state )
AM_RANGE(0x0c0080, 0x0c0083) AM_NOP /* ACIA 1 */
AM_RANGE(0x0c00a0, 0x0c00a3) AM_NOP /* ACIA 2 */
AM_RANGE(0x0c00c0, 0x0c00cf) AM_DEVREADWRITE8("6840ptm", ptm6840_device, read, write, 0xff)
AM_RANGE(0x0c00e0, 0x0c00e7) AM_READWRITE(wd1770_r, wd1770_w)
AM_RANGE(0x0c00e0, 0x0c00e7) AM_READWRITE(wd1773_r, wd1773_w)
AM_RANGE(0x080000, 0x080fff) AM_RAM
AM_RANGE(0x100000, 0x100003) AM_READWRITE(ef9369_r, ef9369_w)
AM_RANGE(0x800000, 0xb0ffff) AM_READWRITE(guab_tms34061_r, guab_tms34061_w)
@ -770,20 +495,22 @@ INPUT_PORTS_END
void guab_state::machine_start()
{
m_fdc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(guab_state::fdc_data_callback),this));
m_fdc->set_floppy(m_floppy->get_device());
}
void guab_state::machine_reset()
{
memset(&m_fdc, 0, sizeof(m_fdc));
}
FLOPPY_FORMATS_MEMBER( guab_state::floppy_formats )
FLOPPY_GUAB_FORMAT
FLOPPY_FORMATS_END
static SLOT_INTERFACE_START( guab_floppies )
SLOT_INTERFACE("dd", FLOPPY_35_DD)
SLOT_INTERFACE_END
static MACHINE_CONFIG_START( guab, guab_state )
/* TODO: Verify clock */
MCFG_CPU_ADD("maincpu", M68000, 8000000)
MCFG_CPU_PROGRAM_MAP(guab_map)
/* TODO: Use real video timings */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@ -811,6 +538,15 @@ static MACHINE_CONFIG_START( guab, guab_state )
MCFG_PTM6840_INTERNAL_CLOCK(1000000)
MCFG_PTM6840_EXTERNAL_CLOCKS(0, 0, 0)
MCFG_PTM6840_IRQ_CB(WRITELINE(guab_state, ptm_irq))
// floppy
MCFG_WD1773_ADD("fdc", 8000000)
MCFG_WD_FDC_DRQ_CALLBACK(INPUTLINE("maincpu", INT_FLOPPYCTRL))
MCFG_FLOPPY_DRIVE_ADD("fdc:0", guab_floppies, "dd", guab_state::floppy_formats)
MCFG_SLOT_FIXED(true)
MCFG_SOFTWARE_LIST_ADD("floppy_list", "guab")
MACHINE_CONFIG_END
@ -826,95 +562,12 @@ ROM_START( guab )
ROM_LOAD16_BYTE( "guab1b1.rom", 0x00001, 0x8000, CRC(af3b5492) SHA1(6fd7f29e6ed2fadccc9246f1ebd049c3f9aeff13) )
ROM_LOAD16_BYTE( "guab2a1.rom", 0x10000, 0x8000, CRC(ae7a162c) SHA1(d69721818b8e4daba776a678b62bc7f44f371a3f) )
ROM_LOAD16_BYTE( "guab2b1.rom", 0x10001, 0x8000, CRC(29aa26a0) SHA1(8d425ad845ccfcd8995dbf6adc1ca17989a5d3ea) )
ROM_REGION( 0xb4000, "user1", 0 )
ROM_LOAD( "guab3.dsk", 0x00000, 0xb4000, CRC(ecb41e06) SHA1(2900a95046b38312c6035ea394b04b62c1d29f42) )
ROM_END
ROM_START( guab3a )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE( "guab1a1.rom", 0x00000, 0x8000, CRC(f23a9d7d) SHA1(f933e131bdcf21cfa6001c8e20fd11d94c7a9450) )
ROM_LOAD16_BYTE( "guab1b1.rom", 0x00001, 0x8000, CRC(af3b5492) SHA1(6fd7f29e6ed2fadccc9246f1ebd049c3f9aeff13) )
ROM_LOAD16_BYTE( "guab2a1.rom", 0x10000, 0x8000, CRC(ae7a162c) SHA1(d69721818b8e4daba776a678b62bc7f44f371a3f) )
ROM_LOAD16_BYTE( "guab2b1.rom", 0x10001, 0x8000, CRC(29aa26a0) SHA1(8d425ad845ccfcd8995dbf6adc1ca17989a5d3ea) )
ROM_REGION( 0xb4000, "user1", 0 )
ROM_LOAD( "guab7c.dsk", 0x00000, 0xb4000, CRC(f5f10f87) SHA1(80e540339efbfe59b656d6cd4f466a17df84c123) )
ROM_END
ROM_START( guab4 )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE( "guab1a1.rom", 0x00000, 0x8000, CRC(f23a9d7d) SHA1(f933e131bdcf21cfa6001c8e20fd11d94c7a9450) )
ROM_LOAD16_BYTE( "guab1b1.rom", 0x00001, 0x8000, CRC(af3b5492) SHA1(6fd7f29e6ed2fadccc9246f1ebd049c3f9aeff13) )
ROM_LOAD16_BYTE( "guab2a1.rom", 0x10000, 0x8000, CRC(ae7a162c) SHA1(d69721818b8e4daba776a678b62bc7f44f371a3f) )
ROM_LOAD16_BYTE( "guab2b1.rom", 0x10001, 0x8000, CRC(29aa26a0) SHA1(8d425ad845ccfcd8995dbf6adc1ca17989a5d3ea) )
ROM_REGION( 0xb4000, "user1", 0 )
ROM_LOAD( "guab8d.dsk", 0x00000, 0xb4000, CRC(b87c55ce) SHA1(20debbefae194276b0813518634cf52bed093e73) )
ROM_END
ROM_START( guab6 )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE( "guab1a1.rom", 0x00000, 0x8000, CRC(f23a9d7d) SHA1(f933e131bdcf21cfa6001c8e20fd11d94c7a9450) )
ROM_LOAD16_BYTE( "guab1b1.rom", 0x00001, 0x8000, CRC(af3b5492) SHA1(6fd7f29e6ed2fadccc9246f1ebd049c3f9aeff13) )
ROM_LOAD16_BYTE( "guab2a1.rom", 0x10000, 0x8000, CRC(ae7a162c) SHA1(d69721818b8e4daba776a678b62bc7f44f371a3f) )
ROM_LOAD16_BYTE( "guab2b1.rom", 0x10001, 0x8000, CRC(29aa26a0) SHA1(8d425ad845ccfcd8995dbf6adc1ca17989a5d3ea) )
ROM_REGION( 0xb4000, "user1", 0 )
ROM_LOAD( "guabf6.dsk", 0x00000, 0xb4000, CRC(08804c28) SHA1(608d89d598b7acb133814540dba98cea29c6cad6) )
ROM_END
ROM_START( guab6a )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE( "guab1a1.rom", 0x00000, 0x8000, CRC(f23a9d7d) SHA1(f933e131bdcf21cfa6001c8e20fd11d94c7a9450) )
ROM_LOAD16_BYTE( "guab1b1.rom", 0x00001, 0x8000, CRC(af3b5492) SHA1(6fd7f29e6ed2fadccc9246f1ebd049c3f9aeff13) )
ROM_LOAD16_BYTE( "guab2a1.rom", 0x10000, 0x8000, CRC(ae7a162c) SHA1(d69721818b8e4daba776a678b62bc7f44f371a3f) )
ROM_LOAD16_BYTE( "guab2b1.rom", 0x10001, 0x8000, CRC(29aa26a0) SHA1(8d425ad845ccfcd8995dbf6adc1ca17989a5d3ea) )
ROM_REGION( 0xb4000, "user1", 0 )
ROM_LOAD( "guab9f.dsk", 0x00000, 0xb4000, CRC(85329fe9) SHA1(f5ca1956c37b786fa0a4f8f0607a0a2b19d3fbb0) )
ROM_END
ROM_START( guab7 )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE( "guab1a1.rom", 0x00000, 0x8000, CRC(f23a9d7d) SHA1(f933e131bdcf21cfa6001c8e20fd11d94c7a9450) )
ROM_LOAD16_BYTE( "guab1b1.rom", 0x00001, 0x8000, CRC(af3b5492) SHA1(6fd7f29e6ed2fadccc9246f1ebd049c3f9aeff13) )
ROM_LOAD16_BYTE( "guab2a1.rom", 0x10000, 0x8000, CRC(ae7a162c) SHA1(d69721818b8e4daba776a678b62bc7f44f371a3f) )
ROM_LOAD16_BYTE( "guab2b1.rom", 0x10001, 0x8000, CRC(29aa26a0) SHA1(8d425ad845ccfcd8995dbf6adc1ca17989a5d3ea) )
ROM_REGION( 0xb4000, "user1", 0 )
ROM_LOAD( "guab9g.dsk", 0x00000, 0xb4000, CRC(6b8c36f9) SHA1(1d9f4d943f2962603bbe39e5b58befe15954a6d6) )
ROM_END
ROM_START( guab21 )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE( "guab1a1.rom", 0x00000, 0x8000, CRC(f23a9d7d) SHA1(f933e131bdcf21cfa6001c8e20fd11d94c7a9450) )
ROM_LOAD16_BYTE( "guab1b1.rom", 0x00001, 0x8000, CRC(af3b5492) SHA1(6fd7f29e6ed2fadccc9246f1ebd049c3f9aeff13) )
ROM_LOAD16_BYTE( "guab2a1.rom", 0x10000, 0x8000, CRC(ae7a162c) SHA1(d69721818b8e4daba776a678b62bc7f44f371a3f) )
ROM_LOAD16_BYTE( "guab2b1.rom", 0x10001, 0x8000, CRC(29aa26a0) SHA1(8d425ad845ccfcd8995dbf6adc1ca17989a5d3ea) )
ROM_REGION( 0xb4000, "user1", 0 )
ROM_LOAD( "guab21.dsk", 0x00000, 0xb4000, CRC(558ee009) SHA1(d2a02662216e10f80a215044f1929df7255b6136) )
ROM_END
ROM_START( guab43 )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE( "guab1a1.rom", 0x00000, 0x8000, CRC(f23a9d7d) SHA1(f933e131bdcf21cfa6001c8e20fd11d94c7a9450) )
ROM_LOAD16_BYTE( "guab1b1.rom", 0x00001, 0x8000, CRC(af3b5492) SHA1(6fd7f29e6ed2fadccc9246f1ebd049c3f9aeff13) )
ROM_LOAD16_BYTE( "guab2a1.rom", 0x10000, 0x8000, CRC(ae7a162c) SHA1(d69721818b8e4daba776a678b62bc7f44f371a3f) )
ROM_LOAD16_BYTE( "guab2b1.rom", 0x10001, 0x8000, CRC(29aa26a0) SHA1(8d425ad845ccfcd8995dbf6adc1ca17989a5d3ea) )
ROM_REGION( 0xb4000, "user1", 0 )
ROM_LOAD( "guab43.dsk", 0x00000, 0xb3f00, CRC(96167357) SHA1(9d5f66e05ed1086be9699c4149071038f6986e0c) )
ROM_END
ROM_START( crisscrs )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE( "crisscross_swe_2a1.ic49", 0x00000, 0x8000, CRC(a7ca8828) SHA1(a28482bb2bc1248a9b5c0b57904c382246a632cc) )
ROM_LOAD16_BYTE( "crisscross_swe_2b1.ic48", 0x00001, 0x8000, CRC(7e280cae) SHA1(18c76459e39549ddba5f0cd7921013ef4f816826) )
ROM_REGION( 0xb4000, "user1", 0 )
ROM_LOAD( "crisscrs.dsk", 0x00000, 0xb4000, NO_DUMP )
ROM_END
ROM_START( tenup )
@ -923,20 +576,6 @@ ROM_START( tenup )
ROM_LOAD16_BYTE( "tu-12.bin", 0x00001, 0x8000, CRC(1c7f32b1) SHA1(2b14e2206695ae53909ae838a5c036248d9ab940) )
ROM_LOAD16_BYTE( "tu-13.bin", 0x10000, 0x8000, CRC(d19e2bf7) SHA1(76a9cbd4f604ad39eb0e319a9a6d5a6739b0ed8c) )
ROM_LOAD16_BYTE( "tu-14.bin", 0x10001, 0x8000, CRC(fd8a0c3c) SHA1(f87289ce6f0d2bc9b7d3a0b6deff38ba3aadf391) )
ROM_REGION( 0xb4000, "user1", 0 )
ROM_LOAD( "10up17.dsk", 0x00000, 0xb4000, CRC(7bc328df) SHA1(5f8e40d8ffc370fb19be9e386befa5fcd1f35a75) )
ROM_END
ROM_START( tenup3 )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE( "tu-11.bin", 0x00000, 0x8000, CRC(01843086) SHA1(106a226900e8cf929f89edf801c627f02e4afce3) )
ROM_LOAD16_BYTE( "tu-12.bin", 0x00001, 0x8000, CRC(1c7f32b1) SHA1(2b14e2206695ae53909ae838a5c036248d9ab940) )
ROM_LOAD16_BYTE( "tu-13.bin", 0x10000, 0x8000, CRC(d19e2bf7) SHA1(76a9cbd4f604ad39eb0e319a9a6d5a6739b0ed8c) )
ROM_LOAD16_BYTE( "tu-14.bin", 0x10001, 0x8000, CRC(fd8a0c3c) SHA1(f87289ce6f0d2bc9b7d3a0b6deff38ba3aadf391) )
ROM_REGION( 0xb4000, "user1", 0 )
ROM_LOAD( "10up3.dsk", 0x00000, 0xb4000, CRC(2767f017) SHA1(1c6551b089c3e3df48e0c03bd502b91fd88f0e94) )
ROM_END
@ -946,14 +585,6 @@ ROM_END
*
*************************************/
GAME( 1986, guab, 0, guab, guab, driver_device, 0, ROT0, "JPM", "Give us a Break (3rd edition)", 0 )
GAME( 1986, guab3a, guab, guab, guab, driver_device, 0, ROT0, "JPM", "Give us a Break (3rd edition alt?)", 0 )
GAME( 1986, guab4, guab, guab, guab, driver_device, 0, ROT0, "JPM", "Give us a Break (4th edition)", 0 )
GAME( 1986, guab6, guab, guab, guab, driver_device, 0, ROT0, "JPM", "Give us a Break (6th edition)", 0 )
GAME( 1986, guab6a, guab, guab, guab, driver_device, 0, ROT0, "JPM", "Give us a Break (6th edition alt?)", 0 )
GAME( 1986, guab7, guab, guab, guab, driver_device, 0, ROT0, "JPM", "Give us a Break (7th edition)", 0 )
GAME( 1986, guab21, guab, guab, guab, driver_device, 0, ROT0, "JPM", "Give us a Break (21st edition)", 0 )
GAME( 1986, guab43, guab, guab, guab, driver_device, 0, ROT0, "JPM", "Give us a Break (43rd edition)", 0 )
GAME( 1986, crisscrs, 0, guab, guab, driver_device, 0, ROT0, "JPM", "Criss Cross (Sweden)", GAME_NOT_WORKING )
GAME( 1988, tenup, 0, guab, tenup, driver_device, 0, ROT0, "JPM", "Ten Up (compendium 17)", 0 )
GAME( 1988, tenup3, tenup, guab, tenup, driver_device, 0, ROT0, "JPM", "Ten Up (compendium 3)", 0 )
GAME( 1986, guab, 0, guab, guab, driver_device, 0, ROT0, "JPM", "Give us a Break", 0 )
GAME( 1986, crisscrs, 0, guab, guab, driver_device, 0, ROT0, "JPM", "Criss Cross (Sweden)", GAME_NOT_WORKING )
GAME( 1988, tenup, 0, guab, tenup, driver_device, 0, ROT0, "JPM", "Ten Up", 0 )