src/mess/drivers/pc6001.c
| r8753 | r8754 | |
| 2 | 2 | |
| 3 | 3 | PC-6001 series (c) 1981 NEC |
| 4 | 4 | |
| 5 | | preliminary driver by Angelo Salese |
| 5 | driver by Angelo Salese |
| 6 | 6 | |
| 7 | 7 | TODO: |
| 8 | 8 | - Hook up tape loading, images that are floating around the net are already |
| r8753 | r8754 | |
| 10 | 10 | - cassette handling requires a decap of the MCU. It could be possible to |
| 11 | 11 | do some tight synch between the master CPU and a code simulation,but I think |
| 12 | 12 | it's not worth the effort... |
| 13 | | - make PC-6600 model to work; |
| 13 | - Identify and hook-up the FDC device, apparently PC-6001 and PC-6600 doesn't even use the same thing; |
| 14 | - PC-6600: mon r-0 type games doesn't seem to work at all on this version? |
| 14 | 15 | - Currently rewriting the video part without the MC6847 for two reasons: |
| 15 | 16 | A) the later models have a custom video chip in the place of the MC6847, |
| 16 | 17 | so this implementation will be used in the end. |
| r8753 | r8754 | |
| 31 | 32 | doesn't seem to work too well with halt opcode execution? |
| 32 | 33 | - Dezeni Land 1/4: dies after loading of main program |
| 33 | 34 | - Dezeni Land 2: dies at the "load something" screen with presumably wrong stack opcodes |
| 34 | | - Forts 1: refuses to run, bad dump? |
| 35 | | - Forts 2: ASCII gfxs are missing; |
| 35 | - (MyCom BASIC games with multiple files): most of them refuses to run ... how to load them? |
| 36 | 36 | - Grobda: when "get ready" speech plays, screen should be full white but instead it's all black, same issue as AX-6 Demo? |
| 37 | 37 | - Pac-Man / Tiny Xevious 2: gameplay is too fast |
| 38 | 38 | - Salad no Kunino Tomato-Hime: can't start a play |
| 39 | 39 | - Space Harrier: inputs doesn't work properly |
| 40 | | - The Black Onyx: dies because it wants to save on the tape |
| 41 | | - Yakyukyo: waits for an irq, check which one; |
| 40 | - The Black Onyx: dies when it attempts to save the character, that obviously means saving on the tape |
| 41 | - Yakyukyo / Punchball Mario: waits for an irq, check which one; |
| 42 | 42 | |
| 43 | 43 | ======================================================================================================================================================== |
| 44 | 44 | |
| r8753 | r8754 | |
| 145 | 145 | static UINT8 ex_vram_bank, bgcol_bank,exgfx_text_mode,exgfx_bitmap_mode,exgfx_2bpp_mode; |
| 146 | 146 | static UINT8 bank_r0,bank_r1,gfx_bank_on,bank_w,bank_opt; |
| 147 | 147 | static UINT8 timer_irq_mask2, timer_irq_vector; |
| 148 | static UINT32 cgrom_bank_addr; |
| 148 | 149 | |
| 149 | | //#define CAS_LENGTH 0x1655 |
| 150 | #define IRQ_LOG (0) |
| 150 | 151 | |
| 151 | 152 | static VIDEO_START( pc6001 ) |
| 152 | 153 | { |
| r8753 | r8754 | |
| 849 | 850 | if(!gfx_bank_on) |
| 850 | 851 | memory_set_bankptr(space->machine, "bank4", &ROM[banksw_table_r0[((bank_r0 & 0xf0)>>4)+(bank_opt*0x10)][3]]); |
| 851 | 852 | else |
| 852 | | memory_set_bankptr(space->machine, "bank4", &gfx_data[0x2000]); //FIXME: check this (CGROM 1/2?) |
| 853 | memory_set_bankptr(space->machine, "bank4", &gfx_data[cgrom_bank_addr]); |
| 853 | 854 | } |
| 854 | 855 | |
| 855 | 856 | static WRITE8_HANDLER( pc6001m2_bank_r1_w ) |
| r8753 | r8754 | |
| 892 | 893 | if(!gfx_bank_on) |
| 893 | 894 | memory_set_bankptr(space->machine, "bank4", &ROM[banksw_table_r0[((bank_r0 & 0xf0)>>4)+(bank_opt*0x10)][3]]); |
| 894 | 895 | else |
| 895 | | memory_set_bankptr(space->machine, "bank4", &gfx_data[0x2000]); //FIXME: check this (CGROM 1/2?) |
| 896 | memory_set_bankptr(space->machine, "bank4", &gfx_data[cgrom_bank_addr]); |
| 896 | 897 | memory_set_bankptr(space->machine, "bank4", &ROM[banksw_table_r0[((bank_r0 & 0xf0)>>4)+(bank_opt*0x10)][3]]); |
| 897 | 898 | memory_set_bankptr(space->machine, "bank5", &ROM[banksw_table_r1[(bank_r1 & 0xf)+(bank_opt*0x10)][0]]); |
| 898 | 899 | memory_set_bankptr(space->machine, "bank6", &ROM[banksw_table_r1[(bank_r1 & 0xf)+(bank_opt*0x10)][1]]); |
| r8753 | r8754 | |
| 943 | 944 | if((data & 0x0f) == 0x04) |
| 944 | 945 | { |
| 945 | 946 | gfx_bank_on = 1; |
| 946 | | memory_set_bankptr(device->machine, "bank4", &gfx_data[0x2000]); //FIXME: check this (CGROM 1/2?) |
| 947 | memory_set_bankptr(device->machine, "bank4", &gfx_data[cgrom_bank_addr]); |
| 947 | 948 | } |
| 948 | 949 | } |
| 949 | 950 | } |
| r8753 | r8754 | |
| 995 | 996 | } |
| 996 | 997 | |
| 997 | 998 | sys_latch = data; |
| 999 | |
| 998 | 1000 | timer_irq_mask = data & 1; |
| 999 | 1001 | vram_bank_change(space->machine,(ex_vram_bank & 0x06) | ((sys_latch & 0x06) << 4)); |
| 1000 | 1002 | |
| r8753 | r8754 | |
| 1010 | 1012 | vram_bank_change(space->machine,(ex_vram_bank & 0x06) | ((sys_latch & 0x06) << 4)); |
| 1011 | 1013 | |
| 1012 | 1014 | exgfx_text_mode = ((data & 2) == 0); |
| 1015 | cgrom_bank_addr = (data & 2) ? 0x0000 : 0x2000; |
| 1013 | 1016 | |
| 1014 | 1017 | exgfx_bitmap_mode = (data & 8); |
| 1015 | 1018 | exgfx_2bpp_mode = ((data & 6) == 0); |
| r8753 | r8754 | |
| 1098 | 1101 | { |
| 1099 | 1102 | if(cas_switch == 0 && ((timer_irq_mask == 0) || (timer_irq_mask2 == 0))) |
| 1100 | 1103 | { |
| 1104 | if(IRQ_LOG) printf("Timer IRQ called %02x\n",timer_irq_vector); |
| 1101 | 1105 | irq_vector = timer_irq_vector; |
| 1102 | 1106 | cputag_set_input_line(machine,"maincpu", 0, ASSERT_LINE); |
| 1103 | 1107 | } |
| r8753 | r8754 | |
| 1131 | 1135 | return bank_w; |
| 1132 | 1136 | } |
| 1133 | 1137 | |
| 1134 | | |
| 1135 | 1138 | static ADDRESS_MAP_START(pc6001m2_map, ADDRESS_SPACE_PROGRAM, 8) |
| 1136 | 1139 | ADDRESS_MAP_UNMAP_HIGH |
| 1137 | 1140 | AM_RANGE(0x0000, 0x1fff) AM_ROMBANK("bank1") AM_WRITE(work_ram0_w) |
| r8753 | r8754 | |
| 1167 | 1170 | |
| 1168 | 1171 | AM_RANGE(0xe0, 0xe3) AM_MIRROR(0x0c) AM_READWRITE(upd7752_reg_r,upd7752_reg_w) |
| 1169 | 1172 | |
| 1170 | | AM_RANGE(0xf0, 0xf0) AM_READ(pc6001m2_bank_r0_r) AM_WRITE(pc6001m2_bank_r0_w) |
| 1171 | | AM_RANGE(0xf1, 0xf1) AM_READ(pc6001m2_bank_r1_r) AM_WRITE(pc6001m2_bank_r1_w) |
| 1172 | | AM_RANGE(0xf2, 0xf2) AM_READ(pc6001m2_bank_w0_r) AM_WRITE(pc6001m2_bank_w0_w) |
| 1173 | AM_RANGE(0xf0, 0xf0) AM_READWRITE(pc6001m2_bank_r0_r,pc6001m2_bank_r0_w) |
| 1174 | AM_RANGE(0xf1, 0xf1) AM_READWRITE(pc6001m2_bank_r1_r,pc6001m2_bank_r1_w) |
| 1175 | AM_RANGE(0xf2, 0xf2) AM_READWRITE(pc6001m2_bank_w0_r,pc6001m2_bank_w0_w) |
| 1173 | 1176 | AM_RANGE(0xf3, 0xf3) AM_WRITE(pc6001m2_0xf3_w) |
| 1174 | 1177 | // AM_RANGE(0xf4 |
| 1175 | 1178 | // AM_RANGE(0xf5 |
| r8753 | r8754 | |
| 1177 | 1180 | AM_RANGE(0xf7, 0xf7) AM_WRITE(pc6001m2_timer_irqv_w) |
| 1178 | 1181 | ADDRESS_MAP_END |
| 1179 | 1182 | |
| 1183 | /* disk device placeholder (TODO: identify & hook-up this) */ |
| 1184 | static READ8_HANDLER( pc6600_fdc_r ) |
| 1185 | { |
| 1186 | return mame_rand(space->machine); |
| 1187 | } |
| 1188 | |
| 1189 | static WRITE8_HANDLER( pc6600_fdc_w ) |
| 1190 | { |
| 1191 | } |
| 1192 | |
| 1193 | |
| 1194 | static ADDRESS_MAP_START( pc6600_io , ADDRESS_SPACE_IO, 8) |
| 1195 | ADDRESS_MAP_UNMAP_HIGH |
| 1196 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 1197 | AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("uart", msm8251_data_r,msm8251_data_w) |
| 1198 | AM_RANGE(0x81, 0x81) AM_DEVREADWRITE("uart", msm8251_status_r,msm8251_control_w) |
| 1199 | |
| 1200 | AM_RANGE(0x90, 0x93) AM_MIRROR(0x0c) AM_DEVREADWRITE("ppi8255", nec_ppi8255_r, necmk2_ppi8255_w) |
| 1201 | |
| 1202 | AM_RANGE(0xa0, 0xa0) AM_MIRROR(0x0c) AM_DEVWRITE("ay8910", ay8910_address_w) |
| 1203 | AM_RANGE(0xa1, 0xa1) AM_MIRROR(0x0c) AM_DEVWRITE("ay8910", ay8910_data_w) |
| 1204 | AM_RANGE(0xa2, 0xa2) AM_MIRROR(0x0c) AM_DEVREAD("ay8910", ay8910_r) |
| 1205 | AM_RANGE(0xa3, 0xa3) AM_MIRROR(0x0c) AM_NOP |
| 1206 | |
| 1207 | AM_RANGE(0xb0, 0xb0) AM_WRITE(pc6001m2_system_latch_w) |
| 1208 | /* these are disk related */ |
| 1209 | // AM_RANGE(0xb1 |
| 1210 | // AM_RANGE(0xb2 |
| 1211 | // AM_RANGE(0xb3 |
| 1212 | |
| 1213 | AM_RANGE(0xc0, 0xc0) AM_WRITE(pc6001m2_col_bank_w) |
| 1214 | AM_RANGE(0xc1, 0xc1) AM_WRITE(pc6001m2_vram_bank_w) |
| 1215 | AM_RANGE(0xc2, 0xc2) AM_WRITE(pc6001m2_opt_bank_w) |
| 1216 | |
| 1217 | AM_RANGE(0xd0, 0xdf) AM_READWRITE(pc6600_fdc_r,pc6600_fdc_w) // disk device |
| 1218 | |
| 1219 | AM_RANGE(0xe0, 0xe3) AM_MIRROR(0x0c) AM_READWRITE(upd7752_reg_r,upd7752_reg_w) |
| 1220 | |
| 1221 | AM_RANGE(0xf0, 0xf0) AM_READWRITE(pc6001m2_bank_r0_r,pc6001m2_bank_r0_w) |
| 1222 | AM_RANGE(0xf1, 0xf1) AM_READWRITE(pc6001m2_bank_r1_r,pc6001m2_bank_r1_w) |
| 1223 | AM_RANGE(0xf2, 0xf2) AM_READWRITE(pc6001m2_bank_w0_r,pc6001m2_bank_w0_w) |
| 1224 | AM_RANGE(0xf3, 0xf3) AM_WRITE(pc6001m2_0xf3_w) |
| 1225 | // AM_RANGE(0xf4 |
| 1226 | // AM_RANGE(0xf5 |
| 1227 | AM_RANGE(0xf6, 0xf6) AM_WRITE(pc6001m2_timer_adj_w) |
| 1228 | AM_RANGE(0xf7, 0xf7) AM_WRITE(pc6001m2_timer_irqv_w) |
| 1229 | ADDRESS_MAP_END |
| 1230 | |
| 1180 | 1231 | /* Input ports */ |
| 1181 | 1232 | static INPUT_PORTS_START( pc6001 ) |
| 1182 | 1233 | PORT_START("MODE4_DSW") //TODO: is this really a DSW? bit arrangement is also unknown if so. |
| r8753 | r8754 | |
| 1319 | 1370 | PORT_BIT(0x00000004,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("KANA") PORT_CODE(KEYCODE_RCONTROL) PORT_TOGGLE |
| 1320 | 1371 | PORT_BIT(0x00000008,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("CAPS") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE |
| 1321 | 1372 | PORT_BIT(0x00000010,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("GRPH") PORT_CODE(KEYCODE_LALT) |
| 1373 | PORT_BIT(0x00000020,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("STOP") PORT_CODE(KEYCODE_ESC) |
| 1322 | 1374 | INPUT_PORTS_END |
| 1323 | 1375 | |
| 1324 | 1376 | static UINT8 check_joy_press(running_machine *machine); |
| r8753 | r8754 | |
| 1326 | 1378 | static INTERRUPT_GEN( pc6001_interrupt ) |
| 1327 | 1379 | { |
| 1328 | 1380 | cur_keycode = check_joy_press(device->machine); |
| 1381 | if(IRQ_LOG) printf("Stick IRQ called 0x16\n"); |
| 1329 | 1382 | irq_vector = 0x16; |
| 1330 | 1383 | cpu_set_input_line(device, 0, ASSERT_LINE); |
| 1331 | 1384 | } |
| r8753 | r8754 | |
| 1440 | 1493 | static UINT8 check_joy_press(running_machine *machine) |
| 1441 | 1494 | { |
| 1442 | 1495 | UINT8 p1_key = input_port_read(machine,"P1") ^ 0xff; |
| 1496 | UINT8 shift_key = input_port_read(machine,"key_modifiers") & 0x02; |
| 1497 | UINT8 space_key = input_port_read(machine,"key2") & 0x01; |
| 1498 | |
| 1443 | 1499 | static UINT8 joy_press; |
| 1444 | 1500 | |
| 1445 | 1501 | /* |
| r8753 | r8754 | |
| 1467 | 1523 | case 0x0a: joy_press = 0x18; break; //down-right |
| 1468 | 1524 | } |
| 1469 | 1525 | |
| 1470 | | if(p1_key & 0x10) { joy_press |= 0x80; } //button 1 (space?) |
| 1471 | | if(p1_key & 0x20) { joy_press |= 0x01; } //button 2 (shift) |
| 1526 | if(p1_key & 0x10 || space_key) { joy_press |= 0x80; } //button 1 (space) |
| 1527 | if(p1_key & 0x20 || shift_key) { joy_press |= 0x01; } //button 2 (shift) |
| 1472 | 1528 | |
| 1473 | 1529 | return joy_press; |
| 1474 | 1530 | } |
| r8753 | r8754 | |
| 1503 | 1559 | { |
| 1504 | 1560 | cas_offset = 0; |
| 1505 | 1561 | cas_switch = 0; |
| 1562 | if(IRQ_LOG) printf("Tape-E IRQ 0x12\n"); |
| 1506 | 1563 | irq_vector = 0x12; |
| 1507 | 1564 | cputag_set_input_line(machine,"maincpu", 0, ASSERT_LINE); |
| 1508 | 1565 | } |
| 1509 | 1566 | else |
| 1510 | 1567 | { |
| 1568 | if(IRQ_LOG) printf("Tape-D IRQ 0x08\n"); |
| 1511 | 1569 | irq_vector = 0x08; |
| 1512 | 1570 | cputag_set_input_line(machine,"maincpu", 0, ASSERT_LINE); |
| 1513 | 1571 | } |
| r8753 | r8754 | |
| 1529 | 1587 | if((key1 != old_key1) || (key2 != old_key2) || (key3 != old_key3)) |
| 1530 | 1588 | { |
| 1531 | 1589 | cur_keycode = check_keyboard_press(space->machine); |
| 1590 | if(IRQ_LOG) printf("KEY IRQ 0x02\n"); |
| 1532 | 1591 | irq_vector = 0x02; |
| 1533 | 1592 | cputag_set_input_line(machine,"maincpu", 0, ASSERT_LINE); |
| 1534 | 1593 | old_key1 = key1; |
| r8753 | r8754 | |
| 1596 | 1655 | /* set default bankswitch */ |
| 1597 | 1656 | { |
| 1598 | 1657 | UINT8 *ROM = memory_region(machine, "maincpu"); |
| 1599 | | bank_r0 = 0x01; |
| 1658 | bank_r0 = 0x71; |
| 1600 | 1659 | memory_set_bankptr(machine, "bank1", &ROM[BASICROM(0)]); |
| 1601 | 1660 | memory_set_bankptr(machine, "bank2", &ROM[BASICROM(1)]); |
| 1602 | | memory_set_bankptr(machine, "bank3", &ROM[INVALID(0)]); |
| 1603 | | memory_set_bankptr(machine, "bank4", &ROM[INVALID(0)]); |
| 1661 | memory_set_bankptr(machine, "bank3", &ROM[EXROM(0)]); |
| 1662 | memory_set_bankptr(machine, "bank4", &ROM[EXROM(1)]); |
| 1604 | 1663 | bank_r1 = 0xdd; |
| 1605 | 1664 | memory_set_bankptr(machine, "bank5", &ROM[WRAM(4)]); |
| 1606 | 1665 | memory_set_bankptr(machine, "bank6", &ROM[WRAM(5)]); |
| 1607 | 1666 | memory_set_bankptr(machine, "bank7", &ROM[WRAM(6)]); |
| 1608 | 1667 | memory_set_bankptr(machine, "bank8", &ROM[WRAM(7)]); |
| 1609 | 1668 | bank_opt = 0x02; //tv rom |
| 1610 | | bank_w = 0x55; //write to work ram |
| 1669 | bank_w = 0x50; //enable write to work ram 4,5,6,7 |
| 1611 | 1670 | gfx_bank_on = 0; |
| 1612 | 1671 | } |
| 1613 | 1672 | |
| r8753 | r8754 | |
| 1738 | 1797 | MDRV_CPU_VBLANK_INT("screen", pc6001_interrupt) |
| 1739 | 1798 | |
| 1740 | 1799 | // MDRV_CPU_ADD("subcpu", I8049, 7987200) |
| 1800 | |
| 1741 | 1801 | MDRV_MACHINE_START(pc6001) |
| 1742 | 1802 | MDRV_MACHINE_RESET(pc6001) |
| 1743 | 1803 | |
| 1744 | 1804 | MDRV_GFXDECODE(pc6001m2) |
| 1745 | 1805 | |
| 1746 | | |
| 1747 | 1806 | /* video hardware */ |
| 1748 | 1807 | MDRV_SCREEN_ADD("screen", RASTER) |
| 1749 | 1808 | MDRV_SCREEN_REFRESH_RATE(60) |
| r8753 | r8754 | |
| 1801 | 1860 | |
| 1802 | 1861 | MACHINE_DRIVER_END |
| 1803 | 1862 | |
| 1804 | | static MACHINE_DRIVER_START( pc6001sr ) |
| 1863 | static MACHINE_DRIVER_START( pc6600 ) |
| 1805 | 1864 | MDRV_IMPORT_FROM(pc6001m2) |
| 1806 | 1865 | |
| 1807 | 1866 | /* basic machine hardware */ |
| 1808 | | MDRV_CPU_REPLACE("maincpu", Z80, XTAL_3_579545MHz) //*Yes*, PC-6001 SR Z80 CPU is actually slower than older models |
| 1867 | MDRV_CPU_REPLACE("maincpu", Z80, XTAL_3_579545MHz) //*Yes*, PC-6600 Z80 CPU is actually slower than older models |
| 1868 | MDRV_CPU_PROGRAM_MAP(pc6001m2_map) |
| 1869 | MDRV_CPU_IO_MAP(pc6600_io) |
| 1870 | MDRV_CPU_VBLANK_INT("screen", pc6001_interrupt) |
| 1809 | 1871 | MACHINE_DRIVER_END |
| 1810 | 1872 | |
| 1811 | 1873 | /* ROM definition */ |
| r8753 | r8754 | |
| 1823 | 1885 | ROM_REGION( 0x20000, "cas", ROMREGION_ERASEFF ) |
| 1824 | 1886 | |
| 1825 | 1887 | ROM_REGION( 0x4000, "cart_img", ROMREGION_ERASE00 ) |
| 1826 | | ROM_CART_LOAD("cart", 0x0000, 0x3fff, ROM_OPTIONAL | ROM_MIRROR) |
| 1888 | ROM_CART_LOAD("cart", 0x0000, 0x4000, ROM_OPTIONAL | ROM_MIRROR) |
| 1827 | 1889 | ROM_END |
| 1828 | 1890 | |
| 1829 | 1891 | ROM_START( pc6001a ) |
| r8753 | r8754 | |
| 1841 | 1903 | ROM_REGION( 0x20000, "cas", ROMREGION_ERASEFF ) |
| 1842 | 1904 | |
| 1843 | 1905 | ROM_REGION( 0x4000, "cart_img", ROMREGION_ERASE00 ) |
| 1844 | | ROM_CART_LOAD("cart", 0x0000, 0x3fff, ROM_OPTIONAL | ROM_MIRROR) |
| 1906 | ROM_CART_LOAD("cart", 0x0000, 0x4000, ROM_OPTIONAL | ROM_MIRROR) |
| 1845 | 1907 | ROM_END |
| 1846 | 1908 | |
| 1847 | 1909 | ROM_START( pc6001m2 ) |
| r8753 | r8754 | |
| 1871 | 1933 | ROM_COPY( "maincpu", 0x48000, 0x0000, 0x4000 ) |
| 1872 | 1934 | ROM_END |
| 1873 | 1935 | |
| 1874 | | ROM_START( pc6600 ) /* Variant of pc6001m2 */ |
| 1875 | | ROM_REGION( 0x48000, "maincpu", ROMREGION_ERASEFF ) |
| 1876 | | ROM_LOAD( "basicrom.66", 0x10000, 0x8000, CRC(c0b01772) SHA1(9240bb6b97fe06f5f07b5d65541c4d2f8758cc2a) ) |
| 1877 | | ROM_LOAD( "voicerom.66", 0x18000, 0x4000, CRC(91d078c1) SHA1(6a93bd7723ef67f461394530a9feee57c8caf7b7) ) |
| 1878 | | ROM_LOAD( "cgrom60.66", 0x1c000, 0x2000, CRC(d2434f29) SHA1(a56d76f5cbdbcdb8759abe601eab68f01b0a8fe8) ) |
| 1879 | | ROM_LOAD( "cgrom66.66", 0x1e000, 0x2000, CRC(3ce48c33) SHA1(f3b6c63e83a17d80dde63c6e4d86adbc26f84f79) ) |
| 1880 | | ROM_LOAD( "kanjirom.66", 0x20000, 0x8000, CRC(20c8f3eb) SHA1(4c9f30f0a2ebbe70aa8e697f94eac74d8241cadd) ) |
| 1936 | ROM_START( pc6001sr ) |
| 1937 | ROM_REGION( 0x50000, "maincpu", ROMREGION_ERASEFF ) |
| 1938 | /* If you split this into 4x 8000, the first 3 need to load to 0-7FFF (via bankswitch). The 4th part looks like gfx data */ |
| 1939 | ROM_LOAD( "systemrom1.64", 0x10000, 0x10000, CRC(b6fc2db2) SHA1(dd48b1eee60aa34780f153359f5da7f590f8dff4) ) |
| 1940 | ROM_LOAD( "systemrom2.64", 0x20000, 0x10000, CRC(55a62a1d) SHA1(3a19855d290fd4ac04e6066fe4a80ecd81dc8dd7) ) |
| 1941 | ROM_CART_LOAD("cart", 0x48000, 0x4000, ROM_OPTIONAL | ROM_MIRROR) |
| 1881 | 1942 | |
| 1882 | 1943 | ROM_REGION( 0x1000, "mcu", ROMREGION_ERASEFF ) |
| 1883 | 1944 | ROM_LOAD( "i8049", 0x0000, 0x1000, NO_DUMP ) |
| 1884 | 1945 | |
| 1885 | 1946 | ROM_REGION( 0x4000, "gfx1", 0 ) |
| 1886 | | ROM_COPY( "maincpu", 0x1c000, 0x00000, 0x4000 ) |
| 1947 | ROM_LOAD( "cgrom68.64", 0x0000, 0x4000, CRC(73bc3256) SHA1(5f80d62a95331dc39b2fb448a380fd10083947eb) ) |
| 1887 | 1948 | |
| 1888 | | ROM_REGION( 0x8000, "gfx2", 0 ) |
| 1889 | | ROM_COPY( "maincpu", 0x20000, 0x00000, 0x8000 ) |
| 1949 | ROM_REGION( 0x8000, "gfx2", ROMREGION_ERASEFF ) |
| 1890 | 1950 | |
| 1891 | 1951 | ROM_REGION( 0x20000, "cas", ROMREGION_ERASEFF ) |
| 1892 | 1952 | |
| 1893 | 1953 | ROM_REGION( 0x4000, "cart_img", ROMREGION_ERASE00 ) |
| 1894 | | ROM_CART_LOAD("cart", 0x0000, 0x3fff, ROM_OPTIONAL | ROM_MIRROR) |
| 1954 | ROM_COPY( "maincpu", 0x48000, 0x0000, 0x4000 ) |
| 1895 | 1955 | ROM_END |
| 1896 | 1956 | |
| 1897 | | ROM_START( pc6001sr ) |
| 1898 | | ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF ) |
| 1899 | | /* If you split this into 4x 8000, the first 3 need to load to 0-7FFF (via bankswitch). The 4th part looks like gfx data */ |
| 1900 | | ROM_LOAD( "systemrom1.64", 0x0000, 0x10000, CRC(b6fc2db2) SHA1(dd48b1eee60aa34780f153359f5da7f590f8dff4) ) |
| 1901 | | ROM_LOAD( "systemrom2.64", 0x10000, 0x10000, CRC(55a62a1d) SHA1(3a19855d290fd4ac04e6066fe4a80ecd81dc8dd7) ) |
| 1902 | 1957 | |
| 1958 | ROM_START( pc6600 ) /* Variant of pc6001m2 */ |
| 1959 | ROM_REGION( 0x50000, "maincpu", ROMREGION_ERASEFF ) |
| 1960 | ROM_LOAD( "basicrom.66", 0x10000, 0x8000, CRC(c0b01772) SHA1(9240bb6b97fe06f5f07b5d65541c4d2f8758cc2a) ) |
| 1961 | ROM_LOAD( "voicerom.66", 0x18000, 0x4000, CRC(91d078c1) SHA1(6a93bd7723ef67f461394530a9feee57c8caf7b7) ) |
| 1962 | ROM_LOAD( "cgrom60.66", 0x1c000, 0x2000, CRC(d2434f29) SHA1(a56d76f5cbdbcdb8759abe601eab68f01b0a8fe8) ) |
| 1963 | ROM_LOAD( "cgrom66.66", 0x1e000, 0x2000, CRC(3ce48c33) SHA1(f3b6c63e83a17d80dde63c6e4d86adbc26f84f79) ) |
| 1964 | ROM_LOAD( "kanjirom.66", 0x20000, 0x8000, CRC(20c8f3eb) SHA1(4c9f30f0a2ebbe70aa8e697f94eac74d8241cadd) ) |
| 1965 | ROM_CART_LOAD("cart", 0x48000, 0x4000, ROM_OPTIONAL | ROM_MIRROR) |
| 1966 | |
| 1903 | 1967 | ROM_REGION( 0x1000, "mcu", ROMREGION_ERASEFF ) |
| 1904 | 1968 | ROM_LOAD( "i8049", 0x0000, 0x1000, NO_DUMP ) |
| 1905 | 1969 | |
| 1906 | 1970 | ROM_REGION( 0x4000, "gfx1", 0 ) |
| 1907 | | ROM_LOAD( "cgrom68.64", 0x0000, 0x4000, CRC(73bc3256) SHA1(5f80d62a95331dc39b2fb448a380fd10083947eb) ) |
| 1971 | ROM_COPY( "maincpu", 0x1c000, 0x00000, 0x4000 ) |
| 1908 | 1972 | |
| 1909 | | ROM_REGION( 0x8000, "gfx2", ROMREGION_ERASEFF ) |
| 1973 | ROM_REGION( 0x8000, "gfx2", 0 ) |
| 1974 | ROM_COPY( "maincpu", 0x20000, 0x00000, 0x8000 ) |
| 1910 | 1975 | |
| 1911 | 1976 | ROM_REGION( 0x20000, "cas", ROMREGION_ERASEFF ) |
| 1912 | 1977 | |
| 1913 | 1978 | ROM_REGION( 0x4000, "cart_img", ROMREGION_ERASE00 ) |
| 1914 | | ROM_CART_LOAD("cart", 0x0000, 0x3fff, ROM_OPTIONAL | ROM_MIRROR) |
| 1979 | ROM_COPY( "maincpu", 0x48000, 0x0000, 0x4000 ) |
| 1915 | 1980 | ROM_END |
| 1916 | 1981 | |
| 1917 | 1982 | /* There exists an alternative (incomplete?) dump, consisting of more .68 pieces, but it's been probably created for emulators: |
| r8753 | r8754 | |
| 1920 | 1985 | cgrom68.68 = CGROM60.68 + CGROM66.68 |
| 1921 | 1986 | */ |
| 1922 | 1987 | ROM_START( pc6600sr ) /* Variant of pc6001sr */ |
| 1923 | | ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF ) |
| 1988 | ROM_REGION( 0x50000, "maincpu", ROMREGION_ERASEFF ) |
| 1924 | 1989 | ROM_LOAD( "systemrom1.68", 0x0000, 0x10000, CRC(b6fc2db2) SHA1(dd48b1eee60aa34780f153359f5da7f590f8dff4) ) |
| 1925 | 1990 | ROM_LOAD( "systemrom2.68", 0x10000, 0x10000, CRC(55a62a1d) SHA1(3a19855d290fd4ac04e6066fe4a80ecd81dc8dd7) ) |
| 1926 | 1991 | |
| r8753 | r8754 | |
| 1933 | 1998 | ROM_REGION( 0x20000, "cas", ROMREGION_ERASEFF ) |
| 1934 | 1999 | |
| 1935 | 2000 | ROM_REGION( 0x4000, "cart_img", ROMREGION_ERASE00 ) |
| 1936 | | ROM_CART_LOAD("cart", 0x0000, 0x3fff, ROM_OPTIONAL | ROM_MIRROR) |
| 2001 | ROM_CART_LOAD("cart", 0x0000, 0x4000, ROM_OPTIONAL | ROM_MIRROR) |
| 1937 | 2002 | ROM_END |
| 1938 | 2003 | |
| 1939 | 2004 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 1940 | | COMP( 1981, pc6001, 0, 0, pc6001, pc6001, 0, "Nippon Electronic Company", "PC-6001", GAME_NOT_WORKING ) |
| 1941 | | COMP( 1981, pc6001a, pc6001, 0, pc6001, pc6001, 0, "Nippon Electronic Company", "PC-6001A", GAME_NOT_WORKING ) // US version of PC-6001 |
| 1942 | | COMP( 1983, pc6001m2, pc6001, 0, pc6001m2, pc6001, 0, "Nippon Electronic Company", "PC-6001mkII", GAME_NOT_WORKING ) |
| 1943 | | COMP( 1984, pc6001sr, pc6001, 0, pc6001sr, pc6001, 0, "Nippon Electronic Company", "PC-6001mkIISR", GAME_NOT_WORKING ) |
| 1944 | | COMP( 1983, pc6600, pc6001, 0, pc6001m2, pc6001, 0, "Nippon Electronic Company", "PC-6600", GAME_NOT_WORKING ) // high-end version of PC-6001mkII |
| 1945 | | COMP( 1984, pc6600sr, pc6001, 0, pc6001sr, pc6001, 0, "Nippon Electronic Company", "PC-6600SR", GAME_NOT_WORKING ) // high-end version of PC-6001mkIISR |
| 2005 | COMP( 1981, pc6001, 0, 0, pc6001, pc6001, 0, "Nippon Electronic Company", "PC-6001 (Japan)", GAME_NOT_WORKING ) |
| 2006 | COMP( 1981, pc6001a, pc6001, 0, pc6001, pc6001, 0, "Nippon Electronic Company", "PC-6001A (US)", GAME_NOT_WORKING ) // This version is also known as the NEC Trek |
| 2007 | COMP( 1983, pc6001m2, pc6001, 0, pc6001m2, pc6001, 0, "Nippon Electronic Company", "PC-6001mkII (Japan)", GAME_NOT_WORKING ) |
| 2008 | COMP( 1984, pc6001sr, pc6001, 0, pc6001m2, pc6001, 0, "Nippon Electronic Company", "PC-6001mkIISR (Japan)", GAME_NOT_WORKING ) |
| 2009 | COMP( 1983, pc6600, pc6001, 0, pc6600, pc6001, 0, "Nippon Electronic Company", "PC-6600 (Japan)", GAME_NOT_WORKING ) |
| 2010 | COMP( 1984, pc6600sr, pc6001, 0, pc6600, pc6001, 0, "Nippon Electronic Company", "PC-6600SR (Japan)", GAME_NOT_WORKING ) |