trunk/src/mame/drivers/taitowlf.c
| r20957 | r20958 | |
| 44 | 44 | { |
| 45 | 45 | public: |
| 46 | 46 | taitowlf_state(const machine_config &mconfig, device_type type, const char *tag) |
| 47 | | : driver_device(mconfig, type, tag) { } |
| 47 | : driver_device(mconfig, type, tag) |
| 48 | , m_maincpu(*this, "maincpu") |
| 49 | , m_pit8254(*this, "pit8254") |
| 50 | , m_pic8259_1(*this, "pic8259_1") |
| 51 | , m_pic8259_2(*this, "pic8259_2") |
| 52 | , m_dma8237_1(*this, "dma8237_1") |
| 53 | , m_dma8237_2(*this, "dma8237_2") |
| 54 | , m_region_user1(*this, "user1") |
| 55 | , m_region_user5(*this, "user5") |
| 56 | , m_bank1(*this, "bank1") |
| 57 | { } |
| 48 | 58 | |
| 49 | 59 | UINT32 *m_bios_ram; |
| 50 | 60 | UINT8 m_mxtc_config_reg[256]; |
| r20957 | r20958 | |
| 53 | 63 | UINT8 m_dma_offset[2][4]; |
| 54 | 64 | UINT8 m_at_pages[0x10]; |
| 55 | 65 | |
| 56 | | device_t *m_pit8254; |
| 57 | | device_t *m_pic8259_1; |
| 58 | | device_t *m_pic8259_2; |
| 59 | | device_t *m_dma8237_1; |
| 60 | | device_t *m_dma8237_2; |
| 66 | required_device<cpu_device> m_maincpu; |
| 67 | required_device<device_t> m_pit8254; |
| 68 | required_device<device_t> m_pic8259_1; |
| 69 | required_device<device_t> m_pic8259_2; |
| 70 | required_device<device_t> m_dma8237_1; |
| 71 | required_device<device_t> m_dma8237_2; |
| 72 | required_memory_region m_region_user1; |
| 73 | required_memory_region m_region_user5; |
| 74 | required_memory_bank m_bank1; |
| 61 | 75 | DECLARE_WRITE32_MEMBER(pnp_config_w); |
| 62 | 76 | DECLARE_WRITE32_MEMBER(pnp_data_w); |
| 63 | 77 | DECLARE_WRITE32_MEMBER(bios_ram_w); |
| r20957 | r20958 | |
| 90 | 104 | UINT32 taitowlf_state::screen_update_taitowlf(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 91 | 105 | { |
| 92 | 106 | int x,y,count; |
| 93 | | const UINT8 *blit_ram = machine().root_device().memregion("user5")->base(); |
| 107 | const UINT8 *blit_ram = m_region_user5->base(); |
| 94 | 108 | |
| 95 | 109 | bitmap.fill(get_black_pen(machine()), cliprect); |
| 96 | 110 | |
| r20957 | r20958 | |
| 118 | 132 | |
| 119 | 133 | READ8_MEMBER(taitowlf_state::at_dma8237_2_r) |
| 120 | 134 | { |
| 121 | | device_t *device = machine().device("dma8237_2"); |
| 122 | | return i8237_r(device, space, offset / 2); |
| 135 | return i8237_r(m_dma8237_2, space, offset / 2); |
| 123 | 136 | } |
| 124 | 137 | |
| 125 | 138 | WRITE8_MEMBER(taitowlf_state::at_dma8237_2_w) |
| 126 | 139 | { |
| 127 | | device_t *device = machine().device("dma8237_2"); |
| 128 | | i8237_w(device, space, offset / 2, data); |
| 140 | i8237_w(m_dma8237_2, space, offset / 2, data); |
| 129 | 141 | } |
| 130 | 142 | |
| 131 | 143 | // Intel 82439TX System Controller (MXTC) |
| r20957 | r20958 | |
| 149 | 161 | { |
| 150 | 162 | if (data & 0x10) // enable RAM access to region 0xf0000 - 0xfffff |
| 151 | 163 | { |
| 152 | | state->membank("bank1")->set_base(state->m_bios_ram); |
| 164 | state->m_bank1->set_base(state->m_bios_ram); |
| 153 | 165 | } |
| 154 | 166 | else // disable RAM access (reads go to BIOS ROM) |
| 155 | 167 | { |
| 156 | | state->membank("bank1")->set_base(busdevice->machine().root_device().memregion("user1")->base() + 0x30000); |
| 168 | state->m_bank1->set_base(state->m_region_user1->base() + 0x30000); |
| 157 | 169 | } |
| 158 | 170 | break; |
| 159 | 171 | } |
| r20957 | r20958 | |
| 383 | 395 | |
| 384 | 396 | WRITE_LINE_MEMBER(taitowlf_state::pc_dma_hrq_changed) |
| 385 | 397 | { |
| 386 | | machine().device("maincpu")->execute().set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE); |
| 398 | m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE); |
| 387 | 399 | |
| 388 | 400 | /* Assert HLDA */ |
| 389 | 401 | i8237_hlda_w( m_dma8237_1, state ); |
| r20957 | r20958 | |
| 540 | 552 | |
| 541 | 553 | void taitowlf_state::machine_start() |
| 542 | 554 | { |
| 543 | | machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(taitowlf_state::irq_callback),this)); |
| 544 | | |
| 545 | | m_pit8254 = machine().device( "pit8254" ); |
| 546 | | m_pic8259_1 = machine().device( "pic8259_1" ); |
| 547 | | m_pic8259_2 = machine().device( "pic8259_2" ); |
| 548 | | m_dma8237_1 = machine().device( "dma8237_1" ); |
| 549 | | m_dma8237_2 = machine().device( "dma8237_2" ); |
| 555 | m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(taitowlf_state::irq_callback),this)); |
| 550 | 556 | } |
| 551 | 557 | |
| 552 | 558 | void taitowlf_state::machine_reset() |
| 553 | 559 | { |
| 554 | | machine().root_device().membank("bank1")->set_base(machine().root_device().memregion("user1")->base() + 0x30000); |
| 560 | m_bank1->set_base(m_region_user1->base() + 0x30000); |
| 555 | 561 | } |
| 556 | 562 | |
| 557 | 563 | |
| r20957 | r20958 | |
| 563 | 569 | |
| 564 | 570 | WRITE_LINE_MEMBER(taitowlf_state::taitowlf_pic8259_1_set_int_line) |
| 565 | 571 | { |
| 566 | | machine().device("maincpu")->execute().set_input_line(0, state ? HOLD_LINE : CLEAR_LINE); |
| 572 | m_maincpu->set_input_line(0, state ? HOLD_LINE : CLEAR_LINE); |
| 567 | 573 | } |
| 568 | 574 | |
| 569 | 575 | READ8_MEMBER(taitowlf_state::get_slave_ack) |
| r20957 | r20958 | |
| 664 | 670 | |
| 665 | 671 | static void set_gate_a20(running_machine &machine, int a20) |
| 666 | 672 | { |
| 667 | | machine.device("maincpu")->execute().set_input_line(INPUT_LINE_A20, a20); |
| 673 | taitowlf_state *drvstate = machine.driver_data<taitowlf_state>(); |
| 674 | drvstate->m_maincpu->set_input_line(INPUT_LINE_A20, a20); |
| 668 | 675 | } |
| 669 | 676 | |
| 670 | 677 | static void keyboard_interrupt(running_machine &machine, int state) |