trunk/src/mess/includes/tiki100.h
| r19219 | r19220 | |
| 7 | 7 | #include "emu.h" |
| 8 | 8 | #include "cpu/z80/z80.h" |
| 9 | 9 | #include "cpu/z80/z80daisy.h" |
| 10 | | #include "formats/basicdsk.h" |
| 11 | | #include "imagedev/flopdrv.h" |
| 10 | #include "formats/tiki100_dsk.h" |
| 12 | 11 | #include "machine/ram.h" |
| 13 | 12 | #include "machine/z80ctc.h" |
| 14 | 13 | #include "machine/z80dart.h" |
| 15 | 14 | #include "machine/z80pio.h" |
| 16 | | #include "machine/wd17xx.h" |
| 15 | #include "machine/wd_fdc.h" |
| 17 | 16 | #include "sound/ay8910.h" |
| 18 | 17 | |
| 19 | 18 | #define SCREEN_TAG "screen" |
| r19219 | r19220 | |
| 40 | 39 | m_ctc(*this, Z80CTC_TAG), |
| 41 | 40 | m_fdc(*this, FD1797_TAG), |
| 42 | 41 | m_ram(*this, RAM_TAG), |
| 43 | | m_floppy0(*this, FLOPPY_0), |
| 44 | | m_floppy1(*this, FLOPPY_1) |
| 42 | m_floppy0(*this, FD1797_TAG":0"), |
| 43 | m_floppy1(*this, FD1797_TAG":1") |
| 45 | 44 | { } |
| 46 | 45 | |
| 47 | 46 | required_device<cpu_device> m_maincpu; |
| 48 | 47 | required_device<z80ctc_device> m_ctc; |
| 49 | | required_device<fd1797_device> m_fdc; |
| 48 | required_device<fd1797_t> m_fdc; |
| 50 | 49 | required_device<ram_device> m_ram; |
| 51 | | required_device<legacy_floppy_image_device> m_floppy0; |
| 52 | | required_device<legacy_floppy_image_device> m_floppy1; |
| 50 | required_device<floppy_connector> m_floppy0; |
| 51 | required_device<floppy_connector> m_floppy1; |
| 53 | 52 | |
| 54 | 53 | virtual void machine_start(); |
| 55 | 54 | |
| r19219 | r19220 | |
| 64 | 63 | DECLARE_WRITE8_MEMBER( system_w ); |
| 65 | 64 | DECLARE_WRITE_LINE_MEMBER( ctc_z1_w ); |
| 66 | 65 | DECLARE_WRITE8_MEMBER( video_scroll_w ); |
| 66 | DECLARE_FLOPPY_FORMATS( floppy_formats ); |
| 67 | 67 | |
| 68 | 68 | void bankswitch(); |
| 69 | 69 | |
trunk/src/mess/drivers/tiki100.c
| r19219 | r19220 | |
| 14 | 14 | |
| 15 | 15 | - floppy broken |
| 16 | 16 | - palette RAM should be written during HBLANK |
| 17 | | - double sided disks have t0s0,t0s1,t1s0,t1s1... format |
| 18 | 17 | - DART clocks |
| 19 | | - daisy chain order? |
| 20 | 18 | - winchester hard disk |
| 21 | 19 | - analog/digital I/O |
| 22 | 20 | - light pen |
| r19219 | r19220 | |
| 176 | 174 | |
| 177 | 175 | */ |
| 178 | 176 | |
| 179 | | /* drive select */ |
| 180 | | if (BIT(data, 0)) wd17xx_set_drive(m_fdc, 0); |
| 181 | | if (BIT(data, 1)) wd17xx_set_drive(m_fdc, 1); |
| 177 | // drive select |
| 178 | floppy_image_device *floppy = NULL; |
| 182 | 179 | |
| 183 | | /* density select */ |
| 184 | | wd17xx_dden_w(m_fdc, BIT(data, 4)); |
| 180 | if (BIT(data, 0)) floppy = m_floppy0->get_device(); |
| 181 | if (BIT(data, 1)) floppy = m_floppy1->get_device(); |
| 185 | 182 | |
| 186 | | /* floppy motor */ |
| 187 | | floppy_mon_w(m_floppy0, !BIT(data, 6)); |
| 188 | | floppy_mon_w(m_floppy1, !BIT(data, 6)); |
| 189 | | floppy_drive_set_ready_state(m_floppy0, BIT(data, 6), 1); |
| 190 | | floppy_drive_set_ready_state(m_floppy1, BIT(data, 6), 1); |
| 183 | m_fdc->set_floppy(floppy); |
| 191 | 184 | |
| 185 | // density select |
| 186 | m_fdc->dden_w(BIT(data, 4)); |
| 187 | |
| 188 | // floppy motor |
| 189 | if (floppy) floppy->mon_w(!BIT(data, 6)); |
| 190 | |
| 192 | 191 | /* GRAFIKK key led */ |
| 193 | 192 | set_led_status(machine(), 1, BIT(data, 5)); |
| 194 | 193 | |
| r19219 | r19220 | |
| 218 | 217 | AM_RANGE(0x04, 0x07) AM_DEVREADWRITE_LEGACY(Z80DART_TAG, z80dart_cd_ba_r, z80dart_cd_ba_w) |
| 219 | 218 | AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE(Z80PIO_TAG, z80pio_device, read, write) |
| 220 | 219 | AM_RANGE(0x0c, 0x0c) AM_MIRROR(0x03) AM_WRITE(video_mode_w) |
| 221 | | AM_RANGE(0x10, 0x13) AM_DEVREADWRITE_LEGACY(FD1797_TAG, wd17xx_r, wd17xx_w) |
| 220 | AM_RANGE(0x10, 0x13) AM_DEVREADWRITE(FD1797_TAG, fd1797_t, read, write) |
| 222 | 221 | AM_RANGE(0x14, 0x14) AM_MIRROR(0x01) AM_WRITE(palette_w) |
| 223 | 222 | AM_RANGE(0x16, 0x16) AM_DEVWRITE_LEGACY(AY8912_TAG, ay8910_address_w) |
| 224 | 223 | AM_RANGE(0x17, 0x17) AM_DEVREADWRITE_LEGACY(AY8912_TAG, ay8910_r, ay8910_data_w) |
| 225 | 224 | AM_RANGE(0x18, 0x1b) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write) |
| 226 | 225 | AM_RANGE(0x1c, 0x1c) AM_MIRROR(0x03) AM_WRITE(system_w) |
| 227 | | // AM_RANGE(0x20, 0x27) winchester controller |
| 226 | AM_RANGE(0x20, 0x27) AM_NOP // winchester controller |
| 228 | 227 | // AM_RANGE(0x60, 0x6f) analog I/O (SINTEF) |
| 229 | 228 | // AM_RANGE(0x60, 0x67) digital I/O (RVO) |
| 230 | 229 | // AM_RANGE(0x70, 0x77) analog/digital I/O |
| r19219 | r19220 | |
| 499 | 498 | static Z80CTC_INTERFACE( ctc_intf ) |
| 500 | 499 | { |
| 501 | 500 | DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0), /* interrupt handler */ |
| 502 | | DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF,z80ctc_device, trg2), /* ZC/TO0 callback */ |
| 501 | DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF, z80ctc_device, trg2), /* ZC/TO0 callback */ |
| 503 | 502 | DEVCB_DRIVER_LINE_MEMBER(tiki100_state, ctc_z1_w), /* ZC/TO1 callback */ |
| 504 | | DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF,z80ctc_device, trg3) /* ZC/TO2 callback */ |
| 503 | DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF, z80ctc_device, trg3) /* ZC/TO2 callback */ |
| 505 | 504 | }; |
| 506 | 505 | |
| 507 | 506 | /* FD1797 Interface */ |
| 508 | 507 | |
| 509 | | static const wd17xx_interface fdc_intf = |
| 510 | | { |
| 511 | | DEVCB_NULL, |
| 512 | | DEVCB_NULL, |
| 513 | | DEVCB_NULL, |
| 514 | | { FLOPPY_0, FLOPPY_1, NULL, NULL } |
| 515 | | }; |
| 508 | FLOPPY_FORMATS_MEMBER( tiki100_state::floppy_formats ) |
| 509 | FLOPPY_TIKI100_FORMAT |
| 510 | FLOPPY_FORMATS_END |
| 516 | 511 | |
| 512 | static SLOT_INTERFACE_START( tiki100_floppies ) |
| 513 | SLOT_INTERFACE( "525dd", FLOPPY_525_DD ) // Tead FD-55A |
| 514 | SLOT_INTERFACE( "525qd", FLOPPY_525_QD ) // Teac FD-55F |
| 515 | SLOT_INTERFACE_END |
| 516 | |
| 517 | 517 | /* AY-3-8912 Interface */ |
| 518 | 518 | |
| 519 | 519 | WRITE8_MEMBER( tiki100_state::video_scroll_w ) |
| r19219 | r19220 | |
| 536 | 536 | static const z80_daisy_config tiki100_daisy_chain[] = |
| 537 | 537 | { |
| 538 | 538 | { Z80CTC_TAG }, |
| 539 | | { Z80PIO_TAG }, |
| 540 | 539 | { Z80DART_TAG }, |
| 540 | { Z80PIO_TAG }, |
| 541 | 541 | { NULL } |
| 542 | 542 | }; |
| 543 | 543 | |
| r19219 | r19220 | |
| 572 | 572 | save_item(NAME(m_keylatch)); |
| 573 | 573 | } |
| 574 | 574 | |
| 575 | | // physical disks have 2:1 sector interleave |
| 576 | | static LEGACY_FLOPPY_OPTIONS_START(tiki100) |
| 577 | | LEGACY_FLOPPY_OPTION(tiki100, "dsk", "SSSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, |
| 578 | | HEADS([1]) |
| 579 | | TRACKS([40]) |
| 580 | | SECTORS([18]) |
| 581 | | SECTOR_LENGTH([128]) |
| 582 | | FIRST_SECTOR_ID([1])) |
| 583 | | LEGACY_FLOPPY_OPTION(tiki100, "dsk", "SSDD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, |
| 584 | | HEADS([1]) |
| 585 | | TRACKS([40]) |
| 586 | | SECTORS([10]) |
| 587 | | SECTOR_LENGTH([512]) |
| 588 | | FIRST_SECTOR_ID([1])) |
| 589 | | LEGACY_FLOPPY_OPTION(tiki100, "dsk", "DSDD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, |
| 590 | | HEADS([2]) |
| 591 | | TRACKS([40]) |
| 592 | | SECTORS([10]) |
| 593 | | SECTOR_LENGTH([512]) |
| 594 | | FIRST_SECTOR_ID([1])) |
| 595 | | LEGACY_FLOPPY_OPTION(tiki100, "dsk", "DSHD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, |
| 596 | | HEADS([2]) |
| 597 | | TRACKS([80]) |
| 598 | | SECTORS([10]) |
| 599 | | SECTOR_LENGTH([512]) |
| 600 | | FIRST_SECTOR_ID([1])) |
| 601 | | LEGACY_FLOPPY_OPTIONS_END |
| 602 | | |
| 603 | | static const floppy_interface tiki100_floppy_interface = |
| 604 | | { |
| 605 | | DEVCB_NULL, |
| 606 | | DEVCB_NULL, |
| 607 | | DEVCB_NULL, |
| 608 | | DEVCB_NULL, |
| 609 | | DEVCB_NULL, |
| 610 | | FLOPPY_STANDARD_5_25_DSHD, |
| 611 | | LEGACY_FLOPPY_OPTIONS_NAME(tiki100), |
| 612 | | "floppy_5_25", |
| 613 | | NULL |
| 614 | | }; |
| 615 | | |
| 616 | 575 | /* Machine Driver */ |
| 617 | 576 | |
| 618 | 577 | static MACHINE_CONFIG_START( tiki100, tiki100_state ) |
| r19219 | r19220 | |
| 638 | 597 | MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_8MHz/4, pio_intf) |
| 639 | 598 | MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_8MHz/4, ctc_intf) |
| 640 | 599 | MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc", tiki100_state, ctc_tick, attotime::from_hz(XTAL_8MHz/4)) |
| 641 | | MCFG_FD1797_ADD(FD1797_TAG, fdc_intf) // FD1767PL-02 or FD1797-PL |
| 642 | | MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(tiki100_floppy_interface) |
| 600 | MCFG_FD1797x_ADD(FD1797_TAG, XTAL_8MHz/8) // FD1767PL-02 or FD1797-PL |
| 601 | MCFG_FLOPPY_DRIVE_ADD(FD1797_TAG":0", tiki100_floppies, "525dd", NULL, tiki100_state::floppy_formats) |
| 602 | MCFG_FLOPPY_DRIVE_ADD(FD1797_TAG":1", tiki100_floppies, "525dd", NULL, tiki100_state::floppy_formats) |
| 643 | 603 | |
| 644 | 604 | /* sound hardware */ |
| 645 | 605 | MCFG_SPEAKER_STANDARD_MONO("mono") |
trunk/src/lib/formats/tiki100_dsk.c
| r0 | r19220 | |
| 1 | /*************************************************************************** |
| 2 | |
| 3 | Copyright Olivier Galibert |
| 4 | All rights reserved. |
| 5 | |
| 6 | Redistribution and use in source and binary forms, with or without |
| 7 | modification, are permitted provided that the following conditions are |
| 8 | met: |
| 9 | |
| 10 | * Redistributions of source code must retain the above copyright |
| 11 | notice, this list of conditions and the following disclaimer. |
| 12 | * Redistributions in binary form must reproduce the above copyright |
| 13 | notice, this list of conditions and the following disclaimer in |
| 14 | the documentation and/or other materials provided with the |
| 15 | distribution. |
| 16 | * Neither the name 'MAME' nor the names of its contributors may be |
| 17 | used to endorse or promote products derived from this software |
| 18 | without specific prior written permission. |
| 19 | |
| 20 | THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR |
| 21 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| 22 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| 23 | DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, |
| 24 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| 25 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| 27 | HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
| 28 | STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
| 29 | IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| 30 | POSSIBILITY OF SUCH DAMAGE. |
| 31 | |
| 32 | ****************************************************************************/ |
| 33 | |
| 34 | /********************************************************************* |
| 35 | |
| 36 | formats/tiki100_dsk.c |
| 37 | |
| 38 | TIKI 100 disk image format |
| 39 | |
| 40 | *********************************************************************/ |
| 41 | |
| 42 | #include "emu.h" |
| 43 | #include "formats/tiki100_dsk.h" |
| 44 | |
| 45 | tiki100_format::tiki100_format() : wd177x_format(formats) |
| 46 | { |
| 47 | } |
| 48 | |
| 49 | const char *tiki100_format::name() const |
| 50 | { |
| 51 | return "tiki100"; |
| 52 | } |
| 53 | |
| 54 | const char *tiki100_format::description() const |
| 55 | { |
| 56 | return "TIKI 100 disk image"; |
| 57 | } |
| 58 | |
| 59 | const char *tiki100_format::extensions() const |
| 60 | { |
| 61 | return "dsk"; |
| 62 | } |
| 63 | |
| 64 | // Unverified gap sizes |
| 65 | // physical disks have 2:1 sector interleave |
| 66 | // double sided disks have t0s0,t0s1,t1s0,t1s1... format |
| 67 | const tiki100_format::format tiki100_format::formats[] = { |
| 68 | { // 90K 5 1/4 inch single density single sided |
| 69 | floppy_image::FF_525, floppy_image::SSSD, |
| 70 | 2000, 18, 40, 1, 128, {}, 1, {}, 80, 22, 20 |
| 71 | }, |
| 72 | { // 200K 5 1/4 inch double density single sided |
| 73 | floppy_image::FF_525, floppy_image::SSDD, |
| 74 | 2000, 10, 40, 1, 512, {}, 1, {}, 80, 22, 20 |
| 75 | }, |
| 76 | { // 400K 5 1/4 inch double density |
| 77 | floppy_image::FF_525, floppy_image::DSDD, |
| 78 | 2000, 10, 40, 2, 512, {}, 1, {}, 80, 22, 20 |
| 79 | }, |
| 80 | { // 800K 5 1/4 inch quad density |
| 81 | floppy_image::FF_525, floppy_image::DSQD, |
| 82 | 2000, 10, 80, 2, 512, {}, 1, {}, 80, 22, 20 |
| 83 | }, |
| 84 | {} |
| 85 | }; |
| 86 | |
| 87 | const floppy_format_type FLOPPY_TIKI100_FORMAT = &floppy_image_format_creator<tiki100_format>; |