diff options
Diffstat (limited to 'src/mame/drivers/softbox.cpp')
-rw-r--r-- | src/mame/drivers/softbox.cpp | 437 |
1 files changed, 0 insertions, 437 deletions
diff --git a/src/mame/drivers/softbox.cpp b/src/mame/drivers/softbox.cpp deleted file mode 100644 index 1d9d7cb6ef2..00000000000 --- a/src/mame/drivers/softbox.cpp +++ /dev/null @@ -1,437 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder, Mike Naberezny -/* - - SSE SoftBox - - http://mikenaberezny.com/hardware/pet-cbm/sse-softbox-z80-computer/ - - - Standalone vs. PET/CBM Peripheral Mode - -------------------------------------- - - The SoftBox can be used as a standalone computer with an RS-232 terminal, - or as a PET/CBM peripheral. This is an emulation of the standalone mode. - For the peripheral mode, see: src/devices/bus/ieee488/softbox.c. - - - Using the Corvus hard disk - -------------------------- - - The SoftBox distribution disk (softbox-distrib.d80) is configured for - a CBM 8050 as CP/M drives A/B and a 10MB Corvus hard disk as drives C/D. - - Use the CHDMAN utility to create a 10MB hard disk image for the Corvus: - - $ chdman createhd -o /path/to/corvus10mb.chd -chs 358,3,20 -ss 512 - - Start the SoftBox emulator with the floppy and hard disk images mounted: - - $ mame softbox -flop1 /path/to/softbox-distrib.d80 \ - -hard1 /path/to/corvus10mb.chd - - Before the Corvus can be used under CP/M, it must be prepared - by running DIAG.COM and FORMAT.COM. - - DIAG.COM - - Enter "diag" (no arguments) at the CP/M prompt to run the Corvus diagnostics - program. This program will perform the Corvus low-level format. - - Select option 6 (Update Controller Code) at the menu. - Enter "corvb184.fmt" when prompted for the filename. - Enter "y" at the confirmation prompts. - Enter "1" for the Corvus drive number (two prompts). - After formatting is complete, it will return to the menu. - - Select option 3 (Read Controller Code Version #) at the menu. - Enter "1" for the Corvus drive number. - It should report "V18.4AP" and then return to the menu. - - Select option 9 to return to CP/M. - - FORMAT.COM - - Enter "format" (no arguments) at the CP/M prompt to run the SoftBox disk - format program. This program will perform the CP/M filesystem format. - - Enter drive letter "c" at the prompt. - Enter "y" to confirm the format. - After formatting is complete, it will prompt for a drive letter again. - - Enter drive letter "d" at the prompt. - Enter "y" to confirm the format. - After formatting is complete, it will prompt for a drive letter again. - - Press RETURN to return to CP/M. - - STAT.COM - - After all steps are completed, drives C and D should be usable from - CP/M. Each drive is one half of the Corvus 10MB disk. Running the - command "stat c: dsk:" should show 4712 kilobyte drive capacity. - Drive D should show the same information. - - - Using other Corvus hard disk sizes - ---------------------------------- - - The SoftBox supports 5, 10, and 20 MB hard disks. The distribution disk - is configured for 10 MB as explained above. To use other sizes, make - a new image with CHDMAN. See the top of src/devices/machine/corvushd.h - for the parameters for the other drives. - - After the image has been created and the SoftBox emulator started with - it mounted, the SoftBox BIOS needs to be told what size Corvus hard - disk is attached. Use the NEWSYS.COM utility to reconfigure the drive - size. When NEWSYS prompts for a source drive, enter "a" (the drive letter - of the CP/M distribution disk). Use option "d" (Disk drive assignment) - to reconfigure the Corvus size. After the change has been made, use option - "s" (Save new system) to write the configuration to the floppy (drive A) and - option "e" (Execute new system) to restart CP/M with the configuration. - DIAG.COM and FORMAT.COM can then be used to format the hard disk. - -*/ - -#include "emu.h" -#include "includes/softbox.h" -#include "bus/rs232/rs232.h" -#include "softlist.h" - - -//************************************************************************** -// READ/WRITE HANDLERS -//************************************************************************** - - -//************************************************************************** -// ADDRESS MAPS -//************************************************************************** - -//------------------------------------------------- -// ADDRESS_MAP( softbox_mem ) -//------------------------------------------------- - -void softbox_state::softbox_mem(address_map &map) -{ - map(0x0000, 0xefff).ram(); - map(0xf000, 0xffff).rom().region(Z80_TAG, 0); -} - - -//------------------------------------------------- -// ADDRESS_MAP( softbox_io ) -//------------------------------------------------- - -void softbox_state::softbox_io(address_map &map) -{ - map.global_mask(0xff); - map(0x08, 0x09).rw(I8251_TAG, FUNC(i8251_device::read), FUNC(i8251_device::write)); - map(0x0c, 0x0c).w(COM8116_TAG, FUNC(com8116_device::stt_str_w)); - map(0x10, 0x13).rw(I8255_0_TAG, FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x14, 0x17).rw(I8255_1_TAG, FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x18, 0x18).rw(m_hdc, FUNC(corvus_hdc_device::read), FUNC(corvus_hdc_device::write)); -} - - - -//************************************************************************** -// INPUT PORTS -//************************************************************************** - -//------------------------------------------------- -// INPUT_PORTS( softbox ) -//------------------------------------------------- - -static INPUT_PORTS_START( softbox ) - /* An 8-position DIP switch may be installed at SW1. Some - SoftBox units have it and some do not. The switches are - not used by the SoftBox BIOS. */ - PORT_START("SW1") - PORT_DIPUNUSED_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW1:1" ) - PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW1:2" ) - PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW1:3" ) - PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW1:4" ) - PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW1:5" ) - PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW1:6" ) - PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW1:7" ) - PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW1:8" ) -INPUT_PORTS_END - - - -//************************************************************************** -// DEVICE CONFIGURATION -//************************************************************************** - -//------------------------------------------------- -// I8255A 0 Interface -//------------------------------------------------- - -READ8_MEMBER( softbox_state::ppi0_pa_r ) -{ - return m_ieee->read_dio() ^ 0xff; -} - -WRITE8_MEMBER( softbox_state::ppi0_pb_w ) -{ - m_ieee->write_dio(data ^ 0xff); -} - -//------------------------------------------------- -// I8255A 1 Interface -//------------------------------------------------- - -READ8_MEMBER( softbox_state::ppi1_pa_r ) -{ - /* - - bit description - - PA0 ATN - PA1 DAV - PA2 NDAC - PA3 NRFD - PA4 EOI - PA5 SRQ - PA6 REN - PA7 IFC - - */ - - uint8_t data = 0; - - data |= !m_ieee->atn_r(); - data |= !m_ieee->dav_r() << 1; - data |= !m_ieee->ndac_r() << 2; - data |= !m_ieee->nrfd_r() << 3; - data |= !m_ieee->eoi_r() << 4; - data |= !m_ieee->srq_r() << 5; - data |= !m_ieee->ren_r() << 6; - data |= !m_ieee->ifc_r() << 7; - - return data; -} - -WRITE8_MEMBER( softbox_state::ppi1_pb_w ) -{ - /* - - bit description - - PB0 ATN - PB1 DAV - PB2 NDAC - PB3 NRFD - PB4 EOI - PB5 SRQ - PB6 REN - PB7 IFC - - */ - - m_ieee->host_atn_w(!BIT(data, 0)); - m_ieee->host_dav_w(!BIT(data, 1)); - m_ieee->host_ndac_w(!BIT(data, 2)); - m_ieee->host_nrfd_w(!BIT(data, 3)); - m_ieee->host_eoi_w(!BIT(data, 4)); - m_ieee->host_srq_w(!BIT(data, 5)); - m_ieee->host_ren_w(!BIT(data, 6)); - m_ieee->host_ifc_w(!BIT(data, 7)); -} - -READ8_MEMBER( softbox_state::ppi1_pc_r ) -{ - /* - - bit description - - PC0 - PC1 - PC2 - PC3 - PC4 Corvus READY - PC5 Corvus DIRC - PC6 - PC7 - - */ - - uint8_t status = m_hdc->status_r(space, 0); - uint8_t data = 0; - - data |= (status & corvus_hdc_device::CONTROLLER_BUSY) ? 0 : 0x10; - data |= (status & corvus_hdc_device::CONTROLLER_DIRECTION) ? 0 : 0x20; - - return data; -} - -WRITE8_MEMBER( softbox_state::ppi1_pc_w ) -{ - /* - - bit description - - PC0 LED "A" - PC1 LED "B" - PC2 LED "READY" - PC3 - PC4 - PC5 - PC6 - PC7 - - */ - - m_leds[LED_A] = BIT(~data, 0); - m_leds[LED_B] = BIT(~data, 1); - m_leds[LED_READY] = BIT(~data, 2); -} - -static DEVICE_INPUT_DEFAULTS_START( terminal ) - DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_9600 ) - DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_9600 ) - DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 ) - DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_7 ) - DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_EVEN ) - DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 ) -DEVICE_INPUT_DEFAULTS_END - - - -//************************************************************************** -// MACHINE INITIALIZATION -//************************************************************************** - -//------------------------------------------------- -// MACHINE_START( softbox ) -//------------------------------------------------- - -void softbox_state::machine_start() -{ - m_leds.resolve(); -} - - -//------------------------------------------------- -// device_reset_after_children - device-specific -// reset that must happen after child devices -// have performed their resets -//------------------------------------------------- - -void softbox_state::device_reset_after_children() -{ - /* The Z80 starts at address 0x0000 but the SoftBox has RAM there and - needs to start from the BIOS at 0xf000. The PCB has logic and a - 74S287 PROM that temporarily changes the memory map so that the - IC3 EPROM at 0xf000 is mapped to 0x0000 for the first instruction - fetch only. The instruction normally at 0xf000 is an absolute jump - into the BIOS. On reset, the Z80 will fetch it from 0x0000 and set - its PC, then the normal map will be restored before the next - instruction fetch. Here we just set the PC to 0xf000 after the Z80 - resets, which has the same effect. */ - - m_maincpu->set_state_int(Z80_PC, 0xf000); -} - - -//------------------------------------------------- -// ieee488_ifc - interface clear (reset) -//------------------------------------------------- - -void softbox_state::ieee488_ifc(int state) -{ - if (!m_ifc && state) - { - device_reset(); - } - - m_ifc = state; -} - - - -//************************************************************************** -// MACHINE CONFIGURATION -//************************************************************************** - -void softbox_state::softbox(machine_config &config) -{ - // basic machine hardware - Z80(config, m_maincpu, XTAL(8'000'000)/2); - m_maincpu->set_addrmap(AS_PROGRAM, &softbox_state::softbox_mem); - m_maincpu->set_addrmap(AS_IO, &softbox_state::softbox_io); - - // devices - i8251_device &i8251(I8251(config, I8251_TAG, 0)); - i8251.txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd)); - i8251.dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr)); - i8251.rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts)); - - rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, "terminal")); - rs232.rxd_handler().set(I8251_TAG, FUNC(i8251_device::write_rxd)); - rs232.dsr_handler().set(I8251_TAG, FUNC(i8251_device::write_dsr)); - rs232.cts_handler().set(I8251_TAG, FUNC(i8251_device::write_cts)); - rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal)); - - i8255_device &ppi0(I8255A(config, I8255_0_TAG)); - ppi0.in_pa_callback().set(FUNC(softbox_state::ppi0_pa_r)); - ppi0.out_pb_callback().set(FUNC(softbox_state::ppi0_pb_w)); - ppi0.in_pc_callback().set_ioport("SW1"); - - i8255_device &ppi1(I8255A(config, I8255_1_TAG)); - ppi1.in_pa_callback().set(FUNC(softbox_state::ppi1_pa_r)); - ppi1.out_pb_callback().set(FUNC(softbox_state::ppi1_pb_w)); - ppi1.in_pc_callback().set(FUNC(softbox_state::ppi1_pc_r)); - ppi1.out_pc_callback().set(FUNC(softbox_state::ppi1_pc_w)); - - com8116_device &dbrg(COM8116(config, COM8116_TAG, 5.0688_MHz_XTAL)); - dbrg.fr_handler().set(I8251_TAG, FUNC(i8251_device::write_rxc)); - dbrg.ft_handler().set(I8251_TAG, FUNC(i8251_device::write_txc)); - - ieee488_device::add_cbm_devices(config, "c8050"); - - CORVUS_HDC(config, m_hdc, 0); - HARDDISK(config, "harddisk1", "corvus_hdd"); - HARDDISK(config, "harddisk2", "corvus_hdd"); - HARDDISK(config, "harddisk3", "corvus_hdd"); - HARDDISK(config, "harddisk4", "corvus_hdd"); - - IMI7000_BUS(config, "imi7000").set_slot_default_options("imi5000h", nullptr, nullptr, nullptr); - - // software lists - SOFTWARE_LIST(config, "flop_list").set_original("softbox"); -} - - - -//************************************************************************** -// ROMS -//************************************************************************** - -//------------------------------------------------- -// ROM( softbox ) -//------------------------------------------------- - -ROM_START( softbox ) - ROM_REGION( 0x1000, Z80_TAG, 0 ) - ROM_DEFAULT_BIOS("19830609") - ROM_SYSTEM_BIOS( 0, "19810908", "8/9/81" ) - ROMX_LOAD( "375.ic3", 0x000, 0x800, CRC(177580e7) SHA1(af6a97495de825b80cdc9fbf72329d5440826177), ROM_BIOS(0) ) - ROMX_LOAD( "376.ic4", 0x800, 0x800, CRC(edfee5be) SHA1(5662e9071cc622a1c071d89b00272fc6ba122b9a), ROM_BIOS(0) ) - ROM_SYSTEM_BIOS( 1, "19811027", "27-Oct-81" ) - ROMX_LOAD( "379.ic3", 0x000, 0x800, CRC(7b5a737c) SHA1(2348590884b026b7647f6864af8c9ba1c6f8746b), ROM_BIOS(1) ) - ROMX_LOAD( "380.ic4", 0x800, 0x800, CRC(65a13029) SHA1(46de02e6f04be298047efeb412e00a5714dc21b3), ROM_BIOS(1) ) - ROM_SYSTEM_BIOS( 2, "19830609", "09-June-1983" ) - ROMX_LOAD( "389.ic3", 0x000, 0x800, CRC(d66e581a) SHA1(2403e25c140c41b0e6d6975d39c9cd9d6f335048), ROM_BIOS(2) ) - ROMX_LOAD( "390.ic4", 0x800, 0x800, CRC(abe6cb30) SHA1(4b26d5db36f828e01268f718799f145d09b449ad), ROM_BIOS(2) ) -ROM_END - - - -//************************************************************************** -// SYSTEM DRIVERS -//************************************************************************** - -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1981, softbox, 0, 0, softbox, softbox, softbox_state, empty_init, "Small Systems Engineering", "SoftBox", MACHINE_NO_SOUND_HW ) |