summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/spectrum/mgt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/spectrum/mgt.cpp')
-rw-r--r--src/devices/bus/spectrum/mgt.cpp312
1 files changed, 156 insertions, 156 deletions
diff --git a/src/devices/bus/spectrum/mgt.cpp b/src/devices/bus/spectrum/mgt.cpp
index 10fb90e1b93..49868413649 100644
--- a/src/devices/bus/spectrum/mgt.cpp
+++ b/src/devices/bus/spectrum/mgt.cpp
@@ -2,141 +2,141 @@
// copyright-holders:TwistedTom
/**********************************************************************
- DISCiPLE Multi-purpose Interface
- +D Disk and Printer Interface
-
- Miles Gordon Technology, UK, 1986-1990 (also produced the Sam Coupé home computer.)
-
- DISCiPLE was MGT's first disk interface, a large plastic base that sat under the Spectrum, similar to Sinclair's official Interface 1.
- +D was MGT's second (and last) disk interface, a cost and feature reduced version of the Disciple, a small metal-cased,
- stand-alone unit which connects to ZX Spectrum's expansion slot via a ribbon cable.
- A second Datel version of the +D exists (following the closure of MGT, it was licensed and produced by Datel.)
- Many unofficial versions of +D exist and modern versions are still seen today as DIY-style projects/kits.
- It's said the device's design and roms were officially released into the public domain at some point?
-
- DISCiPLE features:
- 8KB ROM
- 8KB RAM
- single floppy disk interface (2 drives)
- Centronics parallel printer interface
- "magic button" style memory snapshot grabber
- 2 ATARI joystick ports (Sinclair 1/Kempston, Sinclair 2)
- 2 network connectors (Interface 1 compatible, 3.5mm mono jack)
- inhibit button (to lock out the interface)
- pass-through expansion connector (to chain other devices)
-
- +D features:
- same as DISCiPLE
- lost the joystick/network ports, inhibit button and pass-through expansion connector
-
- DISCiPLE's official DOS was "GDOS".
- +D's official DOS was "G+DOS".
- Both of these were later superseded by "SAM DOS" (used by MGT's Sam Coupé.)
- A 3rd party company SD Software released an alternative DOS "UNI-DOS" for both interfaces. (consisting of a disk and replacement ROM)
-
- FDD support:
-
- DISCiPLE's manual states any Shugart 400 SD/DD drive should work:
- "The disciple will accept 5.25" or 3.5" drives, whether they are 40 track or 80 track,
- single sided or double sided, single density or double density."
-
- +D's manual states any Shugart 400 DD drive should work (but not SD)
- "we recommend 3.5" or 5.25" 80-track double sided and double density drives,
- which will give you up to 780K of storage per drive. But Shugart
- 400-type 3" drives will also work."
-
- +D only: Pin 26 /DDEN of the WD1772 is tied to ground, so permanent DD mode.
- DISCiPLE only: /DDEN can be directly controlled via s/w by an IO write to 0x1f, bit 2.
-
- Disks use "MGT filesystem".
- A good description available at https://faqwiki.zxnet.co.uk/wiki/MGT_filesystem
-
- Disk format is 512 bytes/sector, 10 sectors/track
- 40 track, 1 side = 204,800 bytes (512*10*40*1)
- 40 track, 2 side = 409,600 bytes
- 80 track, 1 side = 409,600 bytes
- 80 track, 2 side = 819,200 bytes <-- only this one supported so far
-
- .mgt files work ok
- .img files don't work (not in coupedsk.cpp)
-
- The DOS must be loaded from a "System Disk" which is itself created from "System Tape" which was supplied with the unit.
- The ROM provides just the RUN command, which boots the system disk and loads the full DOS.
- Presumably the unit wasn't supplied with a system disk due to wide range of drives that can be used? (3", 3.5", 5.25")
- The DOS survives a reset, so reloading of system disk is only required after full power cycle.
-
- A few useful commands:
- RUN Boots the system
- CAT 1 Displays catalogue (drive 1)
- CAT 1! Displays shortened catalogue (drive 1)
- SAVE D1 "filename" Saves file
- VERIFY D1 "filename" Confirms save has been made
- LOAD D1 "filename" Loads file (except Snapshot files)
- LOAD D1 "filename" S Loads 48K Snapshot file
- LOAD D1 "filename" K Loads 128K Snapshot file
- LOAD D1 "filename" SCREEN$ Loads screen file
- LOAD Pn Loads the program (from its number)
- ERASE D1 "file" TO "new file" Renames a file
- ERASE D1 "filename" Erases a file
- SAVE D1 "file" TO D2 Copies a file from drive1 to drive2
- FORMAT D1 Formats disc in drive 1
- FORMAT D1 TO 2 Formats drive 1; copies from 2 to 1
-
- DISCiPLE snapshot button:
- Caps Shift + button system freezes with a multi-coloured border effect
- then, key 3 save current SCREEN
- 4 save 48K PROGRAM
- 5 save 128K PROGRAM
- Caps Shift + number saves to drive 2 (or 1 if running from 2)
-
- +D snapshot button:
- button system freezes with a multi-coloured border effect (don't need to hold caps shift)
- then, key 3 save current SCREEN
- 4 save 48K PROGRAM
- 5 save 128K PROGRAM
- X do nothing, return to running program
- Caps Shift + number saves to drive 2 (or 1 if running from 2)
-
- DISCiPLE GDOS versions:
- The rom/system disk versions must match,
- v2 rom: use system disk/system tape ver 2, 2b, 2c
- v3 rom: use system disk/system tape ver 3a, 3b or 3d
-
- +D G+DOS versions:
- a v1 (-non a) exists but has yet to be found/dumped,
- from "pick-poke-it" user manual:
- "A few PLUS D users are still using Version 1 of the ROM which was used in PLUS D's sold in December 1987-January 1988.
- ... check the serial number on the bottom of your PLUS D. If it's a 4-figure number commencing with 1,
- then you have a PLUS D with the Version 1 ROM."
-
- DISCiPLE only curiosities:
- The pass-through expansion connector has 4 extra pins (1 top/bottom each end)
- so 2x30 pins compared to ususal 2x28 of Spectrum expansion slot.
- Presumably this was intended for some unique expansion device that never appeared?
- One of these extra pins can be directly controlled via s/w by an IO write to 0x1f, bit 5.
- 2 other pins appear to be able to override the /ce signal from PAL ic9 to the rom.
- 4th pin is unused.
-
- The design allows for use of a larger 27128 (16KB) rom,
- with the highest address line A13 controllable via s/w by an IO write to 0x1f, bit 3.
- No larger roms seem to exist (or perhaps not yet found...?)
- Some 16KB dumps can be found but these are combined dumps of the 8KB rom and 8KB ram (with the full DOS loaded).
-
-
- Current status:
- --------------
-
- DISCiPLE
- GDOS v3: all ok, occassional "no system file" when loading system disk, ok on 2nd attempt
- GDOS v2: all ok
- UNIDOS: all ok
-
- +D
- G+DOS: all ok
- UNIDOS: all ok
-
-
- Not working with 128K/+2 yet...
+ DISCiPLE Multi-purpose Interface
+ +D Disk and Printer Interface
+
+ Miles Gordon Technology, UK, 1986-1990 (also produced the Sam Coupé home computer.)
+
+ DISCiPLE was MGT's first disk interface, a large plastic base that sat under the Spectrum, similar to Sinclair's official Interface 1.
+ +D was MGT's second (and last) disk interface, a cost and feature reduced version of the Disciple, a small metal-cased,
+ stand-alone unit which connects to ZX Spectrum's expansion slot via a ribbon cable.
+ A second Datel version of the +D exists (following the closure of MGT, it was licensed and produced by Datel.)
+ Many unofficial versions of +D exist and modern versions are still seen today as DIY-style projects/kits.
+ It's said the device's design and roms were officially released into the public domain at some point?
+
+ DISCiPLE features:
+ 8KB ROM
+ 8KB RAM
+ single floppy disk interface (2 drives)
+ Centronics parallel printer interface
+ "magic button" style memory snapshot grabber
+ 2 ATARI joystick ports (Sinclair 1/Kempston, Sinclair 2)
+ 2 network connectors (Interface 1 compatible, 3.5mm mono jack)
+ inhibit button (to lock out the interface)
+ pass-through expansion connector (to chain other devices)
+
+ +D features:
+ same as DISCiPLE
+ lost the joystick/network ports, inhibit button and pass-through expansion connector
+
+ DISCiPLE's official DOS was "GDOS".
+ +D's official DOS was "G+DOS".
+ Both of these were later superseded by "SAM DOS" (used by MGT's Sam Coupé.)
+ A 3rd party company SD Software released an alternative DOS "UNI-DOS" for both interfaces. (consisting of a disk and replacement ROM)
+
+ FDD support:
+
+ DISCiPLE's manual states any Shugart 400 SD/DD drive should work:
+ "The disciple will accept 5.25" or 3.5" drives, whether they are 40 track or 80 track,
+ single sided or double sided, single density or double density."
+
+ +D's manual states any Shugart 400 DD drive should work (but not SD)
+ "we recommend 3.5" or 5.25" 80-track double sided and double density drives,
+ which will give you up to 780K of storage per drive. But Shugart
+ 400-type 3" drives will also work."
+
+ +D only: Pin 26 /DDEN of the WD1772 is tied to ground, so permanent DD mode.
+ DISCiPLE only: /DDEN can be directly controlled via s/w by an IO write to 0x1f, bit 2.
+
+ Disks use "MGT filesystem".
+ A good description available at https://faqwiki.zxnet.co.uk/wiki/MGT_filesystem
+
+ Disk format is 512 bytes/sector, 10 sectors/track
+ 40 track, 1 side = 204,800 bytes (512*10*40*1)
+ 40 track, 2 side = 409,600 bytes
+ 80 track, 1 side = 409,600 bytes
+ 80 track, 2 side = 819,200 bytes <-- only this one supported so far
+
+ .mgt files work ok
+ .img files don't work (not in coupedsk.cpp)
+
+ The DOS must be loaded from a "System Disk" which is itself created from "System Tape" which was supplied with the unit.
+ The ROM provides just the RUN command, which boots the system disk and loads the full DOS.
+ Presumably the unit wasn't supplied with a system disk due to wide range of drives that can be used? (3", 3.5", 5.25")
+ The DOS survives a reset, so reloading of system disk is only required after full power cycle.
+
+ A few useful commands:
+ RUN Boots the system
+ CAT 1 Displays catalogue (drive 1)
+ CAT 1! Displays shortened catalogue (drive 1)
+ SAVE D1 "filename" Saves file
+ VERIFY D1 "filename" Confirms save has been made
+ LOAD D1 "filename" Loads file (except Snapshot files)
+ LOAD D1 "filename" S Loads 48K Snapshot file
+ LOAD D1 "filename" K Loads 128K Snapshot file
+ LOAD D1 "filename" SCREEN$ Loads screen file
+ LOAD Pn Loads the program (from its number)
+ ERASE D1 "file" TO "new file" Renames a file
+ ERASE D1 "filename" Erases a file
+ SAVE D1 "file" TO D2 Copies a file from drive1 to drive2
+ FORMAT D1 Formats disc in drive 1
+ FORMAT D1 TO 2 Formats drive 1; copies from 2 to 1
+
+ DISCiPLE snapshot button:
+ Caps Shift + button system freezes with a multi-coloured border effect
+ then, key 3 save current SCREEN
+ 4 save 48K PROGRAM
+ 5 save 128K PROGRAM
+ Caps Shift + number saves to drive 2 (or 1 if running from 2)
+
+ +D snapshot button:
+ button system freezes with a multi-coloured border effect (don't need to hold caps shift)
+ then, key 3 save current SCREEN
+ 4 save 48K PROGRAM
+ 5 save 128K PROGRAM
+ X do nothing, return to running program
+ Caps Shift + number saves to drive 2 (or 1 if running from 2)
+
+ DISCiPLE GDOS versions:
+ The rom/system disk versions must match,
+ v2 rom: use system disk/system tape ver 2, 2b, 2c
+ v3 rom: use system disk/system tape ver 3a, 3b or 3d
+
+ +D G+DOS versions:
+ a v1 (-non a) exists but has yet to be found/dumped,
+ from "pick-poke-it" user manual:
+ "A few PLUS D users are still using Version 1 of the ROM which was used in PLUS D's sold in December 1987-January 1988.
+ ... check the serial number on the bottom of your PLUS D. If it's a 4-figure number commencing with 1,
+ then you have a PLUS D with the Version 1 ROM."
+
+ DISCiPLE only curiosities:
+ The pass-through expansion connector has 4 extra pins (1 top/bottom each end)
+ so 2x30 pins compared to ususal 2x28 of Spectrum expansion slot.
+ Presumably this was intended for some unique expansion device that never appeared?
+ One of these extra pins can be directly controlled via s/w by an IO write to 0x1f, bit 5.
+ 2 other pins appear to be able to override the /ce signal from PAL ic9 to the rom.
+ 4th pin is unused.
+
+ The design allows for use of a larger 27128 (16KB) rom,
+ with the highest address line A13 controllable via s/w by an IO write to 0x1f, bit 3.
+ No larger roms seem to exist (or perhaps not yet found...?)
+ Some 16KB dumps can be found but these are combined dumps of the 8KB rom and 8KB ram (with the full DOS loaded).
+
+
+ Current status:
+ --------------
+
+ DISCiPLE
+ GDOS v3: all ok, occassional "no system file" when loading system disk, ok on 2nd attempt
+ GDOS v2: all ok
+ UNIDOS: all ok
+
+ +D
+ G+DOS: all ok
+ UNIDOS: all ok
+
+
+ Not working with 128K/+2 yet...
**********************************************************************/
@@ -167,17 +167,17 @@ INPUT_PORTS_END
INPUT_PORTS_START(disciple)
PORT_INCLUDE(plusd)
-
+
// Joystick 1 (right-hand) is both Kempston (port 0x1f) and Sinclair 1 (keys 6,7,8,9,0)
// Joystick 2 (left-hand) is Sinclair 2 (keys 1,2,3,4,5)
-
+
PORT_START("JOY1") /* Sinclair 1 (keys 6,7,8,9,0) 0xeffe , Kempston 0x1f */
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1) PORT_NAME("Kempston\\Sinclair P1 Button 1")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_8WAY PORT_PLAYER(1) PORT_NAME("Kempston\\Sinclair P1 Up")
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_8WAY PORT_PLAYER(1) PORT_NAME("Kempston\\Sinclair P1 Down")
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_8WAY PORT_PLAYER(1) PORT_NAME("Kempston\\Sinclair P1 Right")
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_8WAY PORT_PLAYER(1) PORT_NAME("Kempston\\Sinclair P1 Left")
-
+
PORT_START("JOY2") /* Sinclair 2 (keys 1,2,3,4,5) 0xf7fe */
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_8WAY PORT_PLAYER(2) PORT_NAME("Sinclair P2 Left") PORT_CODE(KEYCODE_4_PAD)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_8WAY PORT_PLAYER(2) PORT_NAME("Sinclair P2 Right") PORT_CODE(KEYCODE_6_PAD)
@@ -223,15 +223,15 @@ FLOPPY_FORMATS_END
ROM_START(plusd)
ROM_REGION(0x2000, "rom", 0)
-
+
ROM_DEFAULT_BIOS("gdos")
-
+
ROM_SYSTEM_BIOS(0, "gdos", "G+DOS v1a")
ROMX_LOAD("plusd_g.rom", 0x0000, 0x2000, CRC(569f7e55) SHA1(6b841dc5797ef7eb219ad455cd1e434ca3b9d30d), ROM_BIOS(0))
-
+
ROM_SYSTEM_BIOS(1, "unidos", "UNI-DOS v2")
ROMX_LOAD("plusd_uni.rom", 0x0000, 0x2000, CRC(60920496) SHA1(399c8c7c8335bc59849a2182c32347603fd0288a), ROM_BIOS(1))
-
+
ROM_REGION( 0x200, "plds", 0 )
ROM_LOAD( "alice_pal20l8.ic4", 0x000, 0x144, CRC(60135856) SHA1(41273f13a3680b29ba84ae1e85829482c783c55e) )
ROM_END
@@ -242,18 +242,18 @@ ROM_END
ROM_START(disciple)
ROM_REGION(0x2000, "rom", 0)
-
+
ROM_DEFAULT_BIOS("gdos")
-
+
ROM_SYSTEM_BIOS(0, "gdos", "GDOS v3")
ROMX_LOAD("disciple_g.rom", 0x0000, 0x2000, CRC(82047489) SHA1(9a75ed4b293f968985be4c9aa893cd88276d1ced), ROM_BIOS(0))
-
+
ROM_SYSTEM_BIOS(1, "gdos2", "GDOS v2")
ROMX_LOAD("disciple_g2.rom", 0x0000, 0x2000, CRC(9d971781) SHA1(a03e67e4ee275a85153843f42269fa980875d551), ROM_BIOS(1))
-
+
ROM_SYSTEM_BIOS(2, "unidos", "UNI-DOS v2")
ROMX_LOAD("disciple_uni.rom", 0x0000, 0x2000, CRC(1fe7f4fa) SHA1(6277abe6358c99ab894795536a1eb9393f25b9b1), ROM_BIOS(2))
-
+
ROM_REGION( 0x400, "plds", 0 )
ROM_LOAD( "pal20l8.ic8", 0x000, 0x144, CRC(e53b2fcc) SHA1(85ce9634890d41be37cd9e0252698e5350a4c9c9) )
ROM_LOAD( "pal20l8.ic9", 0x200, 0x144, CRC(43ff2e38) SHA1(b872377ea9f91b29a811b0d484699ffe87bdf9fd) )
@@ -268,11 +268,11 @@ void spectrum_plusd_device::device_add_mconfig(machine_config &config)
WD1772(config, m_fdc, 8_MHz_XTAL);
FLOPPY_CONNECTOR(config, "fdc:0", plusd_floppies, "35dd", spectrum_plusd_device::floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, "fdc:1", plusd_floppies, "35dd", spectrum_plusd_device::floppy_formats).enable_sound(true);
-
+
/* printer port */
CENTRONICS(config, m_centronics, centronics_devices, "printer");
m_centronics->busy_handler().set(FUNC(spectrum_plusd_device::busy_w));
-
+
/* software list */
SOFTWARE_LIST(config, "flop_list").set_original("spectrum_mgt_flop");
}
@@ -280,7 +280,7 @@ void spectrum_plusd_device::device_add_mconfig(machine_config &config)
void spectrum_disciple_device::device_add_mconfig(machine_config &config)
{
spectrum_plusd_device::device_add_mconfig(config);
-
+
/* pass-through */
SPECTRUM_EXPANSION_SLOT(config, m_exp, spectrum_expansion_devices, nullptr);
m_exp->irq_handler().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::irq_w));
@@ -411,7 +411,7 @@ uint8_t spectrum_plusd_device::iorq_r(offs_t offset)
data = m_centronics_busy ? 0x80 : 0x00;
break;
}
-
+
return data;
}
@@ -512,7 +512,7 @@ READ_LINE_MEMBER(spectrum_disciple_device::romcs)
void spectrum_disciple_device::pre_opcode_fetch(offs_t offset)
{
m_exp->pre_opcode_fetch(offset);
-
+
if (!machine().side_effects_disabled())
{
switch (offset)
@@ -559,7 +559,7 @@ uint8_t spectrum_disciple_device::iorq_r(offs_t offset)
data = m_joy2->read() | (0xff ^ 0x1f);
break;
}
-
+
return data;
}
@@ -606,7 +606,7 @@ void spectrum_disciple_device::iorq_w(offs_t offset, uint8_t data)
m_centronics->write_data7(BIT(data, 7));
break;
}
-
+
m_exp->iorq_w(offset, data);
}
@@ -641,7 +641,7 @@ uint8_t spectrum_disciple_device::mreq_r(offs_t offset)
}
}
}
-
+
if (m_exp->romcs())
data &= m_exp->mreq_r(offset);
@@ -671,7 +671,7 @@ void spectrum_disciple_device::mreq_w(offs_t offset, uint8_t data)
}
}
}
-
+
if (m_exp->romcs())
m_exp->mreq_w(offset, data);
}