trunk/src/mess/drivers/m24.c
| r244866 | r244867 | |
| 1 | 1 | #include "emu.h" |
| 2 | 2 | |
| 3 | 3 | #include "cpu/i86/i86.h" |
| 4 | #include "cpu/tms7000/tms7000.h" |
| 4 | 5 | #include "bus/isa/isa.h" |
| 5 | 6 | #include "bus/isa/isa_cards.h" |
| 6 | 7 | #include "machine/pckeybrd.h" |
| 8 | #include "machine/mm58274c.h" |
| 7 | 9 | #include "includes/genpc.h" |
| 8 | 10 | |
| 9 | 11 | class m24_state : public driver_device |
| r244866 | r244867 | |
| 12 | 14 | m24_state(const machine_config &mconfig, device_type type, const char *tag) : |
| 13 | 15 | driver_device(mconfig, type, tag), |
| 14 | 16 | m_maincpu(*this, "maincpu"), |
| 15 | | m_mb(*this, "mb") |
| 17 | m_mb(*this, "mb"), |
| 18 | m_kbc(*this, "kbc") |
| 16 | 19 | { } |
| 17 | 20 | required_device<cpu_device> m_maincpu; |
| 18 | 21 | required_device<pc_noppi_mb_device> m_mb; |
| 22 | required_device<cpu_device> m_kbc; |
| 19 | 23 | |
| 20 | 24 | DECLARE_READ8_MEMBER(keyboard_r); |
| 21 | 25 | 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; |
| 22 | 34 | }; |
| 23 | 35 | |
| 24 | 36 | READ8_MEMBER(m24_state::keyboard_r) |
| 25 | 37 | { |
| 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; |
| 27 | 52 | } |
| 28 | 53 | |
| 29 | 54 | WRITE8_MEMBER(m24_state::keyboard_w) |
| 30 | 55 | { |
| 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 | } |
| 31 | 74 | |
| 75 | READ8_MEMBER(m24_state::pa_r) |
| 76 | { |
| 77 | return m_pa; |
| 32 | 78 | } |
| 33 | 79 | |
| 80 | WRITE8_MEMBER(m24_state::pb_w) |
| 81 | { |
| 82 | } |
| 83 | |
| 84 | READ8_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 | |
| 91 | WRITE8_MEMBER(m24_state::kbcdata_w) |
| 92 | { |
| 93 | m_pa |= 0x40; |
| 94 | m_mb->m_pic8259->ir1_w(1); |
| 95 | m_kbcdata = data; |
| 96 | } |
| 97 | |
| 34 | 98 | static ADDRESS_MAP_START( m24_map, AS_PROGRAM, 16, m24_state ) |
| 35 | 99 | ADDRESS_MAP_UNMAP_HIGH |
| 36 | 100 | AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10") |
| r244866 | r244867 | |
| 42 | 106 | ADDRESS_MAP_UNMAP_HIGH |
| 43 | 107 | AM_RANGE(0x0060, 0x0065) AM_READWRITE8(keyboard_r, keyboard_w, 0xffff) |
| 44 | 108 | AM_RANGE(0x0066, 0x0067) AM_READ_PORT("DSW0") |
| 109 | AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("mm58174an", mm58274c_device, read, write, 0xffff) |
| 45 | 110 | ADDRESS_MAP_END |
| 46 | 111 | |
| 112 | static 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) |
| 116 | ADDRESS_MAP_END |
| 117 | |
| 118 | static 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) |
| 121 | ADDRESS_MAP_END |
| 122 | |
| 47 | 123 | static INPUT_PORTS_START( m24 ) |
| 48 | 124 | PORT_START("DSW0") |
| 49 | 125 | PORT_DIPNAME( 0x8f, 0x89, "RAM banks") |
| r244866 | r244867 | |
| 102 | 178 | MCFG_ISA8_SLOT_ADD("mb:isa", "isa3", pc_isa8_cards, "lpt", false) |
| 103 | 179 | MCFG_ISA8_SLOT_ADD("mb:isa", "isa4", pc_isa8_cards, "com", false) |
| 104 | 180 | |
| 105 | | /* keyboard */ |
| 106 | | MCFG_PC_KEYB_ADD("pc_keyboard", DEVWRITELINE("mb:pic8259", pic8259_device, ir1_w)) |
| 107 | 181 | /* internal ram */ |
| 108 | 182 | MCFG_RAM_ADD(RAM_TAG) |
| 109 | 183 | MCFG_RAM_DEFAULT_SIZE("640K") |
| 110 | 184 | |
| 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 | |
| 111 | 193 | /* software lists */ |
| 112 | 194 | MCFG_SOFTWARE_LIST_ADD("disk_list","ibm5150") |
| 113 | 195 | MACHINE_CONFIG_END |
| r244866 | r244867 | |
| 116 | 198 | ROM_REGION16_LE(0x8000,"maincpu", 0) |
| 117 | 199 | ROMX_LOAD("olivetti_m24_version_1.43_high.bin",0x4001, 0x2000, CRC(04e697ba) SHA1(1066dcc849e6289b5ac6372c84a590e456d497a6), ROM_SKIP(1)) |
| 118 | 200 | 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)) |
| 119 | 204 | ROM_END |
| 120 | 205 | |
| 121 | 206 | ROM_START( m240 ) |
| 122 | 207 | ROM_REGION16_LE(0x8000,"maincpu", 0) |
| 123 | 208 | ROMX_LOAD("olivetti_m240_pch5_2.04_high.bin", 0x0001, 0x4000, CRC(ceb97b59) SHA1(84fabbeab355e0a4c9445910f2b7d1ec98886642), ROM_SKIP(1)) |
| 124 | 209 | 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)) |
| 125 | 214 | ROM_END |
| 126 | 215 | |
| 127 | 216 | COMP( 1983, m24, ibm5150, 0, olivetti, m24, driver_device, 0, "Olivetti", "M24", GAME_NOT_WORKING) |