summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/drivers/m24.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/drivers/m24.c')
-rw-r--r--src/mess/drivers/m24.c97
1 files changed, 93 insertions, 4 deletions
diff --git a/src/mess/drivers/m24.c b/src/mess/drivers/m24.c
index d6123e704db..a5a4fa9dbb0 100644
--- a/src/mess/drivers/m24.c
+++ b/src/mess/drivers/m24.c
@@ -1,9 +1,11 @@
#include "emu.h"
#include "cpu/i86/i86.h"
+#include "cpu/tms7000/tms7000.h"
#include "bus/isa/isa.h"
#include "bus/isa/isa_cards.h"
#include "machine/pckeybrd.h"
+#include "machine/mm58274c.h"
#include "includes/genpc.h"
class m24_state : public driver_device
@@ -12,23 +14,85 @@ public:
m24_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_mb(*this, "mb")
+ m_mb(*this, "mb"),
+ m_kbc(*this, "kbc")
{ }
required_device<cpu_device> m_maincpu;
required_device<pc_noppi_mb_device> m_mb;
+ required_device<cpu_device> m_kbc;
DECLARE_READ8_MEMBER(keyboard_r);
DECLARE_WRITE8_MEMBER(keyboard_w);
+ DECLARE_READ8_MEMBER(pa_r);
+ DECLARE_WRITE8_MEMBER(pb_w);
+ DECLARE_READ8_MEMBER(kbcdata_r);
+ DECLARE_WRITE8_MEMBER(kbcdata_w);
+ DECLARE_WRITE8_MEMBER(kbcstat_w);
+
+ UINT8 m_sysctl, m_pa, m_kbcstat, m_kbcdata;
+ bool m_kbcibf;
};
READ8_MEMBER(m24_state::keyboard_r)
{
- return 0;
+ switch(offset)
+ {
+ case 0:
+ m_pa &= ~0x40;
+ m_mb->m_pic8259->ir1_w(0);
+ return m_kbcdata;
+ case 1:
+ return m_sysctl;
+ case 2:
+ return 0;
+ case 4:
+ return m_kbcibf ? 2 : 0;
+ }
+ return 0xff;
}
WRITE8_MEMBER(m24_state::keyboard_w)
{
+ switch(offset)
+ {
+ case 0:
+ m_kbc->set_input_line(TMS7000_INT1_LINE, ASSERT_LINE);
+ m_kbcibf = true;
+ m_kbcdata = data;
+ break;
+ case 1:
+ m_sysctl = data;
+ m_mb->m_pit8253->write_gate2(BIT(data, 0));
+ m_mb->pc_speaker_set_spkrdata(BIT(data, 1));
+ if(BIT(data, 6))
+ m_pa |= 2;
+ else
+ m_pa &= ~2;
+ break;
+ }
+}
+
+READ8_MEMBER(m24_state::pa_r)
+{
+ return m_pa;
+}
+
+WRITE8_MEMBER(m24_state::pb_w)
+{
+}
+READ8_MEMBER(m24_state::kbcdata_r)
+{
+ m_kbc->set_input_line(TMS7000_INT1_LINE, CLEAR_LINE);
+ m_kbcibf = false;
+ return m_kbcdata;
+}
+
+WRITE8_MEMBER(m24_state::kbcdata_w)
+{
+ m_pa |= 0x40;
+ m_mb->m_pic8259->ir1_w(1);
+ m_kbcdata = data;
}
static ADDRESS_MAP_START( m24_map, AS_PROGRAM, 16, m24_state )
@@ -42,6 +106,18 @@ static ADDRESS_MAP_START(m24_io, AS_IO, 16, m24_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0060, 0x0065) AM_READWRITE8(keyboard_r, keyboard_w, 0xffff)
AM_RANGE(0x0066, 0x0067) AM_READ_PORT("DSW0")
+ AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("mm58174an", mm58274c_device, read, write, 0xffff)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START(kbc_map, AS_PROGRAM, 8, m24_state)
+ AM_RANGE(0x8000, 0x8fff) AM_READ(kbcdata_r)
+ AM_RANGE(0xa000, 0xafff) AM_WRITE(kbcdata_w)
+ AM_RANGE(0xf800, 0xffff) AM_ROM AM_REGION("kbc", 0)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START(kbc_io, AS_IO, 8, m24_state)
+ AM_RANGE(TMS7000_PORTA, TMS7000_PORTA) AM_READ(pa_r)
+ AM_RANGE(TMS7000_PORTB, TMS7000_PORTB) AM_WRITE(pb_w)
ADDRESS_MAP_END
static INPUT_PORTS_START( m24 )
@@ -102,12 +178,18 @@ static MACHINE_CONFIG_START( olivetti, m24_state )
MCFG_ISA8_SLOT_ADD("mb:isa", "isa3", pc_isa8_cards, "lpt", false)
MCFG_ISA8_SLOT_ADD("mb:isa", "isa4", pc_isa8_cards, "com", false)
- /* keyboard */
- MCFG_PC_KEYB_ADD("pc_keyboard", DEVWRITELINE("mb:pic8259", pic8259_device, ir1_w))
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_CPU_ADD("kbc", TMS7000, XTAL_4MHz)
+ MCFG_CPU_PROGRAM_MAP(kbc_map)
+ MCFG_CPU_IO_MAP(kbc_io)
+
+ MCFG_DEVICE_ADD("mm58174an", MM58274C, 0)
+ MCFG_MM58274C_MODE24(1) // ?
+ MCFG_MM58274C_DAY1(1) // ?
+
/* software lists */
MCFG_SOFTWARE_LIST_ADD("disk_list","ibm5150")
MACHINE_CONFIG_END
@@ -116,12 +198,19 @@ ROM_START( m24 )
ROM_REGION16_LE(0x8000,"maincpu", 0)
ROMX_LOAD("olivetti_m24_version_1.43_high.bin",0x4001, 0x2000, CRC(04e697ba) SHA1(1066dcc849e6289b5ac6372c84a590e456d497a6), ROM_SKIP(1))
ROMX_LOAD("olivetti_m24_version_1.43_low.bin", 0x4000, 0x2000, CRC(ff7e0f10) SHA1(13423011a9bae3f3193e8c199f98a496cab48c0f), ROM_SKIP(1))
+
+ ROM_REGION(0x800, "kbc", 0)
+ ROM_LOAD("PDBD.tms2516.KeyboardMCUReplacementDaughterboard_10U", 0x000, 0x800, CRC(b8c4c18a) SHA1(25b4c24e19ff91924c53557c66513ab242d926c6))
ROM_END
ROM_START( m240 )
ROM_REGION16_LE(0x8000,"maincpu", 0)
ROMX_LOAD("olivetti_m240_pch5_2.04_high.bin", 0x0001, 0x4000, CRC(ceb97b59) SHA1(84fabbeab355e0a4c9445910f2b7d1ec98886642), ROM_SKIP(1))
ROMX_LOAD("olivetti_m240_pch6_2.04_low.bin", 0x0000, 0x4000, CRC(c463aa94) SHA1(a30c763c1ace9f3ff79e7136b252d624108a50ae), ROM_SKIP(1))
+
+ // is this one the same?
+ ROM_REGION(0x800, "kbc", 0)
+ ROM_LOAD("PDBD.tms2516.KeyboardMCUReplacementDaughterboard_10U", 0x000, 0x800, BAD_DUMP CRC(b8c4c18a) SHA1(25b4c24e19ff91924c53557c66513ab242d926c6))
ROM_END
COMP( 1983, m24, ibm5150, 0, olivetti, m24, driver_device, 0, "Olivetti", "M24", GAME_NOT_WORKING)