summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Curt Coder <curtcoder@mail.com>2019-05-22 21:18:25 +0300
committer Curt Coder <curtcoder@mail.com>2019-05-22 21:18:31 +0300
commit9f591f7c0840a5b3e5edcab7d0937a68d182bba2 (patch)
treeb91f272a59e4599abc683bc7436aeb30d3cdf203
parent54fb43140080a1fe7f6b824ee8b2dc297eafc263 (diff)
abc80: Super Smartaid WIP. (nw)
-rw-r--r--src/devices/bus/abcbus/ssa.cpp44
1 files changed, 39 insertions, 5 deletions
diff --git a/src/devices/bus/abcbus/ssa.cpp b/src/devices/bus/abcbus/ssa.cpp
index be742828eeb..0b86614f5a7 100644
--- a/src/devices/bus/abcbus/ssa.cpp
+++ b/src/devices/bus/abcbus/ssa.cpp
@@ -19,9 +19,40 @@
/*
+PCB Layout
+----------
+
+Super Smartaid / Super Smartaid Magnum 4
+
+[---------------------------------------------------|
+| PROM LS155 LS08 |
+| |
+||-----------CN1----------| LS74 HC32 |
+| |
+| ROM1 RAM |
+| |
+|LS245 LS126 LS393 LS00 BAT |
+| ROM2 |
+| LS260 LS74 LS32 |
+|---------------------------------------------------|
+
+Notes:
+ All IC's shown.
+
+ RAM - Hitachi HM6116LP-3 / Fujitsu MB8416A-15 2Kx8 SRAM
+ ROM1 - Mitsubishi M5L2764K 8Kx8 EPROM
+ ROM2 - SGS M2716F1 2Kx8 EPROM / NEC D27128D 16Kx8 EPROM
+ PROM - Signetics N82S131N 512x4 bipolar PROM
+ CN1 - ABC bus connector
+ BAT - Varta 3/V150H 3.6V 140mAh Ni-MH battery
+
+*/
+
+/*
+
TODO:
- - banking
+ - entering a bad command locks up the system
*/
@@ -146,9 +177,12 @@ uint8_t super_smartaid_t::abcbus_xmemfl(offs_t offset)
{
uint8_t data = 0xff;
- switch (m_prom->base()[offset >> 10])
+ switch (m_prom->base()[(m_prom_bank << 6) | (offset >> 10)])
{
- case 0x08: case 0x0c: case 0x0f:
+ case 0x08:
+ m_prom_bank = 1;
+ // fallthru
+ case 0x0c: case 0x0f:
data = m_rom_2->base()[(m_rom_bank << 12) | (offset & 0xfff)];
break;
case 0x0d:
@@ -172,12 +206,12 @@ uint8_t super_smartaid_t::abcbus_xmemfl(offs_t offset)
void super_smartaid_t::abcbus_xmemw(offs_t offset, uint8_t data)
{
- if ((offset & 0x4041) == 0x4040)
+ if ((offset == 0x4040) || (offset == 0x4041))
{
m_rom_bank = BIT(offset, 0);
}
- switch (m_prom->base()[offset >> 10])
+ switch (m_prom->base()[(m_prom_bank << 6) | (offset >> 10)])
{
case 0x0e:
m_nvram[offset & 0x7ff] = data;