mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
New machines marked as NOT_WORKING (#7904)
* pc9801.cpp: proper ipl ROM dump for pc486mu [flyingharuka] * New machines marked as NOT_WORKING ---------------------------------- PC-386M [flyingharuka] * New clones marked as NOT_WORKING -------------------------------- PC-486SE [flyingharuka] PC-9821Xa16 [flyingharuka] PC-9821Ra20 (98MATE R) [flyingharuka] PC-9821Ra333 [flyingharuka] * pc9801.cpp: update QA * pc9801.cpp: move several SW notes from main driver to XML * pc9801.cpp: Make Epson machines to derive parent-clone relationship from pc486mu * pc9801.cpp: Backport ROM bankswitch to pc486mu, making it to ERR:VR too, promote pc386m to parent romset since it definitely diverge * pc88va.cpp: correct main CPU to V50; * pc9801.cpp: rearrange system metadata, in prevision of actual state machine splits; * pc9801.cpp: fix mouse input when in absolute mode (prinmak2, tim, pentium) * pc9801.cpp: improve mouse latch/delta readback, fix biblems2 regression * pc9801.cpp: finalize QA notes * pc98.xml: fix validation, add some extra QA notes * pc9801.cpp: QA update over feedback by cracyc
This commit is contained in:
parent
c037dfd822
commit
5c4ee0ec5c
385
hash/pc98.xml
385
hash/pc98.xml
File diff suppressed because it is too large
Load Diff
@ -2115,7 +2115,9 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fh2tag">
|
||||
<!-- boot OK, no sound (tested -26 and -86 on 98RS, TBD: retest in 9821) -->
|
||||
<!-- Has Tuned Heart demo (which also has no sound and hangs at first battle) -->
|
||||
<software name="fh2tag" supported="partial">
|
||||
<!--
|
||||
Origin: redump.org
|
||||
<rom name="Finish Hold 2 - Tag (Japan).cue" size="93" crc="7cf64221" md5="a2dc55a24539aab103701e08562253fe" sha1="8a49ecb6010ea76deb1bcc3c84a0cfc437de46e3"/>
|
||||
@ -3936,7 +3938,9 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="pnauts">
|
||||
<!-- Can randomly lock up on prolonged sessions (1+ hours) -->
|
||||
<!-- Most likely down to -86 misfired irq (stuck note) -->
|
||||
<software name="pnauts" supported="partial">
|
||||
<!--
|
||||
Origin: redump.org
|
||||
<rom name="Policenauts (Japan).cue" size="591" crc="33715417" md5="ae17a348af34b2f7bddd0695d976f61c" sha1="2e41266a1a1e82eaa6a2b85858aec7af8ad93e33"/>
|
||||
|
@ -2,7 +2,12 @@
|
||||
// copyright-holders:Angelo Salese
|
||||
/**********************************************************************
|
||||
|
||||
CCBUS Slot interface for PC-98xx family
|
||||
C-bus slot interface for PC-98xx family
|
||||
|
||||
a.k.a. NEC version of the ISA bus.
|
||||
|
||||
TODO:
|
||||
- stub interface, checkout what actually belongs here.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
@ -15,7 +20,7 @@
|
||||
// GLOBAL VARIABLES
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(PC9801CBUS_SLOT, pc9801_slot_device, "pc9801_slot", "PC-9801 sound cbus slot")
|
||||
DEFINE_DEVICE_TYPE(PC9801CBUS_SLOT, pc9801_slot_device, "pc9801_slot", "PC-9801 C-bus slot")
|
||||
|
||||
|
||||
|
||||
@ -110,7 +115,7 @@ template<typename R, typename W> void pc9801_slot_device::install_io(offs_t star
|
||||
m_iospace->install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff);
|
||||
break;
|
||||
default:
|
||||
fatalerror("PC-9801-26: Bus width %d not supported\n", buswidth);
|
||||
fatalerror("PC-9801 C-bus: Bus width %d not supported\n", buswidth);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,9 @@
|
||||
- QX-10 diagnostic test misses the zooming factor (external pin);
|
||||
- compis2 SAD address for bitmap is 0x20000 for whatever reason (presumably missing banking);
|
||||
- A5105 has a FIFO bug with the RDAT, should be a lot larger when it scrolls up.
|
||||
The problem is that DMA-ing with RDAT/WDAT shouldn't be instant;
|
||||
Can be fixed with a DRDY mechanism for RDAT/WDAT;
|
||||
- Some later SWs on PC-98 throws "Invalid command byte 05" (zettmj on Epson logo),
|
||||
actual undocumented command to reset something?
|
||||
|
||||
- honor visible area
|
||||
- wide mode (32-bit access)
|
||||
|
@ -10,18 +10,18 @@
|
||||
Special thanks to Fujix for his documentation translation help
|
||||
|
||||
TODO:
|
||||
- Does this system have one or two CPUs? I'm prone to think that the V30 does all the job
|
||||
and then enters into z80 compatible mode for PC-8801 emulation.
|
||||
- What exact kind of garbage happens if you try to enable both direct and palette color
|
||||
modes to a graphic layer?
|
||||
- unemulated upd71071 demand mode;
|
||||
- What is exactly supposed to be a "bus slot"?
|
||||
- fdc "intelligent mode" has 0x7f as irq vector ... 0x7f is ld a,a and it IS NOT correctly
|
||||
hooked up by the current z80 core
|
||||
- PC-88VA stock version has two bogus opcodes. One is at 0xf0b15, another at 0xf0b31.
|
||||
Making a patch for the latter makes the system to jump into a "DIP-Switch" display.
|
||||
bp f0b31,pc=0xf0b36,g
|
||||
- unemulated upd71071 demand mode.
|
||||
- Fix floppy motor hook-up;
|
||||
Update: it never reaches latter with V30->V50 CPU switch fix;
|
||||
- Fix floppy motor hook-up (floppy believes to be always in even if empty drive);
|
||||
- Support for PC8801 compatible mode & PC80S31K (floppy interface);
|
||||
|
||||
********************************************************************************************/
|
||||
|
||||
@ -1573,7 +1573,7 @@ void pc88va_state::dma_memw_cb(offs_t offset, uint8_t data)
|
||||
|
||||
void pc88va_state::pc88va(machine_config &config)
|
||||
{
|
||||
V30(config, m_maincpu, 8000000); /* 8 MHz */
|
||||
V50(config, m_maincpu, 8000000); // μPD9002, aka V30 + μPD70008AC (for PC8801 compatibility mode)
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &pc88va_state::pc88va_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &pc88va_state::pc88va_io_map);
|
||||
m_maincpu->set_vblank_int("screen", FUNC(pc88va_state::pc88va_vrtc_irq));
|
||||
|
@ -1,126 +1,64 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Angelo Salese,Carl
|
||||
/***************************************************************************************************
|
||||
/**************************************************************************************************
|
||||
|
||||
PC-9801 (c) 1981 NEC
|
||||
|
||||
driver by Angelo Salese
|
||||
|
||||
TODO:
|
||||
- move sound bios ROMs into pc9801_26 / pc9801_86 devices
|
||||
- proper 8251 uart hook-up on keyboard
|
||||
- proper 8251 uart hook-up on keyboard;
|
||||
- SASI/SCSI support;
|
||||
- Write a PC80S31K device (also used on PC-8801 and PC-88VA, it's the FDC + Z80 sub-system);
|
||||
- Finish DIP-Switches support
|
||||
- text scrolling
|
||||
- GRCG+
|
||||
- rewrite using slot devices
|
||||
- some later SWs put "Invalid command byte 05" (Absolutely Mahjong on Epson logo)
|
||||
- investigate on POR bit
|
||||
- test 2dd more
|
||||
- clean-ups/split into devices.
|
||||
- Finish DIP-Switches support;
|
||||
- text scrolling, upd52611 (cfr. clipping in edge & arcus2, madoum* too?);
|
||||
- AGDC emulation, upd72120;
|
||||
- CMT support (-13/-36 cbus only, identify which models mounted it off the bat);
|
||||
- Write a PC80S31K device for 2d type floppies
|
||||
(also used on PC-8801 and PC-88VA, it's the FDC + Z80 sub-system);
|
||||
- Anything post-PC9801E/F/M should overwrite "speaker_device" to actually use a
|
||||
dac_bit_interface instead (cfr. DAC1BIT in SW list);
|
||||
- clean-ups & split into separate devices and driver flavours;
|
||||
- derive romsets by default options (cfr. 3.5 2HD floppies vs. default 5.25, 2D/2DD etc.);
|
||||
- Remove kludge for POR bit in a20_ctrl_w fn;
|
||||
- floppy sounds never silences when drive is idle (disabled for the time being);
|
||||
|
||||
TODO (PC-9801F)
|
||||
- kanji port 0xa9 readback is broken for several games (balpower, lovelyho).
|
||||
|
||||
TODO (PC-9801RS):
|
||||
- extra features;
|
||||
- keyboard shift doesn't seem to disable properly;
|
||||
- several unemulated extra f/f features;
|
||||
- keyboard shift doesn't seem to disable properly (fixed by now?);
|
||||
- Several games hangs with stuck note by misfired/not catched up -26 / -86 irq;
|
||||
- clean-up duplicate code;
|
||||
|
||||
TODO (PC-9821):
|
||||
- fix CPU for some clones;
|
||||
- "cache error"
|
||||
- undumped IDE ROM, kludged to work
|
||||
- Compatibility is untested;
|
||||
- undumped IDE ROM, kludged to work;
|
||||
|
||||
TODO (PC-9821AS)
|
||||
- IPL ROM banking contradicts greatly from the other machines;
|
||||
|
||||
TODO: (PC-486MU)
|
||||
- Tries to read port C of i8255_sys (-> 0x35) at boot without setting up the control
|
||||
port. This causes a jump to invalid program area;
|
||||
- Dies on ARTIC check;
|
||||
- Presumably one ROM is undumped?
|
||||
TODO (PC-386M):
|
||||
- "ERR:BR" at boot (BIOS loader error).
|
||||
Executes some code in text VRAM area (PC=$a006e), trying to setup a writeable RAM bank
|
||||
(shadow RAM even?) to IPL window, I/O $c06 seems to be the control port for it;
|
||||
|
||||
TODO: (PC-486SE/PC-486MU):
|
||||
- Verify ROM bankswitch;
|
||||
On PC-486SE sets up what is normally IPL bankswitch at PC=0xf5115, successive opcode
|
||||
is a jmp 0xf8000, pretty unlikely it delays bankswitch so assume it reloads
|
||||
the same bank.
|
||||
- Fix POR/ROM bankswitch on soft resets.
|
||||
- Eventually errors with a ERR:VR (GFX VRAM);
|
||||
|
||||
TODO: (PC-9821AP)
|
||||
- No way to exit the initial loop. Code looks broken/bad dump?
|
||||
- No way to exit the initial loop. Code looks broken, bad dump?
|
||||
|
||||
floppy issues TODO (* denotes actually fixed, to be moved into specific sheet)
|
||||
- 46okunen (DOS not booting / disk swap);
|
||||
* ckrynn
|
||||
- aishogi: (asserts upon loading, 3'5 image?)
|
||||
- akitsuka: (works in PC-9801RS only)
|
||||
* alice
|
||||
* genghis
|
||||
* arcshu
|
||||
* arcus2
|
||||
* artjigs1 / artjigs2 / artjigs3
|
||||
* Atlantia (disk swap?)
|
||||
- azusa108 (disk i/o error)
|
||||
* bacta2
|
||||
- btech (disk swap?)
|
||||
- baycity
|
||||
- beast (keeps reading command sense)
|
||||
* beast2
|
||||
* bellsave (disk swap? select B on config menu)
|
||||
* biblems2 (at new game loading)
|
||||
* birdywld
|
||||
TODO: (PC-9821Xa16/PC-9821Ra20/PC-9821Ra333)
|
||||
- "MICON ERROR" at POST (generic HW fault, PCI?);
|
||||
|
||||
* Bokosuka Wars
|
||||
* jangou2: floppy fails to load after the title screen;
|
||||
- runners (size assert)
|
||||
- Sorcerian (2dd image)
|
||||
- Twilight Zone 3 (2dd image)
|
||||
|
||||
List of per-game TODO:
|
||||
- 4dboxing: inputs are unresponsive;
|
||||
- 4dboxing: crashes after user disk creation (regression);
|
||||
- agumixsl: non-interlace mode doesn't resize graphics, has rectangle selection bugs (note: needs GDC = 5 MHz to boot);
|
||||
- agenesis: fails loading, attempting to read IDE RAM switch port;
|
||||
- alice: doesn't set bitmap interlace properly, can't do disk swaps via the File Manager;
|
||||
- applecl1: can't pass hands apparently;
|
||||
- arctic, fsmoon: Doesn't detect sound board (tied to 0x00ec ports);
|
||||
- arcus2: has intro glitches;
|
||||
- artjigs*: some text doesn't appear? Namely under the puzzles and when you clear one;
|
||||
- atragon: HDD install disk swap doesn't work?
|
||||
- asokokof: black screen with BGM, executes invalid opcode (previous note "waits at 0x225f6");
|
||||
- arquelph: beeps out at initial sound check, no voice samples, extra sound board tested;
|
||||
- akitsuka: could not setup "initial data" (regression);
|
||||
- bandkun: can't install to HDD, has unemulated sound boards in settings (Roland MT-32 & D-10/D-110, Kawai MSB-98, Korg M1, MIDI);
|
||||
- biblems2: initial GLODIA logo uses raster effects?
|
||||
- bishohzx: Soft House logo uses pseudo-ROZ effect (?), no title screen graphics?
|
||||
- bishotsu: beeps out before game (missing sound board?), doesn't draw some text?
|
||||
|
||||
- deflektr: no sound, moans about a DIP-SW setting during loading, has timing issues (keyboard being too fast on PC-9801RS);
|
||||
- edge: has gfx glitch when intro scrolls to top-left;
|
||||
- edge: user disk creation screen is offset?
|
||||
- idolsaga: Moans with a "(program) ended. remove the floppy disk and turn off the power."
|
||||
- karateka: no sound;
|
||||
- lovelyho: Doesn't show kanjis in PC-9801F version (tries to read them thru the 0xa9 port);
|
||||
- madoum1, madoum2, madoum3: doesn't display bitmap gfxs during gameplay;
|
||||
- quarth: sound cuts off at title screen, doesn't work on 9801rs (bogus "corrupt .exe" detected);
|
||||
- prinmak2, tim: cursor stays stuck when using mouse (works with keyboard);
|
||||
- puyopuyo: beeps out when it's supposed to play samples, Not supposed to use ADPCM, is it a PIT issue?
|
||||
- runners: wrong double height on the title screen;
|
||||
- rusty: black stripes when scrolling;
|
||||
- rusty: voice pitches are too slow (tested with -26 and -86);
|
||||
- win211: EGC drawing issue (byte wide writes?)
|
||||
- win31: doesn't boot at
|
||||
|
||||
per-game TODO (Dounjishi SW):
|
||||
- Absolutely Mahjong: Transitions are too fast.
|
||||
|
||||
per-game TODO (PC-9821):
|
||||
- Battle Skin Panic: gfx bugs at the Gainax logo, it crashes after it;
|
||||
- Policenauts: CD-ROM drive not found;
|
||||
|
||||
Notes:
|
||||
- annivers: GRPH (ALT) key cycles through different color schemes (normal, b&w, legacy);
|
||||
- Animahjong V3 makes advantage of the possibility of installing 2 sound boards, where SFX and BGMs are played on separate chips.
|
||||
- Apple Club 1/2 needs data disks to load properly;
|
||||
- Beast Lord: needs a titan.fnt, in MS-DOS
|
||||
- fhtag2: product key is 001J0283TA 100001
|
||||
- To deprotect BASIC modules set 0xcd7 in ram to 0
|
||||
|
||||
========================================================================================
|
||||
===================================================================================================
|
||||
|
||||
This series features a huge number of models released between 1982 and 1997. They
|
||||
were not IBM PC-compatible, but they had similar hardware (and software: in the
|
||||
@ -302,6 +240,8 @@
|
||||
|
||||
For more info (e.g. optional hardware), see http://www.geocities.jp/retro_zzz/machines/nec/9801/mdl98cpu.html
|
||||
|
||||
Epson Series
|
||||
http://www.pc-9800.net/db_epson/desk_index.htm
|
||||
|
||||
PC-9821 Series
|
||||
|
||||
@ -312,7 +252,7 @@
|
||||
PC-9821Es (1994) - aka 98FINE, desktop computer with integrated LCD, successor of the PC-98T
|
||||
PC-9821X series (1994->1995) - aka 98MATE X, desktop computers, Pentium based
|
||||
PC-9821V series (1995) - aka 98MATE Valuestar, desktop computers, Pentium based
|
||||
PC-9821S series (1995->2996) - aka 98Pro, tower computers, PentiumPro based
|
||||
PC-9821S series (1995->1996) - aka 98Pro, tower computers, PentiumPro based
|
||||
PC-9821R series (1996->2000) - aka 98MATE R, desktop & tower & server computers, various CPU
|
||||
PC-9821C200 (1997) - aka CEREB, desktop computer, Pentium MMX based
|
||||
PC-9821 Ne/Ns/Np/Nm (1993->1995) - aka 98NOTE, laptops, 486 based
|
||||
@ -387,7 +327,7 @@ Keyboard TX commands:
|
||||
0x9d keyboard LED settings
|
||||
0x9f keyboard ID
|
||||
|
||||
****************************************************************************************************/
|
||||
**************************************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/pc9801.h"
|
||||
@ -984,10 +924,12 @@ void pc9801_state::pc9801rs_a0_w(offs_t offset, uint8_t data)
|
||||
case 0x0e: m_analog16.b[m_analog16.pal_entry] = data & 0xf; break;
|
||||
}
|
||||
|
||||
m_palette->set_pen_color((m_analog16.pal_entry)+0x10,
|
||||
pal4bit(m_analog16.r[m_analog16.pal_entry]),
|
||||
pal4bit(m_analog16.g[m_analog16.pal_entry]),
|
||||
pal4bit(m_analog16.b[m_analog16.pal_entry]));
|
||||
m_palette->set_pen_color(
|
||||
m_analog16.pal_entry + 0x10,
|
||||
pal4bit(m_analog16.r[m_analog16.pal_entry]),
|
||||
pal4bit(m_analog16.g[m_analog16.pal_entry]),
|
||||
pal4bit(m_analog16.b[m_analog16.pal_entry])
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1175,10 +1117,12 @@ void pc9801_state::pc9821_a0_w(offs_t offset, uint8_t data)
|
||||
case 0x0e: m_analog256.b[m_analog256.pal_entry] = data & 0xff; break;
|
||||
}
|
||||
|
||||
m_palette->set_pen_color((m_analog256.pal_entry)+0x20,
|
||||
m_analog256.r[m_analog256.pal_entry],
|
||||
m_analog256.g[m_analog256.pal_entry],
|
||||
m_analog256.b[m_analog256.pal_entry]);
|
||||
m_palette->set_pen_color(
|
||||
m_analog256.pal_entry + 0x20,
|
||||
m_analog256.r[m_analog256.pal_entry],
|
||||
m_analog256.g[m_analog256.pal_entry],
|
||||
m_analog256.b[m_analog256.pal_entry]
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1673,10 +1617,10 @@ static INPUT_PORTS_START( pc9801 )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
|
||||
PORT_START("MOUSE_X")
|
||||
PORT_BIT( 0xff, 0x00, IPT_MOUSE_X ) PORT_RESET PORT_SENSITIVITY(30) PORT_KEYDELTA(30)
|
||||
PORT_BIT( 0xff, 0x00, IPT_MOUSE_X ) PORT_SENSITIVITY(30) PORT_KEYDELTA(30)
|
||||
|
||||
PORT_START("MOUSE_Y")
|
||||
PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y ) PORT_RESET PORT_SENSITIVITY(30) PORT_KEYDELTA(30)
|
||||
PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y ) PORT_SENSITIVITY(30) PORT_KEYDELTA(30)
|
||||
|
||||
PORT_START("MOUSE_B")
|
||||
PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
@ -1938,20 +1882,45 @@ void pc9801_state::ppi_sys_portc_w(uint8_t data)
|
||||
m_beeper->set_state(!(data & 0x08));
|
||||
}
|
||||
|
||||
/*
|
||||
* Mouse 8255 I/F
|
||||
*
|
||||
* Port A:
|
||||
* x--- ---- LEFT mouse button
|
||||
* -x-- ---- MIDDLE mouse button
|
||||
* \- Undocumented, most PC98 mice don't have it
|
||||
* --x- ---- RIGHT mouse button
|
||||
* ---? ---- <unused>
|
||||
* ---- xxxx MD3-0 mouse direction latch
|
||||
*
|
||||
* Port C:
|
||||
*
|
||||
* x--- ---- HC Latch Mode (1=read latch, 0=read delta)
|
||||
* \- on 0->1 transition reset delta
|
||||
* -x-- ---- SXY Axis select (1=Y 0=X)
|
||||
* --x- ---- SHL Read nibble select (1) upper (0) lower
|
||||
* ---x ---- INT # (1) disable (0) enable
|
||||
*
|
||||
* Reading Port B and Port C low nibble are misc DIPSW selectors,
|
||||
* their meaning diverges on XA/XL/RL classes vs. the rest.
|
||||
*
|
||||
*/
|
||||
|
||||
uint8_t pc9801_state::ppi_mouse_porta_r()
|
||||
{
|
||||
uint8_t res;
|
||||
uint8_t isporthi;
|
||||
const char *const mousenames[] = { "MOUSE_X", "MOUSE_Y" };
|
||||
uint8_t res = ioport("MOUSE_B")->read() & 0xf0;
|
||||
const uint8_t isporthi = ((m_mouse.control & 0x20) >> 5)*4;
|
||||
|
||||
res = ioport("MOUSE_B")->read() & 0xf0;
|
||||
isporthi = ((m_mouse.control & 0x20) >> 5)*4;
|
||||
|
||||
if((m_mouse.control & 0x80) == 0)
|
||||
res |= ioport(mousenames[(m_mouse.control & 0x40) >> 6])->read() >> (isporthi) & 0xf;
|
||||
if ((m_mouse.control & 0x80) == 0)
|
||||
{
|
||||
if (m_mouse.control & 0x40)
|
||||
res |= (m_mouse.dy >> isporthi) & 0xf;
|
||||
else
|
||||
res |= (m_mouse.dx >> isporthi) & 0xf;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(m_mouse.control & 0x40)
|
||||
if (m_mouse.control & 0x40)
|
||||
res |= (m_mouse.ly >> isporthi) & 0xf;
|
||||
else
|
||||
res |= (m_mouse.lx >> isporthi) & 0xf;
|
||||
@ -1973,10 +1942,24 @@ void pc9801_state::ppi_mouse_portb_w(uint8_t data)
|
||||
|
||||
void pc9801_state::ppi_mouse_portc_w(uint8_t data)
|
||||
{
|
||||
if((m_mouse.control & 0x80) == 0 && data & 0x80)
|
||||
// fsmoon: 0x00 -> 0x80 -> 0xa0 -> 0xc0 -> 0xf0
|
||||
// (read latch as relative)
|
||||
// prinmak2: 0x00 -> 0x20 -> 0x40 -> 0x60 -> 0x60
|
||||
// (keeps reading "delta" but never reset it, absolute mode)
|
||||
// biblems2: 0x0f -> 0x2f -> 0x4f -> 0x6f -> 0xef
|
||||
// (latches a delta reset then reads delta diff, relative mode)
|
||||
|
||||
const u8 mouse_x = ioport("MOUSE_X")->read();
|
||||
const u8 mouse_y = ioport("MOUSE_Y")->read();
|
||||
m_mouse.dx = (mouse_x - m_mouse.prev_dx) & 0xff;
|
||||
m_mouse.dy = (mouse_y - m_mouse.prev_dy) & 0xff;
|
||||
|
||||
if ((m_mouse.control & 0x80) == 0 && data & 0x80)
|
||||
{
|
||||
m_mouse.lx = ioport("MOUSE_X")->read();
|
||||
m_mouse.ly = ioport("MOUSE_Y")->read();
|
||||
m_mouse.lx = m_mouse.dx & 0xff;
|
||||
m_mouse.ly = m_mouse.dy & 0xff;
|
||||
m_mouse.prev_dx = mouse_x;
|
||||
m_mouse.prev_dy = mouse_y;
|
||||
}
|
||||
|
||||
m_mouse.control = data;
|
||||
@ -2135,6 +2118,7 @@ MACHINE_RESET_MEMBER(pc9801_state,pc9801_common)
|
||||
m_mouse.control = 0xff;
|
||||
m_mouse.freq_reg = 0;
|
||||
m_mouse.freq_index = 0;
|
||||
m_mouse.lx = m_mouse.ly = m_mouse.prev_dx = m_mouse.prev_dy = m_mouse.dx = m_mouse.dy = 0;
|
||||
m_dma_autoinc[0] = m_dma_autoinc[1] = m_dma_autoinc[2] = m_dma_autoinc[3] = 0;
|
||||
memset(&m_egc, 0, sizeof(m_egc));
|
||||
}
|
||||
@ -2233,6 +2217,13 @@ void pc9801_state::pc9801_keyboard(machine_config &config)
|
||||
m_keyb->irq_wr_callback().set(m_pic1, FUNC(pic8259_device::ir1_w));
|
||||
}
|
||||
|
||||
void pc9801_state::pc9801_pit_clock(machine_config &config, const XTAL clock)
|
||||
{
|
||||
m_pit8253->set_clk<0>(clock);
|
||||
m_pit8253->set_clk<1>(clock);
|
||||
m_pit8253->set_clk<2>(clock);
|
||||
}
|
||||
|
||||
void pc9801_state::pc9801_mouse(machine_config &config)
|
||||
{
|
||||
i8255_device &ppi_mouse(I8255(config, "ppi8255_mouse"));
|
||||
@ -2436,7 +2427,6 @@ void pc9801_state::pc9801(machine_config &config)
|
||||
PALETTE(config, m_palette, FUNC(pc9801_state::pc9801_palette), 16);
|
||||
}
|
||||
|
||||
|
||||
void pc9801_state::pc9801rs(machine_config &config)
|
||||
{
|
||||
I386SX(config, m_maincpu, MAIN_CLOCK_X1*8); // unknown clock.
|
||||
@ -2499,6 +2489,8 @@ void pc9801_state::pc9801bx2(machine_config &config)
|
||||
MCFG_MACHINE_START_OVERRIDE(pc9801_state, pc9801bx2)
|
||||
}
|
||||
|
||||
// TODO: setter for DMAC clock should follow up whatever is the CPU clock
|
||||
|
||||
void pc9801_state::pc9821(machine_config &config)
|
||||
{
|
||||
pc9801rs(config);
|
||||
@ -2542,12 +2534,96 @@ void pc9801_state::pc9821ap2(machine_config &config)
|
||||
void pc9801_state::pc9821v20(machine_config &config)
|
||||
{
|
||||
pc9821(config);
|
||||
PENTIUM(config.replace(), m_maincpu, 32000000); // unknown clock
|
||||
PENTIUM(config.replace(), m_maincpu, 32000000); // unknown clock, definitely not 32 MHz
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &pc9801_state::pc9821_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &pc9801_state::pc9821_io);
|
||||
m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb));
|
||||
}
|
||||
|
||||
void pc9801_state::pc9821xa16(machine_config &config)
|
||||
{
|
||||
pc9821(config);
|
||||
PENTIUM(config.replace(), m_maincpu, 166000000); // Pentium P54C
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &pc9801_state::pc9821_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &pc9801_state::pc9821_io);
|
||||
m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb));
|
||||
}
|
||||
|
||||
void pc9801_state::pc9821ra20(machine_config &config)
|
||||
{
|
||||
pc9821(config);
|
||||
PENTIUM_PRO(config.replace(), m_maincpu, XTAL(200'000'000));
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &pc9801_state::pc9821_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &pc9801_state::pc9821_io);
|
||||
m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb));
|
||||
}
|
||||
|
||||
void pc9801_state::pc9821ra333(machine_config &config)
|
||||
{
|
||||
pc9821(config);
|
||||
const double xtal = 333000000;
|
||||
PENTIUM2(config.replace(), m_maincpu, xtal); // actually a Celeron
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &pc9801_state::pc9821_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &pc9801_state::pc9821_io);
|
||||
m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb));
|
||||
|
||||
// 128KB CPU cache RAM
|
||||
// Trident TGUI9682XGi + integrated 98 gfx card
|
||||
// 3x cbus + 2x PCI slots
|
||||
// 6GB HDD
|
||||
// built-in ethernet 100BASE-TX/10BASE-T
|
||||
|
||||
}
|
||||
|
||||
// Epson clones
|
||||
// TODO: definitely runs on their own state machine
|
||||
// (verify if for instance they need EGC and what kind of FM board they needs up)
|
||||
|
||||
void pc9801_state::pc386m(machine_config &config)
|
||||
{
|
||||
pc9801rs(config);
|
||||
// I386SX(config.replace(), m_maincpu, 16000000); // i386SX 16MHz, switchable to 10/6 MHz
|
||||
// m_maincpu->set_addrmap(AS_PROGRAM, &pc9801_state::pc9801rs_map);
|
||||
// m_maincpu->set_addrmap(AS_IO, &pc9801_state::pc9801rs_io);
|
||||
// m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb));
|
||||
// RAM: 640KB + 14.6MB max
|
||||
// 2 3.5 floppy drives
|
||||
// ...
|
||||
}
|
||||
|
||||
void pc9801_state::pc486se(machine_config &config)
|
||||
{
|
||||
pc9821(config);
|
||||
const XTAL xtal = XTAL(25'000'000);
|
||||
I486(config.replace(), m_maincpu, xtal); // i486SX, switchable to 10/5 MHz, supports overdrive
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &pc9801_state::pc9821_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &pc9801_state::pc9821as_io);
|
||||
m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb));
|
||||
|
||||
pc9801_pit_clock(config, xtal/8); // unknown, passes "ERR:TM" test
|
||||
|
||||
// RAM: 1.6 MB (!) + 17.6 max
|
||||
// "dedicated internal memory slot x 1"
|
||||
// "dedicated video board" slot
|
||||
}
|
||||
|
||||
void pc9801_state::pc486mu(machine_config &config)
|
||||
{
|
||||
pc9821(config);
|
||||
const XTAL xtal = XTAL(33'000'000);
|
||||
I486(config.replace(), m_maincpu, xtal); // i486SX, switchable to I386DX 10MHz/5MHz, Pentium ODP compatible
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &pc9801_state::pc9821_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &pc9801_state::pc9821as_io);
|
||||
m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb));
|
||||
|
||||
pc9801_pit_clock(config, xtal/8); // unknown, passes "ERR:TM" test
|
||||
|
||||
// CL-GD5428
|
||||
// RAM: 5.6 + 61.6MB max
|
||||
// 2 x 3.5 floppy drives
|
||||
}
|
||||
|
||||
|
||||
/* took from "raw" memory dump, uncomment ROM_FILL if you want to play with it */
|
||||
#define LOAD_IDE_ROM \
|
||||
ROM_REGION( 0x4000, "ide", ROMREGION_ERASEVAL(0xcb) ) \
|
||||
@ -2649,7 +2725,7 @@ ROM_START( pc9801rs )
|
||||
ROM_LOAD( "itf_rs.rom", 0x10000, 0x08000, CRC(c1815325) SHA1(a2fb11c000ed7c976520622cfb7940ed6ddc904e) )
|
||||
ROM_LOAD( "bios_rs.rom", 0x18000, 0x18000, BAD_DUMP CRC(315d2703) SHA1(4f208d1dbb68373080d23bff5636bb6b71eb7565) )
|
||||
|
||||
/* following is an emulator memory dump, should be checked and nuked */
|
||||
/* following is an emulator memory dump, should be checked and eventually nuked if nothing worth is there */
|
||||
ROM_REGION( 0x100000, "memory", 0 )
|
||||
ROM_LOAD( "00000.rom", 0x00000, 0x8000, CRC(6e299128) SHA1(d0e7d016c005cdce53ea5ecac01c6f883b752b80) )
|
||||
ROM_LOAD( "c0000.rom", 0xc0000, 0x8000, CRC(1b43eabd) SHA1(ca711c69165e1fa5be72993b9a7870ef6d485249) ) // 0xff everywhere
|
||||
@ -2669,7 +2745,7 @@ ROM_END
|
||||
/*
|
||||
BX2/U2 - 486SX - (should be 33, but "dumper" note says it's 25 MHz)
|
||||
|
||||
Yet another franken-dump done with a lame program, shrug
|
||||
Yet another franken-romset done with direct memory dump, shrug
|
||||
|
||||
*/
|
||||
|
||||
@ -2812,7 +2888,8 @@ ROM_START( pc9821ap2 )
|
||||
ROM_SYSTEM_BIOS(1, "phd0102", "PHD0102")
|
||||
ROMX_LOAD( "phd0102.rom", 0x000000, 0x80000, CRC(3036774c) SHA1(59856a348f156adf5eca06326f967aca54ff871c), ROM_BIOS(1) )
|
||||
|
||||
ROM_REGION16_LE( 0x30000, "ipl", ROMREGION_ERASEFF ) // TODO: identify ROM banks
|
||||
ROM_REGION16_LE( 0x30000, "ipl", ROMREGION_ERASEFF )
|
||||
// TODO: identify ROM banks
|
||||
ROM_COPY( "biosrom", 0x20000, 0x10000, 0x08000 )
|
||||
ROM_COPY( "biosrom", 0x30000, 0x18000, 0x18000 )
|
||||
|
||||
@ -2840,33 +2917,17 @@ ROM_START( pc9821ne )
|
||||
LOAD_IDE_ROM
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
Epson PC-486MU - 486 based, unknown clock
|
||||
*/
|
||||
|
||||
ROM_START( pc486mu )
|
||||
ROM_REGION16_LE( 0x30000, "ipl", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "bios_486mu.rom", 0x00000, 0x18000, BAD_DUMP CRC(57b5d701) SHA1(15029800842e93e07615b0fd91fb9f2bfe3e3c24))
|
||||
ROM_RELOAD( 0x18000, 0x18000 ) // missing rom?
|
||||
|
||||
ROM_REGION( 0x80000, "chargen", 0 )
|
||||
ROM_LOAD( "font_486mu.rom", 0x0000, 0x46800, CRC(456d9fc7) SHA1(78ba9960f135372825ab7244b5e4e73a810002ff))
|
||||
|
||||
LOAD_KANJI_ROMS
|
||||
LOAD_IDE_ROM
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
98MULTi Ce2 - 80486SX 25
|
||||
*/
|
||||
|
||||
ROM_START( pc9821ce2 )
|
||||
ROM_REGION16_LE( 0x30000, "ipl", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "itf_ce2.rom", 0x10000, 0x08000, CRC(273e9e88) SHA1(9bca7d5116788776ed0f297bccb4dfc485379b41) )
|
||||
ROM_LOAD( "itf_ce2.rom", 0x10000, 0x008000, CRC(273e9e88) SHA1(9bca7d5116788776ed0f297bccb4dfc485379b41) )
|
||||
ROM_LOAD( "bios_ce2.rom", 0x18000, 0x018000, BAD_DUMP CRC(76affd90) SHA1(910fae6763c0cd59b3957b6cde479c72e21f33c1) )
|
||||
|
||||
ROM_REGION( 0x80000, "chargen", 0 )
|
||||
ROM_LOAD( "font_ce2.rom", 0x000000, 0x046800, CRC(d1c2702a) SHA1(e7781e9d35b6511d12631641d029ad2ba3f7daef) )
|
||||
ROM_LOAD( "font_ce2.rom", 0x00000, 0x046800, BAD_DUMP CRC(d1c2702a) SHA1(e7781e9d35b6511d12631641d029ad2ba3f7daef) )
|
||||
|
||||
LOAD_KANJI_ROMS
|
||||
LOAD_IDE_ROM
|
||||
@ -2878,17 +2939,95 @@ ROM_END
|
||||
|
||||
ROM_START( pc9821xs )
|
||||
ROM_REGION16_LE( 0x30000, "ipl", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "itf.rom", 0x10000, 0x08000, BAD_DUMP CRC(dd4c7bb8) SHA1(cf3aa193df2722899066246bccbed03f2e79a74a) )
|
||||
ROM_LOAD( "itf.rom", 0x10000, 0x008000, BAD_DUMP CRC(dd4c7bb8) SHA1(cf3aa193df2722899066246bccbed03f2e79a74a) )
|
||||
ROM_LOAD( "bios_xs.rom", 0x18000, 0x018000, BAD_DUMP CRC(0a682b93) SHA1(76a7360502fa0296ea93b4c537174610a834d367) )
|
||||
|
||||
ROM_REGION( 0x80000, "chargen", 0 )
|
||||
ROM_LOAD( "font_xs.rom", 0x000000, 0x046800, BAD_DUMP CRC(c9a77d8f) SHA1(deb8563712eb2a634a157289838b95098ba0c7f2) )
|
||||
ROM_LOAD( "font_xs.rom", 0x00000, 0x046800, BAD_DUMP CRC(c9a77d8f) SHA1(deb8563712eb2a634a157289838b95098ba0c7f2) )
|
||||
|
||||
LOAD_KANJI_ROMS
|
||||
LOAD_IDE_ROM
|
||||
ROM_END
|
||||
|
||||
|
||||
/*
|
||||
9821Xa16
|
||||
|
||||
Pentium P54C @ 166
|
||||
32MB
|
||||
3.5"2DD/2HDx1, 8xCD-ROM
|
||||
CBus: 3 slots
|
||||
|
||||
*/
|
||||
|
||||
ROM_START( pc9821xa16 )
|
||||
ROM_REGION16_LE( 0x40000, "biosrom", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "pc-9821xa16_g8yewa_a1_wsg8b01_ab28f200b5-t.bin", 0x00000, 0x040000, CRC(f99c8ce2) SHA1(2bc328d2c496046f6f4f39b0637e90b713a63155) ) // SOP44
|
||||
|
||||
ROM_REGION16_LE( 0x30000, "ipl", ROMREGION_ERASEFF )
|
||||
// TODO: all of the 256k space seems valid
|
||||
ROM_COPY( "biosrom", 0x28000, 0x00000, 0x18000 )
|
||||
ROM_COPY( "biosrom", 0x00000, 0x18000, 0x18000 )
|
||||
|
||||
ROM_REGION( 0x80000, "chargen", 0 )
|
||||
ROM_LOAD( "font.rom", 0x00000, 0x46800, BAD_DUMP CRC(a61c0649) SHA1(554b87377d176830d21bd03964dc71f8e98676b1) )
|
||||
|
||||
LOAD_KANJI_ROMS
|
||||
LOAD_IDE_ROM
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
pc-9821Ra20 (98MATE R)
|
||||
|
||||
Pentium Pro @ 200
|
||||
32MB
|
||||
3.5"2DD/2HDx1, 8xCD-ROM
|
||||
CBus: 3 slots
|
||||
*/
|
||||
|
||||
ROM_START( pc9821ra20 )
|
||||
ROM_REGION16_LE( 0x40000, "biosrom", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "g8wtp_a13_wtp8b01_ab28f200b5-t.bin", 0x00000, 0x040000, CRC(cd3acc5c) SHA1(746490d7f3d8d0e8df865315adaaae65f3fd0425) ) // SOP44
|
||||
|
||||
ROM_REGION16_LE( 0x30000, "ipl", ROMREGION_ERASEFF )
|
||||
// TODO: all of the 256k space seems valid
|
||||
ROM_COPY( "biosrom", 0x28000, 0x00000, 0x18000 )
|
||||
ROM_COPY( "biosrom", 0x00000, 0x18000, 0x18000 )
|
||||
|
||||
ROM_REGION( 0x80000, "chargen", 0 )
|
||||
ROM_LOAD( "font.rom", 0x00000, 0x46800, BAD_DUMP CRC(a61c0649) SHA1(554b87377d176830d21bd03964dc71f8e98676b1) )
|
||||
|
||||
LOAD_KANJI_ROMS
|
||||
LOAD_IDE_ROM
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
pc-9821Ra333 (98MATE R)
|
||||
|
||||
Celeron @ 333
|
||||
32MB, max 256 MB (ECC EDO RAM)
|
||||
3.5x1, 24xCD-ROM
|
||||
CBus: 3 slots, PCI: 2 slots
|
||||
*/
|
||||
|
||||
|
||||
ROM_START( pc9821ra333 )
|
||||
ROM_REGION16_LE( 0x40000, "biosrom", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "g8ykkw.bin", 0x00000, 0x040000, CRC(c605ef31) SHA1(3779aed757f21eb75093c1bfcbf18a232c198ee6) )
|
||||
|
||||
ROM_REGION16_LE( 0x30000, "ipl", ROMREGION_ERASEFF )
|
||||
// TODO: all of the 256k space seems valid
|
||||
ROM_COPY( "biosrom", 0x28000, 0x00000, 0x18000 )
|
||||
ROM_COPY( "biosrom", 0x00000, 0x18000, 0x18000 )
|
||||
|
||||
ROM_REGION( 0x80000, "chargen", 0 )
|
||||
ROM_LOAD( "font.rom", 0x00000, 0x46800, BAD_DUMP CRC(a61c0649) SHA1(554b87377d176830d21bd03964dc71f8e98676b1) )
|
||||
|
||||
LOAD_KANJI_ROMS
|
||||
LOAD_IDE_ROM
|
||||
ROM_END
|
||||
|
||||
|
||||
/*
|
||||
98MATE VALUESTAR - Pentium based
|
||||
*/
|
||||
@ -2899,7 +3038,7 @@ ROM_START( pc9821v13 )
|
||||
ROM_LOAD( "bios_v13.rom", 0x18000, 0x18000, BAD_DUMP CRC(0a682b93) SHA1(76a7360502fa0296ea93b4c537174610a834d367) )
|
||||
|
||||
ROM_REGION( 0x80000, "chargen", 0 )
|
||||
ROM_LOAD( "font_a.rom", 0x00000, 0x46800, BAD_DUMP CRC(c9a77d8f) SHA1(deb8563712eb2a634a157289838b95098ba0c7f2) )
|
||||
ROM_LOAD( "font_a.rom", 0x00000, 0x46800, BAD_DUMP CRC(c9a77d8f) SHA1(deb8563712eb2a634a157289838b95098ba0c7f2) )
|
||||
|
||||
LOAD_KANJI_ROMS
|
||||
LOAD_IDE_ROM
|
||||
@ -2915,13 +3054,91 @@ ROM_START( pc9821v20 )
|
||||
ROM_LOAD( "bios_v20.rom", 0x18000, 0x18000, BAD_DUMP CRC(d5d1f13b) SHA1(bf44b5f4e138e036f1b848d6616fbd41b5549764) )
|
||||
|
||||
ROM_REGION( 0x80000, "chargen", 0 )
|
||||
ROM_LOAD( "font_v20.rom", 0x000000, 0x046800, BAD_DUMP CRC(6244c4c0) SHA1(9513cac321e89b4edb067b30e9ecb1adae7e7be7) )
|
||||
ROM_LOAD( "font_v20.rom", 0x00000, 0x046800, BAD_DUMP CRC(6244c4c0) SHA1(9513cac321e89b4edb067b30e9ecb1adae7e7be7) )
|
||||
|
||||
LOAD_KANJI_ROMS
|
||||
LOAD_IDE_ROM
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
Epson PC-386M
|
||||
|
||||
i386SX-16 @ 16
|
||||
1MB
|
||||
3.5"2DD/2HDx2
|
||||
CBus: 3slots
|
||||
*/
|
||||
|
||||
ROM_START( pc386m )
|
||||
ROM_REGION16_LE( 0x30000, "ipl", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "cwma-a02.bin", 0x10000, 0x08000, CRC(d2c357a4) SHA1(819c9a1fc92124a8d6a85339c74651add7efaf92) )
|
||||
ROM_CONTINUE( 0x18000, 0x18000 )
|
||||
|
||||
ROM_REGION( 0x80000, "chargen", 0 )
|
||||
ROM_LOAD( "font_486mu.rom", 0x0000, 0x46800, BAD_DUMP CRC(456d9fc7) SHA1(78ba9960f135372825ab7244b5e4e73a810002ff))
|
||||
|
||||
LOAD_KANJI_ROMS
|
||||
LOAD_IDE_ROM
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
Epson PC-486SE
|
||||
|
||||
i486SX @ 25 MHz
|
||||
1.6 MB of conventional memory (???)
|
||||
17.6 MB
|
||||
CBus: 2slots
|
||||
*/
|
||||
|
||||
ROM_START( pc486se )
|
||||
ROM_REGION16_LE( 0x20000, "biosrom", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "1699ma_cw99-a03.bin", 0x00000, 0x20000, CRC(f03df711) SHA1(88614746e01c7d3cff9f3b8ce0a598830a77d1dc) )
|
||||
|
||||
ROM_REGION16_LE( 0x30000, "ipl", ROMREGION_ERASEFF )
|
||||
// this looks convoluted
|
||||
ROM_COPY( "biosrom", 0x08000, 0x00000, 0x08000 ) // tests this area at PC=0xf5149
|
||||
ROM_COPY( "biosrom", 0x00000, 0x10000, 0x08000 )
|
||||
ROM_COPY( "biosrom", 0x10000, 0x08000, 0x08000 )
|
||||
// ROM_FILL( 0x18000, 0x08000, 0x90) // untested by BIOS
|
||||
ROM_COPY( "biosrom", 0x10000, 0x20000, 0x08000 ) // PC=f5113 bankswitch into same area, correct?
|
||||
ROM_COPY( "biosrom", 0x18000, 0x28000, 0x08000 )
|
||||
|
||||
ROM_REGION( 0x80000, "chargen", 0 )
|
||||
ROM_LOAD( "font_486mu.rom", 0x0000, 0x46800, BAD_DUMP CRC(456d9fc7) SHA1(78ba9960f135372825ab7244b5e4e73a810002ff))
|
||||
|
||||
LOAD_KANJI_ROMS
|
||||
LOAD_IDE_ROM
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
Epson PC-486MU
|
||||
i486SX-33 @ 33
|
||||
8MB RAM
|
||||
3.5'2DD/2HDx2, 2xCD-ROM
|
||||
CBus: 3 slots
|
||||
*/
|
||||
|
||||
ROM_START( pc486mu )
|
||||
ROM_REGION16_LE( 0x20000, "biosrom", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "pc-486mu_hn27c1024.bin", 0x00000, 0x20000, CRC(113268e1) SHA1(2a630abc825b2808f9f8fb65c6cb1fb7e7f6c710))
|
||||
// ROM_LOAD( "bios_486mu.rom", 0x00000, 0x18000, BAD_DUMP CRC(57b5d701) SHA1(15029800842e93e07615b0fd91fb9f2bfe3e3c24))
|
||||
|
||||
ROM_REGION16_LE( 0x30000, "ipl", ROMREGION_ERASEFF )
|
||||
// backported from pc486se
|
||||
ROM_COPY( "biosrom", 0x08000, 0x00000, 0x08000 )
|
||||
ROM_COPY( "biosrom", 0x00000, 0x10000, 0x08000 )
|
||||
ROM_COPY( "biosrom", 0x10000, 0x08000, 0x08000 )
|
||||
// ROM_FILL( 0x18000, 0x08000, 0x90) // untested by BIOS
|
||||
ROM_COPY( "biosrom", 0x10000, 0x20000, 0x08000 )
|
||||
ROM_COPY( "biosrom", 0x18000, 0x28000, 0x08000 )
|
||||
|
||||
|
||||
ROM_REGION( 0x80000, "chargen", 0 )
|
||||
ROM_LOAD( "font_486mu.rom", 0x0000, 0x46800, BAD_DUMP CRC(456d9fc7) SHA1(78ba9960f135372825ab7244b5e4e73a810002ff))
|
||||
|
||||
LOAD_KANJI_ROMS
|
||||
LOAD_IDE_ROM
|
||||
ROM_END
|
||||
|
||||
void pc9801_state::init_pc9801_kanji()
|
||||
{
|
||||
@ -3055,22 +3272,65 @@ void pc9801_state::init_pc9801vm_kanji()
|
||||
}
|
||||
}
|
||||
|
||||
/* Genuine dumps */
|
||||
COMP( 1983, pc9801f, 0, 0, pc9801, pc9801, pc9801_state, init_pc9801_kanji, "NEC", "PC-9801F", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1985, pc9801vm, pc9801ux, 0, pc9801vm, pc9801rs, pc9801_state, init_pc9801vm_kanji, "NEC", "PC-9801VM", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
// For simpilicity's sake we arbitrarily group those with whatever romset came first historically.
|
||||
// This is also repeated in SW list reports: you'd have to use an "On RS class xxx" format to indicate a bug report
|
||||
// specifically happening for a family group. This will be hopefully put into stone with driver splits at some point in future.
|
||||
|
||||
/* TODO: ANYTHING below there needs REDUMPING! */
|
||||
COMP( 1989, pc9801rs, 0, 0, pc9801rs, pc9801rs, pc9801_state, init_pc9801_kanji, "NEC", "PC-9801RS", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) //TODO: not sure about the exact model
|
||||
// "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
|
||||
|
||||
// N5200 (started as a vanilla PC-98 business line derivative, eventually diverged into its own thing and incorporated various Hyper 98 features. Runs proprietary PTOS)
|
||||
// APC III (US version of either vanilla PC9801 or N5200, aimed at business market. Runs MS-DOS 2.11/3.xx or PC-UX)
|
||||
// ...
|
||||
|
||||
// VM class (V30 and/or i286)
|
||||
COMP( 1985, pc9801vm, pc9801ux, 0, pc9801vm, pc9801rs, pc9801_state, init_pc9801vm_kanji, "NEC", "PC-9801VM", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) // genuine dump
|
||||
COMP( 1985, pc9801vm11, pc9801ux, 0, pc9801vm, pc9801rs, pc9801_state, init_pc9801_kanji, "NEC", "PC-9801VM11", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1987, pc9801ux, 0, 0, pc9801ux, pc9801rs, pc9801_state, init_pc9801_kanji, "NEC", "PC-9801UX", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
|
||||
// VX class (first model using an EGC)
|
||||
// ...
|
||||
|
||||
// XA/XL class (1120 x 750 true color, nicknamed "High-reso")
|
||||
// ...
|
||||
|
||||
// PC-H98 (Hyper 98, '90-'93 high end line with High-reso, proprietary NESA bus, E²GC)
|
||||
// PC-H98T (LCD Hyper 98)
|
||||
// SV-H98 (Later Hyper 98 revision, up to Pentium CPU)
|
||||
// ...
|
||||
|
||||
// RS class (i386SX)
|
||||
COMP( 1988, pc9801rx, pc9801rs, 0, pc9801rs, pc9801rs, pc9801_state, init_pc9801_kanji, "NEC", "PC-9801RX", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1989, pc9801rs, 0, 0, pc9801rs, pc9801rs, pc9801_state, init_pc9801_kanji, "NEC", "PC-9801RS", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
// FA class (i486SX)
|
||||
COMP( 1993, pc9801bx2, pc9801rs, 0, pc9801bx2, pc9801rs, pc9801_state, init_pc9801_kanji, "NEC", "PC-9801BX2/U2", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1994, pc9821, 0, 0, pc9821, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821 (98MATE)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) //TODO: not sure about the exact model
|
||||
COMP( 1993, pc9821as, pc9821, 0, pc9821as, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821 (98MATE A)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1993, pc9821ap2, pc9821, 0, pc9821ap2, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821AP2/U8W (98MATE A)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1994, pc9821xs, pc9821, 0, pc9821, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821 (98MATE Xs)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1994, pc9821ce2, pc9821, 0, pc9821, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821 (98MULTi Ce2)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1994, pc9821ne, pc9821, 0, pc9821, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821 (98NOTE)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1994, pc486mu, pc9821, 0, pc9821, pc9821, pc9801_state, init_pc9801_kanji, "Epson", "PC-486MU", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
COMP( 1998, pc9821v13, pc9821, 0, pc9821, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821 (98MATE VALUESTAR 13)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1998, pc9821v20, pc9821, 0, pc9821v20, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821 (98MATE VALUESTAR 20)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
|
||||
// PC-98GS (Multimedia PC, exclusive video mode "Extended Screen Graphics", -73 sound board (a superset of later -86), superimposition)
|
||||
// ...
|
||||
|
||||
// Epson class
|
||||
COMP( 1990, pc386m, 0, 0, pc386m, pc9801rs, pc9801_state, init_pc9801_kanji, "Epson", "PC-386M", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1994, pc486mu, 0, 0, pc486mu, pc9821, pc9801_state, init_pc9801_kanji, "Epson", "PC-486MU", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1993, pc486se, pc486mu, 0, pc486se, pc9801rs, pc9801_state, init_pc9801_kanji, "Epson", "PC-486SE", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
|
||||
// PC9821 class
|
||||
// TODO: unknown real model of parent, given the BIOS rom size wrt the others it may be better suited as a "98Multi" or even a FA class?
|
||||
// investigate by making genuine BIOS dumps to boot
|
||||
COMP( 1994, pc9821, 0, 0, pc9821, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821 (98MATE)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1993, pc9821as, pc9821, 0, pc9821as, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821 (98MATE A)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1993, pc9821ap2, pc9821, 0, pc9821ap2, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821AP2/U8W (98MATE A)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1994, pc9821xs, pc9821, 0, pc9821, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821 (98MATE Xs)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1994, pc9821ce2, pc9821, 0, pc9821, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821 (98MULTi Ce2)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1994, pc9821ne, pc9821, 0, pc9821, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821 (98NOTE)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1996, pc9821xa16, pc9821, 0, pc9821xa16, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821Xa16", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1996, pc9821ra20, pc9821, 0, pc9821ra20, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821Ra20 (98MATE R)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1998, pc9821ra333, pc9821, 0, pc9821ra333, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821Ra333 (98MATE R)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1998, pc9821v13, pc9821, 0, pc9821, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821 (98MATE VALUESTAR 13)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
COMP( 1998, pc9821v20, pc9821, 0, pc9821v20, pc9821, pc9801_state, init_pc9801_kanji, "NEC", "PC-9821 (98MATE VALUESTAR 20)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
|
||||
// PC98DO (PC88+PC98, V33 + μPD70008AC)
|
||||
|
||||
// PC-98LT (laptop b&w LCD version V50, no upd7220, just one single bitmap layer)
|
||||
// PC-98HA aka HANDY98 (portable b&w LCD version, V50, apparently compatible with LT)
|
||||
// RC-9801 (portable (color?) LCD, i386SX, wireless 9600bps modem)
|
||||
// PC-9801P (LCD with light pen)
|
||||
|
@ -11,7 +11,7 @@
|
||||
#ifndef MAME_INCLUDES_PC88VA_H
|
||||
#define MAME_INCLUDES_PC88VA_H
|
||||
|
||||
#include "cpu/nec/nec.h"
|
||||
#include "cpu/nec/v5x.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "imagedev/floppy.h"
|
||||
#include "machine/am9517a.h"
|
||||
|
@ -113,15 +113,27 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
void pc9821v20(machine_config &config);
|
||||
void pc9801ux(machine_config &config);
|
||||
void pc9801vm(machine_config &config);
|
||||
void pc9801(machine_config &config);
|
||||
void pc9801bx2(machine_config &config);
|
||||
|
||||
void pc9801vm(machine_config &config);
|
||||
|
||||
void pc9801ux(machine_config &config);
|
||||
void pc9801rs(machine_config &config);
|
||||
|
||||
void pc9801bx2(machine_config &config);
|
||||
|
||||
void pc9821(machine_config &config);
|
||||
void pc9821as(machine_config &config);
|
||||
void pc9821ap2(machine_config &config);
|
||||
void pc9821xa16(machine_config &config);
|
||||
void pc9821ra20(machine_config &config);
|
||||
void pc9821ra333(machine_config &config);
|
||||
void pc9821v20(machine_config &config);
|
||||
|
||||
void pc386m(machine_config &config);
|
||||
void pc486mu(machine_config &config);
|
||||
void pc486se(machine_config &config);
|
||||
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(system_type_r);
|
||||
void init_pc9801_kanji();
|
||||
void init_pc9801vm_kanji();
|
||||
@ -129,6 +141,14 @@ public:
|
||||
protected:
|
||||
virtual void video_start() override;
|
||||
|
||||
void pc9801_keyboard(machine_config &config);
|
||||
void pc9801_mouse(machine_config &config);
|
||||
void pc9801_cbus(machine_config &config);
|
||||
void pc9801_sasi(machine_config &config);
|
||||
void pc9801_ide(machine_config &config);
|
||||
void pc9801_common(machine_config &config);
|
||||
void pc9801_pit_clock(machine_config &config, const XTAL clock);
|
||||
|
||||
private:
|
||||
static void cdrom_headphones(device_t *device);
|
||||
|
||||
@ -314,12 +334,6 @@ private:
|
||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
uint32_t a20_286(bool state);
|
||||
|
||||
void pc9801_keyboard(machine_config &config);
|
||||
void pc9801_mouse(machine_config &config);
|
||||
void pc9801_cbus(machine_config &config);
|
||||
void pc9801_sasi(machine_config &config);
|
||||
void pc9801_ide(machine_config &config);
|
||||
void pc9801_common(machine_config &config);
|
||||
void ipl_bank(address_map &map);
|
||||
void pc9801_common_io(address_map &map);
|
||||
void pc9801_io(address_map &map);
|
||||
@ -370,8 +384,9 @@ private:
|
||||
|
||||
struct{
|
||||
uint8_t control;
|
||||
uint8_t lx;
|
||||
uint8_t ly;
|
||||
uint8_t lx, ly;
|
||||
uint8_t dx, dy;
|
||||
uint8_t prev_dx, prev_dy;
|
||||
uint8_t freq_reg;
|
||||
uint8_t freq_index;
|
||||
}m_mouse;
|
||||
|
@ -33624,21 +33624,26 @@ pc88va //
|
||||
pc88va2 //
|
||||
|
||||
@source:pc9801.cpp
|
||||
pc386m //
|
||||
pc486mu //
|
||||
pc486se // 1993
|
||||
pc9801bx2 // 1993
|
||||
pc9801f // 1983
|
||||
pc9801rs // 1989
|
||||
pc9801rx // 1988
|
||||
pc9801ux // 1987
|
||||
pc9801vm // 1985
|
||||
pc9801vm11
|
||||
pc9801vm11 //
|
||||
pc9821 //
|
||||
pc9821ap2 //
|
||||
pc9821as //
|
||||
pc9821ce2 //
|
||||
pc9821ne //
|
||||
pc9821ra20 //
|
||||
pc9821ra333 //
|
||||
pc9821v13 //
|
||||
pc9821v20 //
|
||||
pc9821xa16 //
|
||||
pc9821xs //
|
||||
|
||||
@source:pcat_dyn.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user