diff options
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 |
commit | 9f591f7c0840a5b3e5edcab7d0937a68d182bba2 (patch) | |
tree | b91f272a59e4599abc683bc7436aeb30d3cdf203 | |
parent | 54fb43140080a1fe7f6b824ee8b2dc297eafc263 (diff) |
abc80: Super Smartaid WIP. (nw)
-rw-r--r-- | src/devices/bus/abcbus/ssa.cpp | 44 |
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; |