trunk/src/mess/drivers/pc9801.c
| r19231 | r19232 | |
| 420 | 420 | DECLARE_WRITE8_MEMBER(sdip_b_w); |
| 421 | 421 | |
| 422 | 422 | DECLARE_READ8_MEMBER(pc9821_ide_r); |
| 423 | DECLARE_READ8_MEMBER(pc9821_unkrom_r); |
| 423 | 424 | DECLARE_READ8_MEMBER(pc9821_ideram_r); |
| 424 | 425 | DECLARE_WRITE8_MEMBER(pc9821_ideram_w); |
| 425 | 426 | DECLARE_READ8_MEMBER(pc9821_ext_gvram_r); |
| r19231 | r19232 | |
| 446 | 447 | DECLARE_MACHINE_RESET(pc9801); |
| 447 | 448 | DECLARE_MACHINE_RESET(pc9801f); |
| 448 | 449 | DECLARE_MACHINE_RESET(pc9801rs); |
| 450 | DECLARE_MACHINE_RESET(pc9821); |
| 449 | 451 | |
| 450 | 452 | DECLARE_PALETTE_INIT(pc9801); |
| 451 | 453 | INTERRUPT_GEN_MEMBER(pc9801_vrtc_irq); |
| r19231 | r19232 | |
| 1355 | 1357 | return ROM[(offset & 0x1ffff)+(m_rom_bank*0x20000)]; |
| 1356 | 1358 | } |
| 1357 | 1359 | |
| 1360 | /* TODO: it's possible that the offset calculation is actually linear. */ |
| 1361 | /* TODO: having this non-linear makes the system to boot in BASIC for PC-9821. Perhaps it stores settings? How to change these? */ |
| 1358 | 1362 | READ8_MEMBER(pc9801_state::pc9801rs_knjram_r) |
| 1359 | 1363 | { |
| 1360 | | UINT8 *KNJRAM = memregion("kanji")->base(); |
| 1364 | UINT8 *pcg = memregion("pcg")->base(); |
| 1361 | 1365 | |
| 1362 | | return KNJRAM[offset]; |
| 1366 | return pcg[((m_font_addr & 0x7f7f) << 4) | m_font_lr | ((offset >> 1) & 0x0f)]; |
| 1363 | 1367 | } |
| 1364 | 1368 | |
| 1365 | 1369 | WRITE8_MEMBER(pc9801_state::pc9801rs_knjram_w) |
| 1366 | 1370 | { |
| 1367 | | UINT8 *KNJRAM = memregion("kanji")->base(); |
| 1371 | UINT8 *pcg = memregion("pcg")->base(); |
| 1368 | 1372 | |
| 1369 | | KNJRAM[offset] = data; |
| 1373 | pcg[((m_font_addr & 0x7f7f) << 4) | m_font_lr | ((offset >> 1) & 0x0f)] = data; |
| 1370 | 1374 | } |
| 1371 | 1375 | |
| 1372 | 1376 | /* FF-based */ |
| r19231 | r19232 | |
| 1770 | 1774 | m_ext_gvram[offset] = data; |
| 1771 | 1775 | } |
| 1772 | 1776 | |
| 1777 | READ8_MEMBER(pc9801_state::pc9821_unkrom_r) |
| 1778 | { |
| 1779 | UINT8 *UNKROM = memregion("unkrom")->base(); |
| 1773 | 1780 | |
| 1781 | return UNKROM[offset]; |
| 1782 | } |
| 1783 | |
| 1774 | 1784 | READ8_MEMBER(pc9801_state::pc9821_memory_r) |
| 1775 | 1785 | { |
| 1776 | 1786 | if(m_gate_a20 == 0) |
| r19231 | r19232 | |
| 1784 | 1794 | else if(offset >= 0x000a0000 && offset <= 0x000a3fff) { return pc9801_tvram_r(space,offset-0xa0000); } |
| 1785 | 1795 | else if(offset >= 0x000a4000 && offset <= 0x000a4fff) { return pc9801rs_knjram_r(space,offset & 0xfff); } |
| 1786 | 1796 | else if(offset >= 0x000a8000 && offset <= 0x000bffff) { return pc9801_gvram_r(space,offset-0xa8000); } |
| 1797 | else if(offset >= 0x000cc000 && offset <= 0x000cffff) { return pc9821_unkrom_r(space,offset & 0x3fff); } |
| 1787 | 1798 | else if(offset >= 0x000d8000 && offset <= 0x000d9fff) { return pc9821_ide_r(space,offset & 0x1fff); } |
| 1788 | 1799 | else if(offset >= 0x000da000 && offset <= 0x000dbfff) { return pc9821_ideram_r(space,offset & 0x1fff); } |
| 1789 | 1800 | else if(offset >= 0x000e0000 && offset <= 0x000e7fff) { return pc9821_vram256_r(space,offset & 0x1ffff); } |
| r19231 | r19232 | |
| 1792 | 1803 | else if(offset >= 0x00f00000 && offset <= 0x00f9ffff) { return pc9821_ext_gvram_r(space,offset-0x00f00000); } |
| 1793 | 1804 | else if(offset >= 0xfffe0000 && offset <= 0xffffffff) { return pc9801rs_ipl_r(space,offset & 0x1ffff); } |
| 1794 | 1805 | |
| 1795 | | //printf("%08x\n",offset); |
| 1806 | printf("%08x\n",offset); |
| 1796 | 1807 | return 0x00; |
| 1797 | 1808 | } |
| 1798 | 1809 | |
| r19231 | r19232 | |
| 1810 | 1821 | else if(offset >= 0x000a0000 && offset <= 0x000a3fff) { pc9801_tvram_w(space,offset-0xa0000,data); } |
| 1811 | 1822 | else if(offset >= 0x000a4000 && offset <= 0x000a4fff) { pc9801rs_knjram_w(space,offset & 0xfff,data); } |
| 1812 | 1823 | else if(offset >= 0x000a8000 && offset <= 0x000bffff) { pc9801_gvram_w(space,offset-0xa8000,data); } |
| 1824 | else if(offset >= 0x000cc000 && offset <= 0x000cffff) { /* TODO: shadow ROM */ } |
| 1825 | else if(offset >= 0x000d8000 && offset <= 0x000d9fff) { /* TODO: shadow ROM */ } |
| 1813 | 1826 | else if(offset >= 0x000da000 && offset <= 0x000dbfff) { pc9821_ideram_w(space,offset & 0x1fff,data); } |
| 1814 | 1827 | else if(offset >= 0x000e0000 && offset <= 0x000e7fff) { pc9821_vram256_w(space,offset & 0x1ffff,data); } |
| 1815 | | else if(offset >= 0x000e8000 && offset <= 0x000fffff) { /* TODO: shadow ROM */ } |
| 1828 | else if(offset >= 0x000e8000 && offset <= 0x000fffff) { /* TODO: shadow ROM */ } |
| 1816 | 1829 | else if(offset >= 0x00100000 && offset <= 0x00100000+m_ram_size-1) { pc9801rs_ex_wram_w(space,offset-0x00100000,data); } |
| 1817 | 1830 | else if(offset >= 0x00f00000 && offset <= 0x00f9ffff) { pc9821_ext_gvram_w(space,offset-0x00f00000,data); } |
| 1818 | | //else |
| 1819 | | // printf("%08x %08x\n",offset,data); |
| 1831 | else |
| 1832 | printf("%08x %08x\n",offset,data); |
| 1820 | 1833 | |
| 1821 | 1834 | } |
| 1822 | 1835 | |
| r19231 | r19232 | |
| 1924 | 1937 | { |
| 1925 | 1938 | if(offset == 1) |
| 1926 | 1939 | m_pc9821_window_bank = data & 0xfe; |
| 1940 | else |
| 1941 | printf("PC-9821 $f0000 window bank %02x\n",data); |
| 1927 | 1942 | } |
| 1928 | 1943 | |
| 1929 | 1944 | UINT8 pc9801_state::m_sdip_read(UINT16 port, UINT8 sdip_offset) |
| r19231 | r19232 | |
| 2857 | 2872 | state_save_register_global_pointer(machine(), m_ext_gvram, 0xa0000); |
| 2858 | 2873 | } |
| 2859 | 2874 | |
| 2875 | MACHINE_RESET_MEMBER(pc9801_state,pc9821) |
| 2876 | { |
| 2877 | MACHINE_RESET_CALL_MEMBER(pc9801rs); |
| 2878 | |
| 2879 | m_pc9821_window_bank = 0x08; |
| 2880 | } |
| 2881 | |
| 2860 | 2882 | INTERRUPT_GEN_MEMBER(pc9801_state::pc9801_vrtc_irq) |
| 2861 | 2883 | { |
| 2862 | 2884 | #if 0 |
| r19231 | r19232 | |
| 3019 | 3041 | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, pc9801_vrtc_irq) |
| 3020 | 3042 | |
| 3021 | 3043 | MCFG_MACHINE_START_OVERRIDE(pc9801_state,pc9821) |
| 3022 | | MCFG_MACHINE_RESET_OVERRIDE(pc9801_state,pc9801rs) |
| 3044 | MCFG_MACHINE_RESET_OVERRIDE(pc9801_state,pc9821) |
| 3023 | 3045 | |
| 3024 | 3046 | MCFG_PIT8253_ADD( "pit8253", pc9801rs_pit8253_config ) |
| 3025 | 3047 | MCFG_I8237_ADD("i8237", 16000000, dmac_intf) // unknown clock |
| r19231 | r19232 | |
| 3245 | 3267 | ROM_LOAD( "ide.rom", 0x00000, 0x02000, NO_DUMP ) |
| 3246 | 3268 | ROM_FILL( 0x0000, 0x2000, 0xcb ) |
| 3247 | 3269 | |
| 3270 | ROM_REGION( 0x4000, "unkrom", ROMREGION_ERASEFF ) // pnp? |
| 3271 | ROM_LOAD( "unk.rom", 0x00000, 0x04000, NO_DUMP ) |
| 3272 | ROM_FILL( 0x0000, 0x4000, 0xcb ) |
| 3273 | |
| 3248 | 3274 | ROM_REGION( 0x0a0000, "wram", ROMREGION_ERASE00 ) |
| 3249 | 3275 | |
| 3250 | 3276 | ROM_REGION( 0x700000, "ex_wram", ROMREGION_ERASE00 ) |
| r19231 | r19232 | |
| 3275 | 3301 | |
| 3276 | 3302 | ROM_REGION( 0x2000, "ide", ROMREGION_ERASEFF ) |
| 3277 | 3303 | ROM_LOAD( "ide.rom", 0x00000, 0x02000, NO_DUMP ) |
| 3304 | ROM_FILL( 0x0000, 0x2000, 0xcb ) |
| 3278 | 3305 | |
| 3306 | ROM_REGION( 0x4000, "unkrom", ROMREGION_ERASEFF ) // pnp? |
| 3307 | ROM_LOAD( "unk.rom", 0x00000, 0x04000, NO_DUMP ) |
| 3308 | ROM_FILL( 0x0000, 0x4000, 0xcb ) |
| 3309 | |
| 3279 | 3310 | ROM_REGION( 0x0a0000, "wram", ROMREGION_ERASE00 ) |
| 3280 | 3311 | |
| 3281 | 3312 | ROM_REGION( 0x700000, "ex_wram", ROMREGION_ERASE00 ) |
| r19231 | r19232 | |
| 3304 | 3335 | |
| 3305 | 3336 | ROM_REGION( 0x2000, "ide", ROMREGION_ERASEFF ) |
| 3306 | 3337 | ROM_LOAD( "ide.rom", 0x00000, 0x02000, NO_DUMP ) |
| 3338 | ROM_FILL( 0x0000, 0x2000, 0xcb ) |
| 3307 | 3339 | |
| 3340 | ROM_REGION( 0x4000, "unkrom", ROMREGION_ERASEFF ) // pnp? |
| 3341 | ROM_LOAD( "unk.rom", 0x00000, 0x04000, NO_DUMP ) |
| 3342 | ROM_FILL( 0x0000, 0x4000, 0xcb ) |
| 3343 | |
| 3308 | 3344 | ROM_REGION( 0x0a0000, "wram", ROMREGION_ERASE00 ) |
| 3309 | 3345 | |
| 3310 | 3346 | ROM_REGION( 0x700000, "ex_wram", ROMREGION_ERASE00 ) |
| r19231 | r19232 | |
| 3332 | 3368 | |
| 3333 | 3369 | ROM_REGION( 0x2000, "ide", ROMREGION_ERASEFF ) |
| 3334 | 3370 | ROM_LOAD( "ide.rom", 0x00000, 0x02000, NO_DUMP ) |
| 3371 | ROM_FILL( 0x0000, 0x2000, 0xcb ) |
| 3335 | 3372 | |
| 3373 | ROM_REGION( 0x4000, "unkrom", ROMREGION_ERASEFF ) // pnp? |
| 3374 | ROM_LOAD( "unk.rom", 0x00000, 0x04000, NO_DUMP ) |
| 3375 | ROM_FILL( 0x0000, 0x4000, 0xcb ) |
| 3376 | |
| 3336 | 3377 | ROM_REGION( 0x0a0000, "wram", ROMREGION_ERASE00 ) |
| 3337 | 3378 | |
| 3338 | 3379 | ROM_REGION( 0x700000, "ex_wram", ROMREGION_ERASE00 ) |
| r19231 | r19232 | |
| 3360 | 3401 | |
| 3361 | 3402 | ROM_REGION( 0x2000, "ide", ROMREGION_ERASEFF ) |
| 3362 | 3403 | ROM_LOAD( "ide.rom", 0x00000, 0x02000, NO_DUMP ) |
| 3404 | ROM_FILL( 0x0000, 0x2000, 0xcb ) |
| 3363 | 3405 | |
| 3406 | ROM_REGION( 0x4000, "unkrom", ROMREGION_ERASEFF ) // pnp? |
| 3407 | ROM_LOAD( "unk.rom", 0x00000, 0x04000, NO_DUMP ) |
| 3408 | ROM_FILL( 0x0000, 0x4000, 0xcb ) |
| 3409 | |
| 3364 | 3410 | ROM_REGION( 0x0a0000, "wram", ROMREGION_ERASE00 ) |
| 3365 | 3411 | |
| 3366 | 3412 | ROM_REGION( 0x700000, "ex_wram", ROMREGION_ERASE00 ) |
| r19231 | r19232 | |
| 3388 | 3434 | |
| 3389 | 3435 | ROM_REGION( 0x2000, "ide", ROMREGION_ERASEFF ) |
| 3390 | 3436 | ROM_LOAD( "ide.rom", 0x00000, 0x02000, NO_DUMP ) |
| 3437 | ROM_FILL( 0x0000, 0x2000, 0xcb ) |
| 3391 | 3438 | |
| 3439 | ROM_REGION( 0x4000, "unkrom", ROMREGION_ERASEFF ) // pnp? |
| 3440 | ROM_LOAD( "unk.rom", 0x00000, 0x04000, NO_DUMP ) |
| 3441 | ROM_FILL( 0x0000, 0x4000, 0xcb ) |
| 3442 | |
| 3392 | 3443 | ROM_REGION( 0x0a0000, "wram", ROMREGION_ERASE00 ) |
| 3393 | 3444 | |
| 3394 | 3445 | ROM_REGION( 0x700000, "ex_wram", ROMREGION_ERASE00 ) |
| r19231 | r19232 | |
| 3417 | 3468 | |
| 3418 | 3469 | ROM_REGION( 0x2000, "ide", ROMREGION_ERASEFF ) |
| 3419 | 3470 | ROM_LOAD( "ide.rom", 0x00000, 0x02000, NO_DUMP ) |
| 3471 | ROM_FILL( 0x0000, 0x2000, 0xcb ) |
| 3420 | 3472 | |
| 3473 | ROM_REGION( 0x4000, "unkrom", ROMREGION_ERASEFF ) // pnp? |
| 3474 | ROM_LOAD( "unk.rom", 0x00000, 0x04000, NO_DUMP ) |
| 3475 | ROM_FILL( 0x0000, 0x4000, 0xcb ) |
| 3476 | |
| 3421 | 3477 | ROM_REGION( 0x0a0000, "wram", ROMREGION_ERASE00 ) |
| 3422 | 3478 | |
| 3423 | 3479 | ROM_REGION( 0x700000, "ex_wram", ROMREGION_ERASE00 ) |
| r19231 | r19232 | |
| 3445 | 3501 | |
| 3446 | 3502 | ROM_REGION( 0x2000, "ide", ROMREGION_ERASEFF ) |
| 3447 | 3503 | ROM_LOAD( "ide.rom", 0x00000, 0x02000, NO_DUMP ) |
| 3504 | ROM_FILL( 0x0000, 0x2000, 0xcb ) |
| 3448 | 3505 | |
| 3506 | ROM_REGION( 0x4000, "unkrom", ROMREGION_ERASEFF ) // pnp? |
| 3507 | ROM_LOAD( "unk.rom", 0x00000, 0x04000, NO_DUMP ) |
| 3508 | ROM_FILL( 0x0000, 0x4000, 0xcb ) |
| 3509 | |
| 3449 | 3510 | ROM_REGION( 0x0a0000, "wram", ROMREGION_ERASE00 ) |
| 3450 | 3511 | |
| 3451 | 3512 | ROM_REGION( 0x700000, "ex_wram", ROMREGION_ERASE00 ) |