summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/devices/machine/pic8259.cpp6
-rw-r--r--src/mame/drivers/pg685.cpp102
2 files changed, 89 insertions, 19 deletions
diff --git a/src/devices/machine/pic8259.cpp b/src/devices/machine/pic8259.cpp
index b5120e886cf..ec2dbb67165 100644
--- a/src/devices/machine/pic8259.cpp
+++ b/src/devices/machine/pic8259.cpp
@@ -369,9 +369,9 @@ WRITE8_MEMBER( pic8259_device::write )
void pic8259_device::device_start()
{
// resolve callbacks
- m_out_int_func.resolve();
- m_sp_en_func.resolve();
- m_read_slave_ack_func.resolve();
+ m_out_int_func.resolve_safe();
+ m_sp_en_func.resolve_safe(1);
+ m_read_slave_ack_func.resolve_safe(0);
// Register save state items
save_item(NAME(m_state));
diff --git a/src/mame/drivers/pg685.cpp b/src/mame/drivers/pg685.cpp
index 0627383e025..a6e7ae7c430 100644
--- a/src/mame/drivers/pg685.cpp
+++ b/src/mame/drivers/pg685.cpp
@@ -105,13 +105,17 @@ Memory: 54x 64KBit RAM, 18 empty sockets, 9 bit and 4 bit wire straps
#include "emu.h"
#include "cpu/nec/nec.h"
-//#include "cpu/i86/i86.h"
#include "cpu/i86/i286.h"
#include "video/mc6845.h"
+#include "machine/i8251.h"
+#include "machine/i8255.h"
+#include "machine/i8279.h"
+#include "machine/mc2661.h"
#include "machine/mm58167.h"
-
-#define CRTC_TAG "crtc"
-#define RTC_TAG "rtc"
+#include "machine/pic8259.h"
+#include "machine/pit8253.h"
+#include "machine/wd_fdc.h"
+#include "machine/wd2010.h"
//**************************************************************************
// TYPE DEFINITIONS
@@ -148,9 +152,22 @@ static ADDRESS_MAP_START(pg685_mem, AS_PROGRAM, 8, pg685_state)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00000,0xbffff) AM_RAM
AM_RANGE(0xf0000,0xf1fff) AM_RAM
- AM_RANGE(0xf9f02,0xf9f02) AM_DEVREADWRITE(CRTC_TAG, mc6845_device, status_r, address_w)
- AM_RANGE(0xf9f03,0xf9f03) AM_DEVREADWRITE(CRTC_TAG, mc6845_device, register_r, register_w)
- AM_RANGE(0xf9f40,0xf9f5f) AM_DEVREADWRITE(RTC_TAG, mm58167_device, read, write)
+ AM_RANGE(0xf9f00, 0xf9f01) AM_DEVREADWRITE("kbdc", i8279_device, read, write)
+ AM_RANGE(0xf9f02, 0xf9f02) AM_DEVREADWRITE("crtc", mc6845_device, status_r, address_w)
+ AM_RANGE(0xf9f03, 0xf9f03) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
+ AM_RANGE(0xf9f06, 0xf9f07) AM_DEVREADWRITE("mainpic", pic8259_device, read, write)
+ AM_RANGE(0xf9f08, 0xf9f08) AM_DEVREADWRITE("mainuart", i8251_device, data_r, data_w)
+ AM_RANGE(0xf9f09, 0xf9f09) AM_DEVREADWRITE("mainuart", i8251_device, status_r, control_w)
+ AM_RANGE(0xf9f20, 0xf9f23) AM_DEVREADWRITE("fdc", wd2797_t, read, write)
+ AM_RANGE(0xf9f28, 0xf9f2b) AM_DEVREADWRITE("modppi1", i8255_device, read, write)
+ AM_RANGE(0xf9f2c, 0xf9f2f) AM_DEVREADWRITE("modppi2", i8255_device, read, write)
+ AM_RANGE(0xf9f30, 0xf9f30) AM_DEVREADWRITE("moduart", i8251_device, data_r, data_w)
+ AM_RANGE(0xf9f31, 0xf9f31) AM_DEVREADWRITE("moduart", i8251_device, status_r, control_w)
+ AM_RANGE(0xf9f34, 0xf9f37) AM_DEVREADWRITE("bppit", pit8253_device, read, write)
+ AM_RANGE(0xf9f38, 0xf9f3b) AM_DEVREADWRITE("bpuart", mc2661_device, read, write)
+ AM_RANGE(0xf9f3c, 0xf9f3d) AM_DEVREADWRITE("bppic", pic8259_device, read, write)
+ AM_RANGE(0xf9f40, 0xf9f5f) AM_DEVREADWRITE("rtc", mm58167_device, read, write)
+ AM_RANGE(0xf9f70, 0xf9f77) AM_DEVREADWRITE("hdc", wd2010_device, read, write)
AM_RANGE(0xfa000,0xfa7ff) AM_RAM AM_SHARE ("charcopy")
AM_RANGE(0xfb000,0xfb7ff) AM_RAM AM_SHARE ("framebuffer")
AM_RANGE(0xfc000,0xfffff) AM_ROM AM_REGION("bios", 0)
@@ -161,8 +178,22 @@ static ADDRESS_MAP_START(pg685oua12_mem, AS_PROGRAM, 16, pg685_state)
AM_RANGE(0x00000,0xdffff) AM_RAM
AM_RANGE(0xe0000,0xeffff) AM_RAM AM_SHARE ("framebuffer16")
AM_RANGE(0xf0000,0xf1fff) AM_RAM
- AM_RANGE(0xf9f80,0xf9f81) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, status_r, address_w, 0x00ff)
- AM_RANGE(0xf9f80,0xf9f81) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, register_r, register_w, 0xff00)
+ AM_RANGE(0xf9f00, 0xf9f01) AM_DEVREADWRITE8("kbdc", i8279_device, read, write, 0xffff)
+ AM_RANGE(0xf9f06, 0xf9f07) AM_DEVREADWRITE8("mainpic", pic8259_device, read, write, 0xffff)
+ AM_RANGE(0xf9f08, 0xf9f09) AM_DEVREADWRITE8("mainuart", i8251_device, data_r, data_w, 0x00ff)
+ AM_RANGE(0xf9f08, 0xf9f09) AM_DEVREADWRITE8("mainuart", i8251_device, status_r, control_w, 0xff00)
+ AM_RANGE(0xf9f20, 0xf9f23) AM_DEVREADWRITE8("fdc", wd2797_t, read, write, 0xffff)
+ AM_RANGE(0xf9f28, 0xf9f2b) AM_DEVREADWRITE8("modppi1", i8255_device, read, write, 0xffff)
+ AM_RANGE(0xf9f2c, 0xf9f2f) AM_DEVREADWRITE8("modppi2", i8255_device, read, write, 0xffff)
+ AM_RANGE(0xf9f30, 0xf9f31) AM_DEVREADWRITE8("moduart", i8251_device, data_r, data_w, 0x00ff)
+ AM_RANGE(0xf9f30, 0xf9f31) AM_DEVREADWRITE8("moduart", i8251_device, status_r, control_w, 0xff00)
+ AM_RANGE(0xf9f34, 0xf9f37) AM_DEVREADWRITE8("bppit", pit8253_device, read, write, 0xffff)
+ AM_RANGE(0xf9f38, 0xf9f3b) AM_DEVREADWRITE8("bpuart", mc2661_device, read, write, 0xffff)
+ AM_RANGE(0xf9f3c, 0xf9f3d) AM_DEVREADWRITE8("bppic", pic8259_device, read, write, 0xffff)
+ AM_RANGE(0xf9f40, 0xf9f5f) AM_DEVREADWRITE8("rtc", mm58167_device, read, write, 0xffff)
+ AM_RANGE(0xf9f70, 0xf9f77) AM_DEVREADWRITE8("hdc", wd2010_device, read, write, 0xffff)
+ AM_RANGE(0xf9f80, 0xf9f81) AM_DEVREADWRITE8("crtc", mc6845_device, status_r, address_w, 0x00ff)
+ AM_RANGE(0xf9f80, 0xf9f81) AM_DEVREADWRITE8("crtc", mc6845_device, register_r, register_w, 0xff00)
AM_RANGE(0xfc000,0xfffff) AM_RAM // BIOS RAM shadow
AM_RANGE(0xffc000,0xffffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
@@ -255,10 +286,33 @@ MC6845_UPDATE_ROW( pg685_state::crtc_update_row_oua12 )
// MACHINE DRIVERS
//**************************************************************************
+static MACHINE_CONFIG_FRAGMENT(pg685_backplane)
+ MCFG_DEVICE_ADD("bppit", PIT8253, 0)
+
+ MCFG_PIC8259_ADD("bppic", NOOP, VCC, NOOP) // ???
+
+ MCFG_DEVICE_ADD("bpuart", MC2661, XTAL_4_9152MHz) // internal clock
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_FRAGMENT(pg685_module)
+ MCFG_DEVICE_ADD("fdc", WD2797, XTAL_4MHz / 2) // divider guessed
+ MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE("mainpic", pic8259_device, ir4_w))
+
+ MCFG_DEVICE_ADD("modppi1", I8255, 0)
+ MCFG_DEVICE_ADD("modppi2", I8255, 0)
+
+ MCFG_DEVICE_ADD("moduart", I8251, XTAL_4MHz / 2) // divider guessed
+
+ MCFG_DEVICE_ADD("rtc", MM58167, XTAL_32_768kHz)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_START( pg685, pg685_state )
// main cpu
MCFG_CPU_ADD("maincpu", V20, XTAL_15MHz / 3)
MCFG_CPU_PROGRAM_MAP(pg685_mem)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mainpic", pic8259_device, inta_cb)
+
+ MCFG_PIC8259_ADD("mainpic", INPUTLINE("maincpu", 0), VCC, NOOP)
// i/o cpu
@@ -267,35 +321,43 @@ static MACHINE_CONFIG_START( pg685, pg685_state )
// video hardware
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(12288000, 882, 0, 720, 370, 0, 350 ) // not real values
- MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update )
+ MCFG_SCREEN_UPDATE_DEVICE( "crtc", mc6845_device, screen_update )
- MCFG_MC6845_ADD(CRTC_TAG, MC6845, "screen", 12288000)
+ MCFG_MC6845_ADD("crtc", MC6845, "screen", 12288000)
MCFG_MC6845_SHOW_BORDER_AREA(false)
MCFG_MC6845_CHAR_WIDTH(8)
MCFG_MC6845_UPDATE_ROW_CB(pg685_state, crtc_update_row)
-
- // RTC
- MCFG_DEVICE_ADD(RTC_TAG, MM58167, XTAL_32_768kHz)
// sound hardware
// devices
+ MCFG_FRAGMENT_ADD(pg685_backplane)
+ MCFG_FRAGMENT_ADD(pg685_module)
+
+ MCFG_DEVICE_ADD("mainuart", I8251, XTAL_12_288MHz / 6) // divider guessed
// rs232 port
// keyboard
+ MCFG_DEVICE_ADD("kbdc", I8279, XTAL_12_288MHz / 6) // divider guessed
+ MCFG_I8279_OUT_IRQ_CB(DEVWRITELINE("mainpic", pic8259_device, ir0_w))
// printer
// floppy
// harddisk
+ MCFG_DEVICE_ADD("hdc", WD2010, XTAL_10MHz / 2) // divider guessed
+ MCFG_WD2010_OUT_INTRQ_CB(DEVWRITELINE("mainpic", pic8259_device, ir3_w))
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( pg685oua12, pg685_state )
// main cpu
MCFG_CPU_ADD("maincpu", I80286, XTAL_20MHz / 2)
MCFG_CPU_PROGRAM_MAP(pg685oua12_mem)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mainpic", pic8259_device, inta_cb)
+
+ MCFG_PIC8259_ADD("mainpic", INPUTLINE("maincpu", 0), VCC, NOOP)
// i/o cpu
@@ -304,9 +366,9 @@ static MACHINE_CONFIG_START( pg685oua12, pg685_state )
// video hardware
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(12288000, 882, 0, 720, 370, 0, 350 ) // not real values
- MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update )
+ MCFG_SCREEN_UPDATE_DEVICE( "crtc", mc6845_device, screen_update )
- MCFG_MC6845_ADD(CRTC_TAG, MC6845, "screen", 12288000)
+ MCFG_MC6845_ADD("crtc", MC6845, "screen", 12288000)
MCFG_MC6845_SHOW_BORDER_AREA(false)
MCFG_MC6845_CHAR_WIDTH(8)
MCFG_MC6845_UPDATE_ROW_CB(pg685_state, crtc_update_row_oua12)
@@ -314,16 +376,24 @@ static MACHINE_CONFIG_START( pg685oua12, pg685_state )
// sound hardware
// devices
+ MCFG_FRAGMENT_ADD(pg685_backplane)
+ MCFG_FRAGMENT_ADD(pg685_module)
+
+ MCFG_DEVICE_ADD("mainuart", I8251, 12288000 / 6) // wrong
// rs232 port
// keyboard
+ MCFG_DEVICE_ADD("kbdc", I8279, 12288000 / 6) // wrong
+ MCFG_I8279_OUT_IRQ_CB(DEVWRITELINE("mainpic", pic8259_device, ir0_w))
// printer
// floppy
// harddisk
+ MCFG_DEVICE_ADD("hdc", WD2010, XTAL_10MHz / 2) // divider guessed
+ MCFG_WD2010_OUT_INTRQ_CB(DEVWRITELINE("mainpic", pic8259_device, ir3_w))
MACHINE_CONFIG_END