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)) |