trunk/src/mess/drivers/pc8801.c
| r20286 | r20287 | |
| 299 | 299 | public: |
| 300 | 300 | pc8801_state(const machine_config &mconfig, device_type type, const char *tag) |
| 301 | 301 | : driver_device(mconfig, type, tag), |
| 302 | m_maincpu(*this, "maincpu"), |
| 302 | 303 | m_fdccpu(*this, "fdccpu"), |
| 303 | 304 | m_pic(*this, I8214_TAG), |
| 304 | 305 | m_rtc(*this, UPD1990A_TAG), |
| 305 | 306 | m_cassette(*this, CASSETTE_TAG) |
| 306 | 307 | { } |
| 307 | 308 | |
| 309 | required_device<cpu_device> m_maincpu; |
| 308 | 310 | required_device<cpu_device> m_fdccpu; |
| 309 | 311 | optional_device<i8214_device> m_pic; |
| 310 | 312 | required_device<upd1990a_device> m_rtc; |
| 311 | 313 | required_device<cassette_image_device> m_cassette; |
| 314 | UINT8 *m_work_ram; |
| 315 | UINT8 *m_hi_work_ram; |
| 316 | UINT8 *m_ext_work_ram; |
| 317 | UINT8 *m_gvram; |
| 318 | UINT8 *m_n80rom; |
| 319 | UINT8 *m_n88rom; |
| 320 | UINT8 *m_kanji_rom; |
| 321 | UINT8 *m_cg_rom; |
| 322 | |
| 312 | 323 | UINT8 m_i8255_0_pc; |
| 313 | 324 | UINT8 m_i8255_1_pc; |
| 314 | 325 | UINT8 m_fdc_irq_opcode; |
| r20286 | r20287 | |
| 520 | 531 | { |
| 521 | 532 | int x,y,xi; |
| 522 | 533 | UINT32 count; |
| 523 | | UINT8 *gvram = machine().root_device().memregion("gvram")->base(); |
| 524 | 534 | UINT16 y_size; |
| 525 | 535 | UINT16 y_double; |
| 526 | 536 | |
| r20286 | r20287 | |
| 540 | 550 | pen = 0; |
| 541 | 551 | |
| 542 | 552 | /* note: layer masking doesn't occur in 3bpp mode, Bug Attack relies on this */ |
| 543 | | pen |= ((gvram[count+0x0000] >> (7-xi)) & 1) << 0; |
| 544 | | pen |= ((gvram[count+0x4000] >> (7-xi)) & 1) << 1; |
| 545 | | pen |= ((gvram[count+0x8000] >> (7-xi)) & 1) << 2; |
| 553 | pen |= ((m_gvram[count+0x0000] >> (7-xi)) & 1) << 0; |
| 554 | pen |= ((m_gvram[count+0x4000] >> (7-xi)) & 1) << 1; |
| 555 | pen |= ((m_gvram[count+0x8000] >> (7-xi)) & 1) << 2; |
| 546 | 556 | |
| 547 | 557 | if(y_double) |
| 548 | 558 | { |
| r20286 | r20287 | |
| 568 | 578 | { |
| 569 | 579 | int x,y,xi; |
| 570 | 580 | UINT32 count; |
| 571 | | UINT8 *gvram = machine().root_device().memregion("gvram")->base(); |
| 572 | 581 | UINT8 color; |
| 573 | 582 | UINT8 is_cursor; |
| 574 | 583 | |
| r20286 | r20287 | |
| 587 | 596 | { |
| 588 | 597 | int pen; |
| 589 | 598 | |
| 590 | | pen = ((gvram[count+0x0000] >> (7-xi)) & 1); |
| 599 | pen = ((m_gvram[count+0x0000] >> (7-xi)) & 1); |
| 591 | 600 | if(is_cursor) |
| 592 | 601 | pen^=1; |
| 593 | 602 | |
| r20286 | r20287 | |
| 625 | 634 | { |
| 626 | 635 | int pen; |
| 627 | 636 | |
| 628 | | pen = ((gvram[count+0x4000] >> (7-xi)) & 1); |
| 637 | pen = ((m_gvram[count+0x4000] >> (7-xi)) & 1); |
| 629 | 638 | if(is_cursor) |
| 630 | 639 | pen^=1; |
| 631 | 640 | |
| r20286 | r20287 | |
| 667 | 676 | |
| 668 | 677 | UINT8 pc8801_state::extract_text_attribute(UINT32 address,int x, UINT8 width, UINT8 &non_special) |
| 669 | 678 | { |
| 670 | | UINT8 *vram = machine().root_device().memregion("wram")->base(); |
| 679 | UINT8 *vram = m_work_ram; |
| 671 | 680 | int i; |
| 672 | 681 | int fifo_size; |
| 673 | 682 | int offset; |
| r20286 | r20287 | |
| 706 | 715 | void pc8801_state::pc8801_draw_char(bitmap_ind16 &bitmap,int x,int y,int pal,UINT8 gfx_mode,UINT8 reverse,UINT8 secret,UINT8 blink,UINT8 upper,UINT8 lower,int y_size,int width, UINT8 non_special) |
| 707 | 716 | { |
| 708 | 717 | int xi,yi; |
| 709 | | UINT8 *vram = machine().root_device().memregion("wram")->base(); |
| 710 | | UINT8 *gfx_rom = machine().root_device().memregion("gfx1")->base(); |
| 718 | UINT8 *vram = m_work_ram; |
| 711 | 719 | UINT8 is_cursor; |
| 712 | 720 | UINT8 y_height, y_double; |
| 713 | 721 | UINT8 y_step; |
| r20286 | r20287 | |
| 757 | 765 | if(yi >= (1 << (y_double+3)) || secret || blink_mask) |
| 758 | 766 | char_data = 0; |
| 759 | 767 | else |
| 760 | | char_data = (gfx_rom[tile*8+(yi >> y_double)] >> (7-xi)) & 1; |
| 768 | char_data = (m_cg_rom[tile*8+(yi >> y_double)] >> (7-xi)) & 1; |
| 761 | 769 | |
| 762 | 770 | if(yi == 0 && upper) |
| 763 | 771 | char_data = 1; |
| r20286 | r20287 | |
| 874 | 882 | READ8_MEMBER(pc8801_state::pc8801_alu_r) |
| 875 | 883 | { |
| 876 | 884 | int i; |
| 877 | | UINT8 *gvram = memregion("gvram")->base(); |
| 878 | 885 | UINT8 b,r,g; |
| 879 | 886 | |
| 880 | 887 | /* store data to ALU regs */ |
| 881 | 888 | for(i=0;i<3;i++) |
| 882 | | m_alu_reg[i] = gvram[i*0x4000 + offset]; |
| 889 | m_alu_reg[i] = m_gvram[i*0x4000 + offset]; |
| 883 | 890 | |
| 884 | | b = gvram[offset + 0x0000]; |
| 885 | | r = gvram[offset + 0x4000]; |
| 886 | | g = gvram[offset + 0x8000]; |
| 891 | b = m_gvram[offset + 0x0000]; |
| 892 | r = m_gvram[offset + 0x4000]; |
| 893 | g = m_gvram[offset + 0x8000]; |
| 887 | 894 | if(!(m_alu_ctrl2 & 1)) { b^=0xff; } |
| 888 | 895 | if(!(m_alu_ctrl2 & 2)) { r^=0xff; } |
| 889 | 896 | if(!(m_alu_ctrl2 & 4)) { g^=0xff; } |
| r20286 | r20287 | |
| 894 | 901 | WRITE8_MEMBER(pc8801_state::pc8801_alu_w) |
| 895 | 902 | { |
| 896 | 903 | int i; |
| 897 | | UINT8 *gvram = memregion("gvram")->base(); |
| 898 | 904 | |
| 899 | 905 | switch(m_alu_ctrl2 & 0x30) // alu write mode |
| 900 | 906 | { |
| r20286 | r20287 | |
| 908 | 914 | |
| 909 | 915 | switch(logic_op) |
| 910 | 916 | { |
| 911 | | case 0x00: { gvram[i*0x4000 + offset] &= ~data; } break; |
| 912 | | case 0x01: { gvram[i*0x4000 + offset] |= data; } break; |
| 913 | | case 0x10: { gvram[i*0x4000 + offset] ^= data; } break; |
| 917 | case 0x00: { m_gvram[i*0x4000 + offset] &= ~data; } break; |
| 918 | case 0x01: { m_gvram[i*0x4000 + offset] |= data; } break; |
| 919 | case 0x10: { m_gvram[i*0x4000 + offset] ^= data; } break; |
| 914 | 920 | case 0x11: break; // NOP |
| 915 | 921 | } |
| 916 | 922 | } |
| r20286 | r20287 | |
| 920 | 926 | case 0x10: // restore data from ALU regs |
| 921 | 927 | { |
| 922 | 928 | for(i=0;i<3;i++) |
| 923 | | gvram[i*0x4000 + offset] = m_alu_reg[i]; |
| 929 | m_gvram[i*0x4000 + offset] = m_alu_reg[i]; |
| 924 | 930 | } |
| 925 | 931 | break; |
| 926 | 932 | |
| 927 | 933 | case 0x20: // swap ALU reg 1 into R GVRAM |
| 928 | | gvram[0x0000 + offset] = m_alu_reg[1]; |
| 934 | m_gvram[0x0000 + offset] = m_alu_reg[1]; |
| 929 | 935 | break; |
| 930 | 936 | |
| 931 | 937 | case 0x30: // swap ALU reg 0 into B GVRAM |
| 932 | | gvram[0x4000 + offset] = m_alu_reg[0]; |
| 938 | m_gvram[0x4000 + offset] = m_alu_reg[0]; |
| 933 | 939 | break; |
| 934 | 940 | } |
| 935 | 941 | } |
| r20286 | r20287 | |
| 937 | 943 | |
| 938 | 944 | READ8_MEMBER(pc8801_state::pc8801_wram_r) |
| 939 | 945 | { |
| 940 | | UINT8 *work_ram = memregion("wram")->base(); |
| 941 | | |
| 942 | | return work_ram[offset]; |
| 946 | return m_work_ram[offset]; |
| 943 | 947 | } |
| 944 | 948 | |
| 945 | 949 | WRITE8_MEMBER(pc8801_state::pc8801_wram_w) |
| 946 | 950 | { |
| 947 | | UINT8 *work_ram = memregion("wram")->base(); |
| 948 | | |
| 949 | | work_ram[offset] = data; |
| 951 | m_work_ram[offset] = data; |
| 950 | 952 | } |
| 951 | 953 | |
| 952 | 954 | READ8_MEMBER(pc8801_state::pc8801_ext_wram_r) |
| 953 | 955 | { |
| 954 | | UINT8 *ext_work_ram = memregion("ewram")->base(); |
| 955 | | |
| 956 | 956 | if(offset < m_extram_size) |
| 957 | | return ext_work_ram[offset]; |
| 957 | return m_ext_work_ram[offset]; |
| 958 | 958 | |
| 959 | 959 | return 0xff; |
| 960 | 960 | } |
| 961 | 961 | |
| 962 | 962 | WRITE8_MEMBER(pc8801_state::pc8801_ext_wram_w) |
| 963 | 963 | { |
| 964 | | UINT8 *ext_work_ram = memregion("ewram")->base(); |
| 965 | | |
| 966 | 964 | if(offset < m_extram_size) |
| 967 | | ext_work_ram[offset] = data; |
| 965 | m_ext_work_ram[offset] = data; |
| 968 | 966 | } |
| 969 | 967 | |
| 970 | 968 | READ8_MEMBER(pc8801_state::pc8801_nbasic_rom_r) |
| 971 | 969 | { |
| 972 | | UINT8 *n80_rom = memregion("n80rom")->base(); |
| 973 | | |
| 974 | | return n80_rom[offset]; |
| 970 | return m_n80rom[offset]; |
| 975 | 971 | } |
| 976 | 972 | |
| 977 | 973 | READ8_MEMBER(pc8801_state::pc8801_n88basic_rom_r) |
| 978 | 974 | { |
| 979 | | UINT8 *n88_rom = memregion("n88rom")->base(); |
| 980 | | |
| 981 | | return n88_rom[offset]; |
| 975 | return m_n88rom[offset]; |
| 982 | 976 | } |
| 983 | 977 | |
| 984 | 978 | READ8_MEMBER(pc8801_state::pc8801_gvram_r) |
| 985 | 979 | { |
| 986 | | UINT8 *gvram = memregion("gvram")->base(); |
| 987 | | |
| 988 | | return gvram[offset]; |
| 980 | return m_gvram[offset]; |
| 989 | 981 | } |
| 990 | 982 | |
| 991 | 983 | WRITE8_MEMBER(pc8801_state::pc8801_gvram_w) |
| 992 | 984 | { |
| 993 | | UINT8 *gvram = memregion("gvram")->base(); |
| 994 | | |
| 995 | | gvram[offset] = data; |
| 985 | m_gvram[offset] = data; |
| 996 | 986 | } |
| 997 | 987 | |
| 998 | 988 | READ8_MEMBER(pc8801_state::pc8801_high_wram_r) |
| 999 | 989 | { |
| 1000 | | UINT8 *hi_work_ram = memregion("hiwram")->base(); |
| 1001 | | |
| 1002 | | return hi_work_ram[offset]; |
| 990 | return m_hi_work_ram[offset]; |
| 1003 | 991 | } |
| 1004 | 992 | |
| 1005 | 993 | WRITE8_MEMBER(pc8801_state::pc8801_high_wram_w) |
| 1006 | 994 | { |
| 1007 | | UINT8 *hi_work_ram = memregion("hiwram")->base(); |
| 1008 | | |
| 1009 | | hi_work_ram[offset] = data; |
| 995 | m_hi_work_ram[offset] = data; |
| 1010 | 996 | } |
| 1011 | 997 | |
| 1012 | 998 | READ8_MEMBER(pc8801_state::pc8801ma_dic_r) |
| r20286 | r20287 | |
| 1341 | 1327 | m_vrtc_irq_latch = 0; |
| 1342 | 1328 | |
| 1343 | 1329 | if(m_timer_irq_latch == 0 && m_vrtc_irq_latch == 0 && m_sound_irq_latch == 0) |
| 1344 | | machine().device("maincpu")->execute().set_input_line(0,CLEAR_LINE); |
| 1330 | m_maincpu->set_input_line(0,CLEAR_LINE); |
| 1345 | 1331 | |
| 1346 | 1332 | // IRQ_LOG(("%02x MASK (%02x %02x)\n",data,m_timer_irq_latch,m_vrtc_irq_latch)); |
| 1347 | 1333 | |
| r20286 | r20287 | |
| 1389 | 1375 | m_sound_irq_latch = 0; |
| 1390 | 1376 | |
| 1391 | 1377 | if(m_timer_irq_latch == 0 && m_vrtc_irq_latch == 0 && m_sound_irq_latch == 0) |
| 1392 | | machine().device("maincpu")->execute().set_input_line(0,CLEAR_LINE); |
| 1378 | m_maincpu->set_input_line(0,CLEAR_LINE); |
| 1393 | 1379 | |
| 1394 | 1380 | if(m_sound_irq_mask && m_sound_irq_pending) |
| 1395 | 1381 | { |
| 1396 | | machine().device("maincpu")->execute().set_input_line(0,HOLD_LINE); |
| 1382 | m_maincpu->set_input_line(0,HOLD_LINE); |
| 1397 | 1383 | m_sound_irq_latch = 1; |
| 1398 | 1384 | m_sound_irq_pending = 0; |
| 1399 | 1385 | } |
| r20286 | r20287 | |
| 1608 | 1594 | |
| 1609 | 1595 | READ8_MEMBER(pc8801_state::pc8801_kanji_r) |
| 1610 | 1596 | { |
| 1611 | | UINT8 *knj_rom = memregion("kanji")->base(); |
| 1612 | 1597 | if((offset & 2) == 0) |
| 1613 | | return knj_rom[m_knj_addr[0]*2+((offset & 1) ^ 1)]; |
| 1598 | return m_kanji_rom[m_knj_addr[0]*2+((offset & 1) ^ 1)]; |
| 1614 | 1599 | |
| 1615 | 1600 | return 0xff; |
| 1616 | 1601 | } |
| r20286 | r20287 | |
| 1623 | 1608 | |
| 1624 | 1609 | READ8_MEMBER(pc8801_state::pc8801_kanji_lv2_r) |
| 1625 | 1610 | { |
| 1626 | | UINT8 *knj_rom = memregion("kanji")->base() + 0x20000; |
| 1627 | 1611 | if((offset & 2) == 0) |
| 1628 | | return knj_rom[m_knj_addr[1]*2+((offset & 1) ^ 1)]; |
| 1612 | return m_kanji_rom[m_knj_addr[1]*2+((offset & 1) ^ 1)]; |
| 1629 | 1613 | |
| 1630 | 1614 | return 0xff; |
| 1631 | 1615 | } |
| r20286 | r20287 | |
| 1740 | 1724 | m_sound_irq_latch = 0; |
| 1741 | 1725 | |
| 1742 | 1726 | if(m_timer_irq_latch == 0 && m_vrtc_irq_latch == 0 && m_sound_irq_latch == 0) |
| 1743 | | machine().device("maincpu")->execute().set_input_line(0,CLEAR_LINE); |
| 1727 | m_maincpu->set_input_line(0,CLEAR_LINE); |
| 1744 | 1728 | |
| 1745 | 1729 | if(m_sound_irq_mask && m_sound_irq_pending) |
| 1746 | 1730 | { |
| 1747 | | machine().device("maincpu")->execute().set_input_line(0,HOLD_LINE); |
| 1731 | m_maincpu->set_input_line(0,HOLD_LINE); |
| 1748 | 1732 | m_sound_irq_latch = 1; |
| 1749 | 1733 | m_sound_irq_pending = 0; |
| 1750 | 1734 | } |
| r20286 | r20287 | |
| 2253 | 2237 | |
| 2254 | 2238 | /* debugging only */ |
| 2255 | 2239 | static GFXDECODE_START( pc8801 ) |
| 2256 | | GFXDECODE_ENTRY( "gfx1", 0, char_layout, 0, 8 ) |
| 2240 | GFXDECODE_ENTRY( "cgrom", 0, char_layout, 0, 8 ) |
| 2257 | 2241 | GFXDECODE_ENTRY( "kanji", 0, kanji_layout, 0, 8 ) |
| 2258 | 2242 | GFXDECODE_END |
| 2259 | 2243 | |
| r20286 | r20287 | |
| 2292 | 2276 | |
| 2293 | 2277 | drvstate->m_pic->r_w(~irq); |
| 2294 | 2278 | |
| 2295 | | machine.device("maincpu")->execute().set_input_line(0,ASSERT_LINE); |
| 2279 | m_maincpu->set_input_line(0,ASSERT_LINE); |
| 2296 | 2280 | } |
| 2297 | 2281 | else |
| 2298 | 2282 | { |
| 2299 | 2283 | //drvstate->m_int_state &= ~irq; |
| 2300 | 2284 | |
| 2301 | | //machine.device("maincpu")->execute().set_input_line(0,CLEAR_LINE); |
| 2285 | //m_maincpu->set_input_line(0,CLEAR_LINE); |
| 2302 | 2286 | } |
| 2303 | 2287 | } |
| 2304 | 2288 | |
| r20286 | r20287 | |
| 2330 | 2314 | UINT8 vector = (7 - state->m_pic->a_r()); |
| 2331 | 2315 | |
| 2332 | 2316 | state->m_int_state &= ~(1<<vector); |
| 2333 | | device->machine().device("maincpu")->execute().set_input_line(0,CLEAR_LINE); |
| 2317 | m_maincpu->set_input_line(0,CLEAR_LINE); |
| 2334 | 2318 | |
| 2335 | 2319 | return vector << 1; |
| 2336 | 2320 | } |
| r20286 | r20287 | |
| 2411 | 2395 | { |
| 2412 | 2396 | m_timer_irq_latch = 1; |
| 2413 | 2397 | //IRQ_LOG(("timer\n")); |
| 2414 | | machine().device("maincpu")->execute().set_input_line(0,HOLD_LINE); |
| 2398 | m_maincpu->set_input_line(0,HOLD_LINE); |
| 2415 | 2399 | } |
| 2416 | 2400 | } |
| 2417 | 2401 | |
| r20286 | r20287 | |
| 2421 | 2405 | { |
| 2422 | 2406 | m_vrtc_irq_latch = 1; |
| 2423 | 2407 | //IRQ_LOG(("vrtc\n")); |
| 2424 | | device.execute().set_input_line(0,HOLD_LINE); |
| 2408 | m_maincpu->set_input_line(0,HOLD_LINE); |
| 2425 | 2409 | } |
| 2426 | 2410 | } |
| 2427 | 2411 | #endif |
| 2428 | 2412 | |
| 2429 | 2413 | void pc8801_state::machine_start() |
| 2430 | 2414 | { |
| 2431 | | machine().device("maincpu")->execute().set_irq_acknowledge_callback(pc8801_irq_callback); |
| 2415 | m_maincpu->set_irq_acknowledge_callback(pc8801_irq_callback); |
| 2432 | 2416 | machine().device<upd765a_device>("upd765")->setup_intrq_cb(upd765a_device::line_cb(FUNC(pc8801_state::fdc_irq_w), this)); |
| 2433 | 2417 | |
| 2434 | 2418 | machine().device<floppy_connector>("upd765:0")->get_device()->set_rpm(300); |
| r20286 | r20287 | |
| 2437 | 2421 | |
| 2438 | 2422 | m_rtc->cs_w(1); |
| 2439 | 2423 | m_rtc->oe_w(1); |
| 2424 | |
| 2425 | m_work_ram = auto_alloc_array_clear(machine(), UINT8, 0x10000); |
| 2426 | m_hi_work_ram = auto_alloc_array_clear(machine(), UINT8, 0x1000); |
| 2427 | m_ext_work_ram = auto_alloc_array_clear(machine(), UINT8, 0x8000*0x100); |
| 2428 | m_gvram = auto_alloc_array_clear(machine(), UINT8, 0xc000); |
| 2429 | m_n80rom = memregion("n80rom")->base(); |
| 2430 | m_n88rom = memregion("n88rom")->base(); |
| 2431 | m_kanji_rom = memregion("kanji")->base(); |
| 2432 | m_cg_rom = memregion("cgrom")->base(); |
| 2433 | |
| 2434 | state_save_register_global_pointer(machine(), m_work_ram, 0x10000); |
| 2435 | state_save_register_global_pointer(machine(), m_hi_work_ram, 0x1000); |
| 2436 | state_save_register_global_pointer(machine(), m_ext_work_ram, 0x8000*0x100); |
| 2437 | state_save_register_global_pointer(machine(), m_gvram, 0xc000); |
| 2440 | 2438 | } |
| 2441 | 2439 | |
| 2442 | 2440 | void pc8801_state::machine_reset() |
| r20286 | r20287 | |
| 2530 | 2528 | m_has_clock_speed = 1; |
| 2531 | 2529 | m_clock_setting = machine().root_device().ioport("CFG")->read() & 0x80; |
| 2532 | 2530 | |
| 2533 | | machine().device("maincpu")->set_unscaled_clock(m_clock_setting ? XTAL_4MHz : XTAL_8MHz); |
| 2534 | | machine().device("fdccpu")->set_unscaled_clock(m_clock_setting ? XTAL_4MHz : XTAL_8MHz); // correct? |
| 2531 | m_maincpu->set_unscaled_clock(m_clock_setting ? XTAL_4MHz : XTAL_8MHz); |
| 2532 | m_fdccpu->set_unscaled_clock(m_clock_setting ? XTAL_4MHz : XTAL_8MHz); // correct? |
| 2535 | 2533 | m_baudrate_val = 0; |
| 2536 | 2534 | } |
| 2537 | 2535 | |
| r20286 | r20287 | |
| 2732 | 2730 | MACHINE_CONFIG_END |
| 2733 | 2731 | |
| 2734 | 2732 | |
| 2735 | | /* ROMs */ |
| 2733 | /* TODO: clean this up */ |
| 2736 | 2734 | #define PC8801_MEM_LOAD \ |
| 2737 | | ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) \ |
| 2738 | | ROM_REGION( 0x10000, "wram", ROMREGION_ERASE00 ) \ |
| 2739 | | ROM_REGION( 0x1000, "hiwram", ROMREGION_ERASE00 ) \ |
| 2740 | | ROM_REGION( 0x8000*0x100, "ewram", ROMREGION_ERASE00 ) \ |
| 2741 | | ROM_REGION( 0xc000, "gvram", ROMREGION_ERASE00 ) \ |
| 2742 | 2735 | ROM_REGION( 0x100000, "opna", ROMREGION_ERASE00 ) |
| 2743 | 2736 | |
| 2744 | 2737 | |
| r20286 | r20287 | |
| 2758 | 2751 | ROM_REGION( 0x40000, "kanji", ROMREGION_ERASEFF) |
| 2759 | 2752 | ROM_LOAD_OPTIONAL( "kanji1.rom", 0x00000, 0x20000, CRC(6178bd43) SHA1(82e11a177af6a5091dd67f50a2f4bafda84d6556) ) |
| 2760 | 2753 | |
| 2761 | | ROM_REGION( 0x800, "gfx1", 0) |
| 2754 | ROM_REGION( 0x800, "cgrom", 0) |
| 2762 | 2755 | ROM_LOAD( "font.rom", 0x0000, 0x0800, CRC(56653188) SHA1(84b90f69671d4b72e8f219e1fe7cd667e976cf7f) ) |
| 2763 | 2756 | ROM_END |
| 2764 | 2757 | |
| r20286 | r20287 | |
| 2780 | 2773 | ROM_REGION( 0x40000, "kanji", ROMREGION_ERASEFF) |
| 2781 | 2774 | ROM_LOAD_OPTIONAL( "kanji1.rom", 0x00000, 0x20000, CRC(6178bd43) SHA1(82e11a177af6a5091dd67f50a2f4bafda84d6556) ) |
| 2782 | 2775 | |
| 2783 | | ROM_REGION( 0x800, "gfx1", 0) |
| 2776 | ROM_REGION( 0x800, "cgrom", 0) |
| 2784 | 2777 | ROM_COPY( "kanji", 0x1000, 0x0000, 0x800 ) |
| 2785 | 2778 | ROM_END |
| 2786 | 2779 | |
| r20286 | r20287 | |
| 2808 | 2801 | ROM_LOAD( "kanji1.rom", 0x00000, 0x20000, CRC(6178bd43) SHA1(82e11a177af6a5091dd67f50a2f4bafda84d6556) ) |
| 2809 | 2802 | ROM_LOAD( "kanji2.rom", 0x20000, 0x20000, CRC(154803cc) SHA1(7e6591cd465cbb35d6d3446c5a83b46d30fafe95) ) // it should not be here |
| 2810 | 2803 | |
| 2811 | | ROM_REGION( 0x800, "gfx1", 0) |
| 2804 | ROM_REGION( 0x800, "cgrom", 0) |
| 2812 | 2805 | ROM_COPY( "kanji", 0x1000, 0x0000, 0x800 ) |
| 2813 | 2806 | ROM_END |
| 2814 | 2807 | |
| r20286 | r20287 | |
| 2835 | 2828 | ROM_REGION( 0x40000, "kanji", 0) |
| 2836 | 2829 | ROM_LOAD( "kanji1.rom", 0x00000, 0x20000, CRC(6178bd43) SHA1(82e11a177af6a5091dd67f50a2f4bafda84d6556) ) |
| 2837 | 2830 | |
| 2838 | | ROM_REGION( 0x800, "gfx1", 0) |
| 2831 | ROM_REGION( 0x800, "cgrom", 0) |
| 2839 | 2832 | ROM_COPY( "kanji", 0x1000, 0x0000, 0x800 ) |
| 2840 | 2833 | ROM_END |
| 2841 | 2834 | |
| r20286 | r20287 | |
| 2863 | 2856 | ROM_LOAD( "kanji1.rom", 0x00000, 0x20000, CRC(6178bd43) SHA1(82e11a177af6a5091dd67f50a2f4bafda84d6556) ) |
| 2864 | 2857 | ROM_LOAD( "m2mr_kanji2.rom", 0x20000, 0x20000, CRC(376eb677) SHA1(bcf96584e2ba362218b813be51ea21573d1a2a78) ) |
| 2865 | 2858 | |
| 2866 | | ROM_REGION( 0x800, "gfx1", 0) |
| 2859 | ROM_REGION( 0x800, "cgrom", 0) |
| 2867 | 2860 | ROM_COPY( "kanji", 0x1000, 0x0000, 0x800 ) |
| 2868 | 2861 | ROM_END |
| 2869 | 2862 | |
| r20286 | r20287 | |
| 2891 | 2884 | ROM_LOAD( "kanji1.rom", 0x00000, 0x20000, CRC(6178bd43) SHA1(82e11a177af6a5091dd67f50a2f4bafda84d6556) ) |
| 2892 | 2885 | ROM_LOAD( "mh_kanji2.rom", 0x20000, 0x20000, CRC(376eb677) SHA1(bcf96584e2ba362218b813be51ea21573d1a2a78) ) |
| 2893 | 2886 | |
| 2894 | | ROM_REGION( 0x800, "gfx1", 0) |
| 2887 | ROM_REGION( 0x800, "cgrom", 0) |
| 2895 | 2888 | ROM_COPY( "kanji", 0x1000, 0x0000, 0x0800 ) |
| 2896 | 2889 | ROM_END |
| 2897 | 2890 | |
| r20286 | r20287 | |
| 2919 | 2912 | ROM_LOAD( "kanji1.rom", 0x00000, 0x20000, CRC(6178bd43) SHA1(82e11a177af6a5091dd67f50a2f4bafda84d6556) ) |
| 2920 | 2913 | ROM_LOAD( "fa_kanji2.rom", 0x20000, 0x20000, CRC(376eb677) SHA1(bcf96584e2ba362218b813be51ea21573d1a2a78) ) |
| 2921 | 2914 | |
| 2922 | | ROM_REGION( 0x800, "gfx1", 0) |
| 2915 | ROM_REGION( 0x800, "cgrom", 0) |
| 2923 | 2916 | ROM_COPY( "kanji", 0x1000, 0x0000, 0x0800 ) |
| 2924 | 2917 | ROM_END |
| 2925 | 2918 | |
| r20286 | r20287 | |
| 2947 | 2940 | ROM_LOAD( "kanji1.rom", 0x00000, 0x20000, CRC(6178bd43) SHA1(82e11a177af6a5091dd67f50a2f4bafda84d6556) ) |
| 2948 | 2941 | ROM_LOAD( "ma_kanji2.rom", 0x20000, 0x20000, CRC(376eb677) SHA1(bcf96584e2ba362218b813be51ea21573d1a2a78) ) |
| 2949 | 2942 | |
| 2950 | | ROM_REGION( 0x800, "gfx1", 0) |
| 2943 | ROM_REGION( 0x800, "cgrom", 0) |
| 2951 | 2944 | ROM_COPY( "kanji", 0x1000, 0x0000, 0x0800 ) |
| 2952 | 2945 | |
| 2953 | 2946 | /* 32 banks, to be loaded at 0xc000 - 0xffff */ |
| r20286 | r20287 | |
| 2979 | 2972 | ROM_LOAD( "kanji1.rom", 0x00000, 0x20000, CRC(6178bd43) SHA1(82e11a177af6a5091dd67f50a2f4bafda84d6556) ) |
| 2980 | 2973 | ROM_LOAD( "ma2_kanji2.rom", 0x20000, 0x20000, CRC(376eb677) SHA1(bcf96584e2ba362218b813be51ea21573d1a2a78) ) |
| 2981 | 2974 | |
| 2982 | | ROM_REGION( 0x800, "gfx1", 0) |
| 2975 | ROM_REGION( 0x800, "cgrom", 0) |
| 2983 | 2976 | ROM_COPY( "kanji", 0x1000, 0x0000, 0x0800 ) |
| 2984 | 2977 | |
| 2985 | 2978 | ROM_REGION( 0x80000, "dictionary", 0 ) |
| r20286 | r20287 | |
| 3013 | 3006 | ROM_LOAD( "kanji1.rom", 0x00000, 0x20000, CRC(6178bd43) SHA1(82e11a177af6a5091dd67f50a2f4bafda84d6556) ) |
| 3014 | 3007 | ROM_LOAD( "mc_kanji2.rom", 0x20000, 0x20000, CRC(376eb677) SHA1(bcf96584e2ba362218b813be51ea21573d1a2a78) ) |
| 3015 | 3008 | |
| 3016 | | ROM_REGION( 0x800, "gfx1", 0) |
| 3009 | ROM_REGION( 0x800, "cgrom", 0) |
| 3017 | 3010 | ROM_COPY( "kanji", 0x1000, 0x0000, 0x0800 ) |
| 3018 | 3011 | |
| 3019 | 3012 | ROM_REGION( 0x80000, "dictionary", 0 ) |