trunk/src/mess/drivers/pc88va.c
| r19129 | r19130 | |
| 18 | 18 | - PC-88VA stock version has two bogus opcodes. One is at 0xf0b15, another at 0xf0b31. |
| 19 | 19 | Making a patch for the latter makes the system to jump into a "DIP-Switch" display. |
| 20 | 20 | - unemulated upd71071 demand mode. |
| 21 | - Fix floppy motor hook-up; |
| 21 | 22 | |
| 22 | 23 | ********************************************************************************************/ |
| 23 | 24 | |
| r19129 | r19130 | |
| 140 | 141 | TIMER_CALLBACK_MEMBER(pc88va_fdc_timer); |
| 141 | 142 | // UINT16 m_fdc_dma_r(running_machine &machine); |
| 142 | 143 | // void m_fdc_dma_w(running_machine &machine, UINT16 data); |
| 144 | DECLARE_WRITE_LINE_MEMBER(pc88va_tc_w); |
| 143 | 145 | |
| 144 | 146 | void fdc_irq(bool state); |
| 145 | 147 | void fdc_drq(bool state); |
| r19129 | r19130 | |
| 1035 | 1037 | machine().device<floppy_connector>("upd765:1")->get_device()->set_rpm(data & 0x02 ? 360 : 300); |
| 1036 | 1038 | |
| 1037 | 1039 | machine().device<upd765a_device>("upd765")->set_rate(data & 0x20 ? 500000 : 250000); |
| 1040 | /* Temporary hack */ |
| 1041 | machine().device<floppy_connector>("upd765:0")->get_device()->mon_w(0); |
| 1042 | machine().device<floppy_connector>("upd765:1")->get_device()->mon_w(0); |
| 1043 | |
| 1038 | 1044 | break; |
| 1039 | 1045 | /* |
| 1040 | 1046 | ---- x--- PCM: ? |
| r19129 | r19130 | |
| 1708 | 1714 | DEVCB_NULL |
| 1709 | 1715 | }; |
| 1710 | 1716 | |
| 1717 | WRITE_LINE_MEMBER( pc88va_state::pc88va_tc_w ) |
| 1718 | { |
| 1719 | /* floppy terminal count */ |
| 1720 | m_fdc->tc_w(state); |
| 1721 | |
| 1722 | // printf("TC %02x\n",state); |
| 1723 | } |
| 1724 | |
| 1725 | |
| 1711 | 1726 | static UINT16 m_fdc_dma_r(running_machine &machine) |
| 1712 | 1727 | { |
| 1713 | 1728 | pc88va_state *state = machine.driver_data<pc88va_state>(); |
| r19129 | r19130 | |
| 1729 | 1744 | "maincpu", |
| 1730 | 1745 | 8000000, |
| 1731 | 1746 | DEVCB_NULL, |
| 1732 | | DEVCB_NULL, |
| 1747 | DEVCB_DRIVER_LINE_MEMBER(pc88va_state, pc88va_tc_w), |
| 1733 | 1748 | { 0, 0, m_fdc_dma_r, 0 }, |
| 1734 | 1749 | { 0, 0, m_fdc_dma_w, 0 }, |
| 1735 | 1750 | { DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL } |
trunk/src/mess/machine/upd71071.c
| r19129 | r19130 | |
| 152 | 152 | dmac->reg.count_current[channel] = dmac->reg.count_base[channel]; |
| 153 | 153 | } |
| 154 | 154 | // TODO: send terminal count |
| 155 | set_eop(device,ASSERT_LINE); |
| 155 | 156 | } |
| 156 | 157 | else |
| 157 | 158 | dmac->reg.count_current[channel]--; |
| r19129 | r19130 | |
| 172 | 173 | dmac->reg.count_current[channel] = dmac->reg.count_base[channel]; |
| 173 | 174 | } |
| 174 | 175 | // TODO: send terminal count |
| 176 | set_eop(device,ASSERT_LINE); |
| 175 | 177 | } |
| 176 | 178 | else |
| 177 | 179 | dmac->reg.count_current[channel]--; |
| r19129 | r19130 | |
| 219 | 221 | { |
| 220 | 222 | case 0x00: // Demand |
| 221 | 223 | // TODO |
| 224 | set_eop(device,CLEAR_LINE); |
| 225 | dmac->timer[channel]->adjust(attotime::from_hz(dmac->intf->clock),channel); |
| 222 | 226 | break; |
| 223 | 227 | case 0x40: // Single |
| 224 | 228 | dmac->timer[channel]->adjust(attotime::from_hz(dmac->intf->clock),channel); |