trunk/src/mess/machine/svi318.c
| r20451 | r20452 | |
| 10 | 10 | #include "includes/svi318.h" |
| 11 | 11 | #include "cpu/z80/z80.h" |
| 12 | 12 | #include "video/tms9928a.h" |
| 13 | | #include "machine/i8255.h" |
| 14 | | #include "machine/ins8250.h" |
| 15 | 13 | #include "machine/wd17xx.h" |
| 16 | | #include "machine/ctronics.h" |
| 17 | 14 | #include "imagedev/flopdrv.h" |
| 18 | | #include "imagedev/cassette.h" |
| 19 | 15 | #include "formats/svi_cas.h" |
| 20 | | #include "sound/dac.h" |
| 21 | 16 | #include "sound/ay8910.h" |
| 22 | | #include "machine/ram.h" |
| 23 | 17 | |
| 24 | 18 | enum { |
| 25 | 19 | SVI_INTERNAL = 0, |
| r20451 | r20452 | |
| 29 | 23 | }; |
| 30 | 24 | |
| 31 | 25 | |
| 32 | | static void svi318_set_banks(running_machine &machine); |
| 33 | | |
| 34 | | |
| 35 | 26 | /* Serial ports */ |
| 36 | 27 | |
| 37 | 28 | WRITE_LINE_MEMBER(svi318_state::svi318_ins8250_interrupt) |
| 38 | 29 | { |
| 39 | 30 | if (m_svi.bankLow != SVI_CART) |
| 40 | 31 | { |
| 41 | | machine().device("maincpu")->execute().set_input_line(0, (state ? HOLD_LINE : CLEAR_LINE)); |
| 32 | m_maincpu->set_input_line(0, (state ? HOLD_LINE : CLEAR_LINE)); |
| 42 | 33 | } |
| 43 | 34 | } |
| 44 | 35 | #if 0 |
| r20451 | r20452 | |
| 147 | 138 | { |
| 148 | 139 | int data = 0x0f; |
| 149 | 140 | |
| 150 | | if ((machine().device<cassette_image_device>(CASSETTE_TAG))->input() > 0.0038) |
| 141 | if (m_cassette->input() > 0.0038) |
| 142 | { |
| 151 | 143 | data |= 0x80; |
| 152 | | if (!svi318_cassette_present(machine(), 0)) |
| 144 | } |
| 145 | if (!m_cassette->exists()) |
| 146 | { |
| 153 | 147 | data |= 0x40; |
| 154 | | data |= machine().root_device().ioport("BUTTONS")->read() & 0x30; |
| 148 | } |
| 149 | data |= m_buttons->read() & 0x30; |
| 155 | 150 | |
| 156 | 151 | return data; |
| 157 | 152 | } |
| r20451 | r20452 | |
| 171 | 166 | |
| 172 | 167 | READ8_MEMBER(svi318_state::svi318_ppi_port_b_r) |
| 173 | 168 | { |
| 174 | | int row; |
| 175 | | static const char *const keynames[] = { |
| 176 | | "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", |
| 177 | | "LINE6", "LINE7", "LINE8", "LINE9", "LINE10" |
| 178 | | }; |
| 169 | switch (m_svi.keyboard_row) |
| 170 | { |
| 171 | case 0: return m_line0->read(); |
| 172 | case 1: return m_line1->read(); |
| 173 | case 2: return m_line2->read(); |
| 174 | case 3: return m_line3->read(); |
| 175 | case 4: return m_line4->read(); |
| 176 | case 5: return m_line5->read(); |
| 177 | case 6: return m_line6->read(); |
| 178 | case 7: return m_line7->read(); |
| 179 | case 8: return m_line8->read(); |
| 180 | case 9: return m_line9->read(); |
| 181 | case 10: return m_line10->read(); |
| 182 | } |
| 179 | 183 | |
| 180 | | row = m_svi.keyboard_row; |
| 181 | | if (row <= 10) |
| 182 | | return machine().root_device().ioport(keynames[row])->read(); |
| 183 | | |
| 184 | 184 | return 0xff; |
| 185 | 185 | } |
| 186 | 186 | |
| r20451 | r20452 | |
| 204 | 204 | /* key click */ |
| 205 | 205 | val = (data & 0x80) ? 0x3e : 0; |
| 206 | 206 | val += (data & 0x40) ? 0x3e : 0; |
| 207 | | machine().device<dac_device>("dac")->write_signed8(val); |
| 207 | m_dac->write_signed8(val); |
| 208 | 208 | |
| 209 | 209 | /* cassette motor on/off */ |
| 210 | | if (svi318_cassette_present(machine(), 0)) |
| 210 | if (m_cassette->exists()) |
| 211 | 211 | { |
| 212 | | machine().device<cassette_image_device>(CASSETTE_TAG)->change_state( |
| 212 | m_cassette->change_state( |
| 213 | 213 | (data & 0x10) ? CASSETTE_MOTOR_DISABLED : CASSETTE_MOTOR_ENABLED, |
| 214 | 214 | CASSETTE_MOTOR_DISABLED); |
| 215 | 215 | } |
| 216 | 216 | |
| 217 | 217 | /* cassette signal write */ |
| 218 | | machine().device<cassette_image_device>(CASSETTE_TAG)->output((data & 0x20) ? -1.0 : +1.0); |
| 218 | m_cassette->output((data & 0x20) ? -1.0 : +1.0); |
| 219 | 219 | |
| 220 | 220 | m_svi.keyboard_row = data & 0x0F; |
| 221 | 221 | } |
| r20451 | r20452 | |
| 232 | 232 | |
| 233 | 233 | WRITE8_MEMBER(svi318_state::svi318_ppi_w) |
| 234 | 234 | { |
| 235 | | i8255_device *ppi = machine().device<i8255_device>("ppi8255"); |
| 236 | | ppi->write(space, offset + 2, data); |
| 235 | m_ppi->write(space, offset + 2, data); |
| 237 | 236 | } |
| 238 | 237 | |
| 239 | 238 | |
| r20451 | r20452 | |
| 254 | 253 | |
| 255 | 254 | READ8_MEMBER(svi318_state::svi318_psg_port_a_r) |
| 256 | 255 | { |
| 257 | | return ioport("JOYSTICKS")->read(); |
| 256 | return m_joysticks->read(); |
| 258 | 257 | } |
| 259 | 258 | |
| 260 | 259 | /* |
| r20451 | r20452 | |
| 279 | 278 | set_led_status (machine(), 0, !(data & 0x20) ); |
| 280 | 279 | |
| 281 | 280 | m_svi.bank_switch = data; |
| 282 | | svi318_set_banks(machine()); |
| 281 | svi318_set_banks(); |
| 283 | 282 | } |
| 284 | 283 | |
| 285 | 284 | /* Disk drives */ |
| r20451 | r20452 | |
| 377 | 376 | WRITE8_MEMBER(svi318_state::svi806_ram_enable_w) |
| 378 | 377 | { |
| 379 | 378 | m_svi.svi806_ram_enabled = ( data & 0x01 ); |
| 380 | | svi318_set_banks(machine()); |
| 379 | svi318_set_banks(); |
| 381 | 380 | } |
| 382 | 381 | |
| 383 | 382 | VIDEO_START_MEMBER(svi318_state,svi328_806) |
| r20451 | r20452 | |
| 390 | 389 | |
| 391 | 390 | svi318_80col_init(machine()); |
| 392 | 391 | m_svi.svi806_present = 1; |
| 393 | | svi318_set_banks(machine()); |
| 392 | svi318_set_banks(); |
| 394 | 393 | |
| 395 | 394 | /* Set SVI-806 80 column card palette */ |
| 396 | 395 | palette_set_color_rgb( machine(), TMS9928A_PALETTE_SIZE, 0, 0, 0 ); /* Monochrome black */ |
| r20451 | r20452 | |
| 524 | 523 | DRIVER_INIT_MEMBER(svi318_state,svi318) |
| 525 | 524 | { |
| 526 | 525 | /* z80 stuff */ |
| 527 | | z80_set_cycle_tables( machine().device("maincpu"), cc_op, cc_cb, cc_ed, cc_xy, cc_xycb, cc_ex ); |
| 526 | z80_set_cycle_tables( m_maincpu, cc_op, cc_cb, cc_ed, cc_xy, cc_xycb, cc_ex ); |
| 528 | 527 | |
| 529 | 528 | memset(&m_svi, 0, sizeof (m_svi) ); |
| 530 | 529 | |
| r20451 | r20452 | |
| 533 | 532 | m_svi.svi318 = 1; |
| 534 | 533 | } |
| 535 | 534 | |
| 536 | | machine().device("maincpu")->execute().set_input_line_vector(0, 0xff); |
| 535 | m_maincpu->set_input_line_vector(0, 0xff); |
| 537 | 536 | |
| 538 | 537 | /* memory */ |
| 539 | 538 | m_svi.empty_bank = auto_alloc_array(machine(), UINT8, 0x8000); |
| r20451 | r20452 | |
| 574 | 573 | int drive; |
| 575 | 574 | |
| 576 | 575 | m_svi.bank_switch = 0xff; |
| 577 | | svi318_set_banks(machine()); |
| 576 | svi318_set_banks(); |
| 578 | 577 | |
| 579 | 578 | for(drive=0;drive<2;drive++) |
| 580 | 579 | { |
| r20451 | r20452 | |
| 626 | 625 | } |
| 627 | 626 | } |
| 628 | 627 | |
| 629 | | static void svi318_set_banks(running_machine &machine) |
| 628 | void svi318_state::svi318_set_banks() |
| 630 | 629 | { |
| 631 | | svi318_state *state = machine.driver_data<svi318_state>(); |
| 632 | | const UINT8 v = state->m_svi.bank_switch; |
| 633 | | UINT8 *ram = machine.device<ram_device>(RAM_TAG)->pointer(); |
| 634 | | UINT32 ram_size = machine.device<ram_device>(RAM_TAG)->size(); |
| 630 | const UINT8 v = m_svi.bank_switch; |
| 631 | UINT8 *ram = m_ram->pointer(); |
| 632 | UINT32 ram_size = m_ram->size(); |
| 635 | 633 | |
| 636 | | state->m_svi.bankLow = ( v & 1 ) ? ( ( v & 2 ) ? ( ( v & 8 ) ? SVI_INTERNAL : SVI_EXPRAM3 ) : SVI_EXPRAM2 ) : SVI_CART; |
| 637 | | state->m_svi.bankHigh1 = ( v & 4 ) ? ( ( v & 16 ) ? SVI_INTERNAL : SVI_EXPRAM3 ) : SVI_EXPRAM2; |
| 634 | m_svi.bankLow = ( v & 1 ) ? ( ( v & 2 ) ? ( ( v & 8 ) ? SVI_INTERNAL : SVI_EXPRAM3 ) : SVI_EXPRAM2 ) : SVI_CART; |
| 635 | m_svi.bankHigh1 = ( v & 4 ) ? ( ( v & 16 ) ? SVI_INTERNAL : SVI_EXPRAM3 ) : SVI_EXPRAM2; |
| 638 | 636 | |
| 639 | | state->m_svi.bankLow_ptr = state->m_svi.empty_bank; |
| 640 | | state->m_svi.bankLow_read_only = 1; |
| 637 | m_svi.bankLow_ptr = m_svi.empty_bank; |
| 638 | m_svi.bankLow_read_only = 1; |
| 641 | 639 | |
| 642 | | switch( state->m_svi.bankLow ) |
| 640 | switch( m_svi.bankLow ) |
| 643 | 641 | { |
| 644 | 642 | case SVI_INTERNAL: |
| 645 | | state->m_svi.bankLow_ptr = state->memregion("maincpu")->base(); |
| 643 | m_svi.bankLow_ptr = memregion("maincpu")->base(); |
| 646 | 644 | break; |
| 647 | 645 | case SVI_CART: |
| 648 | | if ( state->m_pcart ) |
| 646 | if ( m_pcart ) |
| 649 | 647 | { |
| 650 | | state->m_svi.bankLow_ptr = state->m_pcart; |
| 648 | m_svi.bankLow_ptr = m_pcart; |
| 651 | 649 | } |
| 652 | 650 | break; |
| 653 | 651 | case SVI_EXPRAM2: |
| 654 | 652 | if ( ram_size >= 64 * 1024 ) |
| 655 | 653 | { |
| 656 | | state->m_svi.bankLow_ptr = ram + ram_size - 64 * 1024; |
| 657 | | state->m_svi.bankLow_read_only = 0; |
| 654 | m_svi.bankLow_ptr = ram + ram_size - 64 * 1024; |
| 655 | m_svi.bankLow_read_only = 0; |
| 658 | 656 | } |
| 659 | 657 | break; |
| 660 | 658 | case SVI_EXPRAM3: |
| 661 | 659 | if ( ram_size > 128 * 1024 ) |
| 662 | 660 | { |
| 663 | | state->m_svi.bankLow_ptr = ram + ram_size - 128 * 1024; |
| 664 | | state->m_svi.bankLow_read_only = 0; |
| 661 | m_svi.bankLow_ptr = ram + ram_size - 128 * 1024; |
| 662 | m_svi.bankLow_read_only = 0; |
| 665 | 663 | } |
| 666 | 664 | break; |
| 667 | 665 | } |
| 668 | 666 | |
| 669 | | state->m_svi.bankHigh1_ptr = state->m_svi.bankHigh2_ptr = state->m_svi.empty_bank; |
| 670 | | state->m_svi.bankHigh1_read_only = state->m_svi.bankHigh2_read_only = 1; |
| 667 | m_svi.bankHigh1_ptr = m_svi.bankHigh2_ptr = m_svi.empty_bank; |
| 668 | m_svi.bankHigh1_read_only = m_svi.bankHigh2_read_only = 1; |
| 671 | 669 | |
| 672 | | switch( state->m_svi.bankHigh1 ) |
| 670 | switch( m_svi.bankHigh1 ) |
| 673 | 671 | { |
| 674 | 672 | case SVI_INTERNAL: |
| 675 | 673 | if ( ram_size == 16 * 1024 ) |
| 676 | 674 | { |
| 677 | | state->m_svi.bankHigh2_ptr = ram; |
| 678 | | state->m_svi.bankHigh2_read_only = 0; |
| 675 | m_svi.bankHigh2_ptr = ram; |
| 676 | m_svi.bankHigh2_read_only = 0; |
| 679 | 677 | } |
| 680 | 678 | else |
| 681 | 679 | { |
| 682 | | state->m_svi.bankHigh1_ptr = ram; |
| 683 | | state->m_svi.bankHigh1_read_only = 0; |
| 684 | | state->m_svi.bankHigh2_ptr = ram + 0x4000; |
| 685 | | state->m_svi.bankHigh2_read_only = 0; |
| 680 | m_svi.bankHigh1_ptr = ram; |
| 681 | m_svi.bankHigh1_read_only = 0; |
| 682 | m_svi.bankHigh2_ptr = ram + 0x4000; |
| 683 | m_svi.bankHigh2_read_only = 0; |
| 686 | 684 | } |
| 687 | 685 | break; |
| 688 | 686 | case SVI_EXPRAM2: |
| 689 | 687 | if ( ram_size > 64 * 1024 ) |
| 690 | 688 | { |
| 691 | | state->m_svi.bankHigh1_ptr = ram + ram_size - 64 * 1024 + 32 * 1024; |
| 692 | | state->m_svi.bankHigh1_read_only = 0; |
| 693 | | state->m_svi.bankHigh2_ptr = ram + ram_size - 64 * 1024 + 48 * 1024; |
| 694 | | state->m_svi.bankHigh2_read_only = 0; |
| 689 | m_svi.bankHigh1_ptr = ram + ram_size - 64 * 1024 + 32 * 1024; |
| 690 | m_svi.bankHigh1_read_only = 0; |
| 691 | m_svi.bankHigh2_ptr = ram + ram_size - 64 * 1024 + 48 * 1024; |
| 692 | m_svi.bankHigh2_read_only = 0; |
| 695 | 693 | } |
| 696 | 694 | break; |
| 697 | 695 | case SVI_EXPRAM3: |
| 698 | 696 | if ( ram_size > 128 * 1024 ) |
| 699 | 697 | { |
| 700 | | state->m_svi.bankHigh1_ptr = ram + ram_size - 128 * 1024 + 32 * 1024; |
| 701 | | state->m_svi.bankHigh1_read_only = 0; |
| 702 | | state->m_svi.bankHigh2_ptr = ram + ram_size - 128 * 1024 + 48 * 1024; |
| 703 | | state->m_svi.bankHigh2_read_only = 0; |
| 698 | m_svi.bankHigh1_ptr = ram + ram_size - 128 * 1024 + 32 * 1024; |
| 699 | m_svi.bankHigh1_read_only = 0; |
| 700 | m_svi.bankHigh2_ptr = ram + ram_size - 128 * 1024 + 48 * 1024; |
| 701 | m_svi.bankHigh2_read_only = 0; |
| 704 | 702 | } |
| 705 | 703 | break; |
| 706 | 704 | } |
| 707 | 705 | |
| 708 | 706 | /* Check for special CART based banking */ |
| 709 | | if ( state->m_svi.bankLow == SVI_CART && ( v & 0xc0 ) != 0xc0 ) |
| 707 | if ( m_svi.bankLow == SVI_CART && ( v & 0xc0 ) != 0xc0 ) |
| 710 | 708 | { |
| 711 | | state->m_svi.bankHigh1_ptr = state->m_svi.empty_bank; |
| 712 | | state->m_svi.bankHigh1_read_only = 1; |
| 713 | | state->m_svi.bankHigh2_ptr = state->m_svi.empty_bank; |
| 714 | | state->m_svi.bankHigh2_read_only = 1; |
| 715 | | if ( state->m_pcart && ! ( v & 0x80 ) ) |
| 709 | m_svi.bankHigh1_ptr = m_svi.empty_bank; |
| 710 | m_svi.bankHigh1_read_only = 1; |
| 711 | m_svi.bankHigh2_ptr = m_svi.empty_bank; |
| 712 | m_svi.bankHigh2_read_only = 1; |
| 713 | if ( m_pcart && ! ( v & 0x80 ) ) |
| 716 | 714 | { |
| 717 | | state->m_svi.bankHigh2_ptr = state->m_pcart + 0x4000; |
| 715 | m_svi.bankHigh2_ptr = m_pcart + 0x4000; |
| 718 | 716 | } |
| 719 | | if ( state->m_pcart && ! ( v & 0x40 ) ) |
| 717 | if ( m_pcart && ! ( v & 0x40 ) ) |
| 720 | 718 | { |
| 721 | | state->m_svi.bankHigh1_ptr = state->m_pcart; |
| 719 | m_svi.bankHigh1_ptr = m_pcart; |
| 722 | 720 | } |
| 723 | 721 | } |
| 724 | 722 | |
| 725 | | state->membank("bank1")->set_base(state->m_svi.bankLow_ptr ); |
| 726 | | state->membank("bank2")->set_base(state->m_svi.bankHigh1_ptr ); |
| 727 | | state->membank("bank3")->set_base(state->m_svi.bankHigh2_ptr ); |
| 723 | membank("bank1")->set_base(m_svi.bankLow_ptr ); |
| 724 | membank("bank2")->set_base(m_svi.bankHigh1_ptr ); |
| 725 | membank("bank3")->set_base(m_svi.bankHigh2_ptr ); |
| 728 | 726 | |
| 729 | 727 | /* SVI-806 80 column card specific banking */ |
| 730 | | if ( state->m_svi.svi806_present ) |
| 728 | if ( m_svi.svi806_present ) |
| 731 | 729 | { |
| 732 | | if ( state->m_svi.svi806_ram_enabled ) |
| 730 | if ( m_svi.svi806_ram_enabled ) |
| 733 | 731 | { |
| 734 | | state->membank("bank4")->set_base(state->m_svi.svi806_ram ); |
| 732 | membank("bank4")->set_base(m_svi.svi806_ram ); |
| 735 | 733 | } |
| 736 | 734 | else |
| 737 | 735 | { |
| 738 | | state->membank("bank4")->set_base(state->m_svi.bankHigh2_ptr + 0x3000 ); |
| 736 | membank("bank4")->set_base(m_svi.bankHigh2_ptr + 0x3000 ); |
| 739 | 737 | } |
| 740 | 738 | } |
| 741 | 739 | } |
| 742 | 740 | |
| 743 | | /* Cassette */ |
| 744 | | |
| 745 | | int svi318_cassette_present(running_machine &machine, int id) |
| 746 | | { |
| 747 | | device_image_interface *image = dynamic_cast<device_image_interface *>(machine.device<cassette_image_device>(CASSETTE_TAG)); |
| 748 | | |
| 749 | | if ( image == NULL ) |
| 750 | | return FALSE; |
| 751 | | return image->exists(); |
| 752 | | } |
| 753 | | |
| 754 | 741 | /* External I/O */ |
| 755 | 742 | |
| 756 | 743 | READ8_MEMBER(svi318_state::svi318_io_ext_r) |
| 757 | 744 | { |
| 758 | 745 | UINT8 data = 0xff; |
| 759 | 746 | device_t *device; |
| 760 | | ins8250_device *uart; |
| 761 | | centronics_device *centronics = machine().device<centronics_device>("centronics"); |
| 762 | 747 | |
| 763 | 748 | if (m_svi.bankLow == SVI_CART) |
| 764 | 749 | { |
| r20451 | r20452 | |
| 768 | 753 | switch( offset ) |
| 769 | 754 | { |
| 770 | 755 | case 0x12: |
| 771 | | data = 0xfe | centronics->busy_r(); |
| 756 | data = 0xfe | m_centronics->busy_r(); |
| 772 | 757 | break; |
| 773 | 758 | |
| 774 | 759 | case 0x20: |
| r20451 | r20452 | |
| 779 | 764 | case 0x25: |
| 780 | 765 | case 0x26: |
| 781 | 766 | case 0x27: |
| 782 | | uart = machine().device<ins8250_device>("ins8250_0"); |
| 783 | | data = uart->ins8250_r(space, offset & 7); |
| 767 | data = m_ins8250_0->ins8250_r(space, offset & 7); |
| 784 | 768 | break; |
| 785 | 769 | |
| 786 | 770 | case 0x28: |
| r20451 | r20452 | |
| 791 | 775 | case 0x2D: |
| 792 | 776 | case 0x2E: |
| 793 | 777 | case 0x2F: |
| 794 | | uart = machine().device<ins8250_device>("ins8250_1"); |
| 795 | | data = uart->ins8250_r(space, offset & 7); |
| 778 | data = m_ins8250_1->ins8250_r(space, offset & 7); |
| 796 | 779 | break; |
| 797 | 780 | |
| 798 | 781 | case 0x30: |
| r20451 | r20452 | |
| 826 | 809 | WRITE8_MEMBER(svi318_state::svi318_io_ext_w) |
| 827 | 810 | { |
| 828 | 811 | device_t *device; |
| 829 | | ins8250_device *uart; |
| 830 | | centronics_device *centronics = machine().device<centronics_device>("centronics"); |
| 831 | 812 | |
| 832 | 813 | if (m_svi.bankLow == SVI_CART) |
| 833 | 814 | { |
| r20451 | r20452 | |
| 837 | 818 | switch( offset ) |
| 838 | 819 | { |
| 839 | 820 | case 0x10: |
| 840 | | centronics->write(space, 0, data); |
| 821 | m_centronics->write(space, 0, data); |
| 841 | 822 | break; |
| 842 | 823 | |
| 843 | 824 | case 0x11: |
| 844 | | centronics->strobe_w(BIT(data, 0)); |
| 825 | m_centronics->strobe_w(BIT(data, 0)); |
| 845 | 826 | break; |
| 846 | 827 | |
| 847 | 828 | case 0x20: |
| r20451 | r20452 | |
| 852 | 833 | case 0x25: |
| 853 | 834 | case 0x26: |
| 854 | 835 | case 0x27: |
| 855 | | uart = machine().device<ins8250_device>("ins8250_0"); |
| 856 | | uart->ins8250_w(space, offset & 7, data); |
| 836 | m_ins8250_0->ins8250_w(space, offset & 7, data); |
| 857 | 837 | break; |
| 858 | 838 | |
| 859 | 839 | case 0x28: |
| r20451 | r20452 | |
| 864 | 844 | case 0x2D: |
| 865 | 845 | case 0x2E: |
| 866 | 846 | case 0x2F: |
| 867 | | uart = machine().device<ins8250_device>("ins8250_1"); |
| 868 | | uart->ins8250_w(space, offset & 7, data); |
| 847 | m_ins8250_1->ins8250_w(space, offset & 7, data); |
| 869 | 848 | break; |
| 870 | 849 | |
| 871 | 850 | case 0x30: |
trunk/src/mess/includes/svi318.h
| r20451 | r20452 | |
| 12 | 12 | #include "machine/i8255.h" |
| 13 | 13 | #include "machine/ins8250.h" |
| 14 | 14 | #include "machine/wd17xx.h" |
| 15 | #include "imagedev/cassette.h" |
| 16 | #include "sound/dac.h" |
| 17 | #include "machine/ram.h" |
| 18 | #include "machine/ctronics.h" |
| 15 | 19 | |
| 20 | |
| 16 | 21 | struct SVI_318 |
| 17 | 22 | { |
| 18 | 23 | /* general */ |
| r20451 | r20452 | |
| 50 | 55 | { |
| 51 | 56 | public: |
| 52 | 57 | svi318_state(const machine_config &mconfig, device_type type, const char *tag) |
| 53 | | : driver_device(mconfig, type, tag) { } |
| 58 | : driver_device(mconfig, type, tag) |
| 59 | , m_maincpu(*this, "maincpu") |
| 60 | , m_cassette(*this, CASSETTE_TAG) |
| 61 | , m_dac(*this, "dac") |
| 62 | , m_ppi(*this, "ppi8255") |
| 63 | , m_ram(*this, RAM_TAG) |
| 64 | , m_centronics(*this, "centronics") |
| 65 | , m_ins8250_0(*this, "ins8250_0") |
| 66 | , m_ins8250_1(*this, "ins8250_1") |
| 67 | , m_line0(*this, "LINE0") |
| 68 | , m_line1(*this, "LINE1") |
| 69 | , m_line2(*this, "LINE2") |
| 70 | , m_line3(*this, "LINE3") |
| 71 | , m_line4(*this, "LINE4") |
| 72 | , m_line5(*this, "LINE5") |
| 73 | , m_line6(*this, "LINE6") |
| 74 | , m_line7(*this, "LINE7") |
| 75 | , m_line8(*this, "LINE8") |
| 76 | , m_line9(*this, "LINE9") |
| 77 | , m_line10(*this, "LINE10") |
| 78 | , m_joysticks(*this, "JOYSTICKS") |
| 79 | , m_buttons(*this, "BUTTONS") |
| 80 | { } |
| 54 | 81 | |
| 55 | 82 | SVI_318 m_svi; |
| 56 | 83 | UINT8 *m_pcart; |
| r20451 | r20452 | |
| 82 | 109 | DECLARE_WRITE8_MEMBER(svi318_ppi_port_c_w); |
| 83 | 110 | DECLARE_WRITE_LINE_MEMBER(svi_fdc_intrq_w); |
| 84 | 111 | DECLARE_WRITE_LINE_MEMBER(svi_fdc_drq_w); |
| 112 | |
| 113 | protected: |
| 114 | required_device<cpu_device> m_maincpu; |
| 115 | required_device<cassette_image_device> m_cassette; |
| 116 | required_device<dac_device> m_dac; |
| 117 | required_device<i8255_device> m_ppi; |
| 118 | required_device<ram_device> m_ram; |
| 119 | required_device<centronics_device> m_centronics; |
| 120 | required_device<ins8250_device> m_ins8250_0; |
| 121 | required_device<ins8250_device> m_ins8250_1; |
| 122 | required_ioport m_line0; |
| 123 | required_ioport m_line1; |
| 124 | required_ioport m_line2; |
| 125 | required_ioport m_line3; |
| 126 | required_ioport m_line4; |
| 127 | required_ioport m_line5; |
| 128 | required_ioport m_line6; |
| 129 | required_ioport m_line7; |
| 130 | required_ioport m_line8; |
| 131 | required_ioport m_line9; |
| 132 | required_ioport m_line10; |
| 133 | required_ioport m_joysticks; |
| 134 | required_ioport m_buttons; |
| 135 | |
| 136 | void svi318_set_banks(); |
| 85 | 137 | }; |
| 86 | 138 | |
| 87 | 139 | |