summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2017-10-05 17:18:02 -0400
committer AJR <ajrhacker@users.noreply.github.com>2017-10-05 17:18:53 -0400
commit6c0fdfc5257ca20555fbc527203710d5af5401d1 (patch)
tree4bf3f25eeabb3e8568623f466d4c0841f3910b8c /src
parent36c6ee6a2f358712ffad949372df00cb69f7b54a (diff)
sdk85: Add address-latched memories (nw)
Diffstat (limited to 'src')
-rw-r--r--src/devices/cpu/i8085/i8085.h1
-rw-r--r--src/mame/drivers/sdk85.cpp48
2 files changed, 39 insertions, 10 deletions
diff --git a/src/devices/cpu/i8085/i8085.h b/src/devices/cpu/i8085/i8085.h
index 31d8b89e127..41f681f8897 100644
--- a/src/devices/cpu/i8085/i8085.h
+++ b/src/devices/cpu/i8085/i8085.h
@@ -13,6 +13,7 @@
#define I8085_RST55_LINE 1
#define I8085_RST65_LINE 2
#define I8085_RST75_LINE 3
+#define I8085_TRAP_LINE INPUT_LINE_NMI
// STATUS changed callback
diff --git a/src/mame/drivers/sdk85.cpp b/src/mame/drivers/sdk85.cpp
index 799e707db90..9a9f6bcc0d9 100644
--- a/src/mame/drivers/sdk85.cpp
+++ b/src/mame/drivers/sdk85.cpp
@@ -10,6 +10,9 @@
This is an evaluation kit for the 8085 cpu.
+All onboard RAM and (P)ROM is contained within address-latched Intel memories with built-in I/O
+(8155 and 8355/8755/8755A).
+
There is no speaker or storage facility in the standard kit.
Download the User Manual to get the operating procedures.
@@ -36,6 +39,8 @@ Press 0 to restart.
#include "emu.h"
#include "cpu/i8085/i8085.h"
+#include "machine/i8155.h"
+#include "machine/i8355.h"
#include "machine/i8279.h"
#include "sdk85.lh"
@@ -53,25 +58,37 @@ public:
DECLARE_WRITE8_MEMBER(digit_w);
DECLARE_READ8_MEMBER(kbd_r);
+protected:
+ virtual void machine_reset() override;
+
private:
u8 m_digit;
required_device<cpu_device> m_maincpu;
required_ioport_array<3> m_keyboard;
};
+void sdk85_state::machine_reset()
+{
+ // Prevent spurious TRAP when system is reset
+ m_maincpu->reset();
+}
+
static ADDRESS_MAP_START(sdk85_mem, AS_PROGRAM, 8, sdk85_state)
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0000, 0x07ff) AM_ROM // Monitor rom (A14)
- AM_RANGE(0x0800, 0x0fff) AM_ROM // Expansion rom (A15)
- AM_RANGE(0x1800, 0x1800) AM_DEVREADWRITE("i8279", i8279_device, data_r, data_w )
- AM_RANGE(0x1900, 0x1900) AM_DEVREADWRITE("i8279", i8279_device, status_r, cmd_w)
- //AM_RANGE(0x1800, 0x1fff) AM_RAM // i8279 (A13)
- AM_RANGE(0x2000, 0x27ff) AM_RAM // i8155 (A16)
- AM_RANGE(0x2800, 0x2fff) AM_RAM // i8155 (A17)
+ AM_RANGE(0x0000, 0x07ff) AM_DEVREAD("romio", i8355_device, memory_r)
+ AM_RANGE(0x0800, 0x0fff) AM_DEVREAD("expromio", i8355_device, memory_r)
+ AM_RANGE(0x1800, 0x1800) AM_MIRROR(0x06ff) AM_DEVREADWRITE("kdc", i8279_device, data_r, data_w)
+ AM_RANGE(0x1900, 0x1900) AM_MIRROR(0x06ff) AM_DEVREADWRITE("kdc", i8279_device, status_r, cmd_w)
+ AM_RANGE(0x2000, 0x20ff) AM_MIRROR(0x0700) AM_DEVREADWRITE("ramio", i8155_device, memory_r, memory_w)
+ AM_RANGE(0x2800, 0x28ff) AM_MIRROR(0x0700) AM_DEVREADWRITE("expramio", i8155_device, memory_r, memory_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START(sdk85_io, AS_IO, 8, sdk85_state)
ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x00, 0x03) AM_MIRROR(0x04) AM_DEVREADWRITE("romio", i8355_device, io_r, io_w)
+ AM_RANGE(0x08, 0x0b) AM_MIRROR(0x04) AM_DEVREADWRITE("expromio", i8355_device, io_r, io_w)
+ AM_RANGE(0x20, 0x27) AM_DEVREADWRITE("ramio", i8155_device, io_r, io_w)
+ AM_RANGE(0x28, 0x2f) AM_DEVREADWRITE("expramio", i8155_device, io_r, io_w)
ADDRESS_MAP_END
/* Input ports */
@@ -126,15 +143,24 @@ READ8_MEMBER( sdk85_state::kbd_r )
static MACHINE_CONFIG_START( sdk85 )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", I8085A, XTAL_2MHz)
+ MCFG_CPU_ADD("maincpu", I8085A, XTAL_6_144MHz)
MCFG_CPU_PROGRAM_MAP(sdk85_mem)
MCFG_CPU_IO_MAP(sdk85_io)
+ MCFG_DEVICE_ADD("romio", I8355, XTAL_6_144MHz / 2) // Monitor ROM (A14)
+
+ MCFG_DEVICE_ADD("expromio", I8355, XTAL_6_144MHz / 2) // Expansion ROM (A15)
+
+ MCFG_DEVICE_ADD("ramio", I8155, XTAL_6_144MHz / 2) // Basic RAM (A16)
+ MCFG_I8155_OUT_TIMEROUT_CB(INPUTLINE("maincpu", I8085_TRAP_LINE))
+
+ MCFG_DEVICE_ADD("expramio", I8155, XTAL_6_144MHz / 2) // Expansion RAM (A17)
+
/* video hardware */
MCFG_DEFAULT_LAYOUT(layout_sdk85)
/* Devices */
- MCFG_DEVICE_ADD("i8279", I8279, 3100000) // based on divider
+ MCFG_DEVICE_ADD("kdc", I8279, XTAL_6_144MHz / 2) // Keyboard/Display Controller (A13)
MCFG_I8279_OUT_IRQ_CB(INPUTLINE("maincpu", I8085_RST55_LINE)) // irq
MCFG_I8279_OUT_SL_CB(WRITE8(sdk85_state, scanlines_w)) // scan SL lines
MCFG_I8279_OUT_DISP_CB(WRITE8(sdk85_state, digit_w)) // display A&B
@@ -145,11 +171,13 @@ MACHINE_CONFIG_END
/* ROM definition */
ROM_START( sdk85 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x800, "romio", ROMREGION_ERASEFF )
ROM_SYSTEM_BIOS(0, "default", "Default")
ROMX_LOAD( "sdk85.a14", 0x0000, 0x0800, CRC(9d5a983f) SHA1(54e218560fbec009ac3de5cfb64b920241ef2eeb), ROM_BIOS(1) )
ROM_SYSTEM_BIOS(1, "mastermind", "Mastermind")
ROMX_LOAD( "mastermind.a14", 0x0000, 0x0800, CRC(36b694ae) SHA1(4d8a5ae5d10e8f72a6e349c7eeaf1aa00c4e45e1), ROM_BIOS(2) )
+
+ ROM_REGION( 0x800, "expromio", ROMREGION_ERASEFF )
ROM_END
/* Driver */