(MESS) super6: Refactored to modern floppy system. (nw)

(MESS) super6: Added original BIOS. [Al Kossow]
This commit is contained in:
Curt Coder 2012-11-20 16:34:13 +00:00
parent 65ce18899b
commit 17ad25efff
2 changed files with 48 additions and 56 deletions

View File

@ -1,11 +1,3 @@
/*
ADC Super Six SBC
Skeleton driver
*/
/*
TODO:
@ -199,7 +191,7 @@ READ8_MEMBER( super6_state::fdc_r )
m_maincpu->set_input_line(Z80_INPUT_LINE_WAIT, ASSERT_LINE);
return !wd17xx_intrq_r(m_fdc) << 7;
return !m_fdc->intrq_r() << 7;
}
@ -225,15 +217,19 @@ WRITE8_MEMBER( super6_state::fdc_w )
*/
// disk drive select
wd17xx_set_drive(m_fdc, data & 0x03);
floppy_mon_w(m_floppy0, 0);
floppy_mon_w(m_floppy1, 0);
floppy_image_device *m_floppy = NULL;
if (BIT(data, 0)) m_floppy = m_floppy0->get_device();
if (BIT(data, 1)) m_floppy = m_floppy1->get_device();
m_fdc->set_floppy(m_floppy);
if (m_floppy) m_floppy->mon_w(0);
// head select
wd17xx_set_side(m_fdc, BIT(data, 2));
if (m_floppy) m_floppy->ss_w(BIT(data, 2));
// disk density
wd17xx_dden_w(m_fdc, !BIT(data, 3));
m_fdc->dden_w(!BIT(data, 3));
}
@ -285,7 +281,7 @@ static ADDRESS_MAP_START( super6_io, AS_IO, 8, super6_state )
AM_RANGE(0x00, 0x03) AM_DEVREADWRITE_LEGACY(Z80DART_TAG, z80dart_ba_cd_r, z80dart_ba_cd_w)
AM_RANGE(0x04, 0x07) AM_DEVREADWRITE(Z80PIO_TAG, z80pio_device, read, write)
AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write)
AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE_LEGACY(WD2793_TAG, wd17xx_r, wd17xx_w)
AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE(WD2793_TAG, wd2793_t, read, write)
AM_RANGE(0x10, 0x10) AM_MIRROR(0x03) AM_DEVREADWRITE_LEGACY(Z80DMA_TAG, z80dma_r, z80dma_w)
AM_RANGE(0x14, 0x14) AM_READWRITE(fdc_r, fdc_w)
AM_RANGE(0x15, 0x15) AM_READ_PORT("J7") AM_WRITE(s100_w)
@ -349,7 +345,7 @@ INPUT_PORTS_END
// Z80CTC_INTERFACE( ctc_intf )
//-------------------------------------------------
TIMER_DEVICE_CALLBACK_MEMBER(super6_state::ctc_tick)
TIMER_DEVICE_CALLBACK_MEMBER( super6_state::ctc_tick )
{
m_ctc->trg0(1);
m_ctc->trg0(0);
@ -448,49 +444,34 @@ static COM8116_INTERFACE( brg_intf )
//-------------------------------------------------
// floppy_interface super6_floppy_interface
// floppy_format_type floppy_formats
//-------------------------------------------------
static const floppy_interface super6_floppy_interface =
{
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
FLOPPY_STANDARD_5_25_DSHD,
LEGACY_FLOPPY_OPTIONS_NAME(default),
"floppy_5_25",
const floppy_format_type super6_state::floppy_formats[] = {
FLOPPY_IMD_FORMAT,
FLOPPY_MFM_FORMAT,
FLOPPY_MFI_FORMAT,
NULL
};
static SLOT_INTERFACE_START( super6_floppies )
SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
SLOT_INTERFACE_END
//-------------------------------------------------
// wd17xx_interface fdc_intf
//-------------------------------------------------
WRITE_LINE_MEMBER( super6_state::intrq_w )
void super6_state::fdc_intrq_w(bool state)
{
if (state) m_maincpu->set_input_line(Z80_INPUT_LINE_WAIT, CLEAR_LINE);
m_ctc->trg3(!state);
}
WRITE_LINE_MEMBER( super6_state::drq_w )
void super6_state::fdc_drq_w(bool state)
{
if (state) m_maincpu->set_input_line(Z80_INPUT_LINE_WAIT, CLEAR_LINE);
m_dma->rdy_w(state);
}
static const wd17xx_interface fdc_intf =
{
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(super6_state, intrq_w),
DEVCB_DRIVER_LINE_MEMBER(super6_state, drq_w),
{ FLOPPY_0, FLOPPY_1, NULL, NULL }
};
//-------------------------------------------------
// z80_daisy_config super6_daisy_chain
@ -509,14 +490,14 @@ static const z80_daisy_config super6_daisy_chain[] =
// GENERIC_TERMINAL_INTERFACE( terminal_intf )
//-------------------------------------------------
WRITE8_MEMBER(super6_state::dummy_w)
WRITE8_MEMBER( super6_state::dummy_w )
{
// handled in Z80DART_INTERFACE
}
static GENERIC_TERMINAL_INTERFACE( terminal_intf )
{
DEVCB_DRIVER_MEMBER(super6_state,dummy_w)
DEVCB_DRIVER_MEMBER(super6_state, dummy_w)
};
@ -531,6 +512,10 @@ static GENERIC_TERMINAL_INTERFACE( terminal_intf )
void super6_state::machine_start()
{
// floppy callbacks
m_fdc->setup_intrq_cb(wd2793_t::line_cb(FUNC(super6_state::fdc_intrq_w), this));
m_fdc->setup_drq_cb(wd2793_t::line_cb(FUNC(super6_state::fdc_drq_w), this));
// state saving
save_item(NAME(m_s100));
save_item(NAME(m_bank0));
@ -572,9 +557,10 @@ static MACHINE_CONFIG_START( super6, super6_state )
MCFG_Z80DART_ADD(Z80DART_TAG, XTAL_24MHz/4, dart_intf)
MCFG_Z80DMA_ADD(Z80DMA_TAG, XTAL_24MHz/6, dma_intf)
MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_24MHz/4, pio_intf)
MCFG_WD2793_ADD(WD2793_TAG, fdc_intf)
MCFG_WD2793x_ADD(WD2793_TAG, 1000000)
MCFG_COM8116_ADD(BR1945_TAG, XTAL_5_0688MHz, brg_intf)
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(super6_floppy_interface)
MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":0", super6_floppies, "525dd", NULL, super6_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":1", super6_floppies, NULL, NULL, super6_state::floppy_formats)
MCFG_SERIAL_TERMINAL_ADD(TERMINAL_TAG, terminal_intf, 4800)
// internal ram
@ -597,7 +583,11 @@ MACHINE_CONFIG_END
ROM_START( super6 )
ROM_REGION( 0x800, Z80_TAG, 0 )
ROM_LOAD( "digitex monitor 1.2a 6oct1983.u29", 0x000, 0x800, CRC(a4c33ce4) SHA1(46dde43ea51d295f2b3202c2d0e1883bde1a8da7) )
ROM_DEFAULT_BIOS( "v36" )
ROM_SYSTEM_BIOS( 0, "v36", "ADC S6 v3.6" )
ROMX_LOAD( "adcs6_v3.6.u29", 0x000, 0x800, CRC(386fd22a) SHA1(9c177990aa180ab93be9c4641e92ae934627e661), ROM_BIOS(1) )
ROM_SYSTEM_BIOS( 1, "v12", "Digitex Monitor v1.2a" )
ROMX_LOAD( "digitex monitor 1.2a 6oct1983.u29", 0x000, 0x800, CRC(a4c33ce4) SHA1(46dde43ea51d295f2b3202c2d0e1883bde1a8da7), ROM_BIOS(2) )
ROM_REGION( 0x800, "plds", 0 )
ROM_LOAD( "pal16l8.u16", 0x000, 0x800, NO_DUMP )

View File

@ -3,11 +3,12 @@
#ifndef __SUPER6__
#define __SUPER6__
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/z80/z80daisy.h"
#include "formats/basicdsk.h"
#include "formats/hxcmfm_dsk.h"
#include "formats/imd_dsk.h"
#include "formats/mfi_dsk.h"
#include "imagedev/flopdrv.h"
#include "machine/com8116.h"
#include "machine/z80ctc.h"
@ -16,7 +17,7 @@
#include "machine/z80pio.h"
#include "machine/ram.h"
#include "machine/terminal.h"
#include "machine/wd17xx.h"
#include "machine/wd1772.h"
#define Z80_TAG "u30"
#define Z80CTC_TAG "u20"
@ -41,8 +42,8 @@ public:
m_fdc(*this, WD2793_TAG),
m_brg(*this, BR1945_TAG),
m_ram(*this, RAM_TAG),
m_floppy0(*this, FLOPPY_0),
m_floppy1(*this, FLOPPY_1),
m_floppy0(*this, WD2793_TAG":0"),
m_floppy1(*this, WD2793_TAG":1"),
m_terminal(*this, TERMINAL_TAG)
{ }
@ -51,11 +52,11 @@ public:
required_device<z80dart_device> m_dart;
required_device<z80dma_device> m_dma;
required_device<z80pio_device> m_pio;
required_device<device_t> m_fdc;
required_device<wd2793_t> m_fdc;
required_device<com8116_device> m_brg;
required_device<ram_device> m_ram;
required_device<device_t> m_floppy0;
required_device<device_t> m_floppy1;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_device<serial_terminal_device> m_terminal;
virtual void machine_start();
@ -68,8 +69,9 @@ public:
DECLARE_WRITE8_MEMBER( bank1_w );
DECLARE_WRITE8_MEMBER( baud_w );
DECLARE_WRITE_LINE_MEMBER( fr_w );
DECLARE_WRITE_LINE_MEMBER( intrq_w );
DECLARE_WRITE_LINE_MEMBER( drq_w );
void fdc_intrq_w(bool state);
void fdc_drq_w(bool state);
static const floppy_format_type floppy_formats[];
void bankswitch();