trunk/src/mess/machine/bbc.c
| r26853 | r26854 | |
| 572 | 572 | |
| 573 | 573 | if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */ |
| 574 | 574 | { |
| 575 | | via6522_device *via_0 = machine().device<via6522_device>("via6522_0"); |
| 576 | | via6522_device *via_1 = machine().device<via6522_device>("via6522_1"); |
| 577 | | |
| 578 | 575 | myo = offset-0x200; |
| 579 | 576 | if ((myo>=0x00) && (myo<=0x07)) return bbc_6845_r(space, myo-0x00); /* Video Controller */ |
| 580 | 577 | if ((myo>=0x08) && (myo<=0x0f)) |
| r26853 | r26854 | |
| 592 | 589 | if ((myo>=0x30) && (myo<=0x33)) return 0xfe; /* page select */ |
| 593 | 590 | if ((myo>=0x34) && (myo<=0x37)) return bbcm_ACCCON_read(space, myo-0x34); /* ACCCON */ |
| 594 | 591 | if ((myo>=0x38) && (myo<=0x3f)) return 0xfe; /* NC ?? */ |
| 595 | | if ((myo>=0x40) && (myo<=0x5f)) return via_0->read(space, myo-0x40); |
| 596 | | if ((myo>=0x60) && (myo<=0x7f)) return via_1->read(space, myo-0x60); |
| 592 | if ((myo>=0x40) && (myo<=0x5f)) return m_via6522_0->read(space, myo-0x40); |
| 593 | if ((myo>=0x60) && (myo<=0x7f)) return m_via6522_1->read(space, myo-0x60); |
| 597 | 594 | if ((myo>=0x80) && (myo<=0x9f)) return 0xfe; |
| 598 | 595 | if ((myo>=0xa0) && (myo<=0xbf)) return m_adlc->read(space, myo & 0x03); |
| 599 | 596 | if ((myo>=0xc0) && (myo<=0xdf)) return 0xfe; |
| r26853 | r26854 | |
| 609 | 606 | |
| 610 | 607 | if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */ |
| 611 | 608 | { |
| 612 | | via6522_device *via_0 = machine().device<via6522_device>("via6522_0"); |
| 613 | | via6522_device *via_1 = machine().device<via6522_device>("via6522_1"); |
| 614 | | |
| 615 | 609 | myo=offset-0x200; |
| 616 | 610 | if ((myo>=0x00) && (myo<=0x07)) bbc_6845_w(space, myo-0x00, data); /* Video Controller */ |
| 617 | 611 | if ((myo>=0x08) && (myo<=0x0f)) |
| r26853 | r26854 | |
| 629 | 623 | if ((myo>=0x30) && (myo<=0x33)) page_selectbm_w(space, myo-0x30, data); /* page select */ |
| 630 | 624 | if ((myo>=0x34) && (myo<=0x37)) bbcm_ACCCON_write(space, myo-0x34, data); /* ACCCON */ |
| 631 | 625 | //if ((myo>=0x38) && (myo<=0x3f)) /* NC ?? */ |
| 632 | | if ((myo>=0x40) && (myo<=0x5f)) via_0->write(space, myo-0x40, data); |
| 633 | | if ((myo>=0x60) && (myo<=0x7f)) via_1->write(space, myo-0x60, data); |
| 626 | if ((myo>=0x40) && (myo<=0x5f)) m_via6522_0->write(space, myo-0x40, data); |
| 627 | if ((myo>=0x60) && (myo<=0x7f)) m_via6522_1->write(space, myo-0x60, data); |
| 634 | 628 | //if ((myo>=0x80) && (myo<=0x9f)) |
| 635 | 629 | if ((myo>=0xa0) && (myo<=0xbf)) m_adlc->write(space, myo & 0x03, data); |
| 636 | 630 | //if ((myo>=0xc0) && (myo<=0xdf)) |
| r26853 | r26854 | |
| 744 | 738 | "COL0", "COL1", "COL2", "COL3", "COL4", |
| 745 | 739 | "COL5", "COL6", "COL7", "COL8", "COL9" |
| 746 | 740 | }; |
| 747 | | via6522_device *via_0 = machine().device<via6522_device>("via6522_0"); |
| 748 | 741 | |
| 749 | 742 | /* only do auto scan if keyboard is not enabled */ |
| 750 | 743 | if (m_b3_keyboard == 1) |
| r26853 | r26854 | |
| 760 | 753 | being pressed on the selected m_column */ |
| 761 | 754 | if ((ioport(colnames[m_column])->read() | 0x01) != 0xff) |
| 762 | 755 | { |
| 763 | | via_0->write_ca2(1); |
| 756 | m_via6522_0->write_ca2(1); |
| 764 | 757 | } |
| 765 | 758 | else |
| 766 | 759 | { |
| 767 | | via_0->write_ca2(0); |
| 760 | m_via6522_0->write_ca2(0); |
| 768 | 761 | } |
| 769 | 762 | } |
| 770 | 763 | else |
| 771 | 764 | { |
| 772 | | via_0->write_ca2(0); |
| 765 | m_via6522_0->write_ca2(0); |
| 773 | 766 | } |
| 774 | 767 | } |
| 775 | 768 | } |
| r26853 | r26854 | |
| 781 | 774 | "COL0", "COL1", "COL2", "COL3", "COL4", |
| 782 | 775 | "COL5", "COL6", "COL7", "COL8", "COL9" |
| 783 | 776 | }; |
| 784 | | via6522_device *via_0 = machine().device<via6522_device>("via6522_0"); |
| 785 | 777 | |
| 786 | 778 | /* only do auto scan if keyboard is not enabled */ |
| 787 | 779 | if (m_b3_keyboard == 1) |
| r26853 | r26854 | |
| 799 | 791 | being pressed on the selected m_column */ |
| 800 | 792 | if ((ioport(colnames[m_column])->read() | 0x01) != 0xff) |
| 801 | 793 | { |
| 802 | | via_0->write_ca2(1); |
| 794 | m_via6522_0->write_ca2(1); |
| 803 | 795 | } |
| 804 | 796 | else |
| 805 | 797 | { |
| 806 | | via_0->write_ca2(0); |
| 798 | m_via6522_0->write_ca2(0); |
| 807 | 799 | } |
| 808 | 800 | } |
| 809 | 801 | else |
| 810 | 802 | { |
| 811 | | via_0->write_ca2(0); |
| 803 | m_via6522_0->write_ca2(0); |
| 812 | 804 | } |
| 813 | 805 | } |
| 814 | 806 | } |
| r26853 | r26854 | |
| 824 | 816 | "COL0", "COL1", "COL2", "COL3", "COL4", |
| 825 | 817 | "COL5", "COL6", "COL7", "COL8", "COL9" |
| 826 | 818 | }; |
| 827 | | via6522_device *via_0 = space.machine().device<via6522_device>("via6522_0"); |
| 828 | 819 | |
| 829 | 820 | m_column = data & 0x0f; |
| 830 | 821 | row = (data>>4) & 0x07; |
| r26853 | r26854 | |
| 848 | 839 | |
| 849 | 840 | if ((res | 1) != 0xff) |
| 850 | 841 | { |
| 851 | | via_0->write_ca2(1); |
| 842 | m_via6522_0->write_ca2(1); |
| 852 | 843 | } |
| 853 | 844 | else |
| 854 | 845 | { |
| 855 | | via_0->write_ca2(0); |
| 846 | m_via6522_0->write_ca2(0); |
| 856 | 847 | } |
| 857 | 848 | |
| 858 | 849 | return (data & 0x7f) | (bit<<7); |
| r26853 | r26854 | |
| 1157 | 1148 | } |
| 1158 | 1149 | |
| 1159 | 1150 | |
| 1160 | | /* vertical sync pulse from video circuit */ |
| 1161 | | READ_LINE_MEMBER(bbc_state::bbcb_via_system_read_ca1) |
| 1162 | | { |
| 1163 | | return 0x01; |
| 1164 | | } |
| 1165 | | |
| 1166 | | |
| 1167 | | /* joystick EOC */ |
| 1168 | | READ_LINE_MEMBER(bbc_state::bbcb_via_system_read_cb1) |
| 1169 | | { |
| 1170 | | return uPD7002_EOC_r(machine().device("upd7002"), generic_space(), 0); |
| 1171 | | } |
| 1172 | | |
| 1173 | | |
| 1174 | | /* keyboard pressed detect */ |
| 1175 | | READ_LINE_MEMBER(bbc_state::bbcb_via_system_read_ca2) |
| 1176 | | { |
| 1177 | | return 0x01; |
| 1178 | | } |
| 1179 | | |
| 1180 | | |
| 1181 | | /* light pen strobe detect (not emulated) */ |
| 1182 | | READ_LINE_MEMBER(bbc_state::bbcb_via_system_read_cb2) |
| 1183 | | { |
| 1184 | | return 0x01; |
| 1185 | | } |
| 1186 | | |
| 1187 | | |
| 1188 | 1151 | WRITE_LINE_MEMBER(bbc_state::bbcb_via_system_irq_w) |
| 1189 | 1152 | { |
| 1190 | 1153 | m_via_system_irq = state; |
| r26853 | r26854 | |
| 2160 | 2123 | m_serproc_data = 0; |
| 2161 | 2124 | m_cass_out_enabled = 0; |
| 2162 | 2125 | m_tape_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bbc_state::bbc_tape_timer_cb),this)); |
| 2126 | |
| 2127 | /* vertical sync pulse from video circuit */ |
| 2128 | m_via6522_0->write_ca1(1); |
| 2129 | |
| 2130 | /* light pen strobe detect (not emulated) */ |
| 2131 | m_via6522_0->write_cb2(1); |
| 2163 | 2132 | } |
| 2164 | 2133 | |
| 2165 | 2134 | DRIVER_INIT_MEMBER(bbc_state,bbcm) |
| r26853 | r26854 | |
| 2170 | 2139 | m_serproc_data = 0; |
| 2171 | 2140 | m_cass_out_enabled = 0; |
| 2172 | 2141 | m_tape_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bbc_state::bbc_tape_timer_cb),this)); |
| 2142 | |
| 2143 | /* vertical sync pulse from video circuit */ |
| 2144 | m_via6522_0->write_ca1(1); |
| 2145 | |
| 2146 | /* light pen strobe detect (not emulated) */ |
| 2147 | m_via6522_0->write_cb2(1); |
| 2173 | 2148 | } |
| 2174 | 2149 | |
| 2175 | 2150 | MACHINE_START_MEMBER(bbc_state,bbca) |
trunk/src/mess/includes/bbc.h
| r26853 | r26854 | |
| 42 | 42 | m_cassette(*this, "cassette"), |
| 43 | 43 | m_acia(*this, "acia6850"), |
| 44 | 44 | m_rs232(*this, RS232_TAG), |
| 45 | m_via6522_0(*this, "via6522_0"), |
| 46 | m_via6522_1(*this, "via6522_1"), |
| 45 | 47 | m_ACCCON_IRR(CLEAR_LINE), |
| 46 | 48 | m_via_system_irq(CLEAR_LINE), |
| 47 | 49 | m_via_user_irq(CLEAR_LINE), |
| r26853 | r26854 | |
| 68 | 70 | optional_device<cassette_image_device> m_cassette; |
| 69 | 71 | optional_device<acia6850_device> m_acia; |
| 70 | 72 | optional_device<rs232_port_device> m_rs232; |
| 73 | required_device<via6522_device> m_via6522_0; |
| 74 | optional_device<via6522_device> m_via6522_1; |
| 71 | 75 | |
| 76 | |
| 72 | 77 | void check_interrupts(); |
| 73 | 78 | |
| 74 | 79 | int m_DFSType; // this stores the DIP switch setting for the DFS type being used |
| r26853 | r26854 | |
| 332 | 337 | DECLARE_WRITE8_MEMBER(bbcb_via_system_write_portb); |
| 333 | 338 | DECLARE_READ8_MEMBER(bbcb_via_system_read_porta); |
| 334 | 339 | DECLARE_READ8_MEMBER(bbcb_via_system_read_portb); |
| 335 | | DECLARE_READ_LINE_MEMBER(bbcb_via_system_read_ca1); |
| 336 | | DECLARE_READ_LINE_MEMBER(bbcb_via_system_read_cb1); |
| 337 | | DECLARE_READ_LINE_MEMBER(bbcb_via_system_read_ca2); |
| 338 | | DECLARE_READ_LINE_MEMBER(bbcb_via_system_read_cb2); |
| 339 | 340 | DECLARE_WRITE_LINE_MEMBER(bbcb_via_system_irq_w); |
| 340 | 341 | DECLARE_READ8_MEMBER(bbcb_via_user_read_portb); |
| 341 | 342 | DECLARE_WRITE8_MEMBER(bbcb_via_user_write_portb); |
trunk/src/mess/drivers/bbc.c
| r26853 | r26854 | |
| 701 | 701 | MCFG_DEVICE_ADD("via6522_0", VIA6522, 1000000) |
| 702 | 702 | MCFG_VIA6522_READPA_HANDLER(READ8(bbc_state, bbcb_via_system_read_porta)) |
| 703 | 703 | MCFG_VIA6522_READPB_HANDLER(READ8(bbc_state, bbcb_via_system_read_portb)) |
| 704 | | MCFG_VIA6522_READCA1_HANDLER(READLINE(bbc_state, bbcb_via_system_read_ca1)) |
| 705 | | MCFG_VIA6522_READCB1_HANDLER(READLINE(bbc_state, bbcb_via_system_read_cb1)) |
| 706 | | MCFG_VIA6522_READCA2_HANDLER(READLINE(bbc_state, bbcb_via_system_read_ca2)) |
| 707 | | MCFG_VIA6522_READCB2_HANDLER(READLINE(bbc_state, bbcb_via_system_read_cb2)) |
| 708 | 704 | MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(bbc_state, bbcb_via_system_write_porta)) |
| 709 | 705 | MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(bbc_state, bbcb_via_system_write_portb)) |
| 710 | 706 | MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_system_irq_w)) |
| r26853 | r26854 | |
| 913 | 909 | MCFG_DEVICE_ADD("via6522_0", VIA6522, 1000000) |
| 914 | 910 | MCFG_VIA6522_READPA_HANDLER(READ8(bbc_state, bbcb_via_system_read_porta)) |
| 915 | 911 | MCFG_VIA6522_READPB_HANDLER(READ8(bbc_state, bbcb_via_system_read_portb)) |
| 916 | | MCFG_VIA6522_READCA1_HANDLER(READLINE(bbc_state, bbcb_via_system_read_ca1)) |
| 917 | | MCFG_VIA6522_READCB1_HANDLER(READLINE(bbc_state, bbcb_via_system_read_cb1)) |
| 918 | | MCFG_VIA6522_READCA2_HANDLER(READLINE(bbc_state, bbcb_via_system_read_ca2)) |
| 919 | | MCFG_VIA6522_READCB2_HANDLER(READLINE(bbc_state, bbcb_via_system_read_cb2)) |
| 920 | 912 | MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(bbc_state, bbcb_via_system_write_porta)) |
| 921 | 913 | MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(bbc_state, bbcb_via_system_write_portb)) |
| 922 | 914 | MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_system_irq_w)) |