diff options
author | cracyc <cracyc@users.noreply.github.com> | 2013-11-11 18:25:52 +0000 |
---|---|---|
committer | cracyc <cracyc@users.noreply.github.com> | 2013-11-11 18:25:52 +0000 |
commit | 9ef9fbf72a59b16b8b70e4f3ae804e76b0474d64 (patch) | |
tree | 86469d0fd4a52e243f8dfebd7c60c5cca4c6399d /src/mess/drivers/isbc.c | |
parent | c4b09b733ccae3df14b05f931f5a3a61c2d01a64 (diff) |
(mess) isbc: bit more checkpoint (nw)
Diffstat (limited to 'src/mess/drivers/isbc.c')
-rw-r--r-- | src/mess/drivers/isbc.c | 75 |
1 files changed, 69 insertions, 6 deletions
diff --git a/src/mess/drivers/isbc.c b/src/mess/drivers/isbc.c index 4dc11f004e4..c4363275b1c 100644 --- a/src/mess/drivers/isbc.c +++ b/src/mess/drivers/isbc.c @@ -22,6 +22,8 @@ isbc86 commands: BYTE WORD REAL EREAL ROMTEST. ROMTEST works, the others hang. #include "machine/i8251.h" #include "machine/z80dart.h" #include "machine/serial.h" +#include "bus/centronics/ctronics.h" +#include "bus/isbx/isbx.h" class isbc_state : public driver_device { @@ -32,7 +34,8 @@ public: m_terminal(*this, "terminal"), m_uart8251(*this, "uart8251"), m_uart8274(*this, "uart8274"), - m_pic_1(*this, "pic_1") + m_pic_1(*this, "pic_1"), + m_centronics(*this, "centronics") { } required_device<cpu_device> m_maincpu; @@ -40,10 +43,14 @@ public: optional_device<i8251_device> m_uart8251; optional_device<i8274_device> m_uart8274; optional_device<pic8259_device> m_pic_1; + optional_device<centronics_device> m_centronics; + DECLARE_WRITE_LINE_MEMBER(lpt_ack); DECLARE_WRITE_LINE_MEMBER(isbc86_tmr2_w); DECLARE_WRITE_LINE_MEMBER(isbc286_tmr2_w); DECLARE_READ8_MEMBER(get_slave_ack); + DECLARE_READ8_MEMBER(ppi_b_r); + DECLARE_WRITE8_MEMBER(ppi_c_w); }; static ADDRESS_MAP_START(rpc86_mem, AS_PROGRAM, 16, isbc_state) @@ -76,6 +83,14 @@ ADDRESS_MAP_END static ADDRESS_MAP_START(isbc286_io, AS_IO, 16, isbc_state) ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0080, 0x008f) AM_DEVREADWRITE8("sbx1", isbx_slot_device, mcs0_r, mcs0_w, 0x00ff) + AM_RANGE(0x0080, 0x008f) AM_DEVREADWRITE8("sbx1", isbx_slot_device, mcs0_r, mcs0_w, 0xff00) + AM_RANGE(0x0090, 0x009f) AM_DEVREADWRITE8("sbx1", isbx_slot_device, mcs1_r, mcs1_w, 0x00ff) + AM_RANGE(0x0090, 0x009f) AM_DEVREADWRITE8("sbx1", isbx_slot_device, mcs1_r, mcs1_w, 0xff00) + AM_RANGE(0x00a0, 0x00af) AM_DEVREADWRITE8("sbx2", isbx_slot_device, mcs0_r, mcs0_w, 0x00ff) + AM_RANGE(0x00a0, 0x00af) AM_DEVREADWRITE8("sbx2", isbx_slot_device, mcs0_r, mcs0_w, 0xff00) + AM_RANGE(0x00b0, 0x00bf) AM_DEVREADWRITE8("sbx2", isbx_slot_device, mcs1_r, mcs1_w, 0x00ff) + AM_RANGE(0x00b0, 0x00bf) AM_DEVREADWRITE8("sbx2", isbx_slot_device, mcs1_r, mcs1_w, 0xff00) AM_RANGE(0x00c0, 0x00c3) AM_DEVREADWRITE8("pic_0", pic8259_device, read, write, 0x00ff) AM_RANGE(0x00c4, 0x00c7) AM_DEVREADWRITE8("pic_1", pic8259_device, read, write, 0x00ff) AM_RANGE(0x00c8, 0x00cf) AM_DEVREADWRITE8("ppi", i8255_device, read, write, 0x00ff) @@ -166,7 +181,7 @@ WRITE_LINE_MEMBER( isbc_state::isbc286_tmr2_w ) m_uart8274->txca_w(state); } -static const i8255_interface isbc_ppi_interface = +static const i8255_interface isbc86_ppi_interface = { DEVCB_NULL, DEVCB_NULL, @@ -176,6 +191,33 @@ static const i8255_interface isbc_ppi_interface = DEVCB_NULL }; +static const i8255_interface isbc286_ppi_interface = +{ + DEVCB_NULL, + DEVCB_DEVICE_MEMBER("centronics", centronics_device, write), + DEVCB_DRIVER_MEMBER(isbc_state, ppi_b_r), + DEVCB_NULL, + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(isbc_state, ppi_c_w), +}; + +READ8_MEMBER( isbc_state::ppi_b_r ) +{ + UINT8 data = 0; + data |= m_centronics->ack_r() ? 0x10 : 0; + data |= m_centronics->fault_r() ? 0x40 : 0; + data |= m_centronics->busy_r() ? 0x80 : 0; + return data; +} + +WRITE8_MEMBER( isbc_state::ppi_c_w ) +{ + m_centronics->strobe_w(data & 1); + + if(data & 0x80) + m_pic_1->ir7_w(0); +} + static I8274_INTERFACE(isbc_uart8274_interface) { 0, 0, 0, 0, @@ -227,6 +269,19 @@ READ8_MEMBER( isbc_state::get_slave_ack ) return 0x00; } +static const centronics_interface isbc_centronics = +{ + DEVCB_DRIVER_LINE_MEMBER(isbc_state, lpt_ack), + DEVCB_NULL, + DEVCB_NULL +}; + +WRITE_LINE_MEMBER( isbc_state::lpt_ack ) +{ + if(state) + m_pic_1->ir7_w(1); +} + static MACHINE_CONFIG_START( isbc86, isbc_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", I8086, XTAL_5MHz) @@ -234,7 +289,7 @@ static MACHINE_CONFIG_START( isbc86, isbc_state ) MCFG_CPU_IO_MAP(isbc_io) MCFG_PIC8259_ADD("pic_0", INPUTLINE(":maincpu", 0), VCC, NULL) MCFG_PIT8253_ADD("pit", isbc86_pit_config) - MCFG_I8255A_ADD("ppi", isbc_ppi_interface) + MCFG_I8255A_ADD("ppi", isbc86_ppi_interface) MCFG_I8251_ADD("uart8251", isbc_uart8251_interface) /* video hardware */ @@ -254,16 +309,24 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_START( isbc286, isbc_state ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", I80286, XTAL_8MHz) + MCFG_CPU_ADD("maincpu", I80286, XTAL_16MHz/2) MCFG_CPU_PROGRAM_MAP(isbc286_mem) MCFG_CPU_IO_MAP(isbc286_io) MCFG_PIC8259_ADD("pic_0", INPUTLINE(":maincpu", 0), VCC, READ8(isbc_state, get_slave_ack)) MCFG_PIC8259_ADD("pic_1", DEVWRITELINE("pic_0", pic8259_device, ir7_w), GND, NULL) MCFG_PIT8254_ADD("pit", isbc286_pit_config) - MCFG_I8255A_ADD("ppi", isbc_ppi_interface) + MCFG_I8255A_ADD("ppi", isbc286_ppi_interface) + MCFG_CENTRONICS_PRINTER_ADD("centronics", isbc_centronics) MCFG_I8274_ADD("uart8274", XTAL_16MHz/4, isbc_uart8274_interface) MCFG_RS232_PORT_ADD("rs232", rs232_intf, default_rs232_devices, NULL) + MCFG_ISBX_SLOT_ADD("sbx1", 0, isbx_cards, "fdc") + MCFG_ISBX_SLOT_MINTR0_CALLBACK(DEVWRITELINE("pic_1", pic8259_device, ir3_w)) + MCFG_ISBX_SLOT_MINTR1_CALLBACK(DEVWRITELINE("pic_1", pic8259_device, ir4_w)) + MCFG_ISBX_SLOT_ADD("sbx2", 0, isbx_cards, NULL) + MCFG_ISBX_SLOT_MINTR0_CALLBACK(DEVWRITELINE("pic_1", pic8259_device, ir5_w)) + MCFG_ISBX_SLOT_MINTR1_CALLBACK(DEVWRITELINE("pic_1", pic8259_device, ir6_w)) + /* video hardware */ MCFG_SERIAL_TERMINAL_ADD("terminal", terminal_intf, 9600) MCFG_DEVICE_INPUT_DEFAULTS(isbc286_terminal) @@ -313,4 +376,4 @@ ROM_END COMP( 19??, rpc86, 0, 0, rpc86, isbc, driver_device, 0, "Intel", "RPC 86",GAME_NOT_WORKING | GAME_NO_SOUND) COMP( 1978, isbc86, 0, 0, isbc86, isbc, driver_device, 0, "Intel", "iSBC 86/12A",GAME_NOT_WORKING | GAME_NO_SOUND) COMP( 19??, isbc286, 0, 0, isbc286, isbc, driver_device, 0, "Intel", "iSBC 286",GAME_NOT_WORKING | GAME_NO_SOUND) -COMP( 1985, isbc2861, 0, 0, isbc2861, isbc, driver_device, 0, "Intel", "iSBC 286-10",GAME_NOT_WORKING | GAME_NO_SOUND) +COMP( 1983, isbc2861, 0, 0, isbc2861, isbc, driver_device, 0, "Intel", "iSBC 286/10",GAME_NOT_WORKING | GAME_NO_SOUND) |