trunk/src/mess/drivers/ngen.c
| r242365 | r242366 | |
| 119 | 119 | DECLARE_WRITE8_MEMBER( dma_3_dack_w ){ } |
| 120 | 120 | DECLARE_WRITE_LINE_MEMBER(fdc_irq_w); |
| 121 | 121 | DECLARE_WRITE_LINE_MEMBER(fdc_drq_w); |
| 122 | DECLARE_WRITE8_MEMBER(fdc_control_w); |
| 122 | 123 | |
| 123 | 124 | protected: |
| 124 | 125 | virtual void machine_reset(); |
| r242365 | r242366 | |
| 379 | 380 | } |
| 380 | 381 | |
| 381 | 382 | // returns X-bus module ID (what is the low byte for?) |
| 383 | // For now, we'll hard code a floppy disk module (or try to) |
| 382 | 384 | READ16_MEMBER(ngen_state::port00_r) |
| 383 | 385 | { |
| 384 | 386 | if(m_port00 > 0) |
| 385 | 387 | m_maincpu->set_input_line(INPUT_LINE_NMI,PULSE_LINE); |
| 386 | 388 | if(m_port00 == 0) |
| 387 | | return 0x4000; // module ID of 0x40 = dual floppy disk module (need hardware manual to find other module IDs) |
| 389 | return 0x0040; // module ID of 0x40 = dual floppy disk module (need hardware manual to find other module IDs) |
| 388 | 390 | else |
| 389 | 391 | return 0x0080; // invalid device? |
| 390 | 392 | } |
| r242365 | r242366 | |
| 396 | 398 | |
| 397 | 399 | WRITE_LINE_MEMBER(ngen_state::fdc_drq_w) |
| 398 | 400 | { |
| 399 | | // TODO |
| 401 | m_dmac->dreq3_w(state); |
| 400 | 402 | } |
| 401 | 403 | |
| 404 | WRITE8_MEMBER(ngen_state::fdc_control_w) |
| 405 | { |
| 406 | m_fdc->set_floppy(m_fd0->get_device()); |
| 407 | m_fd0->get_device()->mon_w((~data) & 0x80); |
| 408 | m_fdc->dden_w(~data & 0x04); |
| 409 | } |
| 410 | |
| 402 | 411 | WRITE_LINE_MEMBER( ngen_state::dma_hrq_changed ) |
| 403 | 412 | { |
| 404 | 413 | m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE); |
| r242365 | r242366 | |
| 474 | 483 | |
| 475 | 484 | void ngen_state::machine_reset() |
| 476 | 485 | { |
| 486 | m_port00 = 0; |
| 477 | 487 | m_control = 0; |
| 478 | 488 | m_viduart->write_dsr(0); |
| 479 | 489 | m_viduart->write_cts(0); |
| 490 | m_fd0->get_device()->set_rpm(300); |
| 480 | 491 | } |
| 481 | 492 | |
| 482 | 493 | static ADDRESS_MAP_START( ngen_mem, AS_PROGRAM, 16, ngen_state ) |
| r242365 | r242366 | |
| 490 | 501 | static ADDRESS_MAP_START( ngen_io, AS_IO, 16, ngen_state ) |
| 491 | 502 | AM_RANGE(0x0000, 0x0001) AM_READWRITE(port00_r,port00_w) |
| 492 | 503 | AM_RANGE(0x0100, 0x0107) AM_DEVREADWRITE8("fdc",wd2797_t,read,write,0x00ff) // a guess for now |
| 493 | | // port 0x0108 is used also, maybe for motor control/side select? |
| 504 | AM_RANGE(0x0108, 0x0109) AM_WRITE8(fdc_control_w,0x00ff) |
| 494 | 505 | ADDRESS_MAP_END |
| 495 | 506 | |
| 496 | 507 | static ADDRESS_MAP_START( ngen386_mem, AS_PROGRAM, 32, ngen_state ) |
| r242365 | r242366 | |
| 517 | 528 | SLOT_INTERFACE_END |
| 518 | 529 | |
| 519 | 530 | static SLOT_INTERFACE_START( ngen_floppies ) |
| 520 | | SLOT_INTERFACE( "525hd", FLOPPY_525_HD ) |
| 531 | SLOT_INTERFACE( "525qd", FLOPPY_525_QD ) |
| 521 | 532 | SLOT_INTERFACE_END |
| 522 | 533 | |
| 523 | 534 | static MACHINE_CONFIG_START( ngen, ngen_state ) |
| r242365 | r242366 | |
| 577 | 588 | MCFG_RS232_DCD_HANDLER(DEVWRITELINE("iouart", upd7201_device, dcdb_w)) |
| 578 | 589 | MCFG_RS232_RI_HANDLER(DEVWRITELINE("iouart", upd7201_device, rib_w)) |
| 579 | 590 | |
| 580 | | // TODO: SCN2652 MPCC, used for RS-422 cluster communications? |
| 591 | // TODO: SCN2652 MPCC (not implemented), used for RS-422 cluster communications? |
| 581 | 592 | |
| 582 | 593 | // video board |
| 583 | 594 | MCFG_SCREEN_ADD("screen", RASTER) |
| r242365 | r242366 | |
| 603 | 614 | MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(ngen_state,timer_clk_out)) |
| 604 | 615 | |
| 605 | 616 | // floppy disk / hard disk module (WD2797 FDC, WD1010 HDC, plus an 8253 timer for each) |
| 606 | | MCFG_WD2797x_ADD("fdc", XTAL_20MHz / 10) |
| 617 | MCFG_WD2797x_ADD("fdc", XTAL_20MHz / 20) |
| 607 | 618 | MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(ngen_state,fdc_irq_w)) |
| 608 | | MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(ngen_state,fdc_drq_w)) |
| 619 | MCFG_WD_FDC_DRQ_CALLBACK(DEVWRITELINE("maincpu",i80186_cpu_device,drq1_w)) |
| 620 | MCFG_WD_FDC_FORCE_READY |
| 609 | 621 | MCFG_DEVICE_ADD("fdc_timer", PIT8253, 0) |
| 610 | 622 | // TODO: WD1010 HDC (not implemented) |
| 611 | 623 | MCFG_DEVICE_ADD("hdc_timer", PIT8253, 0) |
| 612 | | MCFG_FLOPPY_DRIVE_ADD("fdc:0", ngen_floppies, "525hd", floppy_image_device::default_floppy_formats) |
| 624 | MCFG_FLOPPY_DRIVE_ADD("fdc:0", ngen_floppies, "525qd", floppy_image_device::default_floppy_formats) |
| 613 | 625 | |
| 614 | 626 | MACHINE_CONFIG_END |
| 615 | 627 | |