From 6c0fdfc5257ca20555fbc527203710d5af5401d1 Mon Sep 17 00:00:00 2001 From: AJR Date: Thu, 5 Oct 2017 17:18:02 -0400 Subject: sdk85: Add address-latched memories (nw) --- src/devices/cpu/i8085/i8085.h | 1 + src/mame/drivers/sdk85.cpp | 48 ++++++++++++++++++++++++++++++++++--------- 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 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 */ -- cgit v1.2.3