(MESS) c1541: Added ProLogic-DOS Classic kernal. (nw)

This commit is contained in:
Curt Coder 2012-08-23 18:56:52 +00:00
parent 45e9cc7826
commit 8555376f43
4 changed files with 179 additions and 12 deletions

View File

@ -1512,7 +1512,7 @@ ROM_START( c64n )
ROM_REGION( 0x2000, "basic", 0 )
ROM_LOAD( "901226-01.u3", 0x0000, 0x2000, CRC(f833d117) SHA1(79015323128650c742a3694c9429aa91f355905e) )
ROM_REGION( 0x2000, "kernal", 0 )
ROM_REGION( 0x4000, "kernal", 0 )
ROM_DEFAULT_BIOS("r3")
ROM_SYSTEM_BIOS(0, "r1", "Kernal rev. 1" )
ROMX_LOAD( "901227-01.u4", 0x0000, 0x2000, CRC(dce782fa) SHA1(87cc04d61fc748b82df09856847bb5c2754a2033), ROM_BIOS(1) )
@ -1568,6 +1568,8 @@ ROM_START( c64n )
ROMX_LOAD( "exos3.u4", 0x0000, 0x2000, CRC(4e54d020) SHA1(f8931b7c0b26807f4de0cc241f0b1e2c8f5271e9), ROM_BIOS(26) )
ROM_SYSTEM_BIOS(26, "exos4", "EXOS v4" )
ROMX_LOAD( "exos4.u4", 0x0000, 0x2000, CRC(d5cf83a9) SHA1(d5f03a5c0e9d00032d4751ecc6bcd6385879c9c7), ROM_BIOS(27) )
ROM_SYSTEM_BIOS(27, "pdc", "ProLogic-DOS Classic" )
ROMX_LOAD( "pdc.u4", 0x0000, 0x4000, CRC(6b653b9c) SHA1(0f44a9c62619424a0cd48a90e1b377b987b494e0), ROM_BIOS(28) )
ROM_REGION( 0x1000, "charom", 0 )
ROM_LOAD( "901225-01.u5", 0x0000, 0x1000, CRC(ec4272ee) SHA1(adc7c31e18c7c7413d54802ef2f4193da14711aa) )

View File

@ -150,6 +150,9 @@
#define M6522_1_TAG "ucd4"
#define C64H156_TAG "64h156"
#define MC6821_TAG "pia"
#define CENTRONICS_TAG "centronics"
enum
{
@ -171,6 +174,7 @@ const device_type SX1541 = &device_creator<sx1541_device>;
const device_type FSD2 = &device_creator<fsd2_device>;
const device_type C1541_DOLPHIN_DOS = &device_creator<c1541_dolphin_dos_device>;
const device_type C1541_PROFESSIONAL_DOS_V1 = &device_creator<c1541_professional_dos_v1_device>;
const device_type C1541_PROLOGIC_DOS_CLASSIC = &device_creator<c1541_prologic_dos_classic_device>;
//-------------------------------------------------
@ -215,6 +219,10 @@ void base_c1541_device::device_config_complete()
case TYPE_1541_PROFESSIONAL_DOS_V1:
m_shortname = "c1541pd";
break;
case TYPE_1541_PROLOGIC_DOS_CLASSIC:
m_shortname = "c1541pdc";
break;
}
}
@ -347,6 +355,21 @@ ROM_START( c1541pd )
ROM_END
//-------------------------------------------------
// ROM( c1541pdc )
//-------------------------------------------------
ROM_START( c1541pdc )
ROM_REGION( 0x8000, M6502_TAG, 0 )
ROM_LOAD( "325302-01.uab4", 0x0000, 0x2000, CRC(29ae9752) SHA1(8e0547430135ba462525c224e76356bd3d430f11) )
ROM_LOAD( "901229-06 aa.uab5", 0x2000, 0x2000, CRC(3a235039) SHA1(c7f94f4f51d6de4cdc21ecbb7e57bb209f0530c0) )
ROM_LOAD( "kernal.bin", 0x4000, 0x4000, CRC(79032ed5) SHA1(0ca4d5ef41c7e3d18d8945476d1481573af3e27c) )
ROM_REGION( 0x2000, "mmu", 0 )
ROM_LOAD( "mmu.bin", 0x0000, 0x2000, CRC(4c41392c) SHA1(78846af2ee6a56fceee44f9246659685ab2cbb7e) )
ROM_END
//-------------------------------------------------
// rom_region - device-specific ROM region
//-------------------------------------------------
@ -379,6 +402,9 @@ const rom_entry *base_c1541_device::device_rom_region() const
case TYPE_1541_PROFESSIONAL_DOS_V1:
return ROM_NAME( c1541pd );
case TYPE_1541_PROLOGIC_DOS_CLASSIC:
return ROM_NAME( c1541pdc );
}
}
@ -423,6 +449,22 @@ static ADDRESS_MAP_START( c1541pd_mem, AS_PROGRAM, 8, base_c1541_device )
ADDRESS_MAP_END
//-------------------------------------------------
// ADDRESS_MAP( c1541pdc_mem )
//-------------------------------------------------
static ADDRESS_MAP_START( c1541pdc_mem, AS_PROGRAM, 8, c1541_prologic_dos_classic_device )
AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0x6000) AM_RAM AM_SHARE("share1")
AM_RANGE(0x1800, 0x180f) AM_MIRROR(0x63f0) AM_DEVREADWRITE(M6522_0_TAG, via6522_device, read, write)
AM_RANGE(0x1c00, 0x1c0f) AM_MIRROR(0x63f0) AM_DEVREADWRITE(M6522_1_TAG, via6522_device, read, write)
AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x8800, 0x9fff) AM_RAM
AM_RANGE(0xa000, 0xb7ff) AM_ROM AM_REGION(M6502_TAG, 0x0000)
AM_RANGE(0xb800, 0xb80f) AM_READWRITE(pia_r, pia_w)
AM_RANGE(0xf000, 0xffff) AM_ROM AM_REGION(M6502_TAG, 0x2000)
ADDRESS_MAP_END
//-------------------------------------------------
// via6522_interface via0_intf
//-------------------------------------------------
@ -727,6 +769,68 @@ const floppy_interface c1541_floppy_interface =
};
//-------------------------------------------------
// pia6821_interface pia0_intf
//-------------------------------------------------
READ8_MEMBER( c1541_prologic_dos_classic_device::pia_r )
{
return m_pia->read(space, (offset >> 2) & 0x03);
}
WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_w )
{
m_pia->write(space, (offset >> 2) & 0x03, data);
}
WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_pa_w )
{
/*
bit description
0 1/2 MHz
1
2
3 35/40 tracks
4
5
6
7 Hi
*/
}
READ8_MEMBER( c1541_prologic_dos_classic_device::pia_pb_r )
{
return m_parallel_data;
}
WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_pb_w )
{
m_parallel_data = data;
m_centronics->write(space, 0, data);
}
static const pia6821_interface pia_intf =
{
DEVCB_NULL,
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1541_prologic_dos_classic_device, pia_pb_r),
DEVCB_DEVICE_LINE_MEMBER(CENTRONICS_TAG, centronics_device, ack_r),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1541_prologic_dos_classic_device, pia_pa_w),
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1541_prologic_dos_classic_device, pia_pb_w),
DEVCB_DEVICE_LINE_MEMBER(CENTRONICS_TAG, centronics_device, strobe_w),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL
};
//-------------------------------------------------
// MACHINE_DRIVER( c1541 )
//-------------------------------------------------
@ -795,6 +899,25 @@ static MACHINE_CONFIG_FRAGMENT( c1541pd )
MACHINE_CONFIG_END
//-------------------------------------------------
// MACHINE_DRIVER( c1541pdc )
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( c1541pdc )
MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_16MHz/16)
MCFG_CPU_PROGRAM_MAP(c1541pdc_mem)
MCFG_QUANTUM_PERFECT_CPU(M6502_TAG)
MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, c1541_via0_intf)
MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, c1541_via1_intf)
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1541_floppy_interface)
MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf)
MCFG_PIA6821_ADD(MC6821_TAG, pia_intf)
MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, standard_centronics)
MACHINE_CONFIG_END
//-------------------------------------------------
// machine_config_additions - device-specific
// machine configurations
@ -815,6 +938,9 @@ machine_config_constructor base_c1541_device::device_mconfig_additions() const
case TYPE_1541_PROFESSIONAL_DOS_V1:
return MACHINE_CONFIG_NAME( c1541pd );
case TYPE_1541_PROLOGIC_DOS_CLASSIC:
return MACHINE_CONFIG_NAME( c1541pdc );
}
}
@ -845,7 +971,7 @@ inline void base_c1541_device::set_iec_data()
// base_c1541_device - constructor
//-------------------------------------------------
base_c1541_device::base_c1541_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
base_c1541_device:: base_c1541_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
: device_t(mconfig, type, name, tag, owner, clock),
device_cbm_iec_interface(mconfig, *this),
device_c64_floppy_parallel_interface(mconfig, *this),
@ -867,7 +993,7 @@ base_c1541_device::base_c1541_device(const machine_config &mconfig, device_type
//-------------------------------------------------
c1540_device::c1540_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
:base_c1541_device(mconfig, C1540, "C1540", tag, owner, clock, TYPE_1540) { }
: base_c1541_device(mconfig, C1540, "C1540", tag, owner, clock, TYPE_1540) { }
//-------------------------------------------------
@ -875,7 +1001,7 @@ c1540_device::c1540_device(const machine_config &mconfig, const char *tag, devic
//-------------------------------------------------
c1541_device::c1541_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
:base_c1541_device(mconfig, C1541, "C1541", tag, owner, clock, TYPE_1541) { }
: base_c1541_device(mconfig, C1541, "C1541", tag, owner, clock, TYPE_1541) { }
//-------------------------------------------------
@ -883,7 +1009,7 @@ c1541_device::c1541_device(const machine_config &mconfig, const char *tag, devic
//-------------------------------------------------
c1541c_device::c1541c_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
:base_c1541_device(mconfig, C1541C, "C1541C", tag, owner, clock, TYPE_1541C) { }
: base_c1541_device(mconfig, C1541C, "C1541C", tag, owner, clock, TYPE_1541C) { }
//-------------------------------------------------
@ -891,7 +1017,7 @@ c1541c_device::c1541c_device(const machine_config &mconfig, const char *tag, dev
//-------------------------------------------------
c1541ii_device::c1541ii_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
:base_c1541_device(mconfig, C1541II, "C1541-II", tag, owner, clock, TYPE_1541II) { }
: base_c1541_device(mconfig, C1541II, "C1541-II", tag, owner, clock, TYPE_1541II) { }
//-------------------------------------------------
@ -899,7 +1025,7 @@ c1541ii_device::c1541ii_device(const machine_config &mconfig, const char *tag, d
//-------------------------------------------------
sx1541_device::sx1541_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
:base_c1541_device(mconfig, SX1541, "SX1541", tag, owner, clock, TYPE_SX1541) { }
: base_c1541_device(mconfig, SX1541, "SX1541", tag, owner, clock, TYPE_SX1541) { }
//-------------------------------------------------
@ -907,7 +1033,7 @@ sx1541_device::sx1541_device(const machine_config &mconfig, const char *tag, dev
//-------------------------------------------------
fsd2_device::fsd2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
:base_c1541_device(mconfig, FSD2, "FSD-2", tag, owner, clock, TYPE_FSD2) { }
: base_c1541_device(mconfig, FSD2, "FSD-2", tag, owner, clock, TYPE_FSD2) { }
//-------------------------------------------------
@ -915,7 +1041,7 @@ fsd2_device::fsd2_device(const machine_config &mconfig, const char *tag, device_
//-------------------------------------------------
c1541_dolphin_dos_device::c1541_dolphin_dos_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
:base_c1541_device(mconfig, C1541_DOLPHIN_DOS, "C1541 Dolphin-DOS 2.0", tag, owner, clock, TYPE_1541_DOLPHIN_DOS) { }
: base_c1541_device(mconfig, C1541_DOLPHIN_DOS, "C1541 Dolphin-DOS 2.0", tag, owner, clock, TYPE_1541_DOLPHIN_DOS) { }
//-------------------------------------------------
@ -923,7 +1049,19 @@ c1541_dolphin_dos_device::c1541_dolphin_dos_device(const machine_config &mconfig
//-------------------------------------------------
c1541_professional_dos_v1_device::c1541_professional_dos_v1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
:base_c1541_device(mconfig, C1541_PROFESSIONAL_DOS_V1, "C1541 Professional-DOS v1", tag, owner, clock, TYPE_1541_PROFESSIONAL_DOS_V1) { }
: base_c1541_device(mconfig, C1541_PROFESSIONAL_DOS_V1, "C1541 Professional-DOS v1", tag, owner, clock, TYPE_1541_PROFESSIONAL_DOS_V1) { }
//-------------------------------------------------
// c1541_prologic_dos_classic_device - constructor
//-------------------------------------------------
c1541_prologic_dos_classic_device::c1541_prologic_dos_classic_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: base_c1541_device(mconfig, C1541_PROLOGIC_DOS_CLASSIC, "C1541 ProLogic-DOS Classic", tag, owner, clock, TYPE_1541_PROLOGIC_DOS_CLASSIC),
m_pia(*this, MC6821_TAG),
m_centronics(*this, CENTRONICS_TAG)
{
}
//-------------------------------------------------

View File

@ -20,8 +20,10 @@
#include "formats/g64_dsk.h"
#include "machine/64h156.h"
#include "machine/6522via.h"
#include "machine/cbmiec.h"
#include "machine/6821pia.h"
#include "machine/c64_bn1541.h"
#include "machine/cbmiec.h"
#include "machine/ctronics.h"
@ -58,7 +60,8 @@ public:
// extended hardware
TYPE_1541_DOLPHIN_DOS,
TYPE_1541_PROFESSIONAL_DOS_V1
TYPE_1541_PROFESSIONAL_DOS_V1,
TYPE_1541_PROLOGIC_DOS_CLASSIC
};
// not really public
@ -200,6 +203,28 @@ public:
};
// ======================> c1541_prologic_dos_classic_device
class c1541_prologic_dos_classic_device : public base_c1541_device
{
public:
// construction/destruction
c1541_prologic_dos_classic_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// not really public
DECLARE_READ8_MEMBER( pia_r );
DECLARE_WRITE8_MEMBER( pia_w );
DECLARE_WRITE8_MEMBER( pia_pa_w );
DECLARE_READ8_MEMBER( pia_pb_r );
DECLARE_WRITE8_MEMBER( pia_pb_w );
protected:
required_device<pia6821_device> m_pia;
required_device<centronics_device> m_centronics;
};
// device type definition
extern const device_type C1540;
extern const device_type C1541;
@ -209,6 +234,7 @@ extern const device_type SX1541;
extern const device_type FSD2;
extern const device_type C1541_DOLPHIN_DOS;
extern const device_type C1541_PROFESSIONAL_DOS_V1;
extern const device_type C1541_PROLOGIC_DOS_CLASSIC;
// floppy interface

View File

@ -1103,6 +1103,7 @@ SLOT_INTERFACE_START( cbm_iec_devices )
SLOT_INTERFACE("fsd2", FSD2)
SLOT_INTERFACE("c1541dd", C1541_DOLPHIN_DOS)
SLOT_INTERFACE("c1541pd", C1541_PROFESSIONAL_DOS_V1)
SLOT_INTERFACE("c1541pdc", C1541_PROLOGIC_DOS_CLASSIC)
SLOT_INTERFACE("c1570", C1570)
SLOT_INTERFACE("c1571", C1571)
SLOT_INTERFACE("c1581", C1581)