New game added (Not Working)

============================
Revelations (Nova Productions) [AintBigAintClever, J.Wallace]

New non working clone
============================
Cops (UK) [Any]

Started reworking Cops driver into a full Nova Lasermax emulation.
Added onboard sound chip, fixed the alphanumeric display.
This commit is contained in:
James Wallace 2014-08-06 20:00:48 +00:00
parent 7cef872f2a
commit 32f0b19582
5 changed files with 108 additions and 42 deletions

View File

@ -214,7 +214,6 @@ int bfm_sc1_state::Scorpion1_GetSwitchState(int strobe, int data)
WRITE8_MEMBER(bfm_sc1_state::bankswitch_w)
{
// printf("bankswitch %02x\n", data);
membank("bank1")->set_entry(data & 0x03);
}
@ -355,28 +354,6 @@ READ8_MEMBER(bfm_sc1_state::nec_r)
WRITE8_MEMBER(bfm_sc1_state::vfd_w)
{
/* int changed = m_vfd_latch ^ data;
m_vfd_latch = data;
if ( changed )
{
if ( changed & VFD_RESET )
{ // vfd reset line changed
if ( !(data & VFD_RESET) )
{ // reset the vfd
m_vfd0->reset();
}
}
if ( changed & VFD_CLOCK1 )
{ // clock line changed
if ( !(data & VFD_CLOCK1) && (data & VFD_RESET) )
{ // new data clocked into vfd
m_vfd0->shift_data(data & VFD_DATA );
}
}
}
*/
m_vfd0->por(data & VFD_RESET);
m_vfd0->data(data & VFD_DATA);
m_vfd0->sclk(data & VFD_CLOCK1);
@ -1077,6 +1054,7 @@ static MACHINE_CONFIG_START( scorpion1, bfm_sc1_state )
MCFG_CPU_PERIODIC_INT_DRIVER(bfm_sc1_state, timer_irq, 1000) // generate 1000 IRQ's per second
MCFG_WATCHDOG_TIME_INIT(PERIOD_OF_555_MONOSTABLE(120000,100e-9))
MCFG_BFMBD1_ADD("vfd0",0)
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("aysnd",AY8912, MASTER_CLOCK/4)

View File

@ -1,16 +1,29 @@
/***************************************************************************
Atari Games Cops
Nova 'LaserMax'/Atari Games Cops
(hardware developed by Nova Productions Limited)
Preliminary driver by Mariusz Wojcieszek, James Wallace
Preliminary driver by Mariusz Wojcieszek
Cops uses a Sony CD-ROM in addition to the regular setup, purely to play
Bad Boys by Inner Circle, so there is muscial accompaniment to areas
where the laserdisc audio is muted.
TODO: There are probably more ROMs for Revelations, the disc contains
full data for a picture based memory game called 'Vision Quest'.
LaserMax memory map needs sorting out, Cops uses a subset of what's
actually available
The UK version COPS appears to want to communicate with the LDP in a
different way.
***************************************************************************/
#include "emu.h"
#include "cpu/m6502/m6502.h"
#include "machine/6522via.h"
#include "sound/sn76496.h"
//#include "machine/mos6551.h"
#include "cops.lh"
@ -26,11 +39,13 @@ public:
cops_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_sn(*this, "snsnd"),
m_irq(0)
{ }
// devices
required_device<cpu_device> m_maincpu;
required_device<sn76489_device> m_sn;
// screen updates
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@ -52,10 +67,12 @@ public:
void dacia_receive(UINT8 data);
DECLARE_WRITE8_MEMBER(dacia_w);
DECLARE_READ8_MEMBER(dacia_r);
DECLARE_WRITE8_MEMBER(via1_b_w);
DECLARE_WRITE8_MEMBER(via1_cb1_w);
DECLARE_WRITE8_MEMBER(cdrom_data_w);
DECLARE_WRITE8_MEMBER(cdrom_ctrl_w);
DECLARE_READ8_MEMBER(cdrom_data_r);
DECLARE_DRIVER_INIT(cops);
int m_irq;
UINT8 m_lcd_addr_l, m_lcd_addr_h;
@ -67,6 +84,9 @@ public:
UINT8 m_cdrom_ctrl;
UINT8 m_cdrom_data;
UINT8 m_sn_data;
UINT8 m_sn_cb1;
// LDP-1450
UINT8 m_ld_command_to_send[5];
UINT8 m_ld_command_total_bytes;
@ -97,13 +117,6 @@ void cops_state::video_start()
UINT32 cops_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
{
char ledtext[16 + 1];
for ( int i = 0; i < 16; i++ )
{
ledtext[i] = m_maincpu->space(AS_PROGRAM).read_byte(0x64 + i);
}
ledtext[16] = 0;
popmessage("%s",ledtext);
return 0;
}
@ -386,7 +399,7 @@ WRITE8_MEMBER(cops_state::io1_w)
{
sprintf(output_name, "digit%d", i);
display_data = m_lcd_data_l | (m_lcd_data_h << 8);
display_data = BITSWAP16(display_data, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); // todo:
display_data = BITSWAP16(display_data, 4, 5, 12, 1, 0, 11, 10, 6, 7, 2, 9, 3, 15, 8, 14, 13);
output_set_value(output_name, display_data);
}
}
@ -494,6 +507,20 @@ WRITE_LINE_MEMBER(cops_state::via1_irq)
m_maincpu->set_input_line(M6502_IRQ_LINE, m_irq ? ASSERT_LINE : CLEAR_LINE);
}
WRITE8_MEMBER(cops_state::via1_b_w)
{
m_sn_data = BITSWAP8(data,0,1,2,3,4,5,6,7);
if (m_sn_cb1)
{
m_sn->write(space,0,m_sn_data);
}
}
WRITE8_MEMBER(cops_state::via1_cb1_w)
{
m_sn_cb1 = data;
}
/*************************************
*
* VIA 2 (U27)
@ -534,10 +561,9 @@ static ADDRESS_MAP_START( cops_map, AS_PROGRAM, 8, cops_state )
// AM_RANGE(0xd004, 0xd007) AM_DEVREADWRITE("acia6551_2", mos6551_device, read, write )
AM_RANGE(0xd000, 0xd007) AM_READWRITE(dacia_r, dacia_w)
AM_RANGE(0xd800, 0xd80f) AM_DEVREADWRITE("via6522_3", via6522_device, read, write) /* VIA 3 */
AM_RANGE(0xe000, 0xffff) AM_ROM AM_REGION("system", 0)
AM_RANGE(0xe000, 0xffff) AM_ROMBANK("sysbank1")
ADDRESS_MAP_END
static INPUT_PORTS_START( cops )
PORT_START("SW0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Switch A") PORT_CODE(KEYCODE_A) PORT_IMPULSE(1)
@ -587,6 +613,15 @@ PALETTE_INIT_MEMBER( cops_state,cops )
{
}
DRIVER_INIT_MEMBER(cops_state,cops)
{
//The hardware is designed and programmed to use multiple system ROM banks, but for some reason it's hardwired to bank 2.
//For documentation's sake, here's the init
UINT8 *rom = memregion("system")->base();
membank("sysbank1")->configure_entries(0, 4, &rom[0x0000], 0x2000);
membank("sysbank1")->set_entry(2);
}
static MACHINE_CONFIG_START( cops, cops_state )
/* basic machine hardware */
@ -608,6 +643,8 @@ static MACHINE_CONFIG_START( cops, cops_state )
/* via */
MCFG_DEVICE_ADD("via6522_1", VIA6522, 0)
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(cops_state, via1_irq))
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(cops_state, via1_b_w))
MCFG_VIA6522_CB1_HANDLER(WRITE8(cops_state, via1_cb1_w))
MCFG_DEVICE_ADD("via6522_2", VIA6522, 0)
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(cops_state, via2_irq))
@ -623,6 +660,11 @@ static MACHINE_CONFIG_START( cops, cops_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
/* TODO: Verify clock */
MCFG_SOUND_ADD("snsnd", SN76489, MAIN_CLOCK/2)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END
@ -640,4 +682,23 @@ ROM_START( cops )
ROM_LOAD( "cops_sys.dat", 0x0000, 0x8000, CRC(0060e5d0) SHA1(b8c9f6fde6a315e33fa7946e5d3bb4ea2fbe76a8) )
ROM_END
GAMEL( 1994, cops, 0, cops, cops, driver_device, 0, ROT0, "Atari Games", "Cops", GAME_NOT_WORKING | GAME_NO_SOUND, layout_cops )
ROM_START( copsuk )
ROM_REGION( 0x8000, "program", 0 )
ROM_LOAD( "cops1b_uk.bin", 0x0000, 0x8000, CRC(f095ee95) SHA1(86bb517331d81ae3a8f3b87df67c321013c6aae4) )
ROM_REGION( 0x8000, "system", 0 )
ROM_LOAD( "cops_sys.dat", 0x0000, 0x8000, CRC(0060e5d0) SHA1(b8c9f6fde6a315e33fa7946e5d3bb4ea2fbe76a8) )
ROM_END
ROM_START( revlatns )
ROM_REGION( 0x8000, "program", 0 )
ROM_LOAD( "revelations_prog.bin", 0x0000, 0x8000, CRC(5ab41ac3) SHA1(0f7027551da17011576cf077e2f199729bb10482) )
ROM_REGION( 0x8000, "system", 0 )
ROM_LOAD( "revelations_sys.bin", 0x0000, 0x8000, CRC(43e5e3ec) SHA1(fa44b102b5aa7ad2421c575abdc67f1c29f23bc1) )
ROM_END
GAMEL( 1994, cops, 0, cops, cops, cops_state, cops, ROT0, "Atari Games", "Cops (USA)", GAME_NOT_WORKING | GAME_NO_SOUND, layout_cops )
GAMEL( 1994, copsuk, cops,cops, cops, cops_state, cops, ROT0, "Nova Productions / Deith Leisure","Cops (UK)", GAME_NOT_WORKING | GAME_NO_SOUND, layout_cops )
GAMEL( 1994, revlatns, 0, cops, cops, cops_state, cops, ROT0, "Nova Productions", "Revelations", GAME_NOT_WORKING | GAME_NO_SOUND, layout_cops )

View File

@ -1,11 +1,10 @@
<?xml version="1.0"?>
<mamelayout version="2">
<element name="led">
<led16segsc>
<led14segsc>
<color red="1" green="0" blue="0" />
</led16segsc>
</led14segsc>
</element>
<view name="cops">
<screen index="0">
<bounds left="0" top="0" right="256" bottom="256" />

View File

@ -20,7 +20,33 @@
</led14segsc>
</element>
<view name="VFD and Lamp Matrix">
<element name="Steppers" defstate="0">
<simplecounter maxstate="999" digits="3">
<color red="1.0" green="1.0" blue="1.0" />
<bounds x="0" y="0" width="1" height="1" />
</simplecounter>
</element>
<view name="VFD, Reels and Lamp Matrix">
<backdrop name="reel1" element="Steppers" state="0">
<bounds x="10" y="320" width="50" height="50"/>
</backdrop>
<backdrop name="reel2" element="Steppers" state="0">
<bounds x="60" y="320" width="50" height="50"/>
</backdrop>
<backdrop name="reel3" element="Steppers" state="0">
<bounds x="110" y="320" width="50" height="50"/>
</backdrop>
<backdrop name="reel4" element="Steppers" state="0">
<bounds x="160" y="320" width="50" height="50"/>
</backdrop>
<backdrop name="reel5" element="Steppers" state="0">
<bounds x="220" y="320" width="50" height="50"/>
</backdrop>
<backdrop name="reel6" element="Steppers" state="0">
<bounds x="280" y="320" width="50" height="50"/>
</backdrop>
<backdrop name="lamp0" element="matrixlamp" state="0">
<bounds x="0" y="0" width="7" height="7"/>
</backdrop>

View File

@ -7236,8 +7236,10 @@ vcircle // (proto) (c) 1996
a51site4 // ?? (c) 1998
a51site4a // Sept.11,1998 (c) 1998
// Atari Laserdisc
// Atari/Nova Laserdisc
cops // (c) 1994
copsuk // (c) 1994 (Nova/Deith Leisure)
revlatns // (c) 199?
// SNK / Rock-ola games
sasuke // [1980] Shin Nihon Kikaku (SNK)