mirror of
https://github.com/holub/mame
synced 2025-05-25 07:15:25 +03:00
(MESS) victor9k: Floppy WIP. (nw)
This commit is contained in:
parent
26d0361693
commit
1f42617b3c
@ -28,144 +28,6 @@
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// READ/WRITE HANDLERS
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// floppy_p1_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( victor9k_state::floppy_p1_r )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
|
||||
0 L0MS0
|
||||
1 L0MS1
|
||||
2 L0MS2
|
||||
3 L0MS3
|
||||
4 L1MS0
|
||||
5 L1MS1
|
||||
6 L1MS2
|
||||
7 L1MS3
|
||||
|
||||
*/
|
||||
|
||||
return m_lms;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// floppy_p2_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( victor9k_state::floppy_p2_r )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
|
||||
0
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6 RDY0
|
||||
7 RDY1
|
||||
|
||||
*/
|
||||
|
||||
UINT8 data = 0;
|
||||
|
||||
data |= m_rdy0 << 6;
|
||||
data |= m_rdy1 << 7;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// floppy_p2_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER( victor9k_state::floppy_p2_w )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
|
||||
0 START0
|
||||
1 STOP0
|
||||
2 START1
|
||||
3 STOP1
|
||||
4 SEL1
|
||||
5 SEL0
|
||||
6
|
||||
7
|
||||
|
||||
*/
|
||||
|
||||
if (BIT(data, 0)) m_floppy0->mon_w(0);
|
||||
if (BIT(data, 1)) m_floppy0->mon_w(1);
|
||||
if (BIT(data, 2)) m_floppy1->mon_w(0);
|
||||
if (BIT(data, 3)) m_floppy1->mon_w(1);
|
||||
|
||||
int sel0 = BIT(data, 5);
|
||||
|
||||
if (m_sel0 && !sel0)
|
||||
{
|
||||
m_da0 = m_da;
|
||||
//m_floppy0->set_rpm();
|
||||
}
|
||||
|
||||
m_sel0 = sel0;
|
||||
|
||||
int sel1 = BIT(data, 4);
|
||||
|
||||
if (m_sel1 && !sel1)
|
||||
{
|
||||
m_da1 = m_da;
|
||||
//m_floppy1->set_rpm();
|
||||
}
|
||||
|
||||
m_sel1 = sel1;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// tach0_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( victor9k_state::tach0_r )
|
||||
{
|
||||
return m_tach0;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// tach1_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( victor9k_state::tach1_r )
|
||||
{
|
||||
return m_tach1;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// da_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER( victor9k_state::da_w )
|
||||
{
|
||||
m_da = data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// ADDRESS MAPS
|
||||
//**************************************************************************
|
||||
@ -193,19 +55,6 @@ static ADDRESS_MAP_START( victor9k_mem, AS_PROGRAM, 8, victor9k_state )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ADDRESS_MAP( floppy_io )
|
||||
//-------------------------------------------------
|
||||
|
||||
static ADDRESS_MAP_START( floppy_io, AS_IO, 8, victor9k_state )
|
||||
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(floppy_p1_r) AM_WRITENOP
|
||||
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(floppy_p2_r, floppy_p2_w)
|
||||
AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(tach0_r)
|
||||
AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(tach1_r)
|
||||
AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_WRITE(da_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INPUT PORTS
|
||||
@ -511,8 +360,8 @@ WRITE8_MEMBER( victor9k_state::via4_pa_w )
|
||||
|
||||
*/
|
||||
|
||||
m_lms = (m_lms & 0xf0) | (data & 0x0f);
|
||||
m_st[0] = data >> 4;
|
||||
m_fdc->l0ms_w(data & 0x0f);
|
||||
m_fdc->st0_w(data >> 4);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( victor9k_state::via4_pb_w )
|
||||
@ -532,8 +381,8 @@ WRITE8_MEMBER( victor9k_state::via4_pb_w )
|
||||
|
||||
*/
|
||||
|
||||
m_lms = (data << 4) | (m_lms & 0x0f);
|
||||
m_st[1] = data >> 4;
|
||||
m_fdc->l1ms_w(data & 0x0f);
|
||||
m_fdc->st1_w(data >> 4);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( victor9k_state::mode_w )
|
||||
@ -609,16 +458,16 @@ READ8_MEMBER( victor9k_state::via6_pa_r )
|
||||
UINT8 data = 0;
|
||||
|
||||
// track 0 drive A sense
|
||||
data |= m_floppy0->trk00_r() << 1;
|
||||
data |= m_fdc->trk0d0_r() << 1;
|
||||
|
||||
// track 0 drive B sense
|
||||
data |= m_floppy1->trk00_r() << 3;
|
||||
data |= m_fdc->trk0d1_r() << 3;
|
||||
|
||||
// write protect sense
|
||||
data |= (m_drive ? m_floppy1->wpt_r() : m_floppy0->wpt_r()) << 6;
|
||||
data |= m_fdc->wps_r() << 6;
|
||||
|
||||
// disk sync detect
|
||||
data |= m_sync << 7;
|
||||
data |= m_fdc->sync_r() << 7;
|
||||
|
||||
return data;
|
||||
}
|
||||
@ -641,16 +490,16 @@ WRITE8_MEMBER( victor9k_state::via6_pa_w )
|
||||
*/
|
||||
|
||||
// LED, drive A
|
||||
output_set_led_value(LED_A, BIT(data, 0));
|
||||
m_fdc->led0a_w(BIT(data, 0));
|
||||
|
||||
// LED, drive B
|
||||
output_set_led_value(LED_B, BIT(data, 2));
|
||||
m_fdc->led1a_w(BIT(data, 2));
|
||||
|
||||
// dual side select
|
||||
m_side = BIT(data, 4);
|
||||
m_fdc->side_select_w(BIT(data, 4));
|
||||
|
||||
// select drive A/B
|
||||
m_drive = BIT(data, 5);
|
||||
m_fdc->drive_select_w(BIT(data, 5));
|
||||
}
|
||||
|
||||
READ8_MEMBER( victor9k_state::via6_pb_r )
|
||||
@ -673,19 +522,19 @@ READ8_MEMBER( victor9k_state::via6_pb_r )
|
||||
UINT8 data = 0;
|
||||
|
||||
// motor speed status, drive A
|
||||
data |= m_rdy0;
|
||||
data |= m_fdc->rdy0_r();
|
||||
|
||||
// motor speed status, drive B
|
||||
data |= m_rdy1 << 1;
|
||||
data |= m_fdc->rdy1_r() << 1;
|
||||
|
||||
// door B sense
|
||||
data |= m_ds1 << 3;
|
||||
data |= m_fdc->ds1_r() << 3;
|
||||
|
||||
// door A sense
|
||||
data |= m_ds0 << 4;
|
||||
data |= m_fdc->ds0_r() << 4;
|
||||
|
||||
// single/double sided
|
||||
data |= (m_drive ? m_floppy1->twosid_r() : m_floppy0->twosid_r()) << 5;
|
||||
data |= m_fdc->single_double_sided_r() << 5;
|
||||
|
||||
return data;
|
||||
}
|
||||
@ -708,22 +557,13 @@ WRITE8_MEMBER( victor9k_state::via6_pb_w )
|
||||
*/
|
||||
|
||||
// motor speed controller reset
|
||||
if (!BIT(data, 2))
|
||||
m_fdc_cpu->reset();
|
||||
m_fdc->screset_w(BIT(data, 2));
|
||||
|
||||
// stepper enable A
|
||||
m_stp[0] = BIT(data, 6);
|
||||
m_fdc->stp0_w(BIT(data, 6));
|
||||
|
||||
// stepper enable B
|
||||
m_stp[1] = BIT(data, 7);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( victor9k_state::drw_w )
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( victor9k_state::erase_w )
|
||||
{
|
||||
m_fdc->stp1_w(BIT(data, 7));
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( victor9k_state::via6_irq_w )
|
||||
@ -753,64 +593,6 @@ WRITE_LINE_MEMBER( victor9k_state::kbdata_w )
|
||||
m_via2->write_pa6(state);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// SLOT_INTERFACE( victor9k_floppies )
|
||||
//-------------------------------------------------
|
||||
|
||||
void victor9k_state::ready0_cb(floppy_image_device *device, int state)
|
||||
{
|
||||
m_rdy0 = state;
|
||||
|
||||
m_via5->write_ca2(m_rdy0);
|
||||
}
|
||||
|
||||
int victor9k_state::load0_cb(floppy_image_device *device)
|
||||
{
|
||||
m_ds0 = 0;
|
||||
|
||||
m_via4->write_ca1(m_ds0);
|
||||
|
||||
return IMAGE_INIT_PASS;
|
||||
}
|
||||
|
||||
void victor9k_state::unload0_cb(floppy_image_device *device)
|
||||
{
|
||||
m_ds0 = 1;
|
||||
|
||||
m_via4->write_ca1(m_ds0);
|
||||
}
|
||||
|
||||
void victor9k_state::ready1_cb(floppy_image_device *device, int state)
|
||||
{
|
||||
m_rdy1 = state;
|
||||
|
||||
m_via5->write_cb2(m_rdy1);
|
||||
}
|
||||
|
||||
int victor9k_state::load1_cb(floppy_image_device *device)
|
||||
{
|
||||
m_ds1 = 0;
|
||||
|
||||
m_via4->write_cb1(m_ds1);
|
||||
|
||||
return IMAGE_INIT_PASS;
|
||||
}
|
||||
|
||||
void victor9k_state::unload1_cb(floppy_image_device *device)
|
||||
{
|
||||
m_ds1 = 1;
|
||||
|
||||
m_via4->write_cb1(m_ds1);
|
||||
}
|
||||
|
||||
static SLOT_INTERFACE_START( victor9k_floppies )
|
||||
SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
FLOPPY_FORMATS_MEMBER( victor9k_state::floppy_formats )
|
||||
FLOPPY_VICTOR_9000_FORMAT
|
||||
FLOPPY_FORMATS_END
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACHINE INITIALIZATION
|
||||
@ -822,20 +604,20 @@ FLOPPY_FORMATS_END
|
||||
|
||||
void victor9k_state::machine_start()
|
||||
{
|
||||
// set floppy callbacks
|
||||
m_floppy0->setup_ready_cb(floppy_image_device::ready_cb(FUNC(victor9k_state::ready0_cb), this));
|
||||
m_floppy0->setup_load_cb(floppy_image_device::load_cb(FUNC(victor9k_state::load0_cb), this));
|
||||
m_floppy0->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor9k_state::unload0_cb), this));
|
||||
m_floppy1->setup_ready_cb(floppy_image_device::ready_cb(FUNC(victor9k_state::ready1_cb), this));
|
||||
m_floppy1->setup_load_cb(floppy_image_device::load_cb(FUNC(victor9k_state::load1_cb), this));
|
||||
m_floppy1->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor9k_state::unload1_cb), this));
|
||||
// state saving
|
||||
save_item(NAME(m_brt));
|
||||
save_item(NAME(m_cont));
|
||||
save_item(NAME(m_via1_irq));
|
||||
save_item(NAME(m_via2_irq));
|
||||
save_item(NAME(m_via3_irq));
|
||||
save_item(NAME(m_via4_irq));
|
||||
save_item(NAME(m_via5_irq));
|
||||
save_item(NAME(m_via6_irq));
|
||||
save_item(NAME(m_ssda_irq));
|
||||
|
||||
// memory banking
|
||||
address_space &program = m_maincpu->space(AS_PROGRAM);
|
||||
program.install_ram(0x00000, m_ram->size() - 1, m_ram->pointer());
|
||||
|
||||
m_via5->write_ca1(m_brdy);
|
||||
m_via6->write_ca1(m_gcrerr);
|
||||
}
|
||||
|
||||
|
||||
@ -854,9 +636,6 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state )
|
||||
MCFG_CPU_PROGRAM_MAP(victor9k_mem)
|
||||
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE(I8259A_TAG, pic8259_device, inta_cb)
|
||||
|
||||
MCFG_CPU_ADD(I8048_TAG, I8048, XTAL_30MHz/6)
|
||||
MCFG_CPU_IO_MAP(floppy_io)
|
||||
|
||||
// video hardware
|
||||
MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
@ -942,13 +721,10 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state )
|
||||
MCFG_VIA6522_READPB_HANDLER(READ8(victor9k_state, via6_pb_r))
|
||||
MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(victor9k_state, via6_pa_w))
|
||||
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(victor9k_state, via6_pb_w))
|
||||
MCFG_VIA6522_CA2_HANDLER(WRITELINE(victor9k_state, drw_w))
|
||||
MCFG_VIA6522_CB2_HANDLER(WRITELINE(victor9k_state, erase_w))
|
||||
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(FDC_TAG, victor_9000_fdc_t, drw_w))
|
||||
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, victor_9000_fdc_t, erase_w))
|
||||
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(victor9k_state, via6_irq_w))
|
||||
|
||||
MCFG_FLOPPY_DRIVE_ADD(I8048_TAG":0", victor9k_floppies, "525qd", victor9k_state::floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD(I8048_TAG":1", victor9k_floppies, "525qd", victor9k_state::floppy_formats)
|
||||
|
||||
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL)
|
||||
MCFG_RS232_RXD_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, rxa_w))
|
||||
MCFG_RS232_DCD_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, dcda_w))
|
||||
@ -967,6 +743,14 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state )
|
||||
MCFG_VICTOR9K_KBRDY_HANDLER(WRITELINE(victor9k_state, kbrdy_w))
|
||||
MCFG_VICTOR9K_KBDATA_HANDLER(WRITELINE(victor9k_state, kbdata_w))
|
||||
|
||||
MCFG_DEVICE_ADD(FDC_TAG, VICTOR_9000_FDC, 0)
|
||||
MCFG_VICTOR_9000_FDC_DS0_CB(DEVWRITELINE(M6522_4_TAG, via6522_device, write_ca1))
|
||||
MCFG_VICTOR_9000_FDC_DS1_CB(DEVWRITELINE(M6522_4_TAG, via6522_device, write_cb1))
|
||||
MCFG_VICTOR_9000_FDC_RDY0_CB(DEVWRITELINE(M6522_5_TAG, via6522_device, write_ca2))
|
||||
MCFG_VICTOR_9000_FDC_RDY1_CB(DEVWRITELINE(M6522_5_TAG, via6522_device, write_cb2))
|
||||
MCFG_VICTOR_9000_FDC_BRDY_CB(DEVWRITELINE(M6522_5_TAG, via6522_device, write_ca1))
|
||||
MCFG_VICTOR_9000_FDC_GCRERR_CB(DEVWRITELINE(M6522_6_TAG, via6522_device, write_ca1))
|
||||
|
||||
// internal ram
|
||||
MCFG_RAM_ADD(RAM_TAG)
|
||||
MCFG_RAM_DEFAULT_SIZE("128K")
|
||||
@ -995,12 +779,6 @@ ROM_START( victor9k )
|
||||
ROM_SYSTEM_BIOS( 1, "univ", "Universal" )
|
||||
ROMX_LOAD( "v9000 univ. fe f3f7 13db.7j", 0x0000, 0x1000, CRC(25c7a59f) SHA1(8784e9aa7eb9439f81e18b8e223c94714e033911), ROM_BIOS(2) )
|
||||
ROMX_LOAD( "v9000 univ. ff f3f7 39fe.8j", 0x1000, 0x1000, CRC(496c7467) SHA1(eccf428f62ef94ab85f4a43ba59ae6a066244a66), ROM_BIOS(2) )
|
||||
|
||||
ROM_REGION( 0x400, I8048_TAG, 0)
|
||||
ROM_LOAD( "36080.5d", 0x000, 0x400, CRC(9bf49f7d) SHA1(b3a11bb65105db66ae1985b6f482aab6ea1da38b) )
|
||||
|
||||
ROM_REGION( 0x800, "gcr", 0 )
|
||||
ROM_LOAD( "100836-001.4k", 0x000, 0x800, CRC(adc601bd) SHA1(6eeff3d2063ae2d97452101aa61e27ef83a467e5) )
|
||||
ROM_END
|
||||
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
||||
|
||||
#include "bus/rs232/rs232.h"
|
||||
#include "cpu/i86/i86.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "formats/victor9k_dsk.h"
|
||||
#include "imagedev/floppy.h"
|
||||
#include "machine/ram.h"
|
||||
@ -28,11 +27,11 @@
|
||||
#include "machine/pic8259.h"
|
||||
#include "machine/z80dart.h"
|
||||
#include "machine/victor9kb.h"
|
||||
#include "machine/victor9k_fdc.h"
|
||||
#include "sound/hc55516.h"
|
||||
#include "video/mc6845.h"
|
||||
|
||||
#define I8088_TAG "8l"
|
||||
#define I8048_TAG "5d"
|
||||
#define I8253_TAG "13h"
|
||||
#define I8259A_TAG "7l"
|
||||
#define UPD7201_TAG "16e"
|
||||
@ -52,53 +51,45 @@
|
||||
#define RS232_B_TAG "rs232b"
|
||||
#define SCREEN_TAG "screen"
|
||||
#define VICTOR9K_KEYBOARD_TAG "victor9kb"
|
||||
#define FDC_TAG "fdc"
|
||||
|
||||
class victor9k_state : public driver_device
|
||||
{
|
||||
public:
|
||||
victor9k_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, I8088_TAG),
|
||||
m_fdc_cpu(*this, I8048_TAG),
|
||||
m_ieee488(*this, IEEE488_TAG),
|
||||
m_pic(*this, I8259A_TAG),
|
||||
m_upd7201(*this, UPD7201_TAG),
|
||||
m_ssda(*this, MC6852_TAG),
|
||||
m_via1(*this, M6522_1_TAG),
|
||||
m_via2(*this, M6522_2_TAG),
|
||||
m_via3(*this, M6522_3_TAG),
|
||||
m_via4(*this, M6522_4_TAG),
|
||||
m_via5(*this, M6522_5_TAG),
|
||||
m_via6(*this, M6522_6_TAG),
|
||||
m_cvsd(*this, HC55516_TAG),
|
||||
m_crtc(*this, HD46505S_TAG),
|
||||
m_ram(*this, RAM_TAG),
|
||||
m_floppy0(*this, I8048_TAG":0:525qd"),
|
||||
m_floppy1(*this, I8048_TAG":1:525qd"),
|
||||
m_kb(*this, VICTOR9K_KEYBOARD_TAG),
|
||||
m_rs232a(*this, RS232_A_TAG),
|
||||
m_rs232b(*this, RS232_B_TAG),
|
||||
m_video_ram(*this, "video_ram"),
|
||||
m_da(0),
|
||||
m_da0(0),
|
||||
m_da1(0),
|
||||
m_sel0(0),
|
||||
m_sel1(0),
|
||||
m_tach0(0),
|
||||
m_tach1(0),
|
||||
m_rdy0(0),
|
||||
m_rdy1(0),
|
||||
m_ds0(1),
|
||||
m_ds1(1),
|
||||
m_lms(0),
|
||||
m_brdy(1),
|
||||
m_sync(1),
|
||||
m_gcrerr(0),
|
||||
m_palette(*this, "palette")
|
||||
victor9k_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, I8088_TAG),
|
||||
m_ieee488(*this, IEEE488_TAG),
|
||||
m_pic(*this, I8259A_TAG),
|
||||
m_upd7201(*this, UPD7201_TAG),
|
||||
m_ssda(*this, MC6852_TAG),
|
||||
m_via1(*this, M6522_1_TAG),
|
||||
m_via2(*this, M6522_2_TAG),
|
||||
m_via3(*this, M6522_3_TAG),
|
||||
m_via4(*this, M6522_4_TAG),
|
||||
m_via5(*this, M6522_5_TAG),
|
||||
m_via6(*this, M6522_6_TAG),
|
||||
m_cvsd(*this, HC55516_TAG),
|
||||
m_crtc(*this, HD46505S_TAG),
|
||||
m_ram(*this, RAM_TAG),
|
||||
m_kb(*this, VICTOR9K_KEYBOARD_TAG),
|
||||
m_fdc(*this, FDC_TAG),
|
||||
m_rs232a(*this, RS232_A_TAG),
|
||||
m_rs232b(*this, RS232_B_TAG),
|
||||
m_palette(*this, "palette"),
|
||||
m_video_ram(*this, "video_ram"),
|
||||
m_brt(0),
|
||||
m_cont(0),
|
||||
m_via1_irq(CLEAR_LINE),
|
||||
m_via2_irq(CLEAR_LINE),
|
||||
m_via3_irq(CLEAR_LINE),
|
||||
m_via4_irq(CLEAR_LINE),
|
||||
m_via5_irq(CLEAR_LINE),
|
||||
m_via6_irq(CLEAR_LINE),
|
||||
m_ssda_irq(CLEAR_LINE)
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_fdc_cpu;
|
||||
required_device<ieee488_device> m_ieee488;
|
||||
required_device<pic8259_device> m_pic;
|
||||
required_device<upd7201_device> m_upd7201;
|
||||
@ -112,21 +103,15 @@ public:
|
||||
required_device<hc55516_device> m_cvsd;
|
||||
required_device<mc6845_device> m_crtc;
|
||||
required_device<ram_device> m_ram;
|
||||
required_device<floppy_image_device> m_floppy0;
|
||||
required_device<floppy_image_device> m_floppy1;
|
||||
required_device<victor9k_keyboard_device> m_kb;
|
||||
required_device<victor_9000_fdc_t> m_fdc;
|
||||
required_device<rs232_port_device> m_rs232a;
|
||||
required_device<rs232_port_device> m_rs232b;
|
||||
required_device<palette_device> m_palette;
|
||||
required_shared_ptr<UINT8> m_video_ram;
|
||||
|
||||
virtual void machine_start();
|
||||
|
||||
DECLARE_READ8_MEMBER( floppy_p1_r );
|
||||
DECLARE_READ8_MEMBER( floppy_p2_r );
|
||||
DECLARE_WRITE8_MEMBER( floppy_p2_w );
|
||||
DECLARE_READ8_MEMBER( tach0_r );
|
||||
DECLARE_READ8_MEMBER( tach1_r );
|
||||
DECLARE_WRITE8_MEMBER( da_w );
|
||||
|
||||
DECLARE_WRITE8_MEMBER( via1_pa_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( write_nfrd );
|
||||
DECLARE_WRITE_LINE_MEMBER( write_ndac );
|
||||
@ -155,8 +140,6 @@ public:
|
||||
DECLARE_READ8_MEMBER( via6_pb_r );
|
||||
DECLARE_WRITE8_MEMBER( via6_pa_w );
|
||||
DECLARE_WRITE8_MEMBER( via6_pb_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( drw_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( erase_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( kbrdy_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( kbdata_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( vert_w );
|
||||
@ -165,23 +148,7 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER( ssda_irq_w );
|
||||
MC6845_UPDATE_ROW( crtc_update_row );
|
||||
|
||||
DECLARE_FLOPPY_FORMATS( floppy_formats );
|
||||
|
||||
void ready0_cb(floppy_image_device *, int device);
|
||||
int load0_cb(floppy_image_device *device);
|
||||
void unload0_cb(floppy_image_device *device);
|
||||
void ready1_cb(floppy_image_device *, int device);
|
||||
int load1_cb(floppy_image_device *device);
|
||||
void unload1_cb(floppy_image_device *device);
|
||||
|
||||
enum
|
||||
{
|
||||
LED_A = 0,
|
||||
LED_B
|
||||
};
|
||||
|
||||
/* video state */
|
||||
required_shared_ptr<UINT8> m_video_ram;
|
||||
int m_brt;
|
||||
int m_cont;
|
||||
|
||||
@ -194,30 +161,8 @@ public:
|
||||
int m_via6_irq;
|
||||
int m_ssda_irq;
|
||||
|
||||
/* floppy state */
|
||||
UINT8 m_da;
|
||||
UINT8 m_da0;
|
||||
UINT8 m_da1;
|
||||
int m_sel0;
|
||||
int m_sel1;
|
||||
int m_tach0;
|
||||
int m_tach1;
|
||||
int m_rdy0;
|
||||
int m_rdy1;
|
||||
int m_ds0;
|
||||
int m_ds1;
|
||||
UINT8 m_lms; /* motor speed */
|
||||
int m_st[2]; /* stepper phase */
|
||||
int m_stp[2]; /* stepper enable */
|
||||
int m_drive; /* selected drive */
|
||||
int m_side; /* selected side */
|
||||
int m_brdy;
|
||||
int m_sync;
|
||||
int m_gcrerr;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(mux_serial_b_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(mux_serial_a_w);
|
||||
required_device<palette_device> m_palette;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
400
src/mess/machine/victor9k_fdc.c
Normal file
400
src/mess/machine/victor9k_fdc.c
Normal file
@ -0,0 +1,400 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
/**********************************************************************
|
||||
|
||||
Victor 9000 floppy disk controller emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
/*
|
||||
|
||||
TODO:
|
||||
|
||||
- everything
|
||||
|
||||
*/
|
||||
|
||||
#include "victor9k_fdc.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACROS / CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
#define LOG 0
|
||||
|
||||
#define I8048_TAG "5d"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type VICTOR_9000_FDC = &device_creator<victor_9000_fdc_t>;
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( victor_9000_fdc )
|
||||
//-------------------------------------------------
|
||||
|
||||
ROM_START( victor_9000_fdc )
|
||||
ROM_REGION( 0x400, I8048_TAG, 0)
|
||||
ROM_LOAD( "36080.5d", 0x000, 0x400, CRC(9bf49f7d) SHA1(b3a11bb65105db66ae1985b6f482aab6ea1da38b) )
|
||||
|
||||
ROM_REGION( 0x800, "gcr", 0 )
|
||||
ROM_LOAD( "100836-001.4k", 0x000, 0x800, CRC(adc601bd) SHA1(6eeff3d2063ae2d97452101aa61e27ef83a467e5) )
|
||||
ROM_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rom_region - device-specific ROM region
|
||||
//-------------------------------------------------
|
||||
|
||||
const rom_entry *victor_9000_fdc_t::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME( victor_9000_fdc );
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ADDRESS_MAP( floppy_io )
|
||||
//-------------------------------------------------
|
||||
|
||||
static ADDRESS_MAP_START( floppy_io, AS_IO, 8, victor_9000_fdc_t )
|
||||
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(floppy_p1_r) AM_WRITENOP
|
||||
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(floppy_p2_r, floppy_p2_w)
|
||||
AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(tach0_r)
|
||||
AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(tach1_r)
|
||||
AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_WRITE(da_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// SLOT_INTERFACE( victor9k_floppies )
|
||||
//-------------------------------------------------
|
||||
|
||||
void victor_9000_fdc_t::ready0_cb(floppy_image_device *device, int state)
|
||||
{
|
||||
m_rdy0 = state;
|
||||
|
||||
m_rdy0_cb(state);
|
||||
}
|
||||
|
||||
int victor_9000_fdc_t::load0_cb(floppy_image_device *device)
|
||||
{
|
||||
m_ds0 = 0;
|
||||
|
||||
m_ds0_cb(0);
|
||||
|
||||
return IMAGE_INIT_PASS;
|
||||
}
|
||||
|
||||
void victor_9000_fdc_t::unload0_cb(floppy_image_device *device)
|
||||
{
|
||||
m_ds0 = 1;
|
||||
|
||||
m_ds0_cb(1);
|
||||
}
|
||||
|
||||
void victor_9000_fdc_t::ready1_cb(floppy_image_device *device, int state)
|
||||
{
|
||||
m_rdy1 = state;
|
||||
|
||||
m_rdy1_cb(state);
|
||||
}
|
||||
|
||||
int victor_9000_fdc_t::load1_cb(floppy_image_device *device)
|
||||
{
|
||||
m_ds1 = 0;
|
||||
|
||||
m_ds1_cb(0);
|
||||
|
||||
return IMAGE_INIT_PASS;
|
||||
}
|
||||
|
||||
void victor_9000_fdc_t::unload1_cb(floppy_image_device *device)
|
||||
{
|
||||
m_ds1 = 1;
|
||||
|
||||
m_ds1_cb(1);
|
||||
}
|
||||
|
||||
static SLOT_INTERFACE_START( victor9k_floppies )
|
||||
SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
FLOPPY_FORMATS_MEMBER( victor_9000_fdc_t::floppy_formats )
|
||||
FLOPPY_VICTOR_9000_FORMAT
|
||||
FLOPPY_FORMATS_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// MACHINE_CONFIG_FRAGMENT( victor_9000_fdc )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( victor_9000_fdc )
|
||||
MCFG_CPU_ADD(I8048_TAG, I8048, XTAL_30MHz/6)
|
||||
MCFG_CPU_IO_MAP(floppy_io)
|
||||
|
||||
MCFG_FLOPPY_DRIVE_ADD(I8048_TAG":0", victor9k_floppies, "525qd", victor_9000_fdc_t::floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD(I8048_TAG":1", victor9k_floppies, "525qd", victor_9000_fdc_t::floppy_formats)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// machine_config_additions - device-specific
|
||||
// machine configurations
|
||||
//-------------------------------------------------
|
||||
|
||||
machine_config_constructor victor_9000_fdc_t::device_mconfig_additions() const
|
||||
{
|
||||
return MACHINE_CONFIG_NAME( victor_9000_fdc );
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// victor_9000_fdc_t - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
victor_9000_fdc_t::victor_9000_fdc_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, VICTOR_9000_FDC, "Victor 9000 FDC", tag, owner, clock, "victor9k_fdc", __FILE__),
|
||||
m_ds0_cb(*this),
|
||||
m_ds1_cb(*this),
|
||||
m_rdy0_cb(*this),
|
||||
m_rdy1_cb(*this),
|
||||
m_brdy_cb(*this),
|
||||
m_gcrerr_cb(*this),
|
||||
m_maincpu(*this, I8048_TAG),
|
||||
m_floppy0(*this, I8048_TAG":0:525qd"),
|
||||
m_floppy1(*this, I8048_TAG":1:525qd"),
|
||||
m_gcr_rom(*this, "gcr"),
|
||||
m_da(0),
|
||||
m_da0(0),
|
||||
m_da1(0),
|
||||
m_sel0(0),
|
||||
m_sel1(0),
|
||||
m_tach0(0),
|
||||
m_tach1(0),
|
||||
m_rdy0(0),
|
||||
m_rdy1(0),
|
||||
m_ds0(1),
|
||||
m_ds1(1),
|
||||
m_lms(0),
|
||||
m_st0(0),
|
||||
m_st1(0),
|
||||
m_stp0(0),
|
||||
m_stp1(0),
|
||||
m_drive(0),
|
||||
m_side(0),
|
||||
m_brdy(1),
|
||||
m_sync(1),
|
||||
m_gcrerr(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void victor_9000_fdc_t::device_start()
|
||||
{
|
||||
// state saving
|
||||
save_item(NAME(m_da));
|
||||
save_item(NAME(m_da0));
|
||||
save_item(NAME(m_da1));
|
||||
save_item(NAME(m_sel0));
|
||||
save_item(NAME(m_sel1));
|
||||
save_item(NAME(m_tach0));
|
||||
save_item(NAME(m_tach1));
|
||||
save_item(NAME(m_rdy0));
|
||||
save_item(NAME(m_rdy1));
|
||||
save_item(NAME(m_ds0));
|
||||
save_item(NAME(m_ds1));
|
||||
save_item(NAME(m_lms));
|
||||
save_item(NAME(m_st0));
|
||||
save_item(NAME(m_st1));
|
||||
save_item(NAME(m_stp0));
|
||||
save_item(NAME(m_stp1));
|
||||
save_item(NAME(m_drive));
|
||||
save_item(NAME(m_side));
|
||||
save_item(NAME(m_brdy));
|
||||
save_item(NAME(m_sync));
|
||||
save_item(NAME(m_gcrerr));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void victor_9000_fdc_t::device_reset()
|
||||
{
|
||||
// resolve callbacks
|
||||
m_ds0_cb.resolve_safe();
|
||||
m_ds1_cb.resolve_safe();
|
||||
m_rdy0_cb.resolve_safe();
|
||||
m_rdy1_cb.resolve_safe();
|
||||
m_brdy_cb.resolve_safe();
|
||||
m_gcrerr_cb.resolve_safe();
|
||||
|
||||
// set floppy callbacks
|
||||
m_floppy0->setup_ready_cb(floppy_image_device::ready_cb(FUNC(victor_9000_fdc_t::ready0_cb), this));
|
||||
m_floppy0->setup_load_cb(floppy_image_device::load_cb(FUNC(victor_9000_fdc_t::load0_cb), this));
|
||||
m_floppy0->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor_9000_fdc_t::unload0_cb), this));
|
||||
m_floppy1->setup_ready_cb(floppy_image_device::ready_cb(FUNC(victor_9000_fdc_t::ready1_cb), this));
|
||||
m_floppy1->setup_load_cb(floppy_image_device::load_cb(FUNC(victor_9000_fdc_t::load1_cb), this));
|
||||
m_floppy1->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor_9000_fdc_t::unload1_cb), this));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_timer - handler timer events
|
||||
//-------------------------------------------------
|
||||
|
||||
void victor_9000_fdc_t::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// floppy_p1_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( victor_9000_fdc_t::floppy_p1_r )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
|
||||
0 L0MS0
|
||||
1 L0MS1
|
||||
2 L0MS2
|
||||
3 L0MS3
|
||||
4 L1MS0
|
||||
5 L1MS1
|
||||
6 L1MS2
|
||||
7 L1MS3
|
||||
|
||||
*/
|
||||
|
||||
return m_lms;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// floppy_p2_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( victor_9000_fdc_t::floppy_p2_r )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
|
||||
0
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6 RDY0
|
||||
7 RDY1
|
||||
|
||||
*/
|
||||
|
||||
UINT8 data = 0;
|
||||
|
||||
data |= m_rdy0 << 6;
|
||||
data |= m_rdy1 << 7;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// floppy_p2_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER( victor_9000_fdc_t::floppy_p2_w )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
|
||||
0 START0
|
||||
1 STOP0
|
||||
2 START1
|
||||
3 STOP1
|
||||
4 SEL1
|
||||
5 SEL0
|
||||
6
|
||||
7
|
||||
|
||||
*/
|
||||
|
||||
if (BIT(data, 0)) m_floppy0->mon_w(0);
|
||||
if (BIT(data, 1)) m_floppy0->mon_w(1);
|
||||
if (BIT(data, 2)) m_floppy1->mon_w(0);
|
||||
if (BIT(data, 3)) m_floppy1->mon_w(1);
|
||||
|
||||
int sel0 = BIT(data, 5);
|
||||
|
||||
if (m_sel0 && !sel0)
|
||||
{
|
||||
m_da0 = m_da;
|
||||
//m_floppy0->set_rpm();
|
||||
}
|
||||
|
||||
m_sel0 = sel0;
|
||||
|
||||
int sel1 = BIT(data, 4);
|
||||
|
||||
if (m_sel1 && !sel1)
|
||||
{
|
||||
m_da1 = m_da;
|
||||
//m_floppy1->set_rpm();
|
||||
}
|
||||
|
||||
m_sel1 = sel1;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// tach0_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( victor_9000_fdc_t::tach0_r )
|
||||
{
|
||||
return m_tach0;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// tach1_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( victor_9000_fdc_t::tach1_r )
|
||||
{
|
||||
return m_tach1;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// da_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER( victor_9000_fdc_t::da_w )
|
||||
{
|
||||
m_da = data;
|
||||
}
|
168
src/mess/machine/victor9k_fdc.h
Normal file
168
src/mess/machine/victor9k_fdc.h
Normal file
@ -0,0 +1,168 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
/**********************************************************************
|
||||
|
||||
Victor 9000 floppy disk controller emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __VICTOR_9000_FDC__
|
||||
#define __VICTOR_9000_FDC__
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "formats/victor9k_dsk.h"
|
||||
#include "imagedev/floppy.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_VICTOR_9000_FDC_DS0_CB(_write) \
|
||||
devcb = &victor_9000_fdc_t::set_ds0_wr_callback(*device, DEVCB_##_write);
|
||||
|
||||
#define MCFG_VICTOR_9000_FDC_DS1_CB(_write) \
|
||||
devcb = &victor_9000_fdc_t::set_ds1_wr_callback(*device, DEVCB_##_write);
|
||||
|
||||
#define MCFG_VICTOR_9000_FDC_RDY0_CB(_write) \
|
||||
devcb = &victor_9000_fdc_t::set_rdy0_wr_callback(*device, DEVCB_##_write);
|
||||
|
||||
#define MCFG_VICTOR_9000_FDC_RDY1_CB(_write) \
|
||||
devcb = &victor_9000_fdc_t::set_rdy1_wr_callback(*device, DEVCB_##_write);
|
||||
|
||||
#define MCFG_VICTOR_9000_FDC_BRDY_CB(_write) \
|
||||
devcb = &victor_9000_fdc_t::set_brdy_wr_callback(*device, DEVCB_##_write);
|
||||
|
||||
#define MCFG_VICTOR_9000_FDC_GCRERR_CB(_write) \
|
||||
devcb = &victor_9000_fdc_t::set_gcrerr_wr_callback(*device, DEVCB_##_write);
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> victor_9000_fdc_t
|
||||
|
||||
class victor_9000_fdc_t : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
victor_9000_fdc_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
template<class _Object> static devcb_base &set_ds0_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_ds0_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_ds1_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_ds1_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_rdy0_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_rdy0_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_rdy1_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_rdy1_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_brdy_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_brdy_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_gcrerr_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_gcrerr_cb.set_callback(object); }
|
||||
|
||||
void set_floppy(floppy_image_device *floppy0, floppy_image_device *floppy1);
|
||||
|
||||
void l0ms_w(UINT8 data) { m_lms = (m_lms & 0xf0) | (data & 0x0f); }
|
||||
void l1ms_w(UINT8 data) { m_lms = (data << 4) | (m_lms & 0x0f); }
|
||||
void st0_w(UINT8 data) { m_st0 = data; }
|
||||
void st1_w(UINT8 data) { m_st1 = data; }
|
||||
DECLARE_WRITE_LINE_MEMBER( side_select_w ) { m_side = state; }
|
||||
DECLARE_WRITE_LINE_MEMBER( drive_select_w ) { m_drive = state; }
|
||||
DECLARE_WRITE_LINE_MEMBER( stp0_w ) { m_stp0 = state; }
|
||||
DECLARE_WRITE_LINE_MEMBER( stp1_w ) { m_stp1 = state; }
|
||||
DECLARE_WRITE_LINE_MEMBER( drw_w ) { }
|
||||
DECLARE_WRITE_LINE_MEMBER( erase_w ) { }
|
||||
DECLARE_READ_LINE_MEMBER( trk0d0_r ) { return m_floppy0->trk00_r(); }
|
||||
DECLARE_READ_LINE_MEMBER( trk0d1_r ) { return m_floppy1->trk00_r(); }
|
||||
DECLARE_READ_LINE_MEMBER( wps_r ) { return m_drive ? m_floppy1->wpt_r() : m_floppy0->wpt_r(); }
|
||||
DECLARE_READ_LINE_MEMBER( sync_r ) { return 1; }
|
||||
DECLARE_WRITE_LINE_MEMBER( led0a_w ) { output_set_led_value(LED_A, state); }
|
||||
DECLARE_WRITE_LINE_MEMBER( led1a_w ) { output_set_led_value(LED_B, state); }
|
||||
DECLARE_READ_LINE_MEMBER( rdy0_r ) { return m_rdy0; }
|
||||
DECLARE_READ_LINE_MEMBER( rdy1_r ) { return m_rdy1; }
|
||||
DECLARE_READ_LINE_MEMBER( ds0_r ) { return m_ds0; }
|
||||
DECLARE_READ_LINE_MEMBER( ds1_r ) { return m_ds1; }
|
||||
DECLARE_READ_LINE_MEMBER( single_double_sided_r ) { return m_drive ? m_floppy1->twosid_r() : m_floppy0->twosid_r(); }
|
||||
DECLARE_WRITE_LINE_MEMBER( screset_w ) { if (!state) m_maincpu->reset(); }
|
||||
|
||||
DECLARE_FLOPPY_FORMATS( floppy_formats );
|
||||
|
||||
DECLARE_READ8_MEMBER( floppy_p1_r );
|
||||
DECLARE_READ8_MEMBER( floppy_p2_r );
|
||||
DECLARE_WRITE8_MEMBER( floppy_p2_w );
|
||||
DECLARE_READ8_MEMBER( tach0_r );
|
||||
DECLARE_READ8_MEMBER( tach1_r );
|
||||
DECLARE_WRITE8_MEMBER( da_w );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||
|
||||
// optional information overrides
|
||||
virtual const rom_entry *device_rom_region() const;
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
|
||||
private:
|
||||
enum
|
||||
{
|
||||
LED_A = 0,
|
||||
LED_B
|
||||
};
|
||||
|
||||
devcb_write_line m_ds0_cb;
|
||||
devcb_write_line m_ds1_cb;
|
||||
devcb_write_line m_rdy0_cb;
|
||||
devcb_write_line m_rdy1_cb;
|
||||
devcb_write_line m_brdy_cb;
|
||||
devcb_write_line m_gcrerr_cb;
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<floppy_image_device> m_floppy0;
|
||||
required_device<floppy_image_device> m_floppy1;
|
||||
required_memory_region m_gcr_rom;
|
||||
|
||||
void ready0_cb(floppy_image_device *, int device);
|
||||
int load0_cb(floppy_image_device *device);
|
||||
void unload0_cb(floppy_image_device *device);
|
||||
void ready1_cb(floppy_image_device *, int device);
|
||||
int load1_cb(floppy_image_device *device);
|
||||
void unload1_cb(floppy_image_device *device);
|
||||
|
||||
/* floppy state */
|
||||
UINT8 m_da;
|
||||
UINT8 m_da0;
|
||||
UINT8 m_da1;
|
||||
int m_sel0;
|
||||
int m_sel1;
|
||||
int m_tach0;
|
||||
int m_tach1;
|
||||
int m_rdy0;
|
||||
int m_rdy1;
|
||||
int m_ds0;
|
||||
int m_ds1;
|
||||
UINT8 m_lms; /* motor speed */
|
||||
int m_st0; /* stepper phase */
|
||||
int m_st1; /* stepper phase */
|
||||
int m_stp0; /* stepper enable */
|
||||
int m_stp1; /* stepper enable */
|
||||
int m_drive; /* selected drive */
|
||||
int m_side; /* selected side */
|
||||
int m_brdy;
|
||||
int m_sync;
|
||||
int m_gcrerr;
|
||||
};
|
||||
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type VICTOR_9000_FDC;
|
||||
|
||||
|
||||
|
||||
#endif
|
@ -959,7 +959,7 @@ $(MESSOBJ)/act.a: \
|
||||
$(MESS_DRIVERS)/apricotf.o \
|
||||
$(MESS_DRIVERS)/apricotp.o \
|
||||
$(MESS_MACHINE)/apricotkb.o \
|
||||
$(MESS_DRIVERS)/victor9k.o $(MESS_MACHINE)/victor9kb.o \
|
||||
$(MESS_DRIVERS)/victor9k.o $(MESS_MACHINE)/victor9kb.o $(MESS_MACHINE)/victor9k_fdc.o \
|
||||
|
||||
$(MESSOBJ)/adc.a: \
|
||||
$(MESS_DRIVERS)/super6.o \
|
||||
|
Loading…
Reference in New Issue
Block a user