// license:BSD-3-Clause
// copyright-holders:Joakim Larsson Edstrom
/***************************************************************************
*
* Force miniForce 2P/32 driver
*
* 24/12/2016
*
* Thanks to Al Kossow and his site http://www.bitsavers.org/ I got the information
* required to start the work with this driver.
*
* +=============================================================================================================================+
* |CPU |SRAM | | | | | | |WFC-1| | SYS68K/PWR-09A | SYS68K/WFMOD-50 |
* |-21 | -22 | | | | | | | | | | |
* | RST | | | | | | | |O RUN| | | |
* | ABT | | | | | | | | R/L | |O +5v |+---------------------------------------------+|
* | | | | | | | | |O LOC| |O +12v || ||
* |O RUN|O RUN| | | | | | |O ERR| |O -12v || ||
* |O HLT| | | | | | | |O BSY| |O ON || ||
* |O BM | | | | | | | | | | || ||
* | | | | | | | | | | | |+---------------------------------------------+|
* |O FLM|O SL0| | | | | | | | | || FDD ||
* |O EPR|O SL1| | | | | | | | | || ||
* |O 2WS| | | | | | | | | | +-------+ || ||
* |O 4WS| | | | | | | | | | | o |PWR || ||
* |O 6WS| | | | | | | | | | | | |+---------------------------------------------+|
* |O 8WS| | | | | | | | | | +-------+ | |
* |O12WS| | | | | | | | | | | |
* |O14WS| | | | | | | | | | |+---------------------------------------------+|
* | | | | | | | | | | | || HDD ||
* | CSH | | | | | | | | | | || ||
* | R/M | | | | | | | | | | || ||
* | | | | | | | | | | | || ||
* | o | | | | | | | | | | |+---------------------------------------------+|
* | o | | | | | | | | | | || ||
* | o | | | | | | | | | | || ||
* | o | | | | | | | | | | || ||
* | RS232/422 | | | | | | | | | || ||
* | P4 | P3 | | | | | | | | | |+---------------------------------------------+|
* | | | | | | | | | | | | |
* |SLOT1|SLOT2|SLOT3|SLOT4|SLOT5|SLOT6|SLOT7|SLOT7|SLOT9| | | |
* +=============================================================================================================================+
*
* History of Force Computers
*---------------------------
* See fccpu30.cpp
*
* Misc links about Force Computers and this board:
*-------------------------------------------------
* http://bitsavers.org/pdf/forceComputers/
*
* Description, from datasheets etc
* --------------------------------
* - Desktop station for 32 bit VMEbus environments
* - Two 9 slot motherboards for A32/D32 wide VMEbus (Pl,P2)
* - 280W power supply to drive VMEbus and mass storage memory
* - 7HE 19 inch metal chassis including modules for drives,
* power supply and connectors (344mm x 520mm x 400mm).
* - High modularity(!)
* - One 1HE fan module including 3 fans for optimal cooling
* - Flexible mounting and very little time expenditure for
* repairs through modularity
* - Status indicators and switches of the VME boards are
* directly accessible on the front of the system
* - One 5 1/4" full height space for the floppy drive
* - One 5 1/4" full height space for the winchester drive
* - Up to 6 free slots for system expansion
*
* Features per version
* --------------------------------------------------------------------------
* Description miniFORCE 2P21A miniFORCE 2P21 miniFORCE 2P21S
* --------------------------------------------------------------------------
* CPU 68020 20 MHz 16.7 MHz 12.5 MHz
* FPU 68881 20 MHz 16.7 MHz 12.5 MHz
* Memory SRAM 512KB 512KB 512KB
* Serial 68561 MPSC 2 RS232 ports 2 RS232 ports 2 RS232 ports
* Winchester HDD 51 MB 51 MB 20 MB
* Floppy 1 MB 1 MB 1 MB
* Timer 68230 PIT 1 1 1
* RTOS PDOS PDOS PDOS
* --------------------------------------------------------------------------
*
* Address Map from CPU-21 board perspective
* --------------------------------------------------------------------------
* Range Decscription
* --------------------------------------------------------------------------
* 00000000-0007FFFF Local 512KB SRAM CPU-21 CPU board
* 00080000-000FFFFF VME A32 512KB SRAM CPU-22 SRAM board (optional)
* 00080000-FAFFFFFF VME A32 Memory if no CPU-22 installed
* 00100000-FAFFFFFF VME A32 Memory if CPU-22 installed
* FCB00000-FCB001FF VME A24 First SIO-1 card (optional)
* FCB01000-FCB0100F VME A24 WFC-l card
* FCB02000-FCB022FF VME A24 ASCU-l/2 card (optional)
* FF000000-FF07FFFF EPROM Area 1
* FF080000-FFFFFFFF Local I/O devices
* --------------------------------------------------------------------------
*/
#include "emu.h"
#include "bus/vme/vme.h"
#include "bus/vme/vme_fccpu20.h"
#include "bus/vme/vme_fcisio.h"
#include "bus/vme/vme_fcscsi.h"
#include "bus/vme/vme_mzr8300.h"
#include "bus/vme/vme_hcpu30.h"
#include "machine/clock.h"
#define LOG_GENERAL 0x01
#define LOG_SETUP 0x02
#define LOG_PRINTF 0x04
#define VERBOSE 0 // (LOG_PRINTF | LOG_SETUP | LOG_GENERAL)
#define LOGMASK(mask, ...) do { if (VERBOSE & mask) logerror(__VA_ARGS__); } while (0)
#define LOGLEVEL(mask, level, ...) do { if ((VERBOSE & mask) >= level) logerror(__VA_ARGS__); } while (0)
#define LOG(...) LOGMASK(LOG_GENERAL, __VA_ARGS__)
#define LOGSETUP(...) LOGMASK(LOG_SETUP, __VA_ARGS__)
#if VERBOSE & LOG_PRINTF
#define logerror printf
#endif
#ifdef _MSC_VER
#define FUNCNAME __func__
#else
#define FUNCNAME __PRETTY_FUNCTION__
#endif
class miniforce_state : public driver_device
{
public:
miniforce_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
{
}
void miniforce(machine_config &config);
private:
virtual void machine_start() override;
virtual void machine_reset() override;
void miniforce_mem(address_map &map);
};
#if 0
void miniforce_state::miniforce_mem(address_map &map)
{
map.unmap_value_high();
/* The ROMs contains an OS9 bootloader. It is position independent but reset vector suggests that it sits flat on adress 0 (zero) */
// map(0x000000, 0x003fff).rom().region("roms", 0x000000); /* System EPROM Area 16Kb OS9 DEBUG - not verified */
// map(0x004000, 0x01ffff).rom().region("roms", 0x004000);/* System EPROM Area 112Kb for System ROM - not verified */
// map(0x020000, 0x03ffff).ram(); /* Not verified */
// map(0x100000, 0xfeffff).rw(FUNC(miniforce_state::vme_a24_r), FUNC(miniforce_state::vme_a24_w)); /* VMEbus Rev B addresses (24 bits) - not verified */
// map(0xff0000, 0xffffff).rw(FUNC(miniforce_state::vme_a16_r), FUNC(miniforce_state::vme_a16_w)); /* VMEbus Rev B addresses (16 bits) - not verified */
}
#endif
/* Start it up */
void miniforce_state::machine_start()
{
LOG("%s\n", FUNCNAME);
}
/* Start it up */
void miniforce_state::machine_reset()
{
LOG("%s\n", FUNCNAME);
}
/* Input ports */
static INPUT_PORTS_START (miniforce)
INPUT_PORTS_END
static void miniforce_vme_cards(device_slot_interface &device)
{
device.option_add("fccpu21", VME_FCCPU21);
device.option_add("fcisio", VME_FCISIO1);
device.option_add("fcscsi", VME_FCSCSI1);
device.option_add("hcpu30", VME_HCPU30);
}
/*
* Machine configuration
*/
void miniforce_state::miniforce(machine_config &config)
{
// ->set_addrmap(AS_PROGRAM, &miniforce_state::miniforce_mem);
VME(config, "vme", 0);
VME_SLOT(config, "slot1", miniforce_vme_cards, "fccpu21", 1, "vme");
VME_SLOT(config, "slot2", miniforce_vme_cards, nullptr, 2, "vme");
VME_SLOT(config, "slot3", miniforce_vme_cards, nullptr, 3, "vme");
VME_SLOT(config, "slot4", miniforce_vme_cards, nullptr, 4, "vme");
VME_SLOT(config, "slot5", miniforce_vme_cards, nullptr, 5, "vme");
VME_SLOT(config, "slot6", miniforce_vme_cards, nullptr, 6, "vme");
VME_SLOT(config, "slot7", miniforce_vme_cards, nullptr, 7, "vme");
VME_SLOT(config, "slot8", miniforce_vme_cards, nullptr, 8, "vme");
VME_SLOT(config, "slot9", miniforce_vme_cards, nullptr, 9, "vme");
}
ROM_START(miniforce)
ROM_END
/* Drivers TODO: setup distinct miniforce machine configurations */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 1987, miniforce, 0, 0, miniforce, miniforce, miniforce_state, empty_init, "Force Computers", "miniFORCE", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )