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