trunk/src/mess/includes/microtan.h
| r26856 | r26857 | |
| 32 | 32 | : driver_device(mconfig, type, tag), |
| 33 | 33 | m_videoram(*this, "videoram"), |
| 34 | 34 | m_maincpu(*this, "maincpu"), |
| 35 | | m_cassette(*this, "cassette") { } |
| 35 | m_cassette(*this, "cassette"), |
| 36 | m_via6522_0(*this, "via6522_0"), |
| 37 | m_via6522_1(*this, "via6522_1") |
| 38 | { } |
| 36 | 39 | |
| 37 | 40 | required_shared_ptr<UINT8> m_videoram; |
| 38 | 41 | UINT8 m_chunky_graphics; |
| r26856 | r26857 | |
| 65 | 68 | TIMER_CALLBACK_MEMBER(microtan_pulse_nmi); |
| 66 | 69 | DECLARE_READ8_MEMBER(via_0_in_a); |
| 67 | 70 | DECLARE_READ8_MEMBER(via_0_in_b); |
| 68 | | DECLARE_READ_LINE_MEMBER(via_0_in_ca1); |
| 69 | | DECLARE_READ_LINE_MEMBER(via_0_in_cb1); |
| 70 | | DECLARE_READ_LINE_MEMBER(via_0_in_ca2); |
| 71 | | DECLARE_READ_LINE_MEMBER(via_0_in_cb2); |
| 72 | 71 | DECLARE_WRITE8_MEMBER(via_0_out_a); |
| 73 | 72 | DECLARE_WRITE8_MEMBER(via_0_out_b); |
| 74 | 73 | DECLARE_WRITE_LINE_MEMBER(via_0_out_ca2); |
| 75 | 74 | DECLARE_WRITE_LINE_MEMBER(via_0_out_cb2); |
| 76 | 75 | DECLARE_READ8_MEMBER(via_1_in_a); |
| 77 | 76 | DECLARE_READ8_MEMBER(via_1_in_b); |
| 78 | | DECLARE_READ_LINE_MEMBER(via_1_in_ca1); |
| 79 | | DECLARE_READ_LINE_MEMBER(via_1_in_cb1); |
| 80 | | DECLARE_READ_LINE_MEMBER(via_1_in_ca2); |
| 81 | | DECLARE_READ_LINE_MEMBER(via_1_in_cb2); |
| 82 | 77 | DECLARE_WRITE8_MEMBER(via_1_out_a); |
| 83 | 78 | DECLARE_WRITE8_MEMBER(via_1_out_b); |
| 84 | 79 | DECLARE_WRITE_LINE_MEMBER(via_1_out_ca2); |
| r26856 | r26857 | |
| 87 | 82 | DECLARE_WRITE_LINE_MEMBER(via_1_irq); |
| 88 | 83 | required_device<cpu_device> m_maincpu; |
| 89 | 84 | required_device<cassette_image_device> m_cassette; |
| 85 | required_device<via6522_device> m_via6522_0; |
| 86 | required_device<via6522_device> m_via6522_1; |
| 90 | 87 | UINT8 read_dsw(); |
| 91 | 88 | void microtan_set_irq_line(); |
| 92 | 89 | void store_key(int key); |
trunk/src/mess/drivers/microtan.c
| r26856 | r26857 | |
| 261 | 261 | MCFG_DEVICE_ADD("via6522_0", VIA6522, 0) |
| 262 | 262 | MCFG_VIA6522_READPA_HANDLER(READ8(microtan_state, via_0_in_a)) |
| 263 | 263 | MCFG_VIA6522_READPB_HANDLER(READ8(microtan_state, via_0_in_b)) |
| 264 | | MCFG_VIA6522_READCA1_HANDLER(READLINE(microtan_state, via_0_in_ca1)) |
| 265 | | MCFG_VIA6522_READCB1_HANDLER(READLINE(microtan_state, via_0_in_cb1)) |
| 266 | | MCFG_VIA6522_READCA2_HANDLER(READLINE(microtan_state, via_0_in_ca2)) |
| 267 | | MCFG_VIA6522_READCB2_HANDLER(READLINE(microtan_state, via_0_in_cb2)) |
| 268 | 264 | MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(microtan_state, via_0_out_a)) |
| 269 | 265 | MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(microtan_state, via_0_out_b)) |
| 270 | 266 | MCFG_VIA6522_CA2_HANDLER(WRITELINE(microtan_state, via_0_out_ca2)) |
| r26856 | r26857 | |
| 274 | 270 | MCFG_DEVICE_ADD("via6522_1", VIA6522, 0) |
| 275 | 271 | MCFG_VIA6522_READPA_HANDLER(READ8(microtan_state, via_1_in_a)) |
| 276 | 272 | MCFG_VIA6522_READPB_HANDLER(READ8(microtan_state, via_1_in_b)) |
| 277 | | MCFG_VIA6522_READCA1_HANDLER(READLINE(microtan_state, via_1_in_ca1)) |
| 278 | | MCFG_VIA6522_READCB1_HANDLER(READLINE(microtan_state, via_1_in_cb1)) |
| 279 | | MCFG_VIA6522_READCA2_HANDLER(READLINE(microtan_state, via_1_in_ca2)) |
| 280 | | MCFG_VIA6522_READCB2_HANDLER(READLINE(microtan_state, via_1_in_cb2)) |
| 281 | 273 | MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(microtan_state, via_1_out_a)) |
| 282 | 274 | MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(microtan_state, via_1_out_b)) |
| 283 | 275 | MCFG_VIA6522_CA2_HANDLER(WRITELINE(microtan_state, via_1_out_ca2)) |
trunk/src/mess/machine/microtan.c
| r26856 | r26857 | |
| 169 | 169 | return data; |
| 170 | 170 | } |
| 171 | 171 | |
| 172 | | READ_LINE_MEMBER(microtan_state::via_0_in_ca1) |
| 173 | | { |
| 174 | | int data = 1; |
| 175 | | LOG(("microtan_via_0_in_ca1 %d\n", data)); |
| 176 | | return data; |
| 177 | | } |
| 178 | | |
| 179 | | READ_LINE_MEMBER(microtan_state::via_0_in_cb1) |
| 180 | | { |
| 181 | | int data = 1; |
| 182 | | LOG(("microtan_via_0_in_cb1 %d\n", data)); |
| 183 | | return data; |
| 184 | | } |
| 185 | | |
| 186 | | READ_LINE_MEMBER(microtan_state::via_0_in_ca2) |
| 187 | | { |
| 188 | | int data = 1; |
| 189 | | LOG(("microtan_via_0_in_ca2 %d\n", data)); |
| 190 | | return data; |
| 191 | | } |
| 192 | | |
| 193 | | READ_LINE_MEMBER(microtan_state::via_0_in_cb2) |
| 194 | | { |
| 195 | | int data = 1; |
| 196 | | LOG(("microtan_via_0_in_cb2 %d\n", data)); |
| 197 | | return data; |
| 198 | | } |
| 199 | | |
| 200 | 172 | WRITE8_MEMBER(microtan_state::via_0_out_a) |
| 201 | 173 | { |
| 202 | 174 | LOG(("microtan_via_0_out_a %02X\n", data)); |
| r26856 | r26857 | |
| 243 | 215 | return data; |
| 244 | 216 | } |
| 245 | 217 | |
| 246 | | READ_LINE_MEMBER(microtan_state::via_1_in_ca1) |
| 247 | | { |
| 248 | | int data = 1; |
| 249 | | LOG(("microtan_via_1_in_ca1 %d\n", data)); |
| 250 | | return data; |
| 251 | | } |
| 252 | | |
| 253 | | READ_LINE_MEMBER(microtan_state::via_1_in_cb1) |
| 254 | | { |
| 255 | | int data = 1; |
| 256 | | LOG(("microtan_via_1_in_cb1 %d\n", data)); |
| 257 | | return data; |
| 258 | | } |
| 259 | | |
| 260 | | READ_LINE_MEMBER(microtan_state::via_1_in_ca2) |
| 261 | | { |
| 262 | | int data = 1; |
| 263 | | LOG(("microtan_via_1_in_ca2 %d\n", data)); |
| 264 | | return data; |
| 265 | | } |
| 266 | | |
| 267 | | READ_LINE_MEMBER(microtan_state::via_1_in_cb2) |
| 268 | | { |
| 269 | | int data = 1; |
| 270 | | LOG(("microtan_via_1_in_cb2 %d\n", data)); |
| 271 | | return data; |
| 272 | | } |
| 273 | | |
| 274 | 218 | WRITE8_MEMBER(microtan_state::via_1_out_a) |
| 275 | 219 | { |
| 276 | 220 | LOG(("microtan_via_1_out_a %02X\n", data)); |
| r26856 | r26857 | |
| 317 | 261 | TIMER_CALLBACK_MEMBER(microtan_state::microtan_read_cassette) |
| 318 | 262 | { |
| 319 | 263 | double level = m_cassette->input(); |
| 320 | | via6522_device *via_0 = machine().device<via6522_device>("via6522_0"); |
| 321 | 264 | |
| 322 | 265 | LOG(("microtan_read_cassette: %g\n", level)); |
| 323 | 266 | if (level < -0.07) |
| 324 | | via_0->write_cb2(0); |
| 267 | m_via6522_0->write_cb2(0); |
| 325 | 268 | else if (level > +0.07) |
| 326 | | via_0->write_cb2(1); |
| 269 | m_via6522_0->write_cb2(1); |
| 327 | 270 | } |
| 328 | 271 | |
| 329 | 272 | READ8_MEMBER(microtan_state::microtan_sound_r) |
| r26856 | r26857 | |
| 547 | 490 | } |
| 548 | 491 | |
| 549 | 492 | m_timer = timer_alloc(TIMER_READ_CASSETTE); |
| 493 | |
| 494 | m_via6522_0->write_ca1(1); |
| 495 | m_via6522_0->write_cb1(1); |
| 496 | m_via6522_0->write_ca2(1); |
| 497 | m_via6522_0->write_cb2(1); |
| 498 | |
| 499 | m_via6522_1->write_ca1(1); |
| 500 | m_via6522_1->write_cb1(1); |
| 501 | m_via6522_1->write_ca2(1); |
| 502 | m_via6522_1->write_cb2(1); |
| 550 | 503 | } |
| 551 | 504 | |
| 552 | 505 | void microtan_state::machine_reset() |
| r26856 | r26857 | |
| 761 | 714 | { |
| 762 | 715 | UINT8 *RAM = memregion("maincpu")->base(); |
| 763 | 716 | address_space &space = m_maincpu->space(AS_PROGRAM); |
| 764 | | via6522_device *via_0 = machine().device<via6522_device>("via6522_0"); |
| 765 | | via6522_device *via_1 = machine().device<via6522_device>("via6522_1"); |
| 766 | 717 | ay8910_device *ay8910 = machine().device<ay8910_device>("ay8910.1"); |
| 767 | 718 | |
| 768 | 719 | /* check for .DMP file format */ |
| r26856 | r26857 | |
| 819 | 770 | |
| 820 | 771 | /* first set of VIA6522 registers */ |
| 821 | 772 | for (i = 0; i < 16; i++ ) |
| 822 | | via_0->write(space, i, snapshot_buff[base++]); |
| 773 | m_via6522_0->write(space, i, snapshot_buff[base++]); |
| 823 | 774 | |
| 824 | 775 | /* second set of VIA6522 registers */ |
| 825 | 776 | for (i = 0; i < 16; i++ ) |
| 826 | | via_1->write(space, i, snapshot_buff[base++]); |
| 777 | m_via6522_1->write(space, i, snapshot_buff[base++]); |
| 827 | 778 | |
| 828 | 779 | /* microtan IO bff0-bfff */ |
| 829 | 780 | for (i = 0; i < 16; i++ ) |