trunk/src/mame/drivers/pc9801.cpp
| r253583 | r253584 | |
| 536 | 536 | |
| 537 | 537 | /* PC9801RS specific */ |
| 538 | 538 | UINT8 m_gate_a20; //A20 line |
| 539 | | UINT8 m_nmi_enable; |
| 540 | 539 | UINT8 m_access_ctrl; // DMA related |
| 541 | 540 | UINT8 m_rom_bank; |
| 542 | 541 | UINT8 m_fdc_ctrl; |
| r253583 | r253584 | |
| 584 | 583 | DECLARE_WRITE16_MEMBER(egc_w); |
| 585 | 584 | DECLARE_READ8_MEMBER(pc9801_a0_r); |
| 586 | 585 | DECLARE_WRITE8_MEMBER(pc9801_a0_w); |
| 587 | | DECLARE_READ8_MEMBER(pc9801_fdc_2hd_r); |
| 588 | | DECLARE_WRITE8_MEMBER(pc9801_fdc_2hd_w); |
| 589 | | DECLARE_READ8_MEMBER(pc9801_fdc_2dd_r); |
| 590 | | DECLARE_WRITE8_MEMBER(pc9801_fdc_2dd_w); |
| 586 | DECLARE_READ8_MEMBER(fdc_2hd_ctrl_r); |
| 587 | DECLARE_WRITE8_MEMBER(fdc_2hd_ctrl_w); |
| 588 | DECLARE_READ8_MEMBER(fdc_2dd_ctrl_r); |
| 589 | DECLARE_WRITE8_MEMBER(fdc_2dd_ctrl_w); |
| 591 | 590 | DECLARE_READ16_MEMBER(tvram_r); |
| 592 | 591 | DECLARE_WRITE16_MEMBER(tvram_w); |
| 593 | 592 | DECLARE_READ8_MEMBER(gvram_r); |
| r253583 | r253584 | |
| 602 | 601 | DECLARE_WRITE16_MEMBER(upd7220_grcg_w); |
| 603 | 602 | void egc_blit_w(UINT32 offset, UINT16 data, UINT16 mem_mask); |
| 604 | 603 | UINT16 egc_blit_r(UINT32 offset, UINT16 mem_mask); |
| 605 | | UINT32 pc9801_286_a20(bool state); |
| 604 | UINT32 a20_286(bool state); |
| 606 | 605 | |
| 607 | 606 | DECLARE_READ8_MEMBER(ide_ctrl_r); |
| 608 | 607 | DECLARE_WRITE8_MEMBER(ide_ctrl_w); |
| r253583 | r253584 | |
| 633 | 632 | DECLARE_WRITE8_MEMBER(pc9801rs_bank_w); |
| 634 | 633 | DECLARE_READ8_MEMBER(a20_ctrl_r); |
| 635 | 634 | DECLARE_WRITE8_MEMBER(a20_ctrl_w); |
| 636 | | DECLARE_READ8_MEMBER(pc9810rs_fdc_ctrl_r); |
| 637 | | DECLARE_WRITE8_MEMBER(pc9810rs_fdc_ctrl_w); |
| 638 | | DECLARE_READ8_MEMBER(pc9801rs_2hd_r); |
| 639 | | DECLARE_WRITE8_MEMBER(pc9801rs_2hd_w); |
| 635 | DECLARE_READ8_MEMBER(fdc_mode_ctrl_r); |
| 636 | DECLARE_WRITE8_MEMBER(fdc_mode_ctrl_w); |
| 640 | 637 | // DECLARE_READ8_MEMBER(pc9801rs_2dd_r); |
| 641 | 638 | // DECLARE_WRITE8_MEMBER(pc9801rs_2dd_w); |
| 642 | 639 | DECLARE_WRITE8_MEMBER(pc9801rs_video_ff_w); |
| r253583 | r253584 | |
| 644 | 641 | DECLARE_WRITE8_MEMBER(pc9821_video_ff_w); |
| 645 | 642 | DECLARE_READ8_MEMBER(pc9821_a0_r); |
| 646 | 643 | DECLARE_WRITE8_MEMBER(pc9821_a0_w); |
| 647 | | DECLARE_READ8_MEMBER(pc9801rs_access_ctrl_r); |
| 648 | | DECLARE_WRITE8_MEMBER(pc9801rs_access_ctrl_w); |
| 649 | | DECLARE_WRITE8_MEMBER(pc9801rs_nmi_w); |
| 650 | | DECLARE_READ8_MEMBER(pc9801rs_midi_r); |
| 644 | DECLARE_READ8_MEMBER(access_ctrl_r); |
| 645 | DECLARE_WRITE8_MEMBER(access_ctrl_w); |
| 646 | DECLARE_READ8_MEMBER(midi_r); |
| 651 | 647 | // DECLARE_READ8_MEMBER(winram_r); |
| 652 | 648 | // DECLARE_WRITE8_MEMBER(winram_w); |
| 653 | 649 | // DECLARE_READ8_MEMBER(pc9801_ext_opna_r); |
| r253583 | r253584 | |
| 681 | 677 | DECLARE_WRITE8_MEMBER(sdip_a_w); |
| 682 | 678 | DECLARE_WRITE8_MEMBER(sdip_b_w); |
| 683 | 679 | |
| 684 | | DECLARE_READ8_MEMBER(pc9821_window_bank_r); |
| 685 | | DECLARE_WRITE8_MEMBER(pc9821_window_bank_w); |
| 686 | | DECLARE_READ16_MEMBER(pc9821_timestamp_r); |
| 687 | | DECLARE_READ8_MEMBER(pc9821_ext2_video_ff_r); |
| 688 | | DECLARE_WRITE8_MEMBER(pc9821_ext2_video_ff_w); |
| 680 | DECLARE_READ8_MEMBER(window_bank_r); |
| 681 | DECLARE_WRITE8_MEMBER(window_bank_w); |
| 682 | DECLARE_READ16_MEMBER(timestamp_r); |
| 683 | DECLARE_READ8_MEMBER(ext2_video_ff_r); |
| 684 | DECLARE_WRITE8_MEMBER(ext2_video_ff_w); |
| 689 | 685 | |
| 690 | 686 | DECLARE_FLOPPY_FORMATS( floppy_formats ); |
| 691 | 687 | UPD7220_DISPLAY_PIXELS_MEMBER( hgdc_display_pixels ); |
| r253583 | r253584 | |
| 709 | 705 | DECLARE_MACHINE_RESET(pc9821); |
| 710 | 706 | |
| 711 | 707 | DECLARE_PALETTE_INIT(pc9801); |
| 712 | | INTERRUPT_GEN_MEMBER(pc9801_vrtc_irq); |
| 708 | INTERRUPT_GEN_MEMBER(vrtc_irq); |
| 713 | 709 | DECLARE_READ8_MEMBER(get_slave_ack); |
| 714 | 710 | DECLARE_WRITE_LINE_MEMBER(dma_hrq_changed); |
| 715 | 711 | DECLARE_WRITE_LINE_MEMBER(tc_w); |
| r253583 | r253584 | |
| 1200 | 1196 | m_sio->write_rxc(state); |
| 1201 | 1197 | } |
| 1202 | 1198 | |
| 1203 | | READ8_MEMBER(pc9801_state::pc9801_fdc_2hd_r) |
| 1199 | READ8_MEMBER(pc9801_state::fdc_2hd_ctrl_r) |
| 1204 | 1200 | { |
| 1205 | | if((offset & 1) == 0) |
| 1206 | | { |
| 1207 | | switch(offset & 6) |
| 1208 | | { |
| 1209 | | case 0: return m_fdc_2hd->msr_r(space, 0, 0xff); |
| 1210 | | case 2: return m_fdc_2hd->fifo_r(space, 0, 0xff); |
| 1211 | | case 4: return 0x5f; //unknown port meaning |
| 1212 | | } |
| 1213 | | } |
| 1214 | | else |
| 1215 | | { |
| 1216 | | switch((offset & 6) + 1) |
| 1217 | | { |
| 1218 | | case 1: return m_sio->data_r(space, 0); |
| 1219 | | case 3: return m_sio->status_r(space, 0); |
| 1220 | | } |
| 1221 | | logerror("Read to undefined port [%02x]\n",offset+0x90); |
| 1222 | | return 0xff; |
| 1223 | | } |
| 1224 | | |
| 1225 | | return 0xff; |
| 1201 | return 0x44; //unknown port meaning 2hd flag? |
| 1226 | 1202 | } |
| 1227 | 1203 | |
| 1228 | | WRITE8_MEMBER(pc9801_state::pc9801_fdc_2hd_w) |
| 1204 | WRITE8_MEMBER(pc9801_state::fdc_2hd_ctrl_w) |
| 1229 | 1205 | { |
| 1230 | | if((offset & 1) == 0) |
| 1231 | | { |
| 1232 | | switch(offset & 6) |
| 1233 | | { |
| 1234 | | case 0: logerror("Write to undefined port [%02x] <- %02x\n",offset+0x90,data); return; |
| 1235 | | case 2: m_fdc_2hd->fifo_w(space, 0, data, 0xff); return; |
| 1236 | | case 4: |
| 1237 | | //logerror("%02x ctrl\n",data); |
| 1238 | | if(((m_fdc_2hd_ctrl & 0x80) == 0) && (data & 0x80)) |
| 1239 | | m_fdc_2hd->soft_reset(); |
| 1206 | //logerror("%02x ctrl\n",data); |
| 1207 | if(((m_fdc_2hd_ctrl & 0x80) == 0) && (data & 0x80)) |
| 1208 | m_fdc_2hd->soft_reset(); |
| 1240 | 1209 | |
| 1241 | | m_fdc_2hd_ctrl = data; |
| 1210 | m_fdc_2hd_ctrl = data; |
| 1242 | 1211 | |
| 1243 | | if(data & 0x40) |
| 1244 | | { |
| 1245 | | m_fdc_2hd->set_ready_line_connected(0); |
| 1246 | | m_fdc_2hd->ready_w(0); |
| 1247 | | } |
| 1248 | | else |
| 1249 | | m_fdc_2hd->set_ready_line_connected(1); |
| 1250 | | |
| 1251 | | // TODO: is the motor control bit really inverted relative to the other fdcs? |
| 1252 | | m_fdc_2hd->subdevice<floppy_connector>("0")->get_device()->mon_w(data & 8 ? ASSERT_LINE : CLEAR_LINE); |
| 1253 | | m_fdc_2hd->subdevice<floppy_connector>("1")->get_device()->mon_w(data & 8 ? ASSERT_LINE : CLEAR_LINE); |
| 1254 | | break; |
| 1255 | | } |
| 1256 | | } |
| 1257 | | else |
| 1212 | if(data & 0x40) |
| 1258 | 1213 | { |
| 1259 | | switch((offset & 6) + 1) |
| 1260 | | { |
| 1261 | | case 1: m_sio->data_w(space, 0, data); return; |
| 1262 | | case 3: m_sio->control_w(space, 0, data); return; |
| 1263 | | } |
| 1264 | | logerror("Write to undefined port [%02x] <- %02x\n",offset+0x90,data); |
| 1214 | m_fdc_2hd->set_ready_line_connected(0); |
| 1215 | m_fdc_2hd->ready_w(0); |
| 1265 | 1216 | } |
| 1266 | | } |
| 1217 | else |
| 1218 | m_fdc_2hd->set_ready_line_connected(1); |
| 1267 | 1219 | |
| 1268 | | |
| 1269 | | READ8_MEMBER(pc9801_state::pc9801_fdc_2dd_r) |
| 1270 | | { |
| 1271 | | if((offset & 1) == 0) |
| 1220 | if(!m_sys_type) // required for 9801f 2hd adapter bios |
| 1272 | 1221 | { |
| 1273 | | switch(offset & 6) |
| 1274 | | { |
| 1275 | | case 0: return m_fdc_2dd->msr_r(space, 0, 0xff); |
| 1276 | | case 2: return m_fdc_2dd->fifo_r(space, 0, 0xff); |
| 1277 | | case 4: |
| 1278 | | { |
| 1279 | | int ret = (!m_fdc_2dd->subdevice<floppy_connector>("0")->get_device()->ready_r()) ? 0x10 : 0; |
| 1280 | | ret |= (m_fdc_2dd->subdevice<floppy_connector>("1")->get_device()->ready_r()) ? 0x10 : 0; |
| 1281 | | return ret | 0x40; //unknown port meaning, might be 0x70 |
| 1282 | | } |
| 1283 | | } |
| 1222 | m_fdc_2hd->subdevice<floppy_connector>("0")->get_device()->mon_w(data & 8 ? ASSERT_LINE : CLEAR_LINE); |
| 1223 | m_fdc_2hd->subdevice<floppy_connector>("1")->get_device()->mon_w(data & 8 ? ASSERT_LINE : CLEAR_LINE); |
| 1284 | 1224 | } |
| 1285 | | else |
| 1225 | else if(!(m_fdc_ctrl & 4)) // required for 9821 |
| 1286 | 1226 | { |
| 1287 | | logerror("Read to undefined port [%02x]\n",offset+0xc8); |
| 1288 | | return 0xff; |
| 1227 | m_fdc_2hd->subdevice<floppy_connector>("0")->get_device()->mon_w(data & 8 ? CLEAR_LINE : ASSERT_LINE); |
| 1228 | m_fdc_2hd->subdevice<floppy_connector>("1")->get_device()->mon_w(data & 8 ? CLEAR_LINE : ASSERT_LINE); |
| 1289 | 1229 | } |
| 1230 | } |
| 1290 | 1231 | |
| 1291 | | return 0xff; |
| 1232 | |
| 1233 | READ8_MEMBER(pc9801_state::fdc_2dd_ctrl_r) |
| 1234 | { |
| 1235 | int ret = (!m_fdc_2dd->subdevice<floppy_connector>("0")->get_device()->ready_r()) ? 0x10 : 0; |
| 1236 | ret |= (m_fdc_2dd->subdevice<floppy_connector>("1")->get_device()->ready_r()) ? 0x10 : 0; |
| 1237 | return ret | 0x40; //unknown port meaning, might be 0x70 |
| 1292 | 1238 | } |
| 1293 | 1239 | |
| 1294 | | WRITE8_MEMBER(pc9801_state::pc9801_fdc_2dd_w) |
| 1240 | WRITE8_MEMBER(pc9801_state::fdc_2dd_ctrl_w) |
| 1295 | 1241 | { |
| 1296 | | if((offset & 1) == 0) |
| 1297 | | { |
| 1298 | | switch(offset & 6) |
| 1299 | | { |
| 1300 | | case 0: logerror("Write to undefined port [%02x] <- %02x\n",offset+0xc8,data); return; |
| 1301 | | case 2: m_fdc_2dd->fifo_w(space, 0, data, 0xff); return; |
| 1302 | | case 4: |
| 1303 | | logerror("%02x ctrl\n",data); |
| 1304 | | if(((m_fdc_2dd_ctrl & 0x80) == 0) && (data & 0x80)) |
| 1305 | | m_fdc_2dd->soft_reset(); |
| 1242 | logerror("%02x ctrl\n",data); |
| 1243 | if(((m_fdc_2dd_ctrl & 0x80) == 0) && (data & 0x80)) |
| 1244 | m_fdc_2dd->soft_reset(); |
| 1306 | 1245 | |
| 1307 | | m_fdc_2dd_ctrl = data; |
| 1308 | | m_fdc_2dd->subdevice<floppy_connector>("0")->get_device()->mon_w(data & 8 ? CLEAR_LINE : ASSERT_LINE); |
| 1309 | | m_fdc_2dd->subdevice<floppy_connector>("1")->get_device()->mon_w(data & 8 ? CLEAR_LINE : ASSERT_LINE); |
| 1310 | | break; |
| 1311 | | } |
| 1312 | | } |
| 1313 | | else |
| 1314 | | { |
| 1315 | | logerror("Write to undefined port [%02x] <- %02x\n",offset+0xc8,data); |
| 1316 | | } |
| 1246 | m_fdc_2dd_ctrl = data; |
| 1247 | m_fdc_2dd->subdevice<floppy_connector>("0")->get_device()->mon_w(data & 8 ? CLEAR_LINE : ASSERT_LINE); |
| 1248 | m_fdc_2dd->subdevice<floppy_connector>("1")->get_device()->mon_w(data & 8 ? CLEAR_LINE : ASSERT_LINE); |
| 1317 | 1249 | } |
| 1318 | 1250 | |
| 1319 | 1251 | |
| r253583 | r253584 | |
| 1430 | 1362 | } |
| 1431 | 1363 | |
| 1432 | 1364 | // mask off the bits past the end of the blit |
| 1433 | | if((m_egc.count < 8) && (mem_mask != 0xffff)) |
| 1365 | if(((m_egc.count < 8) && (mem_mask != 0xffff)) || ((m_egc.count < 16) && (mem_mask == 0xffff))) |
| 1434 | 1366 | { |
| 1435 | | UINT16 end_mask = dir ? ((1 << m_egc.count) - 1) : ~((1 << (8 - m_egc.count)) - 1); |
| 1436 | | // if the blit is less than 8 bits, adjust the masks |
| 1437 | | if(m_egc.first) |
| 1438 | | { |
| 1439 | | if(dir) |
| 1440 | | end_mask <<= dst_off & 7; |
| 1441 | | else |
| 1442 | | end_mask >>= dst_off & 7; |
| 1443 | | } |
| 1444 | | mask &= end_mask; |
| 1445 | | } |
| 1446 | | else if((m_egc.count < 16) && (mem_mask == 0xffff)) |
| 1447 | | { |
| 1448 | 1367 | UINT16 end_mask = dir ? ((1 << m_egc.count) - 1) : ~((1 << (16 - m_egc.count)) - 1); |
| 1449 | | // if the blit is less than 16 bits, adjust the masks |
| 1368 | // if the blit is less than the write size, adjust the masks |
| 1450 | 1369 | if(m_egc.first) |
| 1451 | 1370 | { |
| 1452 | 1371 | if(dir) |
| r253583 | r253584 | |
| 1461 | 1380 | { |
| 1462 | 1381 | if(!BIT(m_egc.regs[0], i)) |
| 1463 | 1382 | { |
| 1464 | | UINT16 src = m_egc.src[i] & mem_mask, pat = m_egc.pat[i]; |
| 1383 | UINT16 src = m_egc.src[i], pat = m_egc.pat[i]; |
| 1465 | 1384 | if(BIT(m_egc.regs[2], 10)) |
| 1466 | 1385 | src = egc_shift(i, data); |
| 1467 | 1386 | |
| r253583 | r253584 | |
| 1782 | 1701 | ADDRESS_MAP_END |
| 1783 | 1702 | |
| 1784 | 1703 | /* first device is even offsets, second one is odd offsets */ |
| 1785 | | static ADDRESS_MAP_START( pc9801_io, AS_IO, 16, pc9801_state ) |
| 1704 | static ADDRESS_MAP_START( pc9801_common_io, AS_IO, 16, pc9801_state ) |
| 1786 | 1705 | ADDRESS_MAP_UNMAP_HIGH |
| 1787 | 1706 | AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("i8237", am9517a_device, read, write, 0xff00) |
| 1788 | 1707 | AM_RANGE(0x0000, 0x000f) AM_READWRITE8(pic_r, pic_w, 0x00ff) // i8259 PIC (bit 3 ON slave / master) / i8237 DMA |
| 1789 | 1708 | AM_RANGE(0x0020, 0x0021) AM_WRITE8(rtc_w,0x00ff) |
| 1790 | | AM_RANGE(0x0020, 0x0027) AM_WRITE8(dmapg4_w,0xff00) |
| 1791 | 1709 | AM_RANGE(0x0030, 0x0037) AM_DEVREADWRITE8("ppi8255_sys", i8255_device, read, write, 0xff00) //i8251 RS232c / i8255 system port |
| 1792 | 1710 | AM_RANGE(0x0040, 0x0047) AM_DEVREADWRITE8("ppi8255_prn", i8255_device, read, write, 0x00ff) |
| 1793 | 1711 | AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8("keyb", pc9801_kbd_device, rx_r, tx_w, 0xff00) //i8255 printer port / i8251 keyboard |
| r253583 | r253584 | |
| 1795 | 1713 | AM_RANGE(0x0050, 0x0053) AM_WRITE8(nmi_ctrl_w,0x00ff) // NMI FF / i8255 floppy port (2d?) |
| 1796 | 1714 | AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("upd7220_chr", upd7220_device, read, write, 0x00ff) //upd7220 character ports / <undefined> |
| 1797 | 1715 | AM_RANGE(0x0064, 0x0065) AM_WRITE8(vrtc_clear_w,0x00ff) |
| 1798 | | AM_RANGE(0x0068, 0x0069) AM_WRITE8(pc9801_video_ff_w,0x00ff) //mode FF / <undefined> |
| 1799 | 1716 | // AM_RANGE(0x006c, 0x006f) border color / <undefined> |
| 1800 | 1717 | AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("pit8253", pit8253_device, read, write, 0xff00) |
| 1801 | 1718 | AM_RANGE(0x0070, 0x007b) AM_READWRITE8(txt_scrl_r,txt_scrl_w,0x00ff) //display registers / i8253 pit |
| 1802 | 1719 | AM_RANGE(0x0080, 0x0081) AM_READWRITE8(sasi_data_r, sasi_data_w, 0x00ff) |
| 1803 | 1720 | AM_RANGE(0x0082, 0x0083) AM_READWRITE8(sasi_status_r, sasi_ctrl_w,0x00ff) |
| 1804 | | AM_RANGE(0x0090, 0x0097) AM_READWRITE8(pc9801_fdc_2hd_r,pc9801_fdc_2hd_w,0xffff) //upd765a 2hd / cmt |
| 1805 | | AM_RANGE(0x00a0, 0x00af) AM_READWRITE8(pc9801_a0_r,pc9801_a0_w,0xffff) //upd7220 bitmap ports / display registers |
| 1806 | | AM_RANGE(0x00c8, 0x00cd) AM_READWRITE8(pc9801_fdc_2dd_r,pc9801_fdc_2dd_w,0xffff) //upd765a 2dd / <undefined> |
| 1807 | | // AM_RANGE(0x0188, 0x018b) AM_READWRITE8(pc9801_opn_r,pc9801_opn_w,0xffff) //ym2203 opn / <undefined> |
| 1721 | AM_RANGE(0x0090, 0x0091) AM_DEVREAD8("upd765_2hd", upd765a_device, msr_r, 0x00ff) |
| 1722 | AM_RANGE(0x0092, 0x0093) AM_DEVREADWRITE8("upd765_2hd", upd765a_device, fifo_r, fifo_w, 0x00ff) |
| 1723 | AM_RANGE(0x0094, 0x0095) AM_READWRITE8(fdc_2hd_ctrl_r, fdc_2hd_ctrl_w, 0x00ff) |
| 1724 | AM_RANGE(0x0090, 0x0091) AM_DEVREADWRITE8(UPD8251_TAG, i8251_device, data_r, data_w, 0xff00) |
| 1725 | AM_RANGE(0x0092, 0x0093) AM_DEVREADWRITE8(UPD8251_TAG, i8251_device, status_r, control_w, 0xff00) |
| 1808 | 1726 | AM_RANGE(0x7fd8, 0x7fdf) AM_DEVREADWRITE8("ppi8255_mouse", i8255_device, read, write, 0xff00) |
| 1809 | 1727 | ADDRESS_MAP_END |
| 1810 | 1728 | |
| 1729 | static ADDRESS_MAP_START( pc9801_io, AS_IO, 16, pc9801_state ) |
| 1730 | AM_RANGE(0x0020, 0x0027) AM_WRITE8(dmapg4_w,0xff00) |
| 1731 | AM_RANGE(0x0068, 0x0069) AM_WRITE8(pc9801_video_ff_w,0x00ff) //mode FF / <undefined> |
| 1732 | AM_RANGE(0x00a0, 0x00af) AM_READWRITE8(pc9801_a0_r,pc9801_a0_w,0xffff) //upd7220 bitmap ports / display registers |
| 1733 | AM_RANGE(0x00c8, 0x00cb) AM_DEVICE8("upd765_2dd", upd765a_device, map, 0x00ff) |
| 1734 | AM_RANGE(0x00cc, 0x00cd) AM_READWRITE8(fdc_2dd_ctrl_r, fdc_2dd_ctrl_w, 0x00ff) //upd765a 2dd / <undefined> |
| 1735 | AM_IMPORT_FROM(pc9801_common_io) |
| 1736 | ADDRESS_MAP_END |
| 1737 | |
| 1738 | |
| 1811 | 1739 | /************************************* |
| 1812 | 1740 | * |
| 1813 | 1741 | * PC-9801RS specific handlers (IA-32) |
| r253583 | r253584 | |
| 1890 | 1818 | if(offset == 0x01) |
| 1891 | 1819 | return (m_gate_a20 ^ 1) | 0xfe; |
| 1892 | 1820 | else if(offset == 0x03) |
| 1893 | | return (m_gate_a20 ^ 1) | (m_nmi_enable << 1); |
| 1821 | return (m_gate_a20 ^ 1) | (m_nmi_ff << 1); |
| 1894 | 1822 | |
| 1895 | 1823 | return 0x00; |
| 1896 | 1824 | } |
| r253583 | r253584 | |
| 1999 | 1927 | } |
| 2000 | 1928 | } |
| 2001 | 1929 | |
| 2002 | | READ8_MEMBER(pc9801_state::pc9810rs_fdc_ctrl_r) |
| 1930 | READ8_MEMBER(pc9801_state::fdc_mode_ctrl_r) |
| 2003 | 1931 | { |
| 2004 | 1932 | return (m_fdc_ctrl & 3) | 0xf0 | 8 | 4; |
| 2005 | 1933 | } |
| 2006 | 1934 | |
| 2007 | | WRITE8_MEMBER(pc9801_state::pc9810rs_fdc_ctrl_w) |
| 1935 | WRITE8_MEMBER(pc9801_state::fdc_mode_ctrl_w) |
| 2008 | 1936 | { |
| 2009 | 1937 | /* |
| 2010 | 1938 | ---- x--- ready line? |
| r253583 | r253584 | |
| 2022 | 1950 | // logerror("FDC ctrl called with %02x\n",data); |
| 2023 | 1951 | } |
| 2024 | 1952 | |
| 2025 | | READ8_MEMBER(pc9801_state::pc9801rs_2hd_r) |
| 2026 | | { |
| 2027 | | if((offset & 1) == 0) |
| 2028 | | { |
| 2029 | | switch(offset & 6) |
| 2030 | | { |
| 2031 | | case 0: return m_fdc_2hd->msr_r(space, 0, 0xff); |
| 2032 | | case 2: return m_fdc_2hd->fifo_r(space, 0, 0xff); |
| 2033 | | case 4: return 0x44; //2hd flag |
| 2034 | | } |
| 2035 | | } |
| 2036 | | |
| 2037 | | logerror("Read to undefined port [%02x]\n",offset+0x90); |
| 2038 | | |
| 2039 | | return 0xff; |
| 2040 | | } |
| 2041 | | |
| 2042 | | WRITE8_MEMBER(pc9801_state::pc9801rs_2hd_w) |
| 2043 | | { |
| 2044 | | if((offset & 1) == 0) |
| 2045 | | { |
| 2046 | | switch(offset & 6) |
| 2047 | | { |
| 2048 | | case 2: m_fdc_2hd->fifo_w(space, 0, data, 0xff); return; |
| 2049 | | case 4: |
| 2050 | | if(data & 0x80) |
| 2051 | | m_fdc_2hd->soft_reset(); |
| 2052 | | |
| 2053 | | if(data & 0x40) |
| 2054 | | { |
| 2055 | | m_fdc_2hd->set_ready_line_connected(0); |
| 2056 | | m_fdc_2hd->ready_w(0); |
| 2057 | | } |
| 2058 | | else |
| 2059 | | m_fdc_2hd->set_ready_line_connected(1); |
| 2060 | | |
| 2061 | | //TODO: verify |
| 2062 | | if(!(m_fdc_ctrl & 4)) |
| 2063 | | { |
| 2064 | | m_fdc_2hd->subdevice<floppy_connector>("0")->get_device()->mon_w(data & 8 ? CLEAR_LINE : ASSERT_LINE); |
| 2065 | | m_fdc_2hd->subdevice<floppy_connector>("1")->get_device()->mon_w(data & 8 ? CLEAR_LINE : ASSERT_LINE); |
| 2066 | | } |
| 2067 | | return; |
| 2068 | | } |
| 2069 | | } |
| 2070 | | |
| 2071 | | logerror("Write to undefined port [%02x] %02x\n",offset+0x90,data); |
| 2072 | | } |
| 2073 | | |
| 2074 | 1953 | #if 0 |
| 2075 | 1954 | READ8_MEMBER(pc9801_state::pc9801rs_2dd_r) |
| 2076 | 1955 | { |
| r253583 | r253584 | |
| 2160 | 2039 | pc9801_a0_w(space,offset,data); |
| 2161 | 2040 | } |
| 2162 | 2041 | |
| 2163 | | READ8_MEMBER( pc9801_state::pc9801rs_access_ctrl_r ) |
| 2042 | READ8_MEMBER( pc9801_state::access_ctrl_r ) |
| 2164 | 2043 | { |
| 2165 | 2044 | if(offset == 1) |
| 2166 | 2045 | return m_access_ctrl; |
| r253583 | r253584 | |
| 2168 | 2047 | return 0xff; |
| 2169 | 2048 | } |
| 2170 | 2049 | |
| 2171 | | WRITE8_MEMBER( pc9801_state::pc9801rs_access_ctrl_w ) |
| 2050 | WRITE8_MEMBER( pc9801_state::access_ctrl_w ) |
| 2172 | 2051 | { |
| 2173 | 2052 | if(offset == 1) |
| 2174 | 2053 | m_access_ctrl = data; |
| r253583 | r253584 | |
| 2184 | 2063 | } |
| 2185 | 2064 | } |
| 2186 | 2065 | |
| 2187 | | |
| 2188 | | WRITE8_MEMBER( pc9801_state::pc9801rs_nmi_w ) |
| 2066 | READ8_MEMBER( pc9801_state::midi_r ) |
| 2189 | 2067 | { |
| 2190 | | if(offset == 0) |
| 2191 | | m_nmi_enable = 0; |
| 2192 | | |
| 2193 | | if(offset == 2) |
| 2194 | | m_nmi_enable = 1; |
| 2195 | | } |
| 2196 | | |
| 2197 | | READ8_MEMBER( pc9801_state::pc9801rs_midi_r ) |
| 2198 | | { |
| 2199 | 2068 | /* unconnect, needed by Amaranth KH to boot */ |
| 2200 | 2069 | return 0xff; |
| 2201 | 2070 | } |
| r253583 | r253584 | |
| 2247 | 2116 | ADDRESS_MAP_UNMAP_HIGH |
| 2248 | 2117 | AM_RANGE(0x0020, 0x002f) AM_WRITE8(dmapg8_w,0xff00) |
| 2249 | 2118 | AM_RANGE(0x0050, 0x0057) AM_NOP // 2dd ppi? |
| 2250 | | AM_RANGE(0x005c, 0x005f) AM_READ(pc9821_timestamp_r) AM_WRITENOP // artic |
| 2119 | AM_RANGE(0x005c, 0x005f) AM_READ(timestamp_r) AM_WRITENOP // artic |
| 2251 | 2120 | AM_RANGE(0x0068, 0x006b) AM_WRITE8(pc9801rs_video_ff_w,0x00ff) //mode FF / <undefined> |
| 2252 | 2121 | AM_RANGE(0x0070, 0x007f) AM_READWRITE8(grcg_r, grcg_w, 0x00ff) //display registers "GRCG" / i8253 pit |
| 2253 | | AM_RANGE(0x0090, 0x0097) AM_READWRITE8(pc9801rs_2hd_r, pc9801rs_2hd_w, 0xffff) |
| 2254 | 2122 | AM_RANGE(0x00a0, 0x00af) AM_READWRITE8(pc9801_a0_r, pc9801rs_a0_w, 0xffff) //upd7220 bitmap ports / display registers |
| 2255 | | AM_RANGE(0x00bc, 0x00bf) AM_READWRITE8(pc9810rs_fdc_ctrl_r,pc9810rs_fdc_ctrl_w,0xffff) |
| 2256 | | AM_RANGE(0x00c8, 0x00cf) AM_READWRITE8(pc9801rs_2hd_r, pc9801rs_2hd_w, 0xffff) |
| 2123 | AM_RANGE(0x00bc, 0x00bf) AM_READWRITE8(fdc_mode_ctrl_r,fdc_mode_ctrl_w,0xffff) |
| 2124 | AM_RANGE(0x00c8, 0x00cb) AM_DEVICE8("upd765_2hd", upd765a_device, map, 0x00ff) |
| 2125 | AM_RANGE(0x00cc, 0x00cd) AM_READWRITE8(fdc_2hd_ctrl_r, fdc_2hd_ctrl_w, 0x00ff) |
| 2257 | 2126 | AM_RANGE(0x00f0, 0x00ff) AM_READWRITE8(a20_ctrl_r, a20_ctrl_w, 0x00ff) |
| 2258 | | AM_RANGE(0x0438, 0x043b) AM_READWRITE8(pc9801rs_access_ctrl_r,pc9801rs_access_ctrl_w,0xffff) |
| 2259 | | AM_RANGE(0x043c, 0x043f) AM_WRITE8(pc9801rs_bank_w, 0xffff) //ROM/RAM bank |
| 2127 | AM_RANGE(0x0438, 0x043b) AM_READWRITE8(access_ctrl_r,access_ctrl_w,0xffff) |
| 2128 | AM_RANGE(0x043c, 0x043f) AM_WRITE8(pc9801rs_bank_w, 0xffff) //ROM/RAM bank |
| 2260 | 2129 | AM_RANGE(0x04a0, 0x04af) AM_WRITE(egc_w) |
| 2261 | 2130 | AM_RANGE(0x3fd8, 0x3fdf) AM_DEVREADWRITE8("pit8253", pit8253_device, read, write, 0xff00) |
| 2262 | | // AM_RANGE(0xa460, 0xa463) AM_READWRITE8(pc9801_ext_opna_r, pc9801_ext_opna_w, 0xffff) |
| 2263 | | AM_IMPORT_FROM(pc9801_io) |
| 2131 | AM_IMPORT_FROM(pc9801_common_io) |
| 2264 | 2132 | ADDRESS_MAP_END |
| 2265 | 2133 | |
| 2266 | 2134 | static ADDRESS_MAP_START( pc9801rs_map, AS_PROGRAM, 16, pc9801_state ) |
| r253583 | r253584 | |
| 2273 | 2141 | |
| 2274 | 2142 | static ADDRESS_MAP_START( pc9801rs_io, AS_IO, 16, pc9801_state ) |
| 2275 | 2143 | ADDRESS_MAP_UNMAP_HIGH |
| 2276 | | AM_RANGE(0x0050, 0x0053) AM_WRITE8(pc9801rs_nmi_w, 0xffff) |
| 2277 | 2144 | AM_RANGE(0x0430, 0x0433) AM_READWRITE8(ide_ctrl_r, ide_ctrl_w, 0x00ff) |
| 2278 | 2145 | AM_RANGE(0x0640, 0x064f) AM_READWRITE(ide_cs0_r, ide_cs0_w) |
| 2279 | 2146 | AM_RANGE(0x0740, 0x074f) AM_READWRITE(ide_cs1_r, ide_cs1_w) |
| 2280 | 2147 | AM_RANGE(0x1e8c, 0x1e8f) AM_NOP // temp |
| 2281 | 2148 | AM_RANGE(0xbfd8, 0xbfdf) AM_WRITE8(pc9801rs_mouse_freq_w, 0xffff) |
| 2282 | | AM_RANGE(0xe0d0, 0xe0d3) AM_READ8(pc9801rs_midi_r, 0xffff) |
| 2149 | AM_RANGE(0xe0d0, 0xe0d3) AM_READ8(midi_r, 0xffff) |
| 2283 | 2150 | AM_IMPORT_FROM(pc9801ux_io) |
| 2284 | 2151 | ADDRESS_MAP_END |
| 2285 | 2152 | |
| r253583 | r253584 | |
| 2355 | 2222 | pc9801rs_a0_w(space,offset,data); |
| 2356 | 2223 | } |
| 2357 | 2224 | |
| 2358 | | READ8_MEMBER(pc9801_state::pc9821_window_bank_r) |
| 2225 | READ8_MEMBER(pc9801_state::window_bank_r) |
| 2359 | 2226 | { |
| 2360 | 2227 | if(offset == 1) |
| 2361 | 2228 | return m_pc9821_window_bank & 0xfe; |
| r253583 | r253584 | |
| 2363 | 2230 | return 0xff; |
| 2364 | 2231 | } |
| 2365 | 2232 | |
| 2366 | | WRITE8_MEMBER(pc9801_state::pc9821_window_bank_w) |
| 2233 | WRITE8_MEMBER(pc9801_state::window_bank_w) |
| 2367 | 2234 | { |
| 2368 | 2235 | if(offset == 1) |
| 2369 | 2236 | m_pc9821_window_bank = data & 0xfe; |
| r253583 | r253584 | |
| 2427 | 2294 | logerror("SDIP area B write %02x %02x\n",offset,data); |
| 2428 | 2295 | } |
| 2429 | 2296 | |
| 2430 | | READ16_MEMBER(pc9801_state::pc9821_timestamp_r) |
| 2297 | READ16_MEMBER(pc9801_state::timestamp_r) |
| 2431 | 2298 | { |
| 2432 | 2299 | return (m_maincpu->total_cycles() >> (16 * offset)); |
| 2433 | 2300 | } |
| 2434 | 2301 | |
| 2435 | 2302 | /* basically a read-back of various registers */ |
| 2436 | | READ8_MEMBER(pc9801_state::pc9821_ext2_video_ff_r) |
| 2303 | READ8_MEMBER(pc9801_state::ext2_video_ff_r) |
| 2437 | 2304 | { |
| 2438 | 2305 | UINT8 res; |
| 2439 | 2306 | |
| r253583 | r253584 | |
| 2449 | 2316 | return res; |
| 2450 | 2317 | } |
| 2451 | 2318 | |
| 2452 | | WRITE8_MEMBER(pc9801_state::pc9821_ext2_video_ff_w) |
| 2319 | WRITE8_MEMBER(pc9801_state::ext2_video_ff_w) |
| 2453 | 2320 | { |
| 2454 | 2321 | m_ext2_ff = data; |
| 2455 | 2322 | } |
| r253583 | r253584 | |
| 2491 | 2358 | AM_RANGE(0x0030, 0x0037) AM_DEVREADWRITE8("ppi8255_sys", i8255_device, read, write, 0xff00ff00) //i8251 RS232c / i8255 system port |
| 2492 | 2359 | AM_RANGE(0x0040, 0x0047) AM_DEVREADWRITE8("ppi8255_prn", i8255_device, read, write, 0x00ff00ff) |
| 2493 | 2360 | AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8("keyb", pc9801_kbd_device, rx_r, tx_w, 0xff00ff00) //i8255 printer port / i8251 keyboard |
| 2494 | | AM_RANGE(0x0050, 0x0053) AM_WRITE8(pc9801rs_nmi_w, 0xffffffff) |
| 2495 | | AM_RANGE(0x005c, 0x005f) AM_READ16(pc9821_timestamp_r,0xffffffff) AM_WRITENOP // artic |
| 2361 | AM_RANGE(0x0050, 0x0053) AM_WRITE8(nmi_ctrl_w, 0x00ff00ff) |
| 2362 | AM_RANGE(0x005c, 0x005f) AM_READ16(timestamp_r,0xffffffff) AM_WRITENOP // artic |
| 2496 | 2363 | AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("upd7220_chr", upd7220_device, read, write, 0x00ff00ff) //upd7220 character ports / <undefined> |
| 2497 | 2364 | AM_RANGE(0x0060, 0x0063) AM_READ8(unk_r, 0xff00ff00) // mouse related (unmapped checking for AT keyb controller\PS/2 mouse?) |
| 2498 | 2365 | AM_RANGE(0x0064, 0x0067) AM_WRITE8(vrtc_clear_w, 0x000000ff) |
| 2499 | 2366 | AM_RANGE(0x0068, 0x006b) AM_WRITE8(pc9821_video_ff_w, 0x00ff00ff) //mode FF / <undefined> |
| 2500 | 2367 | AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("pit8253", pit8253_device, read, write, 0xff00ff00) |
| 2501 | 2368 | AM_RANGE(0x0070, 0x007f) AM_READWRITE8(grcg_r, grcg_w, 0x00ff00ff) //display registers "GRCG" / i8253 pit |
| 2502 | | AM_RANGE(0x0090, 0x0097) AM_READWRITE8(pc9801rs_2hd_r, pc9801rs_2hd_w, 0xffffffff) |
| 2369 | AM_RANGE(0x0090, 0x0093) AM_DEVICE8("upd765_2hd", upd765a_device, map, 0x00ff00ff) |
| 2370 | AM_RANGE(0x0094, 0x0097) AM_READWRITE8(fdc_2hd_ctrl_r, fdc_2hd_ctrl_w, 0x000000ff) |
| 2503 | 2371 | AM_RANGE(0x00a0, 0x00af) AM_READWRITE8(pc9821_a0_r, pc9821_a0_w, 0xffffffff) //upd7220 bitmap ports / display registers |
| 2504 | 2372 | // AM_RANGE(0x00b0, 0x00b3) PC9861k (serial port?) |
| 2505 | 2373 | // AM_RANGE(0x00b9, 0x00b9) PC9861k |
| 2506 | 2374 | // AM_RANGE(0x00bb, 0x00bb) PC9861k |
| 2507 | | AM_RANGE(0x00bc, 0x00bf) AM_READWRITE8(pc9810rs_fdc_ctrl_r,pc9810rs_fdc_ctrl_w,0xffffffff) |
| 2508 | | AM_RANGE(0x00c8, 0x00cf) AM_READWRITE8(pc9801rs_2hd_r, pc9801rs_2hd_w, 0xffffffff) |
| 2509 | | // AM_RANGE(0x00d8, 0x00df) AMD98 (sound?) board |
| 2375 | AM_RANGE(0x00bc, 0x00bf) AM_READWRITE8(fdc_mode_ctrl_r,fdc_mode_ctrl_w,0xffffffff) |
| 2376 | AM_RANGE(0x00c8, 0x00cb) AM_DEVICE8("upd765_2hd", upd765a_device, map, 0x00ff00ff) |
| 2377 | AM_RANGE(0x00cc, 0x00cf) AM_READWRITE8(fdc_2hd_ctrl_r, fdc_2hd_ctrl_w, 0x000000ff) |
| 2378 | // AM_RANGE(0x00d8, 0x00df) AMD98 (sound?) board |
| 2510 | 2379 | AM_RANGE(0x00f0, 0x00ff) AM_READWRITE8(a20_ctrl_r, a20_ctrl_w, 0x00ff00ff) |
| 2511 | 2380 | // AM_RANGE(0x0188, 0x018f) AM_READWRITE8(pc9801_opn_r, pc9801_opn_w, 0xffffffff) //ym2203 opn / <undefined> |
| 2512 | 2381 | // AM_RANGE(0x018c, 0x018f) YM2203 OPN extended ports / <undefined> |
| 2513 | 2382 | AM_RANGE(0x0430, 0x0433) AM_READWRITE8(ide_ctrl_r, ide_ctrl_w, 0x00ff00ff) |
| 2514 | | AM_RANGE(0x0438, 0x043b) AM_READWRITE8(pc9801rs_access_ctrl_r,pc9801rs_access_ctrl_w,0xffffffff) |
| 2383 | AM_RANGE(0x0438, 0x043b) AM_READWRITE8(access_ctrl_r,access_ctrl_w,0xffffffff) |
| 2515 | 2384 | // AM_RANGE(0x043d, 0x043d) ROM/RAM bank (NEC) |
| 2516 | 2385 | AM_RANGE(0x043c, 0x043f) AM_WRITE8(pc9801rs_bank_w, 0xffffffff) //ROM/RAM bank (EPSON) |
| 2517 | | AM_RANGE(0x0460, 0x0463) AM_READWRITE8(pc9821_window_bank_r,pc9821_window_bank_w, 0xffffffff) |
| 2386 | AM_RANGE(0x0460, 0x0463) AM_READWRITE8(window_bank_r,window_bank_w, 0xffffffff) |
| 2518 | 2387 | AM_RANGE(0x04a0, 0x04af) AM_WRITE16(egc_w, 0xffffffff) |
| 2519 | 2388 | // AM_RANGE(0x04be, 0x04be) FDC "RPM" register |
| 2520 | 2389 | AM_RANGE(0x0640, 0x064f) AM_READWRITE16(ide_cs0_r, ide_cs0_w, 0xffffffff) |
| 2521 | 2390 | AM_RANGE(0x0740, 0x074f) AM_READWRITE16(ide_cs1_r, ide_cs1_w, 0xffffffff) |
| 2522 | 2391 | // AM_RANGE(0x08e0, 0x08ea) <undefined> / EMM SIO registers |
| 2523 | | AM_RANGE(0x09a0, 0x09a3) AM_READWRITE8(pc9821_ext2_video_ff_r, pc9821_ext2_video_ff_w, 0x000000ff) // GDC extended register r/w |
| 2392 | AM_RANGE(0x09a0, 0x09a3) AM_READWRITE8(ext2_video_ff_r, ext2_video_ff_w, 0x000000ff) // GDC extended register r/w |
| 2524 | 2393 | // AM_RANGE(0x09a8, 0x09a8) GDC 31KHz register r/w |
| 2525 | 2394 | // AM_RANGE(0x0c07, 0x0c07) EPSON register w |
| 2526 | 2395 | // AM_RANGE(0x0c03, 0x0c03) EPSON register 0 r |
| r253583 | r253584 | |
| 2545 | 2414 | AM_RANGE(0x8d1c, 0x8d1f) AM_READWRITE8(sdip_9_r,sdip_9_w,0xffffffff) |
| 2546 | 2415 | AM_RANGE(0x8e1c, 0x8e1f) AM_READWRITE8(sdip_a_r,sdip_a_w,0xffffffff) |
| 2547 | 2416 | AM_RANGE(0x8f1c, 0x8f1f) AM_READWRITE8(sdip_b_r,sdip_b_w,0xffffffff) |
| 2548 | | // AM_RANGE(0xa460, 0xa463) AM_READWRITE8(pc9801_ext_opna_r, pc9801_ext_opna_w, 0xffffffff) |
| 2549 | 2417 | // AM_RANGE(0xa460, 0xa46f) cs4231 PCM extended port / <undefined> |
| 2550 | 2418 | // AM_RANGE(0xbfdb, 0xbfdb) mouse timing port |
| 2551 | 2419 | // AM_RANGE(0xc0d0, 0xc0d3) MIDI port, option 0 / <undefined> |
| r253583 | r253584 | |
| 2556 | 2424 | // AM_RANGE(0xd4d0, 0xd4d3) MIDI port, option 5 / <undefined> |
| 2557 | 2425 | // AM_RANGE(0xd8d0, 0xd8d3) MIDI port, option 6 / <undefined> |
| 2558 | 2426 | // AM_RANGE(0xdcd0, 0xdcd3) MIDI port, option 7 / <undefined> |
| 2559 | | AM_RANGE(0xe0d0, 0xe0d3) AM_READ8(pc9801rs_midi_r, 0xffffffff) // MIDI port, option 8 / <undefined> |
| 2427 | AM_RANGE(0xe0d0, 0xe0d3) AM_READ8(midi_r, 0xffffffff) // MIDI port, option 8 / <undefined> |
| 2560 | 2428 | // AM_RANGE(0xe4d0, 0xe4d3) MIDI port, option 9 / <undefined> |
| 2561 | 2429 | // AM_RANGE(0xe8d0, 0xe8d3) MIDI port, option A / <undefined> |
| 2562 | 2430 | // AM_RANGE(0xecd0, 0xecd3) MIDI port, option B / <undefined> |
| r253583 | r253584 | |
| 3070 | 2938 | m_dmac->dreq3_w(state ^ 1); |
| 3071 | 2939 | } |
| 3072 | 2940 | |
| 3073 | | UINT32 pc9801_state::pc9801_286_a20(bool state) |
| 2941 | UINT32 pc9801_state::a20_286(bool state) |
| 3074 | 2942 | { |
| 3075 | 2943 | return (state ? 0xffffff : 0x0fffff); |
| 3076 | 2944 | } |
| r253583 | r253584 | |
| 3240 | 3108 | ide0->identify_device_buffer()[47] = 0; |
| 3241 | 3109 | } |
| 3242 | 3110 | |
| 3243 | | INTERRUPT_GEN_MEMBER(pc9801_state::pc9801_vrtc_irq) |
| 3111 | INTERRUPT_GEN_MEMBER(pc9801_state::vrtc_irq) |
| 3244 | 3112 | { |
| 3245 | 3113 | m_pic1->ir2_w(1); |
| 3246 | 3114 | m_vbirq->adjust(m_screen->time_until_vblank_end()); |
| r253583 | r253584 | |
| 3408 | 3276 | MCFG_CPU_ADD("maincpu", I8086, 5000000) //unknown clock |
| 3409 | 3277 | MCFG_CPU_PROGRAM_MAP(pc9801_map) |
| 3410 | 3278 | MCFG_CPU_IO_MAP(pc9801_io) |
| 3411 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, pc9801_vrtc_irq) |
| 3279 | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, vrtc_irq) |
| 3412 | 3280 | MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb) |
| 3413 | 3281 | |
| 3414 | 3282 | MCFG_FRAGMENT_ADD(pc9801_common) |
| r253583 | r253584 | |
| 3442 | 3310 | MCFG_CPU_REPLACE("maincpu",V30,10000000) |
| 3443 | 3311 | MCFG_CPU_PROGRAM_MAP(pc9801ux_map) |
| 3444 | 3312 | MCFG_CPU_IO_MAP(pc9801ux_io) |
| 3445 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, pc9801_vrtc_irq) |
| 3313 | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, vrtc_irq) |
| 3446 | 3314 | |
| 3447 | 3315 | MCFG_MACHINE_START_OVERRIDE(pc9801_state,pc9801_common) |
| 3448 | 3316 | MCFG_MACHINE_RESET_OVERRIDE(pc9801_state,pc9801_common) |
| r253583 | r253584 | |
| 3452 | 3320 | MCFG_CPU_ADD("maincpu", I386SX, MAIN_CLOCK_X1*8) // unknown clock. |
| 3453 | 3321 | MCFG_CPU_PROGRAM_MAP(pc9801rs_map) |
| 3454 | 3322 | MCFG_CPU_IO_MAP(pc9801rs_io) |
| 3455 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, pc9801_vrtc_irq) |
| 3323 | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, vrtc_irq) |
| 3456 | 3324 | MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb) |
| 3457 | 3325 | |
| 3458 | 3326 | MCFG_FRAGMENT_ADD(pc9801_common) |
| r253583 | r253584 | |
| 3481 | 3349 | MCFG_CPU_REPLACE("maincpu",I80286,10000000) |
| 3482 | 3350 | MCFG_CPU_PROGRAM_MAP(pc9801ux_map) |
| 3483 | 3351 | MCFG_CPU_IO_MAP(pc9801ux_io) |
| 3484 | | MCFG_80286_A20(pc9801_state, pc9801_286_a20) |
| 3485 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, pc9801_vrtc_irq) |
| 3352 | MCFG_80286_A20(pc9801_state, a20_286) |
| 3353 | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, vrtc_irq) |
| 3486 | 3354 | MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb) |
| 3487 | 3355 | // MCFG_DEVICE_MODIFY("i8237", AM9157A, 10000000) // unknown clock |
| 3488 | 3356 | MACHINE_CONFIG_END |
| r253583 | r253584 | |
| 3491 | 3359 | MCFG_CPU_REPLACE("maincpu",I486,25000000) |
| 3492 | 3360 | MCFG_CPU_PROGRAM_MAP(pc9821_map) |
| 3493 | 3361 | MCFG_CPU_IO_MAP(pc9821_io) |
| 3494 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, pc9801_vrtc_irq) |
| 3362 | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, vrtc_irq) |
| 3495 | 3363 | MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb) |
| 3496 | 3364 | |
| 3497 | 3365 | MCFG_MACHINE_START_OVERRIDE(pc9801_state,pc9801bx2) |
| r253583 | r253584 | |
| 3501 | 3369 | MCFG_CPU_REPLACE("maincpu", I486, 16000000) // unknown clock |
| 3502 | 3370 | MCFG_CPU_PROGRAM_MAP(pc9821_map) |
| 3503 | 3371 | MCFG_CPU_IO_MAP(pc9821_io) |
| 3504 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, pc9801_vrtc_irq) |
| 3372 | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, vrtc_irq) |
| 3505 | 3373 | MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb) |
| 3506 | 3374 | |
| 3507 | 3375 | MCFG_DEVICE_MODIFY("pit8253") |
| r253583 | r253584 | |
| 3524 | 3392 | MCFG_CPU_REPLACE("maincpu", I486, 66666667) // unknown clock |
| 3525 | 3393 | MCFG_CPU_PROGRAM_MAP(pc9821_map) |
| 3526 | 3394 | MCFG_CPU_IO_MAP(pc9821_io) |
| 3527 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, pc9801_vrtc_irq) |
| 3395 | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, vrtc_irq) |
| 3528 | 3396 | MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb) |
| 3529 | 3397 | |
| 3530 | 3398 | MCFG_MACHINE_START_OVERRIDE(pc9801_state,pc9821ap2) |
| r253583 | r253584 | |
| 3534 | 3402 | MCFG_CPU_REPLACE("maincpu",PENTIUM,32000000) /* TODO: clock */ |
| 3535 | 3403 | MCFG_CPU_PROGRAM_MAP(pc9821_map) |
| 3536 | 3404 | MCFG_CPU_IO_MAP(pc9821_io) |
| 3537 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, pc9801_vrtc_irq) |
| 3405 | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, vrtc_irq) |
| 3538 | 3406 | MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb) |
| 3539 | 3407 | MACHINE_CONFIG_END |
| 3540 | 3408 | |