diff options
Diffstat (limited to 'src/devices/bus/spectrum/mgt.cpp')
-rw-r--r-- | src/devices/bus/spectrum/mgt.cpp | 312 |
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); } |