mirror of
https://github.com/holub/mame
synced 2025-06-15 00:47:03 +03:00
hec2mdhrx: updated to use the new wd fdc.
This commit is contained in:
parent
67f292241d
commit
ada45f655e
@ -257,6 +257,8 @@ project "formats"
|
|||||||
MAME_DIR .. "src/lib/formats/hect_dsk.h",
|
MAME_DIR .. "src/lib/formats/hect_dsk.h",
|
||||||
MAME_DIR .. "src/lib/formats/hect_tap.c",
|
MAME_DIR .. "src/lib/formats/hect_tap.c",
|
||||||
MAME_DIR .. "src/lib/formats/hect_tap.h",
|
MAME_DIR .. "src/lib/formats/hect_tap.h",
|
||||||
|
MAME_DIR .. "src/lib/formats/hector_minidisc.c",
|
||||||
|
MAME_DIR .. "src/lib/formats/hector_minidisc.h",
|
||||||
MAME_DIR .. "src/lib/formats/iq151_dsk.c",
|
MAME_DIR .. "src/lib/formats/iq151_dsk.c",
|
||||||
MAME_DIR .. "src/lib/formats/iq151_dsk.h",
|
MAME_DIR .. "src/lib/formats/iq151_dsk.h",
|
||||||
MAME_DIR .. "src/lib/formats/imd_dsk.c",
|
MAME_DIR .. "src/lib/formats/imd_dsk.c",
|
||||||
|
@ -93,38 +93,6 @@ static FLOPPY_CONSTRUCT(hector_disc2_dsk800_construct)
|
|||||||
return basicdsk_construct(floppy, &geometry);
|
return basicdsk_construct(floppy, &geometry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For the 720Ko disk 3 1/2 inch disk for the mini disc unit !!:
|
|
||||||
512 bytes per sectors,
|
|
||||||
9 sector per track,
|
|
||||||
From sector =1 to sector 9,
|
|
||||||
80 tracks,
|
|
||||||
2 Head
|
|
||||||
This format can be extract from a real disc with anadisk (*.IMG format rename in *.HE7).
|
|
||||||
*/
|
|
||||||
|
|
||||||
static FLOPPY_IDENTIFY(hector_minidisc_dsk_identify)
|
|
||||||
{
|
|
||||||
*vote = (floppy_image_size(floppy) == (2*70*9*512)) ? 100 : 0;
|
|
||||||
return FLOPPY_ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static FLOPPY_CONSTRUCT(hector_minidisc_dsk_construct)
|
|
||||||
{
|
|
||||||
struct basicdsk_geometry geometry;
|
|
||||||
memset(&geometry, 0, sizeof(geometry)); // 635904 octets
|
|
||||||
geometry.heads = 2;//2
|
|
||||||
geometry.first_sector_id = 1;
|
|
||||||
geometry.sector_length = 512;
|
|
||||||
geometry.tracks = 70;//69
|
|
||||||
geometry.sectors = 9;
|
|
||||||
return basicdsk_construct(floppy, &geometry);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Specific for the mini disc unit */
|
|
||||||
LEGACY_FLOPPY_OPTIONS_START( hector_minidisc )
|
|
||||||
LEGACY_FLOPPY_OPTION( hector_dsk, "HMD", "hector mini disc floppy disk image 360Ko", hector_minidisc_dsk_identify, hector_minidisc_dsk_construct, NULL, NULL)
|
|
||||||
LEGACY_FLOPPY_OPTIONS_END
|
|
||||||
|
|
||||||
LEGACY_FLOPPY_OPTIONS_START( hector_disc2 )
|
LEGACY_FLOPPY_OPTIONS_START( hector_disc2 )
|
||||||
LEGACY_FLOPPY_OPTION( hector_dsk, "HE2", "hector disc2 floppy disk image 200K", hector_disc2_dsk200_identify, hector_disc2_dsk200_construct, NULL, NULL)
|
LEGACY_FLOPPY_OPTION( hector_dsk, "HE2", "hector disc2 floppy disk image 200K", hector_disc2_dsk200_identify, hector_disc2_dsk200_construct, NULL, NULL)
|
||||||
LEGACY_FLOPPY_OPTION( hector_dsk, "HE7", "hector disc2 floppy disk image 720K", hector_disc2_dsk720_identify, hector_disc2_dsk720_construct, NULL, NULL)
|
LEGACY_FLOPPY_OPTION( hector_dsk, "HE7", "hector disc2 floppy disk image 720K", hector_disc2_dsk720_identify, hector_disc2_dsk720_construct, NULL, NULL)
|
||||||
|
41
src/lib/formats/hector_minidisc.c
Normal file
41
src/lib/formats/hector_minidisc.c
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
// license:GPL-2.0+
|
||||||
|
// copyright-holders:Dirk Best
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Hector Minidisc
|
||||||
|
|
||||||
|
Disk image format
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "hector_minidisc.h"
|
||||||
|
|
||||||
|
hmd_format::hmd_format() : upd765_format(formats)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *hmd_format::name() const
|
||||||
|
{
|
||||||
|
return "hector_minidisc";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *hmd_format::description() const
|
||||||
|
{
|
||||||
|
return "Hector Minidisc disk image";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *hmd_format::extensions() const
|
||||||
|
{
|
||||||
|
return "hmd";
|
||||||
|
}
|
||||||
|
|
||||||
|
const hmd_format::format hmd_format::formats[] =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
floppy_image::FF_35, floppy_image::DSDD, floppy_image::MFM,
|
||||||
|
2000, 9, 70, 2, 512, {}, 1, {}, 80, 50, 22, 54
|
||||||
|
},
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
const floppy_format_type FLOPPY_HMD_FORMAT = &floppy_image_format_creator<hmd_format>;
|
33
src/lib/formats/hector_minidisc.h
Normal file
33
src/lib/formats/hector_minidisc.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// license:GPL-2.0+
|
||||||
|
// copyright-holders:Dirk Best
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Hector Minidisc
|
||||||
|
|
||||||
|
Disk image format
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef __HMD_DSK_H__
|
||||||
|
#define __HMD_DSK_H__
|
||||||
|
|
||||||
|
#include "upd765_dsk.h"
|
||||||
|
|
||||||
|
class hmd_format : public upd765_format
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
hmd_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_HMD_FORMAT;
|
||||||
|
|
||||||
|
#endif // __HMD_DSK_H__
|
@ -81,6 +81,7 @@
|
|||||||
#include "machine/upd765.h" /* for floppy disc controller */
|
#include "machine/upd765.h" /* for floppy disc controller */
|
||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
#include "formats/hect_dsk.h"
|
#include "formats/hect_dsk.h"
|
||||||
|
#include "formats/hector_minidisc.h"
|
||||||
#include "includes/hec2hrp.h"
|
#include "includes/hec2hrp.h"
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@ -176,7 +177,8 @@ static ADDRESS_MAP_START( hec2mdhrx_io , AS_IO, 8, hec2hrp_state )
|
|||||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||||
|
|
||||||
// Minidisc commands and changing the rom page !*/
|
// Minidisc commands and changing the rom page !*/
|
||||||
AM_RANGE(0x000,0x0EF) AM_READWRITE(hector_179x_register_r,hector_179x_register_w)/* 179x registers*/
|
AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("wd179x", fd1793_t, read, write)
|
||||||
|
AM_RANGE(0x08, 0x08) AM_WRITE(minidisc_control_w)
|
||||||
AM_RANGE(0x0f0,0x0ff) AM_READWRITE(hector_io_8255_r, hector_io_8255_w )
|
AM_RANGE(0x0f0,0x0ff) AM_READWRITE(hector_io_8255_r, hector_io_8255_w )
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
@ -356,7 +358,6 @@ MACHINE_START_MEMBER(hec2hrp_state,hec2mdhrx)
|
|||||||
m_hector_videoram.set_target(m_hector_videoram_hrx,m_hector_videoram.bytes());
|
m_hector_videoram.set_target(m_hector_videoram_hrx,m_hector_videoram.bytes());
|
||||||
|
|
||||||
hector_init();
|
hector_init();
|
||||||
hector_minidisc_init();
|
|
||||||
}
|
}
|
||||||
MACHINE_RESET_MEMBER(hec2hrp_state,hec2hrx)
|
MACHINE_RESET_MEMBER(hec2hrp_state,hec2hrx)
|
||||||
{
|
{
|
||||||
@ -385,12 +386,14 @@ MACHINE_RESET_MEMBER(hec2hrp_state,hec2mdhrx)
|
|||||||
/********* mini disque interface ***************************/
|
/********* mini disque interface ***************************/
|
||||||
/***********************************************************/
|
/***********************************************************/
|
||||||
|
|
||||||
const floppy_interface minidisc_floppy_interface =
|
FLOPPY_FORMATS_MEMBER( hec2hrp_state::minidisc_formats )
|
||||||
{
|
FLOPPY_HMD_FORMAT
|
||||||
FLOPPY_STANDARD_3_5_DSDD,
|
FLOPPY_FORMATS_END
|
||||||
LEGACY_FLOPPY_OPTIONS_NAME(hector_minidisc),
|
|
||||||
NULL
|
static SLOT_INTERFACE_START( minidisc_floppies )
|
||||||
};
|
SLOT_INTERFACE("dd", FLOPPY_35_DD)
|
||||||
|
SLOT_INTERFACE_END
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
static MACHINE_CONFIG_START( hec2hr, hec2hrp_state )
|
static MACHINE_CONFIG_START( hec2hr, hec2hrp_state )
|
||||||
@ -567,10 +570,9 @@ static MACHINE_CONFIG_START( hec2mdhrx, hec2hrp_state )
|
|||||||
MCFG_MACHINE_START_OVERRIDE(hec2hrp_state,hec2mdhrx)
|
MCFG_MACHINE_START_OVERRIDE(hec2hrp_state,hec2mdhrx)
|
||||||
|
|
||||||
/* Mini Disc */
|
/* Mini Disc */
|
||||||
MCFG_DEVICE_ADD("wd179x", FD1793, 0)
|
MCFG_FD1793x_ADD("wd179x", XTAL_1MHz)
|
||||||
MCFG_WD17XX_DEFAULT_DRIVE1_TAGS
|
|
||||||
|
|
||||||
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, minidisc_floppy_interface)
|
MCFG_FLOPPY_DRIVE_ADD("wd179x:0", minidisc_floppies, "dd", hec2hrp_state::minidisc_formats)
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MCFG_SCREEN_ADD("screen", RASTER)
|
MCFG_SCREEN_ADD("screen", RASTER)
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "machine/upd765.h"
|
#include "machine/upd765.h"
|
||||||
#include "machine/wd17xx.h"
|
#include "machine/wd_fdc.h"
|
||||||
#include "imagedev/flopdrv.h"
|
#include "imagedev/flopdrv.h"
|
||||||
#include "imagedev/cassette.h"
|
#include "imagedev/cassette.h"
|
||||||
#include "sound/sn76477.h" /* for sn sound*/
|
#include "sound/sn76477.h" /* for sn sound*/
|
||||||
@ -83,7 +83,12 @@ public:
|
|||||||
m_palette(*this, "palette"),
|
m_palette(*this, "palette"),
|
||||||
m_videoram(*this,"videoram"),
|
m_videoram(*this,"videoram"),
|
||||||
m_hector_videoram(*this,"hector_videoram") ,
|
m_hector_videoram(*this,"hector_videoram") ,
|
||||||
m_keyboard(*this, "KEY") { }
|
m_keyboard(*this, "KEY"),
|
||||||
|
m_minidisc_fdc(*this, "wd179x"),
|
||||||
|
m_floppy0(*this, "wd179x:0")
|
||||||
|
{}
|
||||||
|
|
||||||
|
DECLARE_FLOPPY_FORMATS(minidisc_formats);
|
||||||
|
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
optional_device<cpu_device> m_disc2cpu;
|
optional_device<cpu_device> m_disc2cpu;
|
||||||
@ -94,6 +99,9 @@ public:
|
|||||||
optional_shared_ptr<UINT8> m_hector_videoram;
|
optional_shared_ptr<UINT8> m_hector_videoram;
|
||||||
required_ioport_array<9> m_keyboard;
|
required_ioport_array<9> m_keyboard;
|
||||||
|
|
||||||
|
optional_device<fd1793_t> m_minidisc_fdc;
|
||||||
|
optional_device<floppy_connector> m_floppy0;
|
||||||
|
|
||||||
UINT8 m_hector_flag_hr;
|
UINT8 m_hector_flag_hr;
|
||||||
UINT8 m_hector_flag_80c;
|
UINT8 m_hector_flag_80c;
|
||||||
UINT8 m_hector_color[4];
|
UINT8 m_hector_color[4];
|
||||||
@ -131,8 +139,9 @@ public:
|
|||||||
int m_hector_flag_result;
|
int m_hector_flag_result;
|
||||||
int m_print;
|
int m_print;
|
||||||
UINT8 m_hector_videoram_hrx[0x04000];
|
UINT8 m_hector_videoram_hrx[0x04000];
|
||||||
DECLARE_READ8_MEMBER(hector_179x_register_r);
|
|
||||||
DECLARE_WRITE8_MEMBER(hector_179x_register_w);
|
DECLARE_WRITE8_MEMBER(minidisc_control_w);
|
||||||
|
|
||||||
DECLARE_WRITE8_MEMBER(hector_switch_bank_w);
|
DECLARE_WRITE8_MEMBER(hector_switch_bank_w);
|
||||||
DECLARE_WRITE8_MEMBER(hector_keyboard_w);
|
DECLARE_WRITE8_MEMBER(hector_keyboard_w);
|
||||||
DECLARE_READ8_MEMBER(hector_keyboard_r);
|
DECLARE_READ8_MEMBER(hector_keyboard_r);
|
||||||
@ -162,7 +171,6 @@ public:
|
|||||||
int isHectorWithMiniDisc();
|
int isHectorWithMiniDisc();
|
||||||
int isHectorHR();
|
int isHectorHR();
|
||||||
int isHectoreXtend();
|
int isHectoreXtend();
|
||||||
void hector_minidisc_init();
|
|
||||||
void Mise_A_Jour_Etat(int Adresse, int Value );
|
void Mise_A_Jour_Etat(int Adresse, int Value );
|
||||||
void Init_Value_SN76477_Hector();
|
void Init_Value_SN76477_Hector();
|
||||||
void Update_Sound(address_space &space, UINT8 data);
|
void Update_Sound(address_space &space, UINT8 data);
|
||||||
@ -188,6 +196,4 @@ public:
|
|||||||
void hector_disc2_reset();
|
void hector_disc2_reset();
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const floppy_interface minidisc_floppy_interface;
|
|
||||||
|
|
||||||
MACHINE_CONFIG_EXTERN( hector_audio );
|
MACHINE_CONFIG_EXTERN( hector_audio );
|
||||||
|
@ -102,85 +102,25 @@ TIMER_CALLBACK_MEMBER(hec2hrp_state::Callback_CK)
|
|||||||
m_CK_signal++;
|
m_CK_signal++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void hec2hrp_state::hector_minidisc_init()
|
WRITE8_MEMBER( hec2hrp_state::minidisc_control_w )
|
||||||
{
|
{
|
||||||
fd1793_device *fdc = machine().device<fd1793_device>("wd179x");
|
floppy_image_device *floppy = NULL;
|
||||||
//set density
|
|
||||||
fdc->dden_w(1);// density select => always 1 (0 ?a plante !)
|
|
||||||
|
|
||||||
/* FDC Motor Control - Bit 0/1 defines the state of the FDD 0/1 motor */
|
if (BIT(data, 6)) floppy = m_floppy0->get_device();
|
||||||
floppy_get_device(machine(), 0)->floppy_mon_w( 0); // Moteur floppy A:
|
// bit 7 = drive 2?
|
||||||
//floppy_get_device(machine(), 1)->floppy_mon_w(BIT(data, 7)); // Moteur floppy B:, not implanted on the real machine
|
|
||||||
|
|
||||||
//Set the drive ready !
|
m_minidisc_fdc->set_floppy(floppy);
|
||||||
floppy_get_device(machine(), 0)->floppy_drive_set_ready_state(FLOPPY_DRIVE_READY, 0);// Disc 0 ready !
|
|
||||||
|
|
||||||
}
|
if (floppy)
|
||||||
|
|
||||||
READ8_MEMBER(hec2hrp_state::hector_179x_register_r)
|
|
||||||
{
|
|
||||||
int data=0;
|
|
||||||
fd1793_device *fdc = machine().device<fd1793_device>("wd179x");
|
|
||||||
|
|
||||||
switch (offset & 0x0ff)
|
|
||||||
{
|
{
|
||||||
/* minidisc floppy disc interface */
|
// don't know where the motor on signal is
|
||||||
case 0x04:
|
floppy->mon_w(0);
|
||||||
data = fdc->status_r(space, 0);
|
floppy->ss_w(BIT(data, 4));
|
||||||
break;
|
|
||||||
case 0x05:
|
|
||||||
data = fdc->track_r(space, 0);
|
|
||||||
break;
|
|
||||||
case 0x06:
|
|
||||||
data = fdc->sector_r(space, 0);
|
|
||||||
break;
|
|
||||||
case 0x07:
|
|
||||||
data = fdc->data_r(space, 0);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return data;
|
membank("bank2")->set_entry(BIT(data, 5) ? HECTOR_BANK_BASE : HECTOR_BANK_DISC);
|
||||||
}
|
}
|
||||||
WRITE8_MEMBER(hec2hrp_state::hector_179x_register_w)
|
|
||||||
{
|
|
||||||
fd1793_device *fdc = machine().device<fd1793_device>("wd179x");
|
|
||||||
switch (offset)
|
|
||||||
{
|
|
||||||
/* minidisc floppy disc interface */
|
|
||||||
case 0x04:
|
|
||||||
fdc->command_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 0x05:
|
|
||||||
fdc->track_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 0x06:
|
|
||||||
fdc->sector_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 0x07:
|
|
||||||
/*write into command register*/
|
|
||||||
fdc->data_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 0x08:
|
|
||||||
/*General purpose port (0x08) for the minidisk I/O */
|
|
||||||
{
|
|
||||||
// Rom page bank switching
|
|
||||||
membank("bank2")->set_entry(BIT(data, 5) ? HECTOR_BANK_BASE : HECTOR_BANK_DISC );
|
|
||||||
|
|
||||||
// Set drive number
|
|
||||||
if (BIT(data, 6)) fdc->set_drive(0); // Set the correct drive number 0
|
|
||||||
//if (BIT(data, 7)) fdc->set_drive(1);// Set the correct drive number 1,never here
|
|
||||||
|
|
||||||
// Set side
|
|
||||||
fdc->set_side(BIT(data, 4) ? 1 : 0);// side select
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
WRITE8_MEMBER(hec2hrp_state::hector_switch_bank_w)
|
WRITE8_MEMBER(hec2hrp_state::hector_switch_bank_w)
|
||||||
{
|
{
|
||||||
if (offset==0x00) { /* 0x800 et 0x000=> video page, HR*/
|
if (offset==0x00) { /* 0x800 et 0x000=> video page, HR*/
|
||||||
@ -255,7 +195,7 @@ READ8_MEMBER(hec2hrp_state::hector_keyboard_r)
|
|||||||
|
|
||||||
/* floppy md master reset */
|
/* floppy md master reset */
|
||||||
if (isHectorWithMiniDisc())
|
if (isHectorWithMiniDisc())
|
||||||
machine().device<fd1793_device>("wd179x")->mr_w(1);
|
m_minidisc_fdc->reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
else /* aviable for BR machines */
|
else /* aviable for BR machines */
|
||||||
|
Loading…
Reference in New Issue
Block a user