trunk/src/mess/drivers/excali64.c
| r242540 | r242541 | |
| 20 | 20 | ToDo: |
| 21 | 21 | - Colours are approximate. |
| 22 | 22 | - Disk controller, works with old wd17xx but crashes on new wd. |
| 23 | | - Hardware supports 8 and 5.25 inch floppies, but we only support 5.25 as this |
| 23 | - Hardware supports 20cm and 13cm floppies, but we only support 13cm as this |
| 24 | 24 | is the only software that exists. |
| 25 | 25 | - The schematic shows the audio counter connected to 2MHz, but this produces |
| 26 | 26 | sounds that are too high. Connected to 1MHz for now. |
| r242540 | r242541 | |
| 270 | 270 | { |
| 271 | 271 | m_motor = BIT(data, 0); |
| 272 | 272 | #if NEWFDC |
| 273 | m_floppy1->get_device()->mon_w(!m_motor); |
| 273 | 274 | m_floppy0->get_device()->mon_w(!m_motor); |
| 274 | 275 | #else |
| 275 | | //const char *floppy_tags[4] = { FLOPPY_0, FLOPPY_1, FLOPPY_2, FLOPPY_3 }; |
| 276 | 276 | legacy_floppy_image_device *flop = subdevice<legacy_floppy_image_device>(FLOPPY_0); |
| 277 | 277 | flop->floppy_mon_w(!m_motor); // motor on |
| 278 | | //flop->floppy_drive_set_ready_state(1, 0); // this is commented out in flopdrv.c, so does nothing |
| 278 | flop = subdevice<legacy_floppy_image_device>(FLOPPY_1); |
| 279 | flop->floppy_mon_w(!m_motor); // motor on |
| 279 | 280 | #endif |
| 280 | 281 | } |
| 281 | 282 | |
| r242540 | r242541 | |
| 288 | 289 | { |
| 289 | 290 | #if NEWFDC |
| 290 | 291 | floppy_image_device *floppy = NULL; |
| 291 | | if (BIT(data, 0)) floppy = m_floppy0->get_device(); |
| 292 | | //if (BIT(data, 1)) floppy = m_floppy1->get_device(); |
| 293 | | m_fdc->set_floppy(floppy); |
| 292 | if (BIT(data, 0)) |
| 293 | floppy = m_floppy0->get_device(); |
| 294 | |
| 295 | if (BIT(data, 1)) |
| 296 | floppy = m_floppy1->get_device(); |
| 297 | |
| 294 | 298 | if (floppy) |
| 299 | { |
| 300 | m_fdc->set_floppy(floppy); |
| 295 | 301 | floppy->ss_w(BIT(data, 4)); |
| 302 | } |
| 296 | 303 | #else |
| 297 | | //UINT8 i; |
| 298 | | //for (i = 0; i < 4; i++) |
| 299 | | //{ |
| 300 | | // if BIT(data, i) |
| 301 | | // { |
| 302 | | // m_fdc->set_drive(i); |
| 303 | | // break; |
| 304 | | // } |
| 305 | | //} |
| 306 | | if BIT(data, 0) m_fdc->set_drive(0); |
| 307 | | //if BIT(data, 1) m_fdc->set_drive(1); |
| 308 | | //if BIT(data, 2) m_fdc->set_drive(2); |
| 309 | | //if BIT(data, 3) m_fdc->set_drive(3); |
| 304 | if BIT(data, 0) |
| 305 | m_fdc->set_drive(0); |
| 306 | |
| 307 | if BIT(data, 1) |
| 308 | m_fdc->set_drive(1); |
| 309 | |
| 310 | 310 | m_fdc->set_side(BIT(data, 4)); |
| 311 | #endif |
| 311 | 312 | |
| 312 | | m_fdc->dden_w(1);//!BIT(data, 6)); // we want double density |
| 313 | | #endif |
| 314 | | m_u12->b_w(space,offset, BIT(data, 5)); |
| 313 | m_u12->b_w(space,offset, BIT(data, 5)); // motor pulse |
| 315 | 314 | } |
| 316 | 315 | |
| 316 | /* |
| 317 | d0 = precomp (selectable by jumper) |
| 318 | d1 = size select (we only support 13cm) |
| 319 | d2 = density select (0 = double) |
| 320 | */ |
| 317 | 321 | WRITE8_MEMBER( excali64_state::portec_w ) |
| 318 | 322 | { |
| 323 | #if NEWFDC |
| 324 | m_fdc->dden_w(BIT(data, 2)); |
| 325 | #else |
| 326 | m_fdc->dden_w(!BIT(data, 2)); |
| 327 | #endif |
| 319 | 328 | } |
| 320 | 329 | |
| 321 | 330 | WRITE_LINE_MEMBER( excali64_state::busreq_w ) |
| 322 | 331 | { |
| 323 | 332 | // since our Z80 has no support for BUSACK, we assume it is granted immediately |
| 324 | 333 | m_maincpu->set_input_line(Z80_INPUT_LINE_BUSRQ, state); |
| 325 | | //m_maincpu->set_input_line(INPUT_LINE_HALT, state); // do we need this? |
| 326 | 334 | m_dma->bai_w(state); // tell dma that bus has been granted |
| 327 | 335 | } |
| 328 | 336 | |
| r242540 | r242541 | |
| 521 | 529 | membank("bankr4")->configure_entry(2, &m_p_hiresram[0x0000]); |
| 522 | 530 | membank("bankw4")->configure_entry(2, &m_p_hiresram[0x0000]); |
| 523 | 531 | |
| 524 | | // Set up foreground palettes |
| 532 | // Set up foreground colours |
| 525 | 533 | UINT8 r,g,b,i,code; |
| 526 | 534 | for (i = 0; i < 32; i++) |
| 527 | 535 | { |
| r242540 | r242541 | |
| 611 | 619 | MCFG_I8255_IN_PORTC_CB(READ8(excali64_state, ppic_r)) |
| 612 | 620 | MCFG_I8255_OUT_PORTC_CB(WRITE8(excali64_state, ppic_w)) |
| 613 | 621 | |
| 614 | | //MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600) |
| 615 | | //MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(excali64_state, write_acia_clock)) |
| 616 | | |
| 617 | 622 | /* sound hardware */ |
| 618 | 623 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 619 | 624 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| r242540 | r242541 | |
| 645 | 650 | MCFG_WD_FDC_FORCE_READY |
| 646 | 651 | MCFG_WD_FDC_DRQ_CALLBACK(DEVWRITELINE("dma", z80dma_device, rdy_w)) |
| 647 | 652 | MCFG_FLOPPY_DRIVE_ADD("fdc:0", excali64_floppies, "525dd", floppy_image_device::default_floppy_formats)// excali64_state::floppy_formats) |
| 648 | | //MCFG_FLOPPY_DRIVE_ADD("fdc:1", excali64_floppies, "525dd", floppy_image_device::default_floppy_formats) |
| 653 | MCFG_FLOPPY_DRIVE_ADD("fdc:1", excali64_floppies, "525dd", floppy_image_device::default_floppy_formats) |
| 649 | 654 | #else |
| 650 | 655 | MCFG_DEVICE_ADD("fdc", WD2793, 0) |
| 651 | | MCFG_WD17XX_DEFAULT_DRIVE1_TAGS |
| 656 | MCFG_WD17XX_DEFAULT_DRIVE2_TAGS |
| 652 | 657 | MCFG_WD17XX_DRQ_CALLBACK(DEVWRITELINE("dma", z80dma_device, rdy_w)) |
| 653 | | MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, excali64_floppy_interface) |
| 654 | | //MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(excali64_floppy_interface) |
| 658 | MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(excali64_floppy_interface) |
| 655 | 659 | #endif |
| 656 | 660 | MCFG_DEVICE_ADD("dma", Z80DMA, XTAL_16MHz/4) |
| 657 | 661 | MCFG_Z80DMA_OUT_BUSREQ_CB(WRITELINE(excali64_state, busreq_w)) |
| r242540 | r242541 | |
| 661 | 665 | MCFG_Z80DMA_OUT_IORQ_CB(WRITE8(excali64_state, io_write_byte)) |
| 662 | 666 | |
| 663 | 667 | MCFG_DEVICE_ADD("u12", TTL74123, 0) |
| 664 | | MCFG_TTL74123_CONNECTION_TYPE(TTL74123_GROUNDED) /* the hook up type (no idea what this means */ |
| 668 | MCFG_TTL74123_CONNECTION_TYPE(TTL74123_GROUNDED) /* Hook up type (no idea what this means) */ |
| 665 | 669 | MCFG_TTL74123_RESISTOR_VALUE(RES_K(100)) /* resistor connected between RCext & 5v */ |
| 666 | 670 | MCFG_TTL74123_CAPACITOR_VALUE(CAP_U(100)) /* capacitor connected between Cext and RCext */ |
| 667 | 671 | MCFG_TTL74123_A_PIN_VALUE(0) /* A pin - grounded */ |