Added bare-bones Sony LDP-1000 device (nw)

This commit is contained in:
angelosa 2016-06-14 19:50:02 +02:00
parent 4ceb1a97f3
commit 3c030752cf
5 changed files with 222 additions and 38 deletions

View File

@ -1176,6 +1176,18 @@ if (MACHINES["LDV1000"]~=null) then
}
end
---------------------------------------------------
--
--@src/devices/machine/ldp1000.h,MACHINES["LDP1000"] = true
---------------------------------------------------
if (MACHINES["LDP1000"]~=null) then
files {
MAME_DIR .. "src/devices/machine/ldp1000.cpp",
MAME_DIR .. "src/devices/machine/ldp1000.h",
}
end
---------------------------------------------------
--
--@src/devices/machine/ldvp931.h,MACHINES["LDVP931"] = true

View File

@ -429,6 +429,7 @@ MACHINES["LC89510"] = true
MACHINES["LDPR8210"] = true
MACHINES["LDSTUB"] = true
MACHINES["LDV1000"] = true
MACHINES["LDP1000"] = true
MACHINES["LDVP931"] = true
--MACHINES["LH5810"] = true
MACHINES["LINFLASH"] = true

View File

@ -0,0 +1,120 @@
// license:BSD-3-Clause
// copyright-holders:Angelo Salese
/***************************************************************************
Sony LDP-1000 laserdisc emulation.
TODO:
- Dump BIOSes (seven of them according to docs)
- Hookup with Sony SMC-70 / SMC-777
***************************************************************************/
#include "emu.h"
#include "machine/ldp1000.h"
ROM_START( ldp1000 )
ROM_REGION( 0x2000, "ldp1000", 0 )
ROM_LOAD( "ldp1000_bios.bin", 0x0000, 0x2000, NO_DUMP )
ROM_END
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
// device type definition
const device_type SONY_LDP1000 = &device_creator<sony_ldp1000_device>;
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// ldp1000_device - constructor
//-------------------------------------------------
sony_ldp1000_device::sony_ldp1000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: laserdisc_device(mconfig, SONY_LDP1000, "Sony LDP-1000", tag, owner, clock, "ldp1000", __FILE__)
{
}
//-------------------------------------------------
// device_validity_check - perform validity checks
// on this device
//-------------------------------------------------
void sony_ldp1000_device::device_validity_check(validity_checker &valid) const
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void sony_ldp1000_device::device_start()
{
laserdisc_device::device_start();
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void sony_ldp1000_device::device_reset()
{
laserdisc_device::device_reset();
}
//-------------------------------------------------
// device_rom_region - return a pointer to our
// ROM region definitions
//-------------------------------------------------
const rom_entry *sony_ldp1000_device::device_rom_region() const
{
return ROM_NAME(ldp1000);
}
//-------------------------------------------------
// player_vsync - VSYNC callback, called at the
// start of the blanking period
//-------------------------------------------------
void sony_ldp1000_device::player_vsync(const vbi_metadata &vbi, int fieldnum, const attotime &curtime)
{
//printf("%d vsync\n",fieldnum);
}
//-------------------------------------------------
// player_update - update callback, called on
// the first visible line of the frame
//-------------------------------------------------
INT32 sony_ldp1000_device::player_update(const vbi_metadata &vbi, int fieldnum, const attotime &curtime)
{
//printf("%d update\n",fieldnum);
return fieldnum;
}
//**************************************************************************
// READ/WRITE HANDLERS
//**************************************************************************
READ8_MEMBER( sony_ldp1000_device::read )
{
return 0;
}
WRITE8_MEMBER( sony_ldp1000_device::write )
{
}

View File

@ -0,0 +1,67 @@
// license:BSD-3-Clause
// copyright-holders:Angelo Salese
/***************************************************************************
Sony LDP-1000 laserdisc emulation.
***************************************************************************/
#pragma once
#ifndef __LDP1000DEV_H__
#define __LDP1000DEV_H__
#include "laserdsc.h"
//**************************************************************************
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_LASERDISC_LDP1000_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, SONY_LDP1000, 0)
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// device type definition
extern const device_type SONY_LDP1000;
// ======================> sony_ldp1000_device
class sony_ldp1000_device : public laserdisc_device
{
public:
// construction/destruction
sony_ldp1000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// I/O operations
DECLARE_WRITE8_MEMBER( write );
DECLARE_READ8_MEMBER( read );
protected:
// device-level overrides
virtual void device_validity_check(validity_checker &valid) const override;
virtual void device_start() override;
virtual void device_reset() override;
virtual const rom_entry *device_rom_region() const override;
virtual void player_vsync(const vbi_metadata &vbi, int fieldnum, const attotime &curtime) override;
virtual INT32 player_update(const vbi_metadata &vbi, int fieldnum, const attotime &curtime) override;
virtual void player_overlay(bitmap_yuy16 &bitmap) override { }
};
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
#endif

View File

@ -111,8 +111,9 @@ Sound processor - 6502
#include "emu.h"
#include "cpu/m6502/m6502.h"
#include "sound/ay8910.h"
#include "machine/ldv1000.h"
#include "machine/ldp1000.h"
#include "machine/gen_latch.h"
#include "machine/6850acia.h"
class deco_ld_state : public driver_device
@ -123,6 +124,7 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_laserdisc(*this, "laserdisc"),
//m_acia(*this, "acia"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
@ -137,7 +139,8 @@ public:
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_audiocpu;
required_device<pioneer_ldv1000_device> m_laserdisc;
required_device<sony_ldp1000_device> m_laserdisc;
//required_device<acia6850_device> m_acia;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
@ -150,20 +153,17 @@ public:
UINT8 m_laserdisc_data;
int m_nmimask;
DECLARE_READ8_MEMBER(laserdisc_r);
DECLARE_WRITE8_MEMBER(laserdisc_w);
DECLARE_READ8_MEMBER(sound_status_r);
DECLARE_WRITE8_MEMBER(decold_sound_cmd_w);
DECLARE_WRITE8_MEMBER(decold_palette_w);
DECLARE_CUSTOM_INPUT_MEMBER(begas_vblank_r);
DECLARE_INPUT_CHANGED_MEMBER(coin_inserted);
virtual void machine_start() override;
UINT32 screen_update_rblaster(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
UINT32 screen_update_rblaster(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(sound_interrupt);
void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT8 *spriteram, UINT16 tile_bank );
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8 *spriteram, UINT16 tile_bank );
};
void deco_ld_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT8 *spriteram, UINT16 tile_bank )
void deco_ld_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8 *spriteram, UINT16 tile_bank )
{
gfx_element *gfx = m_gfxdecode->gfx(1);
int i,spr_offs,x,y,col,fx,fy;
@ -208,7 +208,7 @@ void deco_ld_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect
}
}
UINT32 deco_ld_state::screen_update_rblaster(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
UINT32 deco_ld_state::screen_update_rblaster(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
gfx_element *gfx = m_gfxdecode->gfx(0);
int y,x;
@ -246,33 +246,12 @@ UINT32 deco_ld_state::screen_update_rblaster(screen_device &screen, bitmap_rgb32
}
READ8_MEMBER(deco_ld_state::laserdisc_r)
{
UINT8 result = m_laserdisc->status_r();
// osd_printf_debug("laserdisc_r = %02X\n", result);
return result;
}
WRITE8_MEMBER(deco_ld_state::laserdisc_w)
{
m_laserdisc_data = data;
}
WRITE8_MEMBER(deco_ld_state::decold_sound_cmd_w)
{
m_soundlatch->write(space, 0, data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
/* same as Burger Time HW */
WRITE8_MEMBER(deco_ld_state::decold_palette_w)
{
m_palette->write(space, offset, UINT8(~data));
}
/* unknown, but certainly related to audiocpu somehow */
READ8_MEMBER(deco_ld_state::sound_status_r)
{
@ -287,9 +266,10 @@ static ADDRESS_MAP_START( rblaster_map, AS_PROGRAM, 8, deco_ld_state )
AM_RANGE(0x1003, 0x1003) AM_READ_PORT("IN1")
AM_RANGE(0x1004, 0x1004) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_WRITE(decold_sound_cmd_w)
AM_RANGE(0x1005, 0x1005) AM_READ(sound_status_r)
AM_RANGE(0x1006, 0x1006) AM_NOP // 6850 status
AM_RANGE(0x1007, 0x1007) AM_READWRITE(laserdisc_r,laserdisc_w) // 6850 data
AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE(decold_palette_w) AM_SHARE("palette")
//AM_RANGE(0x1006, 0x1006) AM_READ(acia_status_hack_r)
//AM_RANGE(0x1006, 0x1006) AM_DEVREADWRITE("acia", acia6850_device, status_r, control_w)
//AM_RANGE(0x1007, 0x1007) AM_DEVREADWRITE("acia", acia6850_device, data_r, data_w)
AM_RANGE(0x1800, 0x1fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x2000, 0x27ff) AM_RAM
AM_RANGE(0x2800, 0x2bff) AM_RAM AM_SHARE("vram0")
AM_RANGE(0x2c00, 0x2fff) AM_RAM AM_SHARE("attr0")
@ -480,17 +460,21 @@ static MACHINE_CONFIG_START( rblaster, deco_ld_state )
// MCFG_QUANTUM_TIME(attotime::from_hz(6000))
MCFG_LASERDISC_LDV1000_ADD("laserdisc") //Sony LDP-1000A, is it truly compatible with the Pioneer?
MCFG_LASERDISC_LDP1000_ADD("laserdisc")
MCFG_LASERDISC_OVERLAY_DRIVER(256, 256, deco_ld_state, screen_update_rblaster)
MCFG_LASERDISC_OVERLAY_CLIP(0, 256-1, 8, 240-1)
//MCFG_LASERDISC_OVERLAY_CLIP(0, 256-1, 8, 240-1)
MCFG_LASERDISC_OVERLAY_PALETTE("palette")
/* video hardware */
MCFG_LASERDISC_SCREEN_ADD_NTSC("screen", "laserdisc")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", rblaster)
MCFG_PALETTE_ADD("palette", 512)
MCFG_PALETTE_FORMAT(BBGGGRRR)
MCFG_PALETTE_ADD("palette", 0x800)
MCFG_PALETTE_FORMAT(BBGGGRRR_inverted)
//MCFG_DEVICE_ADD("acia", ACIA6850, 0)
//MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("laserdisc", sony_ldp1000_device, write))
//MCFG_ACIA6850_RXD_HANDLER(DEVREADLINE("laserdisc", sony_ldp1000_device, read))
/* sound hardware */
/* TODO: mixing */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -608,7 +592,7 @@ ROM_START( rblaster )
ROM_LOAD( "08.bin", 0xa000, 0x2000, CRC(4608b516) SHA1(44af4be84a0b807ea0813ce86376a4b6fd927e5a) )
DISK_REGION( "laserdisc" )
DISK_IMAGE_READONLY( "rblaster", 0, NO_DUMP )
DISK_IMAGE_READONLY( "rblaster", 0, SHA1(1563ea907d461592e17646848fdf2dce904bba32) )
ROM_END
ROM_START( cobra )