summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/bpmmicro.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/bpmmicro.cpp')
-rw-r--r--src/mame/drivers/bpmmicro.cpp214
1 files changed, 214 insertions, 0 deletions
diff --git a/src/mame/drivers/bpmmicro.cpp b/src/mame/drivers/bpmmicro.cpp
new file mode 100644
index 00000000000..37ce58ddc8d
--- /dev/null
+++ b/src/mame/drivers/bpmmicro.cpp
@@ -0,0 +1,214 @@
+// license:BSD-3-Clause
+// copyright-holders:Jonathan Gevaryahu
+/******************************************************************************
+* BPMMicro (formerly BPMicro) universal device programmers
+* Models supported in this driver: (BP=1148) BP-1200
+*
+* All models:
+* Legacy:
+* EP-series (pre-bp-1148)
+* 286 based:
+* BP-1148 - fixed 512k? ram
+* BP-1200 - fixed 512k ram, (different tech adapter from 1148)
+* BP-2000, BP-2100, BP-2500, BP-2510, BP-2600M - ganged/bulk/autofeed programmers?
+* 286 expandable:
+* BP-1400 - uses a 30? pin SIMM for up to 8MB? of ram
+* 486 based:
+* BP-1600 - 486DX based, uses a 72 pin SIMM for up to 16MB of ram (does NOT support 32MB SIMMs!)
+* Silicon Sculptor - same as above, custom firmware locked to Actel devices, has an extra button
+* Silicon Sculptor 6X - as above but 6 programmers ganged together
+* 486+USB expansion pcb:
+* Silicon Sculptor II - same as silicon sculptor but has a parallel-to-USB board
+* 486+USB 2nd gen 'universal platform':
+* BP-1610 - 486DX2 based, uses a laptop SODIMM for up to 512MB? of ram?, has USB
+* BP-1410 - 486DX2 based, uses a laptop SODIMM for up to 512MB? of ram?, has USB
+* BP-1710 - same as BP1610, but two programmers ganged together in a single case
+* Silicon Sculptor III and IV?
+*
+******************************************************************************
+* TODO:
+* Everything!
+* status LEDs
+* 8-pin pin driver boards
+* tech adapter relays
+* Parallel port interface
+* Serial EEPROM (93c46) at U26 on BP1200 mainboard
+* Serial EEPROM (93c46) at (U1? U7? U12?) on TA-84 tech adapter
+* Serial EEPROM (93c46a) at ? on SM48D socket adapter
+* other socket adapters other than sm48d
+* DONE:
+* hardware pictures, cpu documentation, crystal, ram size
+******************************************************************************
+* Links:
+* http://www3.bpmmicro.com/web/helpandsupport.nsf/69f301ee4e15195486256fcf0062c2eb/8194a48179484c9f862573220065d38e!OpenDocument
+* ftp://ftp.bpmmicro.com/Dnload/
+******************************************************************************/
+
+/* Core includes */
+#include "emu.h"
+#include "cpu/i86/i286.h"
+
+class bpmmicro_state : public driver_device
+{
+public:
+ bpmmicro_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu")
+ {
+ }
+
+ DECLARE_DRIVER_INIT(bp1200);
+private:
+ required_device<cpu_device> m_maincpu;
+};
+
+/******************************************************************************
+ Driver Init
+******************************************************************************/
+
+DRIVER_INIT_MEMBER(bpmmicro_state,bp1200)
+{
+}
+
+/******************************************************************************
+ Read/Write handlers
+******************************************************************************/
+
+
+/* todo (v1.24 rom)
+from boot (2 digit hex offsets have 0x84000 added to them):
+0x0a00 -> 0x82200
+0x0001 -> 18
+0x0003 -> 1a
+0x0001 -> 0e
+{lots of data banged to 1c}
+0x0001 -> 02
+0x0000 -> 02
+read <- 00
+
+0x0001 -> 18
+0x0002 -> 1a
+{lots of data banged to 1c}
+0x0001 -> 02
+0x0000 -> 02
+
+0x0000 -> 18
+0x0003 -> 1a
+{lots of data banged to 1c}
+0x0001 -> 02
+0x0000 -> 02
+read <- 00
+read <- 00
+
+0x0000 -> 18
+0x0001 -> 1a
+{lots of data banged to 1c}
+0x0001 -> 02
+0x0000 -> 02
+
+0x0000 -> 0e
+0x0001 -> 0e
+0x0000 -> 0e
+0x0001 -> 0e
+0x0000 -> 0e
+0x0001 -> 0e
+read <- 00
+
+0x0a00 -> 0x82200
+0x0112 -> 0x82200
+
+0x0000 -> 06
+0x0000 -> 04
+0x0000 -> 00
+
+*/
+
+
+/******************************************************************************
+ Address Maps
+******************************************************************************/
+
+static ADDRESS_MAP_START(i286_mem, AS_PROGRAM, 16, bpmmicro_state)
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x000000, 0x07ffff) AM_RAM
+ // 82200 w
+ // 84000 r
+ // 8400e w
+ // 84018 w
+ // 8401a w - gets written with 3, then 2, then..
+ // 8401c w - bits 0 and 1 are serial data and clock respectively, either for serial over the parallel port, or they connect to one of the 93c46s (probably the one on the mainboard @ U26?)
+ AM_RANGE(0x0e0000, 0x0fffff) AM_ROM AM_REGION("bios", 0)
+ AM_RANGE(0xfe0000, 0xffffff) AM_ROM AM_REGION("bios", 0)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START(i286_io, AS_IO, 16, bpmmicro_state)
+ ADDRESS_MAP_UNMAP_HIGH
+ADDRESS_MAP_END
+
+
+/******************************************************************************
+ Input Ports
+******************************************************************************/
+static INPUT_PORTS_START( bpmmicro )
+INPUT_PORTS_END
+
+/******************************************************************************
+ Machine Drivers
+******************************************************************************/
+
+static MACHINE_CONFIG_START( bpmmicro, bpmmicro_state )
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", I80286, XTAL_32MHz/4) /* divider is guessed, cpu is an AMD N80L286-16/S part */
+ MCFG_CPU_PROGRAM_MAP(i286_mem)
+ MCFG_CPU_IO_MAP(i286_io)
+MACHINE_CONFIG_END
+
+
+
+/******************************************************************************
+ ROM Definitions
+******************************************************************************/
+
+ROM_START(bp1200)
+ ROM_REGION(0x20000, "bios", 0)
+ // note about roms: the BP-1200 has two jumpers controlling what type of rom is installed;
+ // it needs 120ns or faster roms
+ // the "W1" and "W2" labels are next to pins A on the pcb
+ // for 2764 roms:
+ // W1 [A B]C
+ // W2 [A B]C
+ // for 27256 roms:
+ // W1 [A B]C
+ // W2 A[B C]
+ ROM_DEFAULT_BIOS("v124")
+ ROM_SYSTEM_BIOS( 0, "v124", "BP-1200 V1.24")
+ ROMX_LOAD("version_1.24_u8.st_m27c256b-12f1l.u8", 0x10001, 0x8000, CRC(86d46d76) SHA1(4733b03a28689a3d2c58278495fbf31d0c74ac01), ROM_SKIP(1) | ROM_BIOS(1)) // "bios1200.v124a.u8" on bpmmicro site
+ ROMX_LOAD("version_1.24_u9.st_m27c256b-12f1l.u9", 0x10000, 0x8000, CRC(3bcc5c72) SHA1(3b281f2b464d8a4e366f8e2f0a8fa6dfd0a8f28c), ROM_SKIP(1) | ROM_BIOS(1)) // "bios1200.v124a.u9" on bpmmicro site
+ ROM_SYSTEM_BIOS( 1, "v118", "BP-1200 V1.18")
+ ROMX_LOAD("version_1.18_u8_2000.am27c256.u8", 0x10001, 0x8000, CRC(f8afa614) SHA1(a372bc35aea30595ab8f05c5e641021b45043ed3), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD("version_1.18_u9_2000.am27c256.u9", 0x10000, 0x8000, CRC(049b2ad1) SHA1(c9405ff805f3814493ad007bae7a8cb6a12aeb32), ROM_SKIP(1) | ROM_BIOS(2))
+ ROM_SYSTEM_BIOS( 2, "v113", "BP-1200 V1.13")
+ ROMX_LOAD("bp-1200_v1.13_u8_1992_1997.at27c256r-12pc.u8", 0x10001, 0x8000, CRC(ec61dcad) SHA1(dbfee285456d24b93c1fa6e8557b13ab80c3c877), ROM_SKIP(1) | ROM_BIOS(3))
+ ROMX_LOAD("bp-1200_v1.13_u9_1992_1995.at27c256r-12pc.u9", 0x10000, 0x8000, CRC(91ca5e70) SHA1(4a8c1894a67dfd5e0db088519a3ee4edaafdef58), ROM_SKIP(1) | ROM_BIOS(3))
+ ROM_SYSTEM_BIOS( 3, "v111", "BP-1200 V1.11")
+ ROMX_LOAD("bp-1200_version_1.11_u8_1992_1995.at27c256r-12pc.u8", 0x10001, 0x8000, CRC(d1c051e4) SHA1(b27007a931b0662b3dc7e2d41c6ec5ed0cd49308), ROM_SKIP(1) | ROM_BIOS(4))
+ ROMX_LOAD("bp-1200_version_1.11_u9_1992_1995.at27c256r-12pc.u9", 0x10000, 0x8000, CRC(99d46ba1) SHA1(144dbe6ed989ea88cfc1f6d1142508bb92519f87), ROM_SKIP(1) | ROM_BIOS(4))
+ ROM_SYSTEM_BIOS( 4, "v105", "BP-1200 V1.05")
+ ROMX_LOAD("bp-1200_1.05_u8__(c)_1993_rev_c__bp_microsystems.27c64-12pc.u8", 0x1c001, 0x2000, CRC(2c13a43c) SHA1(5dd67a09f72f693c085160b9beedd2454ba4ec37), ROM_SKIP(1) | ROM_BIOS(5)) // "BP-1200 1.05 U8 // (C) 1993 REV C // BP Microsystems" 27C64-12PC @U8
+ ROMX_LOAD("bp-1200_1.05_u9__(c)_1993_rev_c__bp_microsystems.27c64-12pc.u9", 0x1c000, 0x2000, CRC(b88a311c) SHA1(fb5e0543c811cbbf8f24d1de204b4c0c1bd2f485), ROM_SKIP(1) | ROM_BIOS(5)) // "BP-1200 1.05 U9 // (C) 1993 REV C // BP Microsystems" 27C64-12PC @U9
+ ROM_SYSTEM_BIOS( 5, "v104", "BP-1200 V1.04")
+ ROMX_LOAD("bp-1200_1.04_u8__(c)_1992_rev_c__bp_microsystems.27c64.u8", 0x1c001, 0x2000, CRC(2ab47324) SHA1(052e578dae5db023f94b35d686a5352ffceec414), ROM_SKIP(1) | ROM_BIOS(6)) // "BP-1200 1.04 U8 // (C) 1992 REV C // BP Microsystems" OTP 27C64 @ U8
+ ROMX_LOAD("bp-1200_1.04_u9__(c)_1993_rev_c__bp_microsystems.27c64.u9", 0x1c000, 0x2000, CRC(17b94d7a) SHA1(7ceed660dbdc638ac86ca8ba7fa456c297d88766), ROM_SKIP(1) | ROM_BIOS(6)) // "BP-1200 1.04 U9 // (C) 1993 REV C // BP Microsystems" OTP 27C64 @ U9
+ ROM_SYSTEM_BIOS( 6, "v103", "BP-1200 V1.03")
+ ROMX_LOAD("bp-1200_1.03_u8__(c)_1992_rev_c__bp_microsystems.27c64a-12.u8", 0x1c001, 0x2000, CRC(b01968b6) SHA1(d0c6aa0f0fe47b0915658e8c27286ab6ea90972e), ROM_SKIP(1) | ROM_BIOS(7)) // "BP-1200 1.03 U8 // (C) 1992 REV C // BP Microsystems" 27C64A-12 @ U8
+ ROMX_LOAD("bp-1200_1.03_u9__(c)_1992_rev_c__bp_microsystems.27c64a-12.u9", 0x1c000, 0x2000, CRC(f58ffebb) SHA1(700d3ffed269fff6dc1cf2190bde8b989715c22a), ROM_SKIP(1) | ROM_BIOS(7)) // "BP-1200 1.03 U9 // (C) 1992 REV C // BP Microsystems" 27C64A-12 @ U9
+ROM_END
+
+
+
+/******************************************************************************
+ Drivers
+******************************************************************************/
+
+/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS */
+COMP( 1991, bp1200, 0, 0, bpmmicro, bpmmicro, bpmmicro_state, bp1200, "BP Microsystems", "BP-1200", MACHINE_IS_SKELETON | MACHINE_NO_SOUND_HW )