trunk/src/mess/drivers/mz3500.c
| r22051 | r22052 | |
| 11 | 11 | #include "cpu/z80/z80.h" |
| 12 | 12 | //#include "sound/ay8910.h" |
| 13 | 13 | #include "video/upd7220.h" |
| 14 | #include "machine/upd765.h" |
| 14 | 15 | |
| 15 | 16 | #define MAIN_CLOCK XTAL_8MHz |
| 16 | 17 | |
| r22051 | r22052 | |
| 23 | 24 | m_slave(*this, "slave"), |
| 24 | 25 | m_hgdc1(*this, "upd7220_chr"), |
| 25 | 26 | m_hgdc2(*this, "upd7220_gfx"), |
| 27 | m_fdc(*this, "upd765a"), |
| 26 | 28 | m_video_ram(*this, "video_ram") |
| 27 | 29 | { } |
| 28 | 30 | |
| r22051 | r22052 | |
| 31 | 33 | required_device<cpu_device> m_slave; |
| 32 | 34 | required_device<upd7220_device> m_hgdc1; |
| 33 | 35 | required_device<upd7220_device> m_hgdc2; |
| 36 | required_device<upd765a_device> m_fdc; |
| 34 | 37 | required_shared_ptr<UINT8> m_video_ram; |
| 35 | 38 | UINT8 *m_ipl_rom; |
| 36 | 39 | UINT8 *m_basic_rom; |
| r22051 | r22052 | |
| 52 | 55 | DECLARE_READ8_MEMBER(mz3500_io_r); |
| 53 | 56 | DECLARE_WRITE8_MEMBER(mz3500_io_w); |
| 54 | 57 | DECLARE_WRITE8_MEMBER(mz3500_crtc_w); |
| 58 | DECLARE_READ8_MEMBER(mz3500_fdc_r); |
| 59 | DECLARE_WRITE8_MEMBER(mz3500_fdc_w); |
| 55 | 60 | |
| 56 | 61 | // screen updates |
| 57 | 62 | UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); |
| r22051 | r22052 | |
| 254 | 259 | case 0x1: return mz3500_basic_r(space,(offset & 0x1fff) | 0x4000); |
| 255 | 260 | case 0x2: return mz3500_basic_r(space,(offset & 0x1fff) | 0x6000); |
| 256 | 261 | } |
| 257 | | |
| 258 | | printf("Error: read with unmapped memory bank offset %04x MS %02x MO %02x\n",offset,m_ms,m_mo); |
| 259 | 262 | } |
| 260 | 263 | if((offset & 0xc000) == 0x4000) { return mz3500_work_ram_r(space,(offset & 0x3fff) | 0x4000); } |
| 261 | 264 | if((offset & 0xc000) == 0x8000) { return mz3500_work_ram_r(space,(offset & 0x3fff) | 0x8000); } |
| r22051 | r22052 | |
| 281 | 284 | } |
| 282 | 285 | } |
| 283 | 286 | |
| 284 | | printf("Error: read with unmapped memory bank offset %04x MS %02x MA %02x\n",offset,m_ms,m_ma); |
| 287 | printf("Error: read with unmapped memory bank offset %04x MS %02x MA %02x MO %02x\n",offset,m_ms,m_ma,m_mo); |
| 285 | 288 | } |
| 286 | 289 | |
| 287 | 290 | return 0xff; |
| r22051 | r22052 | |
| 414 | 417 | m_crtc[offset] = data; |
| 415 | 418 | } |
| 416 | 419 | |
| 420 | READ8_MEMBER(mz3500_state::mz3500_fdc_r) |
| 421 | { |
| 422 | /* |
| 423 | ---- -x-- Motor |
| 424 | ---- --x- Index |
| 425 | ---- ---x Drq |
| 426 | */ |
| 427 | floppy_image_device *floppy; |
| 428 | floppy = machine().device<floppy_connector>(":upd765a:0")->get_device(); |
| 429 | |
| 430 | return floppy->idx_r() << 1; |
| 431 | } |
| 432 | |
| 433 | WRITE8_MEMBER(mz3500_state::mz3500_fdc_w) |
| 434 | { |
| 435 | /* |
| 436 | x--- ---- FDC int enable |
| 437 | -x-- ---- FDD select signal |
| 438 | --x- ---- FDC TC |
| 439 | ---x ---- motor on signal |
| 440 | ---- xxxx Select FDD 0-3 (bit-wise) |
| 441 | */ |
| 442 | } |
| 443 | |
| 417 | 444 | static ADDRESS_MAP_START( mz3500_master_map, AS_PROGRAM, 8, mz3500_state ) |
| 418 | 445 | AM_RANGE(0x0000, 0xffff) AM_READWRITE(mz3500_master_mem_r,mz3500_master_mem_w) |
| 419 | 446 | ADDRESS_MAP_END |
| r22051 | r22052 | |
| 423 | 450 | // AM_RANGE(0xe4, 0xe7) SFD upd765 |
| 424 | 451 | // AM_RANGE(0xe8, 0xeb) SFD I/O port and DMAC chip select |
| 425 | 452 | // AM_RANGE(0xec, 0xef) irq signal from slave to master CPU |
| 426 | | // AM_RANGE(0xf4, 0xf7) MFD upd765 |
| 453 | AM_RANGE(0xf4, 0xf5) AM_DEVICE("upd765a", upd765a_device, map) // MFD upd765 |
| 427 | 454 | // AM_RANGE(0xf8, 0xfb) MFD I/O port |
| 428 | | AM_RANGE(0xf8, 0xf8) AM_READNOP // TODO |
| 455 | AM_RANGE(0xf8, 0xf8) AM_READWRITE(mz3500_fdc_r,mz3500_fdc_w) |
| 429 | 456 | AM_RANGE(0xfc, 0xff) AM_READWRITE(mz3500_io_r,mz3500_io_w) // memory mapper |
| 430 | 457 | ADDRESS_MAP_END |
| 431 | 458 | |
| r22051 | r22052 | |
| 572 | 599 | AM_RANGE(0x00000, 0x3ffff) AM_RAM // AM_SHARE("video_ram_2") |
| 573 | 600 | ADDRESS_MAP_END |
| 574 | 601 | |
| 602 | static SLOT_INTERFACE_START( mz3500_floppies ) |
| 603 | SLOT_INTERFACE( "525hd", FLOPPY_525_HD ) |
| 604 | SLOT_INTERFACE_END |
| 605 | |
| 575 | 606 | /* TODO: clocks */ |
| 576 | 607 | static MACHINE_CONFIG_START( mz3500, mz3500_state ) |
| 577 | 608 | |
| r22051 | r22052 | |
| 584 | 615 | MCFG_CPU_PROGRAM_MAP(mz3500_slave_map) |
| 585 | 616 | MCFG_CPU_IO_MAP(mz3500_slave_io) |
| 586 | 617 | |
| 618 | MCFG_UPD765A_ADD("upd765a", true, true) |
| 619 | MCFG_FLOPPY_DRIVE_ADD("upd765a:0", mz3500_floppies, "525hd", 0, floppy_image_device::default_floppy_formats) |
| 620 | MCFG_FLOPPY_DRIVE_ADD("upd765a:1", mz3500_floppies, "525hd", 0, floppy_image_device::default_floppy_formats) |
| 621 | MCFG_FLOPPY_DRIVE_ADD("upd765a:2", mz3500_floppies, "525hd", 0, floppy_image_device::default_floppy_formats) |
| 622 | MCFG_FLOPPY_DRIVE_ADD("upd765a:3", mz3500_floppies, "525hd", 0, floppy_image_device::default_floppy_formats) |
| 623 | |
| 587 | 624 | MCFG_UPD7220_ADD("upd7220_chr", MAIN_CLOCK/5, hgdc_1_intf, upd7220_1_map) |
| 588 | 625 | MCFG_UPD7220_ADD("upd7220_gfx", MAIN_CLOCK/5, hgdc_2_intf, upd7220_2_map) |
| 589 | 626 | |