mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +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_tap.c",
|
||||
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.h",
|
||||
MAME_DIR .. "src/lib/formats/imd_dsk.c",
|
||||
|
@ -93,38 +93,6 @@ static FLOPPY_CONSTRUCT(hector_disc2_dsk800_construct)
|
||||
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_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)
|
||||
|
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 "cpu/z80/z80.h"
|
||||
#include "formats/hect_dsk.h"
|
||||
#include "formats/hector_minidisc.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)
|
||||
|
||||
// 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 )
|
||||
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());
|
||||
|
||||
hector_init();
|
||||
hector_minidisc_init();
|
||||
}
|
||||
MACHINE_RESET_MEMBER(hec2hrp_state,hec2hrx)
|
||||
{
|
||||
@ -385,12 +386,14 @@ MACHINE_RESET_MEMBER(hec2hrp_state,hec2mdhrx)
|
||||
/********* mini disque interface ***************************/
|
||||
/***********************************************************/
|
||||
|
||||
const floppy_interface minidisc_floppy_interface =
|
||||
{
|
||||
FLOPPY_STANDARD_3_5_DSDD,
|
||||
LEGACY_FLOPPY_OPTIONS_NAME(hector_minidisc),
|
||||
NULL
|
||||
};
|
||||
FLOPPY_FORMATS_MEMBER( hec2hrp_state::minidisc_formats )
|
||||
FLOPPY_HMD_FORMAT
|
||||
FLOPPY_FORMATS_END
|
||||
|
||||
static SLOT_INTERFACE_START( minidisc_floppies )
|
||||
SLOT_INTERFACE("dd", FLOPPY_35_DD)
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
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)
|
||||
|
||||
/* Mini Disc */
|
||||
MCFG_DEVICE_ADD("wd179x", FD1793, 0)
|
||||
MCFG_WD17XX_DEFAULT_DRIVE1_TAGS
|
||||
MCFG_FD1793x_ADD("wd179x", XTAL_1MHz)
|
||||
|
||||
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 */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -40,7 +40,7 @@
|
||||
*/
|
||||
|
||||
#include "machine/upd765.h"
|
||||
#include "machine/wd17xx.h"
|
||||
#include "machine/wd_fdc.h"
|
||||
#include "imagedev/flopdrv.h"
|
||||
#include "imagedev/cassette.h"
|
||||
#include "sound/sn76477.h" /* for sn sound*/
|
||||
@ -83,7 +83,12 @@ public:
|
||||
m_palette(*this, "palette"),
|
||||
m_videoram(*this,"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;
|
||||
optional_device<cpu_device> m_disc2cpu;
|
||||
@ -94,6 +99,9 @@ public:
|
||||
optional_shared_ptr<UINT8> m_hector_videoram;
|
||||
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_80c;
|
||||
UINT8 m_hector_color[4];
|
||||
@ -131,8 +139,9 @@ public:
|
||||
int m_hector_flag_result;
|
||||
int m_print;
|
||||
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_keyboard_w);
|
||||
DECLARE_READ8_MEMBER(hector_keyboard_r);
|
||||
@ -162,7 +171,6 @@ public:
|
||||
int isHectorWithMiniDisc();
|
||||
int isHectorHR();
|
||||
int isHectoreXtend();
|
||||
void hector_minidisc_init();
|
||||
void Mise_A_Jour_Etat(int Adresse, int Value );
|
||||
void Init_Value_SN76477_Hector();
|
||||
void Update_Sound(address_space &space, UINT8 data);
|
||||
@ -188,6 +196,4 @@ public:
|
||||
void hector_disc2_reset();
|
||||
};
|
||||
|
||||
extern const floppy_interface minidisc_floppy_interface;
|
||||
|
||||
MACHINE_CONFIG_EXTERN( hector_audio );
|
||||
|
@ -102,85 +102,25 @@ TIMER_CALLBACK_MEMBER(hec2hrp_state::Callback_CK)
|
||||
m_CK_signal++;
|
||||
}
|
||||
|
||||
void hec2hrp_state::hector_minidisc_init()
|
||||
WRITE8_MEMBER( hec2hrp_state::minidisc_control_w )
|
||||
{
|
||||
fd1793_device *fdc = machine().device<fd1793_device>("wd179x");
|
||||
//set density
|
||||
fdc->dden_w(1);// density select => always 1 (0 ?a plante !)
|
||||
floppy_image_device *floppy = NULL;
|
||||
|
||||
/* FDC Motor Control - Bit 0/1 defines the state of the FDD 0/1 motor */
|
||||
floppy_get_device(machine(), 0)->floppy_mon_w( 0); // Moteur floppy A:
|
||||
//floppy_get_device(machine(), 1)->floppy_mon_w(BIT(data, 7)); // Moteur floppy B:, not implanted on the real machine
|
||||
if (BIT(data, 6)) floppy = m_floppy0->get_device();
|
||||
// bit 7 = drive 2?
|
||||
|
||||
//Set the drive ready !
|
||||
floppy_get_device(machine(), 0)->floppy_drive_set_ready_state(FLOPPY_DRIVE_READY, 0);// Disc 0 ready !
|
||||
m_minidisc_fdc->set_floppy(floppy);
|
||||
|
||||
}
|
||||
|
||||
READ8_MEMBER(hec2hrp_state::hector_179x_register_r)
|
||||
{
|
||||
int data=0;
|
||||
fd1793_device *fdc = machine().device<fd1793_device>("wd179x");
|
||||
|
||||
switch (offset & 0x0ff)
|
||||
if (floppy)
|
||||
{
|
||||
/* minidisc floppy disc interface */
|
||||
case 0x04:
|
||||
data = fdc->status_r(space, 0);
|
||||
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;
|
||||
// don't know where the motor on signal is
|
||||
floppy->mon_w(0);
|
||||
floppy->ss_w(BIT(data, 4));
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if (offset==0x00) { /* 0x800 et 0x000=> video page, HR*/
|
||||
@ -255,7 +195,7 @@ READ8_MEMBER(hec2hrp_state::hector_keyboard_r)
|
||||
|
||||
/* floppy md master reset */
|
||||
if (isHectorWithMiniDisc())
|
||||
machine().device<fd1793_device>("wd179x")->mr_w(1);
|
||||
m_minidisc_fdc->reset();
|
||||
}
|
||||
|
||||
else /* aviable for BR machines */
|
||||
|
Loading…
Reference in New Issue
Block a user