trunk/src/mess/machine/imi5000h.c
| r23679 | r23680 | |
| 106 | 106 | // Z80CTC_INTERFACE( ctc_intf ) |
| 107 | 107 | //------------------------------------------------- |
| 108 | 108 | |
| 109 | WRITE_LINE_MEMBER( imi5000h_device::ctc_z0_w ) |
| 110 | { |
| 111 | m_ctc->trg1(state); |
| 112 | } |
| 113 | |
| 114 | WRITE_LINE_MEMBER( imi5000h_device::ctc_z1_w ) |
| 115 | { |
| 116 | m_ctc->trg2(state); |
| 117 | m_ctc->trg3(state); |
| 118 | } |
| 119 | |
| 120 | WRITE_LINE_MEMBER( imi5000h_device::ctc_z2_w ) |
| 121 | { |
| 122 | //m_memory_enable = state; |
| 123 | m_maincpu->set_input_line(INPUT_LINE_NMI, state); |
| 124 | } |
| 125 | |
| 109 | 126 | static Z80CTC_INTERFACE( ctc_intf ) |
| 110 | 127 | { |
| 111 | 128 | DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0), |
| 112 | | DEVCB_NULL, |
| 113 | | DEVCB_NULL, |
| 114 | | DEVCB_NULL |
| 129 | DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, ctc_z0_w), |
| 130 | DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, ctc_z1_w), |
| 131 | DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, ctc_z2_w) |
| 115 | 132 | }; |
| 116 | 133 | |
| 117 | 134 | |
| r23679 | r23680 | |
| 119 | 136 | // Z80PIO_INTERFACE( pio0_intf ) |
| 120 | 137 | //------------------------------------------------- |
| 121 | 138 | |
| 139 | READ8_MEMBER( imi5000h_device::pio0_pa_r ) |
| 140 | { |
| 141 | /* |
| 142 | |
| 143 | bit description |
| 144 | |
| 145 | 0 -SEEK COMPLETE |
| 146 | 1 -SECTOR SIZE 2 (UB4:4) |
| 147 | 2 -SECTOR SIZE 1 (UB4:1) |
| 148 | 3 -SECTOR SEL |
| 149 | 4 CRC ERROR |
| 150 | 5 WRITE FAULT |
| 151 | 6 -INDEX SEL |
| 152 | 7 |
| 153 | |
| 154 | */ |
| 155 | |
| 156 | return 0; |
| 157 | } |
| 158 | |
| 159 | WRITE8_MEMBER( imi5000h_device::pio0_pa_w ) |
| 160 | { |
| 161 | /* |
| 162 | |
| 163 | bit description |
| 164 | |
| 165 | 0 |
| 166 | 1 |
| 167 | 2 |
| 168 | 3 |
| 169 | 4 |
| 170 | 5 |
| 171 | 6 |
| 172 | 7 ACTIVITY LED |
| 173 | |
| 174 | */ |
| 175 | } |
| 176 | |
| 177 | READ8_MEMBER( imi5000h_device::pio0_pb_r ) |
| 178 | { |
| 179 | /* |
| 180 | |
| 181 | bit description |
| 182 | |
| 183 | 0 -READY |
| 184 | 1 |
| 185 | 2 |
| 186 | 3 |
| 187 | 4 |
| 188 | 5 |
| 189 | 6 |
| 190 | 7 |
| 191 | |
| 192 | */ |
| 193 | |
| 194 | return 0; |
| 195 | } |
| 196 | |
| 197 | WRITE8_MEMBER( imi5000h_device::pio0_pb_w ) |
| 198 | { |
| 199 | /* |
| 200 | |
| 201 | bit description |
| 202 | |
| 203 | 0 |
| 204 | 1 DIRECTION IN |
| 205 | 2 -HSXSTB |
| 206 | 3 STEP |
| 207 | 4 HEAD SEL 2^0 |
| 208 | 5 HEAD SEL 2^1 |
| 209 | 6 HEAD SEL 2^2 |
| 210 | 7 REDUCE WR CURRENT |
| 211 | |
| 212 | */ |
| 213 | } |
| 214 | |
| 122 | 215 | static Z80PIO_INTERFACE( pio0_intf ) |
| 123 | 216 | { |
| 124 | 217 | DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0), |
| 125 | | DEVCB_NULL, |
| 126 | | DEVCB_NULL, |
| 127 | | DEVCB_NULL, |
| 128 | | DEVCB_NULL, |
| 129 | | DEVCB_NULL, |
| 130 | | DEVCB_NULL |
| 218 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, pio0_pa_r), |
| 219 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, pio0_pa_w), |
| 220 | DEVCB_DEVICE_LINE_MEMBER(Z80PIO_0_TAG, z80pio_device, strobe_a), |
| 221 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, pio0_pb_r), |
| 222 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, pio0_pb_w), |
| 223 | DEVCB_DEVICE_LINE_MEMBER(Z80PIO_0_TAG, z80pio_device, strobe_b) |
| 131 | 224 | }; |
| 132 | 225 | |
| 133 | 226 | |
| r23679 | r23680 | |
| 135 | 228 | // Z80PIO_INTERFACE( pio2_intf ) |
| 136 | 229 | //------------------------------------------------- |
| 137 | 230 | |
| 231 | READ8_MEMBER( imi5000h_device::pio2_pa_r ) |
| 232 | { |
| 233 | /* |
| 234 | |
| 235 | bit description |
| 236 | |
| 237 | 0 |
| 238 | 1 |
| 239 | 2 |
| 240 | 3 |
| 241 | 4 |
| 242 | 5 |
| 243 | 6 -SYNC |
| 244 | 7 -DRV.ACK |
| 245 | |
| 246 | */ |
| 247 | |
| 248 | return 0; |
| 249 | } |
| 250 | |
| 251 | WRITE8_MEMBER( imi5000h_device::pio2_pa_w ) |
| 252 | { |
| 253 | /* |
| 254 | |
| 255 | bit description |
| 256 | |
| 257 | 0 BUS DIR |
| 258 | 1 -DRV.ACK |
| 259 | 2 -ALT SEL |
| 260 | 3 -HSXFER |
| 261 | 4 PIO RDY |
| 262 | 5 -COMPL |
| 263 | 6 |
| 264 | 7 |
| 265 | |
| 266 | */ |
| 267 | } |
| 268 | |
| 269 | READ8_MEMBER( imi5000h_device::pio2_pb_r ) |
| 270 | { |
| 271 | // command bus |
| 272 | return 0; |
| 273 | } |
| 274 | |
| 275 | WRITE8_MEMBER( imi5000h_device::pio2_pb_w ) |
| 276 | { |
| 277 | // command bus |
| 278 | } |
| 279 | |
| 138 | 280 | static Z80PIO_INTERFACE( pio2_intf ) |
| 139 | 281 | { |
| 140 | 282 | DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0), |
| 141 | | DEVCB_NULL, |
| 142 | | DEVCB_NULL, |
| 143 | | DEVCB_NULL, |
| 144 | | DEVCB_NULL, |
| 145 | | DEVCB_NULL, |
| 283 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, pio2_pa_r), |
| 284 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, pio2_pa_w), |
| 285 | DEVCB_DEVICE_LINE_MEMBER(Z80PIO_2_TAG, z80pio_device, strobe_a), |
| 286 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, pio2_pb_r), |
| 287 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, pio2_pb_w), |
| 146 | 288 | DEVCB_NULL |
| 147 | 289 | }; |
| 148 | 290 | |
| r23679 | r23680 | |
| 151 | 293 | // Z80PIO_INTERFACE( pio3_intf ) |
| 152 | 294 | //------------------------------------------------- |
| 153 | 295 | |
| 296 | READ8_MEMBER( imi5000h_device::pio3_pa_r ) |
| 297 | { |
| 298 | /* |
| 299 | |
| 300 | bit description |
| 301 | |
| 302 | 0 -TIMEOUT DISABLE (UB4:8) |
| 303 | 1 -UNIT SELECT 1 (UB4:7) |
| 304 | 2 -UNIT SELECT 2 (UB4:6) |
| 305 | 3 SYSTEM/-DIAG (UB4:5) |
| 306 | 4 -RXD |
| 307 | 5 |
| 308 | 6 -TRACK 00 |
| 309 | 7 |
| 310 | |
| 311 | */ |
| 312 | |
| 313 | return 0; |
| 314 | } |
| 315 | |
| 316 | WRITE8_MEMBER( imi5000h_device::pio3_pa_w ) |
| 317 | { |
| 318 | /* |
| 319 | |
| 320 | bit description |
| 321 | |
| 322 | 0 |
| 323 | 1 |
| 324 | 2 |
| 325 | 3 |
| 326 | 4 |
| 327 | 5 TXD |
| 328 | 6 |
| 329 | 7 -WRITE DISABLE |
| 330 | |
| 331 | */ |
| 332 | } |
| 333 | |
| 334 | READ8_MEMBER( imi5000h_device::pio3_pb_r ) |
| 335 | { |
| 336 | /* |
| 337 | |
| 338 | bit description |
| 339 | |
| 340 | 0 |
| 341 | 1 |
| 342 | 2 6MB1 |
| 343 | 3 -WRITE PROTECT (W2) |
| 344 | 4 -FORMAT ENABLE |
| 345 | 5 6MB2 |
| 346 | 6 12MB1 |
| 347 | 7 12MB2 |
| 348 | |
| 349 | */ |
| 350 | |
| 351 | return 0; |
| 352 | } |
| 353 | |
| 354 | WRITE8_MEMBER( imi5000h_device::pio3_pb_w ) |
| 355 | { |
| 356 | /* |
| 357 | |
| 358 | bit description |
| 359 | |
| 360 | 0 -DRV 1 SEL |
| 361 | 1 -DRV 2 SEL |
| 362 | 2 |
| 363 | 3 |
| 364 | 4 |
| 365 | 5 |
| 366 | 6 |
| 367 | 7 |
| 368 | |
| 369 | */ |
| 370 | } |
| 371 | |
| 154 | 372 | static Z80PIO_INTERFACE( pio3_intf ) |
| 155 | 373 | { |
| 156 | 374 | DEVCB_NULL, |
| 157 | | DEVCB_NULL, |
| 158 | | DEVCB_NULL, |
| 159 | | DEVCB_NULL, |
| 160 | | DEVCB_NULL, |
| 161 | | DEVCB_NULL, |
| 162 | | DEVCB_NULL |
| 375 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, pio3_pa_r), |
| 376 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, pio3_pa_w), |
| 377 | DEVCB_DEVICE_LINE_MEMBER(Z80PIO_3_TAG, z80pio_device, strobe_a), |
| 378 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, pio3_pb_r), |
| 379 | DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, imi5000h_device, pio3_pb_w), |
| 380 | DEVCB_DEVICE_LINE_MEMBER(Z80PIO_3_TAG, z80pio_device, strobe_b) |
| 163 | 381 | }; |
| 164 | 382 | |
| 165 | 383 | |
| r23679 | r23680 | |
| 168 | 386 | //------------------------------------------------- |
| 169 | 387 | |
| 170 | 388 | static MACHINE_CONFIG_FRAGMENT( imi5000h ) |
| 171 | | MCFG_CPU_ADD(Z80_TAG, Z80, 4000000) |
| 389 | MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_8MHz/2) |
| 172 | 390 | MCFG_CPU_CONFIG(z80_daisy_chain) |
| 173 | 391 | MCFG_CPU_PROGRAM_MAP(imi5000h_mem) |
| 174 | 392 | MCFG_CPU_IO_MAP(imi5000h_io) |
| 175 | 393 | |
| 176 | | MCFG_Z80CTC_ADD(Z80CTC_TAG, 4000000, ctc_intf) |
| 177 | | MCFG_Z80PIO_ADD(Z80PIO_0_TAG, 4000000, pio0_intf) |
| 178 | | MCFG_Z80PIO_ADD(Z80PIO_2_TAG, 4000000, pio2_intf) |
| 179 | | MCFG_Z80PIO_ADD(Z80PIO_3_TAG, 4000000, pio3_intf) |
| 394 | MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_8MHz/2, ctc_intf) |
| 395 | MCFG_Z80PIO_ADD(Z80PIO_0_TAG, XTAL_8MHz/2, pio0_intf) |
| 396 | MCFG_Z80PIO_ADD(Z80PIO_2_TAG, XTAL_8MHz/2, pio2_intf) |
| 397 | MCFG_Z80PIO_ADD(Z80PIO_3_TAG, XTAL_8MHz/2, pio3_intf) |
| 180 | 398 | MACHINE_CONFIG_END |
| 181 | 399 | |
| 182 | 400 | |
| r23679 | r23680 | |
| 196 | 414 | //------------------------------------------------- |
| 197 | 415 | |
| 198 | 416 | static INPUT_PORTS_START( imi5000h ) |
| 417 | PORT_START("LSI-11") |
| 418 | PORT_DIPNAME( 0x01, 0x00, "LSI-11" ) |
| 419 | PORT_DIPSETTING( 0x01, "Normal" ) |
| 420 | PORT_DIPSETTING( 0x00, "LSI-11" ) // emulate DEC RL01 and RL02 |
| 421 | |
| 422 | PORT_START("MUX") |
| 423 | PORT_DIPNAME( 0x01, 0x00, "MUX" ) |
| 424 | PORT_DIPSETTING( 0x01, "Single" ) |
| 425 | PORT_DIPSETTING( 0x00, "Multiplexer" ) // Corvus Multiplexer Network |
| 426 | |
| 427 | PORT_START("FORMAT") |
| 428 | PORT_DIPNAME( 0x01, 0x00, "FORMAT" ) |
| 429 | PORT_DIPSETTING( 0x01, "Normal" ) // read controller firmware from cylinders 0 and 1 |
| 430 | PORT_DIPSETTING( 0x00, "Format" ) // drive ready after self-test, allow format |
| 431 | |
| 432 | PORT_START("RESET") |
| 433 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("RESET") |
| 434 | |
| 199 | 435 | PORT_START("UB4") |
| 200 | 436 | PORT_DIPUNKNOWN_DIPLOC( 0x01, IP_ACTIVE_LOW, "UB4:1" ) |
| 201 | 437 | PORT_DIPUNKNOWN_DIPLOC( 0x02, IP_ACTIVE_LOW, "UB4:2" ) |
| r23679 | r23680 | |
| 230 | 466 | imi5000h_device::imi5000h_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 231 | 467 | : device_t(mconfig, IMI5000H, "IMI 5000H", tag, owner, clock, "imi5000h", __FILE__), |
| 232 | 468 | m_maincpu(*this, Z80_TAG), |
| 469 | m_ctc(*this, Z80CTC_TAG), |
| 470 | m_lsi11(*this, "LSI-11"), |
| 471 | m_mux(*this, "MUX"), |
| 472 | m_format(*this, "FORMAT"), |
| 233 | 473 | m_ub4(*this, "UB4") |
| 234 | 474 | { |
| 235 | 475 | } |
| r23679 | r23680 | |
| 242 | 482 | void imi5000h_device::device_start() |
| 243 | 483 | { |
| 244 | 484 | } |
| 485 | |
| 486 | |
| 487 | //------------------------------------------------- |
| 488 | // device_reset - device-specific reset |
| 489 | //------------------------------------------------- |
| 490 | |
| 491 | void imi5000h_device::device_reset() |
| 492 | { |
| 493 | m_maincpu->reset(); |
| 494 | m_ctc->reset(); |
| 495 | } |