mirror of
https://github.com/holub/mame
synced 2025-07-05 01:48:29 +03:00
Hooked up V9958 to MSX2+, used by a bunch of games/apps
This commit is contained in:
parent
dadc47b54a
commit
8f06adafb9
@ -665,7 +665,7 @@ static MACHINE_CONFIG_START( csplayh5, csplayh5_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(MSX2_XBORDER_PIXELS - MSX2_VISIBLE_XBORDER_PIXELS, MSX2_TOTAL_XRES_PIXELS - MSX2_XBORDER_PIXELS + MSX2_VISIBLE_XBORDER_PIXELS - 1, MSX2_YBORDER_PIXELS - MSX2_VISIBLE_YBORDER_PIXELS, MSX2_TOTAL_YRES_PIXELS - MSX2_YBORDER_PIXELS + MSX2_VISIBLE_YBORDER_PIXELS - 1)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("v9958", v9958_device, screen_update)
|
||||
|
||||
MCFG_PALETTE_LENGTH(512)
|
||||
MCFG_PALETTE_LENGTH(19268)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -383,6 +383,23 @@ static ADDRESS_MAP_START ( msx2_io_map, AS_IO, 8, msx_state )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START ( msx2p_io_map, AS_IO, 8, msx_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE( 0x77, 0x77) AM_WRITE(msx_90in1_w)
|
||||
AM_RANGE( 0x7c, 0x7d) AM_WRITE(msx_fmpac_w)
|
||||
AM_RANGE( 0x90, 0x90) AM_READWRITE(msx_printer_status_r, msx_printer_strobe_w)
|
||||
AM_RANGE( 0x91, 0x91) AM_WRITE(msx_printer_data_w)
|
||||
AM_RANGE( 0xa0, 0xa7) AM_DEVREAD("ay8910", ay8910_device, data_r) AM_WRITE(msx_ay8910_w)
|
||||
AM_RANGE( 0xa8, 0xab) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
|
||||
AM_RANGE( 0x98, 0x9b) AM_DEVREADWRITE("v9958", v9958_device, read, write)
|
||||
AM_RANGE( 0xb4, 0xb4) AM_WRITE(msx_rtc_latch_w)
|
||||
AM_RANGE( 0xb5, 0xb5) AM_READWRITE(msx_rtc_reg_r, msx_rtc_reg_w)
|
||||
AM_RANGE( 0xd8, 0xd9) AM_READWRITE(msx_kanji_r, msx_kanji_w)
|
||||
AM_RANGE( 0xfc, 0xff) AM_READWRITE(msx_ram_mapper_r, msx_ram_mapper_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( msx_dips )
|
||||
PORT_START("JOY0")
|
||||
PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP)
|
||||
@ -1206,6 +1223,69 @@ static MACHINE_CONFIG_START( msx2, msx_state )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( msx2p, msx_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", Z80, XTAL_21_4772MHz/6) /* 3.579545 MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(msx_memory_map)
|
||||
MCFG_CPU_IO_MAP(msx2p_io_map)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", msx_state, msx2p_interrupt, "screen", 0, 2)
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(60))
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(msx_state, msx2 )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(msx_state, msx2 )
|
||||
|
||||
MCFG_I8255_ADD( "ppi8255", msx_ppi8255_interface )
|
||||
|
||||
/* video hardware */
|
||||
MCFG_V9958_ADD("v9958", "screen", 0x20000)
|
||||
MCFG_V99X8_INTERRUPT_CALLBACK(WRITELINE(msx_state,msx_vdp_interrupt))
|
||||
|
||||
MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
|
||||
MCFG_SCREEN_UPDATE_DEVICE("v9958", v9958_device, screen_update)
|
||||
MCFG_SCREEN_SIZE(MSX2_TOTAL_XRES_PIXELS, 262*2)
|
||||
MCFG_SCREEN_VISIBLE_AREA(MSX2_XBORDER_PIXELS - MSX2_VISIBLE_XBORDER_PIXELS, MSX2_TOTAL_XRES_PIXELS - MSX2_XBORDER_PIXELS + MSX2_VISIBLE_XBORDER_PIXELS - 1, MSX2_YBORDER_PIXELS - MSX2_VISIBLE_YBORDER_PIXELS, MSX2_TOTAL_YRES_PIXELS - MSX2_YBORDER_PIXELS + MSX2_VISIBLE_YBORDER_PIXELS - 1)
|
||||
|
||||
MCFG_PALETTE_LENGTH(19268)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("dac", DAC, 0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
|
||||
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
MCFG_SOUND_ADD("ay8910", AY8910, XTAL_21_4772MHz/6/2)
|
||||
MCFG_SOUND_CONFIG(msx_ay8910_interface)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
|
||||
MCFG_SOUND_ADD("k051649", K051649, XTAL_21_4772MHz/6/2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
MCFG_SOUND_ADD("ym2413", YM2413, XTAL_21_4772MHz/6)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
|
||||
|
||||
/* printer */
|
||||
MCFG_CENTRONICS_PRINTER_ADD("centronics", standard_centronics)
|
||||
|
||||
/* cassette */
|
||||
MCFG_CASSETTE_ADD( "cassette", msx_cassette_interface )
|
||||
|
||||
/* real time clock */
|
||||
MCFG_RP5C01_ADD("rtc", XTAL_32_768kHz, rtc_intf)
|
||||
|
||||
MCFG_FD1793_ADD("wd179x", msx_wd17xx_interface ) // TODO confirm type
|
||||
|
||||
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(msx_floppy_interface)
|
||||
|
||||
MCFG_FRAGMENT_ADD(msx_cartslot)
|
||||
|
||||
/* Software lists */
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list","msx2_cart")
|
||||
MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("msx1_list","msx1_cart")
|
||||
MCFG_SOFTWARE_LIST_ADD("cass_list","msx1_cass")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( msx2_pal, msx2 )
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_SIZE(MSX2_TOTAL_XRES_PIXELS, 313*2)
|
||||
@ -4534,21 +4614,21 @@ COMP(1986, cpc300e, msx2, 0, msx2, msx2kr, msx_state, msx,
|
||||
COMP(1988, cpc400, msx2, 0, msx2, msx2kr, msx_state, msx, "Daewoo", "X-II CPC-400 (Korea)", 0 )
|
||||
COMP(1988, cpc400s, msx2, 0, msx2, msx2kr, msx_state, msx, "Daewoo", "X-II CPC-400S (Korea)", 0 )
|
||||
|
||||
COMP(1988, msx2p, 0, msx, msx2, msx2jp, msx_state, msx, "ASCII & Microsoft", "MSX2+", 0)
|
||||
COMP(19??, expert3i, msx2p, 0, msx2, msx2, msx_state, msx, "Ciel", "Expert 3 IDE", GAME_NOT_WORKING ) // Some hardware not emulated
|
||||
COMP(1996, expert3t, msx2p, 0, msx2, msx2, msx_state, msx, "Ciel", "Expert 3 Turbo", GAME_NOT_WORKING ) // Some hardware not emulated
|
||||
COMP(19??, expertac, msx2p, 0, msx2, msx2, msx_state, msx, "Gradiente", "Expert AC88+", GAME_NOT_WORKING ) // Some hardware not emulated
|
||||
COMP(19??, expertdx, msx2p, 0, msx2, msx2, msx_state, msx, "Gradiente", "Expert DDX+", GAME_NOT_WORKING ) // Some hardware not emulated
|
||||
COMP(1988, fsa1fx, msx2p, 0, msx2, msx2jp, msx_state, msx, "Panasonic / Matsushita", "FS-A1FX (Japan)", 0 )
|
||||
COMP(1988, fsa1wx, msx2p, 0, msx2, msx2jp, msx_state, msx, "Panasonic / Matsushita", "FS-A1WX / 1st released version (Japan)", 0 )
|
||||
COMP(1988, fsa1wxa, msx2p, 0, msx2, msx2jp, msx_state, msx, "Panasonic / Matsushita", "FS-A1WX / 2nd released version (Japan)", 0 )
|
||||
COMP(1989, fsa1wsx, msx2p, 0, msx2, msx2jp, msx_state, msx, "Panasonic / Matsushita", "FS-A1WSX (Japan)", 0 )
|
||||
COMP(1988, hbf1xdj, msx2p, 0, msx2, msx2jp, msx_state, msx, "Sony", "HB-F1XDJ (Japan)", 0 )
|
||||
COMP(1989, hbf1xv, msx2p, 0, msx2, msx2jp, msx_state, msx, "Sony", "HB-F1XV (Japan)", 0 )
|
||||
COMP(1988, phc70fd, msx2p, 0, msx2, msx2jp, msx_state, msx, "Sanyo", "WAVY PHC-70FD (Japan)", 0 )
|
||||
COMP(1988, phc70fd2, msx2p, 0, msx2, msx2jp, msx_state, msx, "Sanyo", "WAVY PHC-70FD2 (Japan)", 0 )
|
||||
COMP(1989, phc35j, msx2p, 0, msx2, msx2jp, msx_state, msx, "Sanyo", "WAVY PHC-35J (Japan)", 0)
|
||||
COMP(19??, hbf9sp, msx2p, 0, msx2, msx2jp, msx_state, msx, "Sony", "HB-F9S+", GAME_NOT_WORKING) // No MSX animation, screen switches between 2 single colors
|
||||
COMP(1988, msx2p, 0, msx, msx2p, msx2jp, msx_state, msx, "ASCII & Microsoft", "MSX2+", 0)
|
||||
COMP(19??, expert3i, msx2p, 0, msx2p, msx2, msx_state, msx, "Ciel", "Expert 3 IDE", GAME_NOT_WORKING ) // Some hardware not emulated
|
||||
COMP(1996, expert3t, msx2p, 0, msx2p, msx2, msx_state, msx, "Ciel", "Expert 3 Turbo", GAME_NOT_WORKING ) // Some hardware not emulated
|
||||
COMP(19??, expertac, msx2p, 0, msx2p, msx2, msx_state, msx, "Gradiente", "Expert AC88+", GAME_NOT_WORKING ) // Some hardware not emulated
|
||||
COMP(19??, expertdx, msx2p, 0, msx2p, msx2, msx_state, msx, "Gradiente", "Expert DDX+", GAME_NOT_WORKING ) // Some hardware not emulated
|
||||
COMP(1988, fsa1fx, msx2p, 0, msx2p, msx2jp, msx_state, msx, "Panasonic / Matsushita", "FS-A1FX (Japan)", 0 )
|
||||
COMP(1988, fsa1wx, msx2p, 0, msx2p, msx2jp, msx_state, msx, "Panasonic / Matsushita", "FS-A1WX / 1st released version (Japan)", 0 )
|
||||
COMP(1988, fsa1wxa, msx2p, 0, msx2p, msx2jp, msx_state, msx, "Panasonic / Matsushita", "FS-A1WX / 2nd released version (Japan)", 0 )
|
||||
COMP(1989, fsa1wsx, msx2p, 0, msx2p, msx2jp, msx_state, msx, "Panasonic / Matsushita", "FS-A1WSX (Japan)", 0 )
|
||||
COMP(1988, hbf1xdj, msx2p, 0, msx2p, msx2jp, msx_state, msx, "Sony", "HB-F1XDJ (Japan)", 0 )
|
||||
COMP(1989, hbf1xv, msx2p, 0, msx2p, msx2jp, msx_state, msx, "Sony", "HB-F1XV (Japan)", 0 )
|
||||
COMP(1988, phc70fd, msx2p, 0, msx2p, msx2jp, msx_state, msx, "Sanyo", "WAVY PHC-70FD (Japan)", 0 )
|
||||
COMP(1988, phc70fd2, msx2p, 0, msx2p, msx2jp, msx_state, msx, "Sanyo", "WAVY PHC-70FD2 (Japan)", 0 )
|
||||
COMP(1989, phc35j, msx2p, 0, msx2p, msx2jp, msx_state, msx, "Sanyo", "WAVY PHC-35J (Japan)", 0)
|
||||
COMP(19??, hbf9sp, msx2p, 0, msx2p, msx2jp, msx_state, msx, "Sony", "HB-F9S+", GAME_NOT_WORKING) // No MSX animation, screen switches between 2 single colors
|
||||
|
||||
/* Temporary placeholders */
|
||||
COMP(19??, fsa1gt, msx2p, 0, msx2, msx2jp, msx_state, msx, "Panasonic", "FS-A1GT", GAME_NOT_WORKING)
|
||||
|
@ -41,6 +41,7 @@ public:
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_v9938(*this, "v9938"),
|
||||
m_v9958(*this, "v9958"),
|
||||
m_cassette(*this, "cassette"),
|
||||
m_ay8910(*this, "ay8910"),
|
||||
m_ym(*this, "ym2413"),
|
||||
@ -139,6 +140,7 @@ public:
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<v9938_device> m_v9938;
|
||||
optional_device<v9958_device> m_v9958;
|
||||
required_device<cassette_image_device> m_cassette;
|
||||
required_device<ay8910_device> m_ay8910;
|
||||
required_device<ym2413_device> m_ym;
|
||||
@ -158,6 +160,7 @@ public:
|
||||
DECLARE_MACHINE_RESET(msx2);
|
||||
INTERRUPT_GEN_MEMBER(msx_interrupt);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(msx2_interrupt);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(msx2p_interrupt);
|
||||
DECLARE_WRITE8_MEMBER(msx_ay8910_w);
|
||||
DECLARE_WRITE8_MEMBER(msx_printer_strobe_w);
|
||||
DECLARE_WRITE8_MEMBER(msx_printer_data_w);
|
||||
|
@ -529,6 +529,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(msx_state::msx2_interrupt)
|
||||
m_v9938->interrupt();
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(msx_state::msx2p_interrupt)
|
||||
{
|
||||
m_v9958->set_resolution(m_io_dsw->read() & 0x03);
|
||||
m_v9958->interrupt();
|
||||
}
|
||||
|
||||
INTERRUPT_GEN_MEMBER(msx_state::msx_interrupt)
|
||||
{
|
||||
m_mouse[0] = m_io_mouse0->read();
|
||||
|
Loading…
Reference in New Issue
Block a user