From f8b8b6484ce06f610ea0ed9c9d3fefff94b29622 Mon Sep 17 00:00:00 2001 From: angelosa Date: Sun, 16 Oct 2022 17:39:49 +0200 Subject: New machines marked as NOT_WORKING ---------------------------------- PC-9801 [Andrew Terwilliger] PC-9801FS [flyingharuka] PC-9801DX [flyingharuka] --- src/mame/mame.lst | 3 ++ src/mame/nec/pc9801.cpp | 134 ++++++++++++++++++++++++++++++++++++++++++++++-- src/mame/nec/pc9801.h | 2 + 3 files changed, 135 insertions(+), 4 deletions(-) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 55842106efd..0f705ffbfab 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -34605,8 +34605,11 @@ pc98lt // 1989 pc98ha // 1990 @source:nec/pc9801.cpp +pc9801 // 1982 pc9801bx2 // 1993 +pc9801dx // 1990 pc9801f // 1983 +pc9801fs // 1992 pc9801rs // 1989 pc9801rx // 1988 pc9801us // 1992 diff --git a/src/mame/nec/pc9801.cpp b/src/mame/nec/pc9801.cpp index d9f5451c911..bebcf13ddbe 100644 --- a/src/mame/nec/pc9801.cpp +++ b/src/mame/nec/pc9801.cpp @@ -1967,6 +1967,12 @@ MACHINE_RESET_MEMBER(pc9801_state,pc9801f) uint8_t *PRG = memregion("fdc_data")->base(); int i; + // TODO: this loading shouldn't happen dynamically but actually be tied to specific floppy configs + // pc9801 has no floppy as default + // pc9801f has an internal 2DD disk drive + // pc9801m has an internal 2HD + // and ofc you can actually mount external units, + // cfr. PC-9801-08 (2dd), PC-9801-15 (8' unit) and likely others. ROM = memregion("fdc_bios_2dd")->base(); op_mode = (ioport("ROM_LOAD")->read() & 2) >> 1; @@ -2355,6 +2361,19 @@ void pc9801vm_state::pc9801ux(machine_config &config) // AM9157A(config, "i8237", 10000000); // unknown clock } +void pc9801vm_state::pc9801dx(machine_config &config) +{ + pc9801rs(config); + i80286_cpu_device &maincpu(I80286(config.replace(), m_maincpu, 12000000)); + maincpu.set_addrmap(AS_PROGRAM, &pc9801vm_state::pc9801ux_map); + maincpu.set_addrmap(AS_IO, &pc9801vm_state::pc9801ux_io); + maincpu.set_a20_callback(i80286_cpu_device::a20_cb(&pc9801vm_state::a20_286, this)); + maincpu.set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb)); + + config_floppy_525hd(config); +// AM9157A(config, "i8237", 10000000); // unknown clock +} + void pc9801vm_state::pc9801vx(machine_config &config) { pc9801ux(config); @@ -2383,6 +2402,23 @@ void pc9801us_state::pc9801us(machine_config &config) config_floppy_35hd(config); } +void pc9801vm_state::pc9801fs(machine_config &config) +{ + pc9801rs(config); + const XTAL xtal = XTAL(20'000'000); // ~20 MHz + I386SX(config.replace(), m_maincpu, xtal); + m_maincpu->set_addrmap(AS_PROGRAM, &pc9801vm_state::pc9801rs_map); + m_maincpu->set_addrmap(AS_IO, &pc9801vm_state::pc9801rs_io); + m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb)); + + // optional 3'5 floppies x2 + config_floppy_525hd(config); + + // optional SCSI HDD + + pit_clock_config(config, xtal / 4); +} + void pc9801bx_state::pc9801bx2(machine_config &config) { pc9801rs(config); @@ -2427,6 +2463,46 @@ void pc9801bx_state::pc9801bx2(machine_config &config) ROM_REGION( 0x100000, "kanji", ROMREGION_ERASEFF ) \ ROM_REGION( 0x80000, "new_chargen", ROMREGION_ERASEFF ) +/* +"vanilla" - μPD8086, 5 MHz? +*/ + +ROM_START( pc9801 ) + ROM_REGION16_LE( 0x18000, "ipl", ROMREGION_ERASEFF ) + ROM_LOAD16_BYTE( "ruq2g 06.bin", 0x14000, 0x2000, CRC(ee7b336b) SHA1(0691ebfcb9a8ce56ca303c552f634e953bb2ea7c) ) + ROM_LOAD16_BYTE( "ruq4f 06.bin", 0x14001, 0x2000, CRC(1e5c38c4) SHA1(5a8681ae0b1c3248d81a5b6707595d85cabe6bc8) ) + ROM_LOAD16_BYTE( "ruq2f 06.bin", 0x10000, 0x2000, CRC(be95afa5) SHA1(137fc4dd10ecc9f058b819df89a67df819a6509c) ) + ROM_LOAD16_BYTE( "ruq4e 06.bin", 0x10001, 0x2000, CRC(bc425f21) SHA1(f688ef89ebe3993dcbf70608d996067e92176be1) ) + ROM_LOAD16_BYTE( "ruq2e 06.bin", 0x0c000, 0x2000, CRC(16a3eaca) SHA1(345c1764e1b8aa5f3baa876658cf4cd224351fae) ) + ROM_LOAD16_BYTE( "ruq4d 06.bin", 0x0c001, 0x2000, CRC(0ca07388) SHA1(bdd564d19fcfa3dff8a695e2386c94defadcb164) ) + ROM_LOAD16_BYTE( "ruq2d 06.bin", 0x08000, 0x2000, CRC(907d0263) SHA1(30ba910424c99ae4c54eb2be5472258a3d5e4f29) ) + ROM_LOAD16_BYTE( "ruq4b 06.bin", 0x08001, 0x2000, CRC(b41d15e7) SHA1(321ec22e50fd2ee69f73c1e3f11c9fd07afa46fc) ) + ROM_LOAD16_BYTE( "ruq1f 06.bin", 0x00000, 0x2000, CRC(12d6ea62) SHA1(3a612428aaf3120ec00c10d709674535668f1d65) ) + ROM_LOAD16_BYTE( "ruq4h 06.bin", 0x00001, 0x2000, CRC(348992b9) SHA1(f5735f57305fd6585b2db1c81d34bb7ba2ed7510) ) + ROM_LOAD16_BYTE( "ruq1g 06.bin", 0x04000, 0x2000, CRC(d4ea8a62) SHA1(c899ea64ce8652a5b6976d62466efe2864cfb049) ) + ROM_LOAD16_BYTE( "ruq4g 06.bin", 0x04001, 0x2000, CRC(c1470ae5) SHA1(4eb31b2ad0b8f0dfad99bb67ada9e5853d5af4a1) ) + + ROM_REGION16_LE( 0x1000, "fdc_bios_2dd", ROMREGION_ERASEFF ) + + ROM_REGION16_LE( 0x1000, "fdc_bios_2hd", ROMREGION_ERASEFF ) + + ROM_REGION( 0x20000, "fdc_data", ROMREGION_ERASEFF ) + + ROM_REGION( 0x800, "kbd_mcu", ROMREGION_ERASEFF) + ROM_LOAD( "mcu.bin", 0x0000, 0x0800, NO_DUMP ) //connected through a i8251 UART, needs decapping + + ROM_REGION( 0x80000, "chargen", 0 ) + // TODO: original dump, needs heavy bitswap mods + ROM_LOAD( "sfz4w 00.bin", 0x00000, 0x02000, CRC(11197271) SHA1(8dbd2f25daeed545ea2c74d849f0a209ceaf4dd7) ) + // taken from i386 model + ROM_LOAD( "d23128c-17.bin", 0x00000, 0x00800, BAD_DUMP CRC(eea57180) SHA1(4aa037c684b72ad4521212928137d3369174eb1e) ) + // bad dump, 8x16 charset? (it's on the kanji board) + ROM_LOAD("hn613128pac8.bin",0x00800, 0x01000, BAD_DUMP CRC(b5a15b5c) SHA1(e5f071edb72a5e9a8b8b1c23cf94a74d24cb648e) ) + + LOAD_KANJI_ROMS +ROM_END + + /* F - 8086 8 */ @@ -2452,10 +2528,12 @@ ROM_START( pc9801f ) ROM_REGION( 0x800, "kbd_mcu", ROMREGION_ERASEFF) ROM_LOAD( "mcu.bin", 0x0000, 0x0800, NO_DUMP ) //connected through a i8251 UART, needs decapping - /* note: ROM names of following two might be swapped */ ROM_REGION( 0x80000, "chargen", 0 ) - ROM_LOAD( "d23128c-17.bin", 0x00000, 0x00800, BAD_DUMP CRC(eea57180) SHA1(4aa037c684b72ad4521212928137d3369174eb1e) ) //original is a bad dump, this is taken from i386 model - ROM_LOAD("hn613128pac8.bin",0x00800, 0x01000, BAD_DUMP CRC(b5a15b5c) SHA1(e5f071edb72a5e9a8b8b1c23cf94a74d24cb648e) ) //bad dump, 8x16 charset? (it's on the kanji board) + // note: ROM labels of following two may be swapped + //original is a bad dump, this is taken from i386 model + ROM_LOAD( "d23128c-17.bin", 0x00000, 0x00800, BAD_DUMP CRC(eea57180) SHA1(4aa037c684b72ad4521212928137d3369174eb1e) ) + //bad dump, 8x16 charset? (it's on the kanji board) + ROM_LOAD("hn613128pac8.bin",0x00800, 0x01000, BAD_DUMP CRC(b5a15b5c) SHA1(e5f071edb72a5e9a8b8b1c23cf94a74d24cb648e) ) LOAD_KANJI_ROMS ROM_END @@ -2564,6 +2642,28 @@ ROM_START( pc9801ux ) // LOAD_IDE_ROM ROM_END +/* +DX - 80286 12 + V30 8 +*/ + +ROM_START( pc9801dx ) + ROM_REGION16_LE( 0x40000, "biosrom", ROMREGION_ERASEFF ) + ROM_LOAD16_BYTE( "hdk01_02.bin", 0x000000, 0x020000, CRC(bf8b25fd) SHA1(e86eb6b46d73aad1cc96945bd34bd728d882583e) ) + ROM_LOAD16_BYTE( "hdk02_02.bin", 0x000001, 0x020000, CRC(37f21929) SHA1(1bb7c2f09eed399a78c3668f4193429a1980acc9) ) + + ROM_REGION16_LE( 0x30000, "ipl", ROMREGION_ERASEFF ) + ROM_COPY( "biosrom", 0x20000, 0x10000, 0x08000 ) //ITF ROM + ROM_COPY( "biosrom", 0x28000, 0x18000, 0x08000 ) //BIOS ROM + ROM_COPY( "biosrom", 0x30000, 0x20000, 0x08000 ) + ROM_COPY( "biosrom", 0x38000, 0x28000, 0x08000 ) + + ROM_REGION( 0x80000, "chargen", 0 ) + ROM_LOAD( "font_ux.rom", 0x000000, 0x046800, BAD_DUMP CRC(19a76eeb) SHA1(96a006e8515157a624599c2b53a581ae0dd560fd) ) + + LOAD_KANJI_ROMS +// LOAD_IDE_ROM +ROM_END + /* US - i386SX @ 16 MHz */ @@ -2592,6 +2692,27 @@ ROM_START( pc9801us ) // LOAD_IDE_ROM ROM_END +/* +FS - 80386 20 +*/ + +ROM_START( pc9801fs ) + ROM_REGION16_LE( 0x40000, "biosrom", ROMREGION_ERASEFF ) + ROM_LOAD16_BYTE( "kqx01_00.bin", 0x000000, 0x020000, CRC(4713d388) SHA1(9ae48fbe7b8ab7144e045e183ed88d2544d9a61c) ) + ROM_LOAD16_BYTE( "kqx02_00.bin", 0x000001, 0x020000, CRC(f55e42d6) SHA1(2ab0ae817e9abed984544c920182689127550ce3) ) + + ROM_REGION16_LE( 0x30000, "ipl", ROMREGION_ERASEFF ) + ROM_COPY( "biosrom", 0x20000, 0x10000, 0x08000 ) //ITF ROM + ROM_COPY( "biosrom", 0x28000, 0x18000, 0x08000 ) //BIOS ROM + ROM_COPY( "biosrom", 0x30000, 0x20000, 0x08000 ) + ROM_COPY( "biosrom", 0x38000, 0x28000, 0x08000 ) + + ROM_REGION( 0x80000, "chargen", 0 ) + ROM_LOAD( "font_ux.rom", 0x000000, 0x046800, BAD_DUMP CRC(19a76eeb) SHA1(96a006e8515157a624599c2b53a581ae0dd560fd) ) + + LOAD_KANJI_ROMS +// LOAD_IDE_ROM +ROM_END /* RX - 80286 12 (no V30?) @@ -2810,7 +2931,8 @@ void pc9801vm_state::init_pc9801vm_kanji() // specifically happening for PC9801RS. This will be hopefully put into stone with driver splits at some point in future. // "vanilla" class (i86, E/F/M) -COMP( 1983, pc9801f, 0, 0, pc9801, pc9801, pc9801_state, init_pc9801_kanji, "NEC", "PC-9801F", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // genuine dump +COMP( 1982, pc9801, 0, 0, pc9801, pc9801, pc9801_state, init_pc9801_kanji, "NEC", "PC-9801", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // genuine dump +COMP( 1983, pc9801f, pc9801, 0, pc9801, pc9801, pc9801_state, init_pc9801_kanji, "NEC", "PC-9801F", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // genuine dump // N5200 (started as a vanilla PC-98 business line derivative, // eventually diverged into its own thing and incorporated various Hyper 98 features. @@ -2857,10 +2979,14 @@ COMP( 1986, pc9801vx, 0, 0, pc9801vx, pc9801rs, pc9801vm_state, init_p // RS class (i386SX) COMP( 1988, pc9801rx, pc9801rs, 0, pc9801rs, pc9801rs, pc9801vm_state, init_pc9801_kanji, "NEC", "PC-9801RX", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) COMP( 1989, pc9801rs, 0, 0, pc9801rs, pc9801rs, pc9801vm_state, init_pc9801_kanji, "NEC", "PC-9801RS", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) +// DX class (i286) +COMP( 1990, pc9801dx, 0, 0, pc9801dx, pc9801rs, pc9801vm_state, init_pc9801_kanji, "NEC", "PC-9801DX", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // DA class (i386SX + SDIP and EMS) // ... // UF/UR/US class (i386SX + SDIP, optional high-reso according to BIOS? Derivatives of UX) COMP( 1992, pc9801us, 0, 0, pc9801us, pc9801rs, pc9801us_state, init_pc9801_kanji, "NEC", "PC-9801US", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) +// FS class (i386SX + ?) +COMP( 1992, pc9801fs, 0, 0, pc9801fs, pc9801rs, pc9801vm_state, init_pc9801_kanji, "NEC", "PC-9801FS", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // FA class (i486SX) // ... // BX class (official nickname "98 FELLOW", last releases prior to 9821 line) diff --git a/src/mame/nec/pc9801.h b/src/mame/nec/pc9801.h index a8dc97d304f..bfda6b44650 100644 --- a/src/mame/nec/pc9801.h +++ b/src/mame/nec/pc9801.h @@ -371,6 +371,8 @@ public: void pc9801ux(machine_config &config); void pc9801vx(machine_config &config); void pc9801rs(machine_config &config); + void pc9801dx(machine_config &config); + void pc9801fs(machine_config &config); void init_pc9801vm_kanji(); -- cgit v1.2.3