Previous 199869 Revisions Next

r36355 Tuesday 10th March, 2015 at 03:28:11 UTC by Carl
(mess) m24: keyboard controller [Carl, Lord Nightmare, rfka01]
[src/mess/drivers]m24.c

trunk/src/mess/drivers/m24.c
r244866r244867
11#include "emu.h"
22
33#include "cpu/i86/i86.h"
4#include "cpu/tms7000/tms7000.h"
45#include "bus/isa/isa.h"
56#include "bus/isa/isa_cards.h"
67#include "machine/pckeybrd.h"
8#include "machine/mm58274c.h"
79#include "includes/genpc.h"
810
911class m24_state : public driver_device
r244866r244867
1214   m24_state(const machine_config &mconfig, device_type type, const char *tag) :
1315      driver_device(mconfig, type, tag),
1416      m_maincpu(*this, "maincpu"),
15      m_mb(*this, "mb")
17      m_mb(*this, "mb"),
18      m_kbc(*this, "kbc")
1619   { }
1720   required_device<cpu_device> m_maincpu;
1821   required_device<pc_noppi_mb_device> m_mb;
22   required_device<cpu_device> m_kbc;
1923
2024   DECLARE_READ8_MEMBER(keyboard_r);
2125   DECLARE_WRITE8_MEMBER(keyboard_w);
26   DECLARE_READ8_MEMBER(pa_r);
27   DECLARE_WRITE8_MEMBER(pb_w);
28   DECLARE_READ8_MEMBER(kbcdata_r);
29   DECLARE_WRITE8_MEMBER(kbcdata_w);
30   DECLARE_WRITE8_MEMBER(kbcstat_w);
31
32   UINT8 m_sysctl, m_pa, m_kbcstat, m_kbcdata;
33   bool m_kbcibf;
2234};
2335
2436READ8_MEMBER(m24_state::keyboard_r)
2537{
26   return 0;
38   switch(offset)
39   {
40      case 0:
41         m_pa &= ~0x40;
42         m_mb->m_pic8259->ir1_w(0);
43         return m_kbcdata;
44      case 1:
45         return m_sysctl;
46      case 2:
47         return 0;
48      case 4:
49         return m_kbcibf ? 2 : 0;
50   }
51   return 0xff;
2752}
2853
2954WRITE8_MEMBER(m24_state::keyboard_w)
3055{
56   switch(offset)
57   {
58      case 0:
59         m_kbc->set_input_line(TMS7000_INT1_LINE, ASSERT_LINE);
60         m_kbcibf = true;
61         m_kbcdata = data;
62         break;
63      case 1:
64         m_sysctl = data;
65         m_mb->m_pit8253->write_gate2(BIT(data, 0));
66         m_mb->pc_speaker_set_spkrdata(BIT(data, 1));
67         if(BIT(data, 6))
68            m_pa |= 2;
69         else
70            m_pa &= ~2;
71         break;
72   }
73}
3174
75READ8_MEMBER(m24_state::pa_r)
76{
77   return m_pa;
3278}
3379
80WRITE8_MEMBER(m24_state::pb_w)
81{
82}
83
84READ8_MEMBER(m24_state::kbcdata_r)
85{
86   m_kbc->set_input_line(TMS7000_INT1_LINE, CLEAR_LINE);
87   m_kbcibf = false;
88   return m_kbcdata;
89}
90
91WRITE8_MEMBER(m24_state::kbcdata_w)
92{
93   m_pa |= 0x40;
94   m_mb->m_pic8259->ir1_w(1);
95   m_kbcdata = data;
96}
97
3498static ADDRESS_MAP_START( m24_map, AS_PROGRAM, 16, m24_state )
3599   ADDRESS_MAP_UNMAP_HIGH
36100   AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
r244866r244867
42106   ADDRESS_MAP_UNMAP_HIGH
43107   AM_RANGE(0x0060, 0x0065) AM_READWRITE8(keyboard_r, keyboard_w, 0xffff)
44108   AM_RANGE(0x0066, 0x0067) AM_READ_PORT("DSW0")
109   AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("mm58174an", mm58274c_device, read, write, 0xffff)
45110ADDRESS_MAP_END
46111
112static ADDRESS_MAP_START(kbc_map, AS_PROGRAM, 8, m24_state)
113   AM_RANGE(0x8000, 0x8fff) AM_READ(kbcdata_r)
114   AM_RANGE(0xa000, 0xafff) AM_WRITE(kbcdata_w)
115   AM_RANGE(0xf800, 0xffff) AM_ROM AM_REGION("kbc", 0)
116ADDRESS_MAP_END
117
118static ADDRESS_MAP_START(kbc_io, AS_IO, 8, m24_state)
119   AM_RANGE(TMS7000_PORTA, TMS7000_PORTA) AM_READ(pa_r)
120   AM_RANGE(TMS7000_PORTB, TMS7000_PORTB) AM_WRITE(pb_w)
121ADDRESS_MAP_END
122
47123static INPUT_PORTS_START( m24 )
48124   PORT_START("DSW0")
49125   PORT_DIPNAME( 0x8f, 0x89, "RAM banks")
r244866r244867
102178   MCFG_ISA8_SLOT_ADD("mb:isa", "isa3", pc_isa8_cards, "lpt", false)
103179   MCFG_ISA8_SLOT_ADD("mb:isa", "isa4", pc_isa8_cards, "com", false)
104180
105   /* keyboard */
106   MCFG_PC_KEYB_ADD("pc_keyboard", DEVWRITELINE("mb:pic8259", pic8259_device, ir1_w))
107181   /* internal ram */
108182   MCFG_RAM_ADD(RAM_TAG)
109183   MCFG_RAM_DEFAULT_SIZE("640K")
110184
185   MCFG_CPU_ADD("kbc", TMS7000, XTAL_4MHz)
186   MCFG_CPU_PROGRAM_MAP(kbc_map)
187   MCFG_CPU_IO_MAP(kbc_io)
188
189   MCFG_DEVICE_ADD("mm58174an", MM58274C, 0)
190   MCFG_MM58274C_MODE24(1) // ?
191   MCFG_MM58274C_DAY1(1)   // ?
192
111193   /* software lists */
112194   MCFG_SOFTWARE_LIST_ADD("disk_list","ibm5150")
113195MACHINE_CONFIG_END
r244866r244867
116198   ROM_REGION16_LE(0x8000,"maincpu", 0)
117199   ROMX_LOAD("olivetti_m24_version_1.43_high.bin",0x4001, 0x2000, CRC(04e697ba) SHA1(1066dcc849e6289b5ac6372c84a590e456d497a6), ROM_SKIP(1))
118200   ROMX_LOAD("olivetti_m24_version_1.43_low.bin", 0x4000, 0x2000, CRC(ff7e0f10) SHA1(13423011a9bae3f3193e8c199f98a496cab48c0f), ROM_SKIP(1))
201
202   ROM_REGION(0x800, "kbc", 0)
203   ROM_LOAD("PDBD.tms2516.KeyboardMCUReplacementDaughterboard_10U", 0x000, 0x800, CRC(b8c4c18a) SHA1(25b4c24e19ff91924c53557c66513ab242d926c6))
119204ROM_END
120205
121206ROM_START( m240 )
122207   ROM_REGION16_LE(0x8000,"maincpu", 0)
123208   ROMX_LOAD("olivetti_m240_pch5_2.04_high.bin", 0x0001, 0x4000, CRC(ceb97b59) SHA1(84fabbeab355e0a4c9445910f2b7d1ec98886642), ROM_SKIP(1))
124209   ROMX_LOAD("olivetti_m240_pch6_2.04_low.bin",  0x0000, 0x4000, CRC(c463aa94) SHA1(a30c763c1ace9f3ff79e7136b252d624108a50ae), ROM_SKIP(1))
210
211   // is this one the same?
212   ROM_REGION(0x800, "kbc", 0)
213   ROM_LOAD("PDBD.tms2516.KeyboardMCUReplacementDaughterboard_10U", 0x000, 0x800, BAD_DUMP CRC(b8c4c18a) SHA1(25b4c24e19ff91924c53557c66513ab242d926c6))
125214ROM_END
126215
127216COMP( 1983, m24,        ibm5150,    0,          olivetti,   m24, driver_device,      0,      "Olivetti", "M24", GAME_NOT_WORKING)


Previous 199869 Revisions Next


© 1997-2024 The MAME Team