trunk/src/mess/drivers/tavernie.c
| r26588 | r26589 | |
| 9 | 9 | This system was described in a French computer magazine. |
| 10 | 10 | |
| 11 | 11 | CPU09 includes 6809, 6821, 6840, 6850, cassette, rs232 |
| 12 | | IVG09 includes 6845, WD1795, another 6821, beeper |
| 12 | IVG09 includes 6845, another 6821, beeper |
| 13 | IFD09 includes WD1795 |
| 13 | 14 | |
| 14 | 15 | ToDo: |
| 15 | | - FDC |
| 16 | 16 | - Attributes ram |
| 17 | 17 | - Graphics |
| 18 | 18 | - Character rom is not dumped |
| 19 | 19 | - Graphics rom is not dumped |
| 20 | - 3x 7611 proms not dumped |
| 20 | 21 | - Fix cassette |
| 22 | - Test FDC |
| 21 | 23 | - Need software |
| 22 | 24 | |
| 23 | 25 | List of commands (must be in UPPERCASE): |
| r26588 | r26589 | |
| 55 | 57 | #include "machine/keyboard.h" |
| 56 | 58 | #include "machine/serial.h" |
| 57 | 59 | #include "imagedev/cassette.h" |
| 60 | #include "machine/wd_fdc.h" |
| 58 | 61 | #include "sound/wave.h" |
| 59 | 62 | #include "sound/beep.h" |
| 60 | 63 | #include "tavernie.lh" |
| r26588 | r26589 | |
| 68 | 71 | , m_p_videoram(*this, "videoram") |
| 69 | 72 | , m_cass(*this, "cassette") |
| 70 | 73 | , m_pia_ivg(*this, "pia_ivg") |
| 74 | , m_fdc(*this, "fdc") |
| 75 | , m_floppy0(*this, "fdc:0") |
| 71 | 76 | , m_beep(*this, "beeper") |
| 72 | 77 | , m_maincpu(*this, "maincpu") |
| 73 | 78 | { } |
| r26588 | r26589 | |
| 79 | 84 | DECLARE_WRITE8_MEMBER(pa_ivg_w); |
| 80 | 85 | DECLARE_READ8_MEMBER(pb_ivg_r); |
| 81 | 86 | DECLARE_WRITE8_MEMBER(kbd_put); |
| 87 | DECLARE_WRITE8_MEMBER(ds_w); |
| 82 | 88 | DECLARE_MACHINE_RESET(cpu09); |
| 83 | 89 | DECLARE_MACHINE_RESET(ivg09); |
| 84 | 90 | const UINT8 *m_p_chargen; |
| r26588 | r26589 | |
| 88 | 94 | UINT8 m_pa; |
| 89 | 95 | required_device<cassette_image_device> m_cass; |
| 90 | 96 | optional_device<pia6821_device> m_pia_ivg; |
| 97 | optional_device<fd1795_t> m_fdc; |
| 98 | optional_device<floppy_connector> m_floppy0; |
| 91 | 99 | optional_device<beep_device> m_beep; |
| 92 | 100 | required_device<cpu_device> m_maincpu; |
| 93 | 101 | }; |
| r26588 | r26589 | |
| 110 | 118 | AM_RANGE(0x2000, 0x2003) AM_DEVREADWRITE("pia_ivg", pia6821_device, read, write) |
| 111 | 119 | AM_RANGE(0x2080, 0x2080) AM_DEVREADWRITE("crtc", mc6845_device, status_r, address_w) |
| 112 | 120 | AM_RANGE(0x2081, 0x2081) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w) |
| 121 | AM_RANGE(0xe000, 0xe003) AM_DEVREADWRITE("fdc", fd1795_t, read, write) |
| 122 | AM_RANGE(0xe080, 0xe080) AM_WRITE(ds_w) |
| 113 | 123 | AM_RANGE(0xeb00, 0xeb03) AM_DEVREADWRITE("pia", pia6821_device, read, write) |
| 114 | 124 | AM_RANGE(0xeb04, 0xeb04) AM_DEVREADWRITE("acia", acia6850_device, status_read, control_write) |
| 115 | 125 | AM_RANGE(0xeb05, 0xeb05) AM_DEVREADWRITE("acia", acia6850_device, data_read, data_write) |
| r26588 | r26589 | |
| 164 | 174 | m_pia_ivg->cb1_w(1); |
| 165 | 175 | } |
| 166 | 176 | |
| 177 | static SLOT_INTERFACE_START( ifd09_floppies ) |
| 178 | SLOT_INTERFACE( "525dd", FLOPPY_525_DD ) |
| 179 | SLOT_INTERFACE_END |
| 167 | 180 | |
| 181 | // can support 3 drives |
| 182 | WRITE8_MEMBER( tavernie_state::ds_w ) |
| 183 | { |
| 184 | floppy_image_device *floppy = NULL; |
| 185 | if ((data & 3) == 1) floppy = m_floppy0->get_device(); |
| 186 | //if ((data & 3) == 2) floppy = m_floppy1->get_device(); |
| 187 | //if ((data & 3) == 3) floppy = m_floppy2->get_device(); |
| 188 | |
| 189 | m_fdc->set_floppy(floppy); |
| 190 | |
| 191 | if (floppy) |
| 192 | { |
| 193 | floppy->mon_w(0); |
| 194 | m_fdc->dden_w(!BIT(data, 2)); |
| 195 | } |
| 196 | } |
| 197 | |
| 198 | |
| 168 | 199 | static MC6845_UPDATE_ROW( update_row ) |
| 169 | 200 | { |
| 170 | 201 | tavernie_state *state = device->machine().driver_data<tavernie_state>(); |
| r26588 | r26589 | |
| 376 | 407 | MCFG_ASCII_KEYBOARD_ADD(KEYBOARD_TAG, keyboard_intf) |
| 377 | 408 | MCFG_MC6845_ADD("crtc", MC6845, "screen", 1008000, mc6845_intf) // unknown clock |
| 378 | 409 | MCFG_PIA6821_ADD("pia_ivg", pia_ivg_intf) |
| 410 | MCFG_FD1795x_ADD("fdc", XTAL_8MHz / 8) |
| 411 | MCFG_FLOPPY_DRIVE_ADD("fdc:0", ifd09_floppies, "525dd", floppy_image_device::default_floppy_formats) |
| 379 | 412 | MACHINE_CONFIG_END |
| 380 | 413 | |
| 381 | 414 | /* ROM definition */ |
| r26588 | r26589 | |
| 385 | 418 | ROM_END |
| 386 | 419 | |
| 387 | 420 | ROM_START( ivg09 ) |
| 388 | | ROM_REGION( 0x1000, "roms", 0 ) |
| 421 | ROM_REGION( 0x19f0, "roms", 0 ) |
| 389 | 422 | ROM_LOAD( "tavbug.bin", 0x0000, 0x1000, CRC(77945cae) SHA1(d89b577bc0b4e15e9a49a849998681bdc6cf5fbe) ) |
| 423 | // these 2 are not used. Boottav is copied to ram at c100 |
| 424 | ROM_LOAD_OPTIONAL( "promon.bin", 0x1000, 0x0800, CRC(43256bf2) SHA1(e81acb5b659d50d7b019b97ad5d2a8f129da39f6) ) |
| 425 | ROM_LOAD_OPTIONAL( "boottav.bin", 0x1800, 0x01f0, CRC(ae1a858d) SHA1(ab2144a00afd5b75c6dcb15c2c3f9d6910a159ae) ) |
| 390 | 426 | |
| 391 | 427 | // charrom is missing, using one from 'c10' for now |
| 392 | 428 | ROM_REGION( 0x2000, "chargen", 0 ) |
| 393 | | ROM_LOAD( "c10_char.bin", 0x0000, 0x2000, CRC(cb530b6f) SHA1(95590bbb433db9c4317f535723b29516b9b9fcbf)) |
| 429 | ROM_LOAD( "c10_char.bin", 0x0000, 0x2000, BAD_DUMP CRC(cb530b6f) SHA1(95590bbb433db9c4317f535723b29516b9b9fcbf)) |
| 394 | 430 | ROM_END |
| 395 | 431 | |
| 396 | 432 | /* Driver */ |
| 397 | 433 | |
| 398 | 434 | /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ |
| 399 | 435 | COMP( 1982, cpu09, 0, 0, cpu09, cpu09, driver_device, 0, "C. Tavernier", "CPU09", GAME_NOT_WORKING ) |
| 400 | | COMP( 1983, ivg09, cpu09, 0, ivg09, ivg09, driver_device, 0, "C. Tavernier", "CPU09 with IVG09", GAME_NOT_WORKING ) |
| 436 | COMP( 1983, ivg09, cpu09, 0, ivg09, ivg09, driver_device, 0, "C. Tavernier", "CPU09 with IVG09 and IFD09", GAME_NOT_WORKING ) |