trunk/src/mame/drivers/kenseim.c
| r30747 | r30748 | |
| 42 | 42 | /* kenseim */ |
| 43 | 43 | DECLARE_READ16_MEMBER(cps1_kensei_r); |
| 44 | 44 | DECLARE_WRITE16_MEMBER(cps1_kensei_w); |
| 45 | DECLARE_READ16_MEMBER(kensei_dsw_r); |
| 45 | 46 | DECLARE_DRIVER_INIT(kenseim); |
| 46 | 47 | |
| 47 | 48 | DECLARE_READ8_MEMBER(porta_default_r) { logerror("%s read port A but no handler assigned\n", machine().describe_context()); return 0xff; } |
| r30747 | r30748 | |
| 84 | 85 | |
| 85 | 86 | READ16_MEMBER(kenseim_state::cps1_kensei_r) |
| 86 | 87 | { |
| 87 | | logerror("%s cps1_kensei_r (%04x)\n", machine().describe_context(), mem_mask); |
| 88 | logerror("%s cps1_kensei_r offs %04x, (%04x)\n", machine().describe_context(), offset *2, mem_mask); |
| 88 | 89 | return rand(); |
| 89 | 90 | } |
| 90 | 91 | |
| 91 | 92 | WRITE16_MEMBER(kenseim_state::cps1_kensei_w) |
| 92 | 93 | { |
| 93 | | logerror("%s cps1_kensei_w %04x (%04x)\n", machine().describe_context(), data, mem_mask); |
| 94 | logerror("%s cps1_kensei_w offs %04x, %04x (%04x)\n", machine().describe_context(), offset *2, data, mem_mask); |
| 94 | 95 | } |
| 95 | 96 | |
| 96 | 97 | /* |
| r30747 | r30748 | |
| 188 | 189 | { NULL } |
| 189 | 190 | }; |
| 190 | 191 | |
| 192 | READ16_MEMBER(kenseim_state::kensei_dsw_r) |
| 193 | { |
| 191 | 194 | |
| 195 | |
| 196 | static const char *const dswname[] = { "IN0", "DSWA", "DSWB", "DSWC" }; |
| 197 | |
| 198 | if (offset > 0) |
| 199 | { |
| 200 | logerror("%s kensei_dsw_r offs %04x, (%04x)\n", machine().describe_context(), offset *2, mem_mask); |
| 201 | |
| 202 | int in = ioport(dswname[offset])->read(); |
| 203 | return (in << 8) | 0xff; |
| 204 | } |
| 205 | else |
| 206 | { // connected to the other board instead of IN0? (or at least some bits are) |
| 207 | |
| 208 | logerror("%s kensei_dsw_r offs %04x (comms?), (%04x)\n", machine().describe_context(), offset *2, mem_mask); |
| 209 | int in = ((rand() & 0xff) & ~0x20) | 0x40; // 0x20 causes 'comamnd wait' message - 0x40 is still service mode? (valid or leftover - test mode trigger should be on sub pcb?) |
| 210 | return (in << 8) | 0xff; |
| 211 | |
| 212 | } |
| 213 | } |
| 214 | |
| 215 | |
| 192 | 216 | static MACHINE_CONFIG_DERIVED_CLASS( kenseim, cps1_12MHz, kenseim_state ) |
| 193 | 217 | |
| 194 | 218 | MCFG_CPU_ADD("gamecpu", TMPZ84C011, XTAL_16MHz/2) // tmpz84c011 - divider unknown |
| r30747 | r30748 | |
| 220 | 244 | MCFG_QUANTUM_PERFECT_CPU("maincpu") |
| 221 | 245 | MACHINE_CONFIG_END |
| 222 | 246 | |
| 247 | |
| 223 | 248 | static INPUT_PORTS_START( kenseim ) |
| 224 | 249 | // the regular CPS1 input ports are used for comms with the extra board |
| 225 | 250 | PORT_START("IN0") |
| r30747 | r30748 | |
| 339 | 364 | DRIVER_INIT_MEMBER(kenseim_state,kenseim) |
| 340 | 365 | { |
| 341 | 366 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x800000, 0x800007, read16_delegate(FUNC(kenseim_state::cps1_kensei_r),this)); |
| 367 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x800018, 0x80001f, read16_delegate(FUNC(kenseim_state::kensei_dsw_r),this)); |
| 368 | |
| 342 | 369 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x800030, 0x800037, write16_delegate(FUNC(kenseim_state::cps1_kensei_w),this)); |
| 343 | 370 | |
| 344 | 371 | DRIVER_INIT_CALL(cps1); |
| 345 | | } |
| 372 | } |
| 346 | 373 | |
| 347 | 374 | |
| 348 | 375 | // 1994.04.18 is from extra PCB rom, Siguma or Sigma? (Siguma is in the ROM) |