mirror of
https://github.com/holub/mame
synced 2025-04-20 23:42:22 +03:00
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:
parent
58ad8c28fe
commit
08c7ed6ffb
127
hash/guab.xml
Normal file
127
hash/guab.xml
Normal 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>
|
@ -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",
|
||||
|
42
src/lib/formats/guab_dsk.c
Normal file
42
src/lib/formats/guab_dsk.c
Normal 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>;
|
33
src/lib/formats/guab_dsk.h
Normal file
33
src/lib/formats/guab_dsk.h
Normal 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__
|
@ -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
|
||||
|
@ -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 )
|
||||
|
Loading…
Reference in New Issue
Block a user